1 logical function tce_ccsd_lambda_driver(title,thresh,maxiter, 2 & d_y1,k_y1_offset,size_y1,d_y2,k_y2_offset,size_y2, 3 & d_t1,k_t1_offset,size_t1,d_t2,k_t2_offset,size_t2, 4 & d_f1,k_f1_offset,d_v2,k_v2_offset) 5c 6c $Id$ 7c 8c Main routine for many-electron theory calculations. 9c Some of the subroutines have been generated by 10c operator/tensor contraction engines. 11c 12c Written by Jeff Hammond, January 2008. 13c 14 implicit none 15#include "mafdecls.fh" 16#include "tcgmsg.fh" 17#include "global.fh" 18#include "bas.fh" 19#include "geom.fh" 20#include "sym.fh" 21#include "util.fh" 22#include "msgids.fh" 23#include "stdio.fh" 24#include "sf.fh" 25#include "inp.fh" 26#include "errquit.fh" 27c#include "tce.fh" 28c#include "tce_main.fh" 29c#include "tce_prop.fh" 30c#include "tce_ints.fh" 31c#include "tce_amps.fh" 32c#include "tce_diis.fh" 33c 34c CI, CC, & MBPT 35c 36 integer iter,maxiter 37 logical nodezero ! True if node 0 38 logical recompf ! True if recompute Fock 39 double precision cpu ! CPU sec counter 40 double precision wall ! WALL sec counter 41 integer irrep 42 integer irrep_g 43 integer d_f1 ! SF handle for MO 1e integrals 44 integer l_f1_offset ! Offset for 1e integral file 45 integer k_f1_offset ! Offset for 1e integral file 46 integer size_1e ! File size in doubles 47 integer d_v2 ! SF handle for MO 2e integrals 48 integer l_v2_offset ! Offset for 2e integral file 49 integer k_v2_offset ! Offset for 2e integral file 50 integer size_2e ! File size in doubles 51 integer d_t1 ! SF handle for t1 amplitudes 52 integer l_t1_offset ! Offset for t1 file 53 integer k_t1_offset ! Offset for t1 file 54 integer size_t1 ! File size in doubles 55 integer d_t2 ! SF handle for t2 amplitudes 56 integer l_t2_offset ! Offset for t2 file 57 integer k_t2_offset ! Offset for t2 file 58 integer size_t2 ! File size in doubles 59 integer d_y1 ! Lambda 1 file 60 integer d_y2 ! Lambda 2 file 61 integer d_yr1 ! Lambda 1 residual file 62 integer d_yr2 ! Lambda 2 residual file 63 integer k_y1_offset ! Offset for Lambda 1 file 64 integer size_y1 ! File size in doubles 65 integer k_y2_offset ! Offset for Lambda 2 file 66 integer size_y2 ! File size in doubles 67 double precision ref ! Ground state energy 68 double precision corr ! Correlation energy 69 double precision r1 ! Residual t1 70 double precision r2 ! Residual t2 71 double precision residual! Largest residual 72 double precision thresh 73 double precision ddotfile 74 external ddotfile 75 integer dummy ! Dummy argument for DIIS 76 character*255 filename 77 character*20 title 78 character*4 irrepname 79 nodezero=(ga_nodeid().eq.0) 80 call tce_diis_init() 81 do iter=1,maxiter 82 cpu=-util_cpusec() 83 wall=-util_wallsec() 84 if (nodezero.and.(iter.eq.1)) write(LuOut,9400) title 85 call tce_filename('yr1',filename) 86 call createfile(filename,d_yr1,size_y1) 87 call ccsd_lambda1(d_f1,d_yr1,d_t1,d_t2,d_v2,d_y1, 88 1 d_y2,k_f1_offset,k_y1_offset,k_t1_offset, 89 2 k_t2_offset,k_v2_offset,k_y1_offset,k_y2_offset) 90 call reconcilefile(d_yr1,size_y1) 91 call tce_filename('yr2',filename) 92 call createfile(filename,d_yr2,size_y2) 93 call ccsd_lambda2(d_f1,d_yr2,d_t1,d_t2,d_v2,d_y1, 94 1 d_y2,k_f1_offset,k_y2_offset,k_t1_offset, 95 2 k_t2_offset,k_v2_offset,k_y1_offset,k_y2_offset) 96 call reconcilefile(d_yr2,size_y2) 97 r1 = ddotfile(d_yr1,d_yr1,size_y1) 98 r2 = ddotfile(d_yr2,d_yr2,size_y2) 99 residual = max(r1,r2) 100 cpu=cpu+util_cpusec() 101 wall=wall+util_wallsec() 102 if (nodezero) write(LuOut,9420) iter,residual,cpu,wall 103 if (residual .lt. thresh) then 104 if (nodezero) then 105 write(LuOut,9410) 106 endif 107 call deletefile(d_yr2) 108 call deletefile(d_yr1) 109 call tce_diis_tidy() 110 tce_ccsd_lambda_driver=.true. 111 return 112 endif 113 call tce_diis(.true.,iter,.true.,.true.,.false.,.false., 114 1 d_yr1,d_y1,k_y1_offset,size_y1, 115 2 d_yr2,d_y2,k_y2_offset,size_y2, 116 3 dummy,dummy,dummy,dummy, 117 4 dummy,dummy,dummy,dummy) 118 call deletefile(d_yr2) 119 call deletefile(d_yr1) 120 if (nodezero) call util_flush(LuOut) 121 enddo 122 call tce_diis_tidy() 123 tce_ccsd_lambda_driver=.false. 124 return 125c 126c ====== 127c Format 128c ====== 129c 130 9000 format(1x,A,' file size = ',i16) 131 9010 format(1x,A,' file name = ',A) 132 9090 format(1x,A,' file handle = ',i10) 133 9020 format(1x,'Cpu & wall time / sec',2f15.1) 134 9480 format(1x,'Cpu & wall time / sec for ',A,2f15.1) 135 9050 format(/,1x,A,' iterations',/, 136 1 1x,'--------------------------------------------------------',/ 137 2 1x,'Iter Residuum Correlation Cpu Wall',/ 138 3 1x,'--------------------------------------------------------') 139 9060 format( 140 1 1x,'--------------------------------------------------------',/ 141 2 1x,'Iterations converged') 142 9070 format(1x,A,' correlation energy / hartree = ',f25.15) 143 9080 format(1x,A,' total energy / hartree = ',f25.15) 144 9100 format(1x,i4,2f18.13,2f8.1) 145 9120 format(1x,A) 146 9250 format(1x,'Ground-state symmetry is ',A4) 147 9210 format(/,1x,'Iteration ',i3,' using ',i4,' trial vectors') 148 9230 format(1x,f17.13,f18.13,f11.5,2f8.1) 149 9240 format(1x, 150 1'--------------------------------------------------------------' 151 2,/,1x,'Iterations converged') 152 9310 format(1x,A,' ground state energy / hartree =',f25.15) 153 9400 format(/,1x,A,' iterations',/, 154 1 1x,'--------------------------------------',/ 155 2 1x,'Iter Residuum Cpu Wall',/ 156 3 1x,'--------------------------------------') 157 9410 format( 158 1 1x,'--------------------------------------',/ 159 2 1x,'Iterations converged') 160 9420 format(1x,i4,f18.13,2f8.1) 161 9440 format(1x,A3,' axis ( ',A4,'symmetry)') 162 end 163