From a129ab0c73135712e93dfa73d50c7ac93f0d07c3 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 20 Apr 2017 17:35:50 +0200 Subject: [PATCH] Fixes before merge --- ocaml/create_git_sha1.sh | 2 +- plugins/Alavi/.gitignore | 23 - plugins/Alavi/NEEDED_CHILDREN_MODULES | 1 - plugins/Alavi/README.rst | 23 - plugins/Alavi/alavi_graph.irp.f | 28 - plugins/Alavi/tree_dependency.png | Bin 64760 -> 0 bytes plugins/CAS_SD_ZMQ/ezfio_interface.irp.f | 4 - plugins/Full_CI/full_ci.irp.f | 5 + plugins/MRPT_Utils/ezfio_interface.irp.f | 23 - plugins/Psiref_threshold/.gitignore | 29 - .../Psiref_threshold/NEEDED_CHILDREN_MODULES | 1 - plugins/Psiref_threshold/README.rst | 24 - plugins/Psiref_threshold/psi_ref.irp.f | 41 - plugins/Psiref_threshold/tree_dependency.png | Bin 8479 -> 0 bytes plugins/mrcc_selected/dressing.irp.f | 1076 ----------------- plugins/mrcc_selected/dressing_slave.irp.f | 601 --------- plugins/mrcc_selected/ezfio_interface.irp.f | 61 - plugins/mrcc_selected/mrcc_selected.irp.f | 19 - plugins/mrcc_selected/mrcepa0_general.irp.f | 245 ---- 19 files changed, 6 insertions(+), 2200 deletions(-) delete mode 100644 plugins/Alavi/.gitignore delete mode 100644 plugins/Alavi/NEEDED_CHILDREN_MODULES delete mode 100644 plugins/Alavi/README.rst delete mode 100644 plugins/Alavi/alavi_graph.irp.f delete mode 100644 plugins/Alavi/tree_dependency.png delete mode 100644 plugins/CAS_SD_ZMQ/ezfio_interface.irp.f delete mode 100644 plugins/MRPT_Utils/ezfio_interface.irp.f delete mode 100644 plugins/Psiref_threshold/.gitignore delete mode 100644 plugins/Psiref_threshold/NEEDED_CHILDREN_MODULES delete mode 100644 plugins/Psiref_threshold/README.rst delete mode 100644 plugins/Psiref_threshold/psi_ref.irp.f delete mode 100644 plugins/Psiref_threshold/tree_dependency.png delete mode 100644 plugins/mrcc_selected/dressing.irp.f delete mode 100644 plugins/mrcc_selected/dressing_slave.irp.f delete mode 100644 plugins/mrcc_selected/ezfio_interface.irp.f delete mode 100644 plugins/mrcc_selected/mrcc_selected.irp.f delete mode 100644 plugins/mrcc_selected/mrcepa0_general.irp.f diff --git a/ocaml/create_git_sha1.sh b/ocaml/create_git_sha1.sh index 7b47e96f..f1fb7fa6 100755 --- a/ocaml/create_git_sha1.sh +++ b/ocaml/create_git_sha1.sh @@ -2,7 +2,7 @@ SHA1=$(git log -1 | head -1 | cut -d ' ' -f 2) DATE=$(git log -1 | grep Date | cut -d ':' -f 2-) -MESSAGE=$(git log -1 | tail -1) +MESSAGE=$(git log -1 | tail -1 | sed 's/"/\\"/g') cat << EOF > Git.ml open Core.Std let sha1 = "$SHA1" |> String.strip diff --git a/plugins/Alavi/.gitignore b/plugins/Alavi/.gitignore deleted file mode 100644 index e4e1a2ab..00000000 --- a/plugins/Alavi/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Automatically created by $QP_ROOT/scripts/module/module_handler.py -.ninja_deps -.ninja_log -AO_Basis -Bitmask -Determinants -Electrons -Ezfio_files -IRPF90_man -IRPF90_temp -Integrals_Bielec -Integrals_Monoelec -MO_Basis -Makefile -Makefile.depend -Nuclei -Pseudo -Utils -alavi_graph -ezfio_interface.irp.f -irpf90.make -irpf90_entities -tags \ No newline at end of file diff --git a/plugins/Alavi/NEEDED_CHILDREN_MODULES b/plugins/Alavi/NEEDED_CHILDREN_MODULES deleted file mode 100644 index aae89501..00000000 --- a/plugins/Alavi/NEEDED_CHILDREN_MODULES +++ /dev/null @@ -1 +0,0 @@ -Determinants diff --git a/plugins/Alavi/README.rst b/plugins/Alavi/README.rst deleted file mode 100644 index f2194755..00000000 --- a/plugins/Alavi/README.rst +++ /dev/null @@ -1,23 +0,0 @@ -===== -alavi -===== - -Documentation -============= - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -`alavi_graph `_ - Undocumented - -Needed Modules -============== - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -.. image:: tree_dependency.png - -* `Determinants `_ - diff --git a/plugins/Alavi/alavi_graph.irp.f b/plugins/Alavi/alavi_graph.irp.f deleted file mode 100644 index 4e953add..00000000 --- a/plugins/Alavi/alavi_graph.irp.f +++ /dev/null @@ -1,28 +0,0 @@ -program alavi_graph - implicit none - integer :: exc(0:2,2,2),h1,p1,h2,p2,s1,s2 - double precision :: phase - - read_wf = .True. - touch read_wf - - integer :: k,degree - double precision :: hii - - do k=1,N_det - call get_excitation_degree(psi_det(1,1,1),psi_det(1,1,k),degree,N_int) - call i_H_j(psi_det(1,1,k),psi_det(1,1,k),N_int,hii) - print*, k,abs(psi_coef(k,1)), hii,degree - -! if (degree == 2) then -! call get_excitation(psi_det(1,1,1),psi_det(1,1,k),exc,degree,phase,N_int) -! call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) -! print*, h1,h2,hii, abs(psi_coef(k,1)) -! endif -! - - - enddo -end - -!plot "test.dat" u (abs($2)):(abs($3)):4 w p palette \ No newline at end of file diff --git a/plugins/Alavi/tree_dependency.png b/plugins/Alavi/tree_dependency.png deleted file mode 100644 index b4f0df8b656dd6b03f85d68638531ed4f085777d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64760 zcmdSBi943<`#t&)DPu~83ehAP5+Rv~q==}D$xtFggvvZm5lPBWh6Y0+3Q?J-P$6TI zDWoW~kh0g+=kwja{oTj@2lny4$I<)h@!a=)UFUV4>s)J{cbLvGbtd{v^b`t(N#n4p zE`>tXMWIlCTC*BIF?o%THRa3j+730NimDI;;vh(!)rs*q|f8R^&FbbMVWT=(xDhvCgO4#Kc%_ zY;4}Ve;=%zdNplcLPCQ4lCiO|^udEwH8r%yjvX8A$liSS-aWqcVJBuaI4!l*svm@M zd0dW-jSUSAEzi_TU&qaTJuZ$D*H=0dTqY)vqwo+cm3nXkIn4t7%yJDc-6z>ORT=B z-_xg}E-o$!-(tjTH-$3@Szf<&=T6AyS699?r>aQ1erFRD6rB8UR5VpPS$?$r35WZy zpG@b^pSQNou(A$NPA$K_S&H0SMux!MgIAcRrly)(TdRDjR_*m%aC|*gyLs>a{U_^} zxh$K4@!i^6?=(6sOqwr$RamL02%t-S@F0LsCD`oE4L(j87Xd6M&AU5T>>D@M1qKFg zm5^ZD7tgruP(=By-FkanMs;F0denBcI{BT;qFP*BTo?%9%{8xD&Bn%NHuNTX4Ks6X ze?>rQcDAs~>(wVup5zk}Vl4Z+v}gXuCptYny|-~Q=rzM7t5XY=#tce&)BzckS+mt|VA$+*zYFF1Jh$oqTYEDFo(4jnqA ztZte04tvdc!NaG|XGN}b>H8kUhLAxnWuk0FKH~cIpvZY;dV2cY%Rh{=Op4cccXux= ze2EhCm>*~V#Bg5oo}=G6d(#sq*wVBTgAZQ$X*TjU-XPyPy8DMN_O7bz@0@7XnKB;T zOg3Cx>8WW+U}R04(HGWrS??ZaW>)yqGW3s)F@&l57Zpi+{{Hdeg1!k=c~8%lKCfTg zB4R$e|+L#;1E&O(z@Q5_S>FHmjXyXL}$3zJ`yeeR!cN>Wx|Up?G- zN9@wjVe1PQ2H!+)LmY-TM|0}!vA2x5m$woY6{WuN_m8=`xnDSkXyL~}dJ1AmT~m`$ zQ%kF*%*V&1%=`4{;fTzQKP#R|eyP2_d2(hZ;Q4cLW?uQX=~>I#$B(lHGjjPqe7Idz zRaH?imYzFItbp9j+M1dg5`c_MOiqK(@?;PmtD?DC2VY*` z{yIFaV69%7rjnDB*!<7WjWq>S!NI{@FD~*<&&*8Cf4a!P9rEvMGfQxLmVKpO*dGNm zdwXG*yX=h}9qg~JOw^w7`4fcrIXWu+pKr`8xPPC&=;cd`wv6KjFC6ae<$LzrPcPl~ z(+fYf@WA>>#x(8ZNQCb8?b|1FENV?Dzs%x|KINLP!lBFcT)fo&R#Ak`)6=)1A^1$0 zH}}FI!&ZSc3v-=m$v#g_%l&D!x`*`7cm>_Ox!$fjKU3q=xvcB~>c+O)nmen0_4!2o z>h)mRxpU{^_d&BP{gdQf2z zGPAd-N18264itI(5*h#T<_1&m z#dBNa+)s=OL=+gAn8kO?cr8gR{hE0Ck}J!Y?(IDW&BWD*w>K5;krrd+l-sm0w83mp zHN|J8+nW`OsjX!%D28Ug=5L` z**6QhY#ETB3tYdx=PoKP&PFMS_fAP#Kj|JWp%CWl{pHKI2`uUZ|?kT@>hWb-s zJA0>8UzV5sf}`2D58cVUuOIc~nwM|BNNG*)WbalA@IB*Ab?H*V{PRCiiHVyXKEHhQ ze_!K-p3;F9{IzlW$0qs|7AVavHlCvM52Ad77;Jsm!>Po@`ztIYEmxbJ zr?cyt{N=3h=Y&snuIlvi;^vAEAJzv21!X*btozNAQ%@gDVFMoEfpjBSlLf?3EoH(7dXVLuf z$L|;VN8WY2b+Cpd{CzH$;_$Iu_-Jj{a}p^xQJ5t5?~lH7r*roD%9Of2%dL#RmcQq_ z`4_8Lv@d>n%T@l4>BbSi9Y-%*5my+$cZK5RW%k3!tcl00rzmYjNc%=&B7?B7aQnT% z>bQh2)IaR@*yT#LT$o92AP-j7z-f#cl;N`Z+ z$%5Rgv-`R4bypl!Q!9Vb_xF$IXORxNr}Hi=@;9QXR1Z-nN_8GvMfuvaDl^lk?Bcv# zN`C(3&fMFl{w%g{oci#AW5t9i^x8G$C?2^JA0#d9sW=SM3Rg37`s$@0+kZO1=MU}M zA4@ZhlYhI85nR{$z4qnwH%Lk zV!54J;_FN4Df8iNX=zy(UZY%R({gqnm#myzOP;0r7HLOClDaM+_g|PmiBtFVls%O> zUFdYdVz?o;$aRcebWd#p17iORbSyuiD%0i29gaBwGrv3CQfD@@Y z0)dh3<3pDYunQXncAoL!uBfQ!D)Erw(63G4oZz>z@3<{&yw|ovXmXF>b;$&;YS zNBaOQ7N#3T2Y&vHoSwdzUIVkcNIJDYO|?} z1W>wI_GdK*2Zxa1Gn$oOJ}V)kqt-5C9a^K-5t;k(Q14nhI%=PtYjph4y&urbaFfP&fWvzL)^YC^)M@t)!ha_+O`4>e+%UtBzcQp$bwjz~~P)r(Tgi2VmdawGmk zoe->ffA65vw+}lGKho8_E6oZNVcU_VkTC;M=#g_Vz!lnp|+Jfk8n7lLJ*njsw*B1qEUj)oWhQbr=H@T0cK;5z$^pdpqyE zj;^jh$~*a@5EkA;$Br=rw)PJU`1O`}R8>{25)lz`ynH!0FV89F?emO`HBuLQtLMf# zSvPME$5P`6-GBU;o}HbYQ{GcLn1weICx>&>CdqnPE=$o!VACdzRGt3s?N34@BM-T_ zNW4#0h(ees?~I|M0GBpr>h1b}YhFmZc*QNAzcJN%;S14H_)s|5t~R_`bTDhCh1E`Y@VPr%n-EUr?~$&fb1t ze4G(q?ee`XOnqfv$2Gu6&8=VRqUb2&y(Px|+attI_In*gHxoyXzrvps&MTw2Yj`VQ0WZ3T4~2 zZNtv)?(PdSO$sg9#xJaz-f-F)C7{>K5^ip5tHzHud1gO+_^@}v$jIm&YnWJ?1>jPi z6^;b`l`B`Qt!2GqH-xE9PEPuUhaVN+iB+S=swHSRI!5jgQ+M-oD=N zrdVylre9`UwucZJ0dy?EX(N5--`HHZV1W+G#Dq&v92;$Gb+KfQedtp0^p#?h$QQlt zN6S@7WSp*!*#8_$gfsl${(WjnGm`Dl@UW7$ws!y7h`h9FIXqu{QWDRh>zinS0<3Lp z%x6bi$k(diYc~Kly{3xSTph0&EY*8e1*HW6Wy>nw5qK>;{J4?PwGSV3Z{50;lAF7Z zg(qmYfB=Qk*4CDC`qgEM@3Uw7mZ$1?DLNNZVh(Tj2TlQuH#ai_4h?XZT5T3lVCTtr zJFo6deZ7*A(WYn5p4~tfy1eW;G%~`EoaN@`)}Ve`Nmx+u!flh<+S&$xTO>4310$o3 z-z6#`%(;1aenCNM&xih#EebSL1M~AGdS1FRpoclErKNV^g5b~3uR>;LT^>Gql=|%1 zdc_|*7`3#t%r9J^7Z(>FZgP!!$ukmAqNSpug0xWi?*NV#iz8u3cI^?_y<5q~X7|s& zvZtOyU%z(#F8O&g;^oVixdjD5Xg9~l$IZ^4r$Z}_oQr?Ey1V7C9IEa5f==~<*3OuL zrMa;p&&7Q?XUcMfGLQ~*BL@*AfdK)lwrttboM&05&U5?rZEBxuUt|8$u_H43k=G7u zXeeE}v=8an@z>AOxA2h+ZkLn#c8_#-zr6h88lI@Cy}h7!@nuBb`6}Amnb)sfqcR4Oa3u2G0)L>*M&PmMOHx0-(R5 zu1=0>J!iDg(BHYTSh$Zqh?2xWifH;1mVtc$EkyjU8h6tH?~H~$4xw1Lr<2Lze?U7pd#suGm2vQVcm z30T9x9VHfvq(sBIe!aiX%J06=hzM0Yv6y8oqh^A{S~Q@bKLk(c==cJGac!1zs0IVn z|MhD~ll*T+(lvq{sh_I(YxrCS0C8#dTfjh7NEOJ5bnWEY0^82L9`kl0IrhG){1w=- z=o>eDV|HniK+uIFZy6kqJ9reR@S65e? z0lZ=XLYi9)7zT!igOEoDmltOQL`6ehy*db#7>omx`ao=6d4W?%FFr7kCStP`b7p3y zL8<2ftM_-;GBNe0Sw^Mn2oQ`!FmeD6^5uzMCVhSVR7#nxyUcparU(WhTU~{fWpUh8m}uz&websw zpu)n!h7s4<(c?6$S1WH{ue5#r09ZaHa54kHN~tO#7N1|bHW+^>I91|4R|zU9Fp_T# zH#hh4@=VhLXt}U&t?6H0^m%U}R|t%%c(&6Si@UJ6IDm((MsR)qq71)aeD0owA54?lkWtb3b^@-|t4 z*S0f9?d;j@XjXzEs|+3huxKGPQ}GO_tmO!r#JQ_aP%EB4pV^jv<*b#}eVn0YAb$iA z`lil|c>gG1?w=lR^o$kl5S$dT=-4iKu{Q!ds9jfX zY7L_ms!Ju1_KmxDBS8L1UPwTxz-sYJN$J;oGs?ML#E8@+>Ch8OsJTyt_M~MyZd5D9 zXFJ!CZ5*<8!_M-G3Z+qjxd`rq?3*@inmcqK*?aKJ$`VJ~v3vBQqN0qOB-Q|w&{7D| zsidq-jZ04UdQ8ZA{) z5aH%$&(eVCJ?Bk1tf^UzA57KnN;X4dF$zKjJYmnMB+m;*eA&8n>wMM1+0DT$Ha9mb zYG{Nt{GH$#866Ephm~dgBIn~seHQ~?t*MT?y9^Zy{9dII7GET9-rw#a%-nC<+HQr0 zBJtAF(X|3{$3Ff2`*%!G5bef|8~1nh#-!EP*QdUDbNEAh`wq(N@SQUsS{|s|bm!Zk zKU771rt!sD5Rj0#g?gq=$pDWx+pd4+xVbqWupBFee$ASUI|mgM&cv&w>gb@5b8&L6 zqbv=EiwYb#5YNmlqe{sDIoq3-SjGBWE~kGs0==i0nE=E;*W@q(7-eMtIy;u8{X zDyMGczaPC#UH9_k%U}M+B)mb8t)-l^vXUJ0=; z+oPZjRaIR^-f~el_kTen#8lWBXM-zIr7SNmyU&~wV2jE>kI%7O`~)OzUI4k@77YXO-mBcxSlS) zq*i?VgUPe!&(~7!$+|r={My(x1K2hm1Ra2iGCMa%du%!b$?5F*^D2U|)D#N~i{=7b zeVre*=StMg%*+DpC9D!&etDmkmNu7WKPq3yB)n_Gh7I7yWnH^Nl7VOUiiu@jF|6Pc zw=!E^m@;^7#YFPmF7=%2`!9<2cMlx4cRRu-r zYM(s0QU1@Y9$=LP@+id@SmHhq?4DCu8NYgwpR-QCI<@#aK(4g*SgWq)J(-QD49KLb zCVw5G$bI2*V-Z^nYwIcVy%UQpcao6=tO;JdEqYbfp8ooYx{P%Rs@Mm^I!NtBL z3d9RG-1O7q_Oh=TLqkE+3GCVx5_%!(M?zfOji{(5y_Kj0UC=Dn<6U|0WVCCOI8al! zqx`7wM~BXje{9W~A?iWwsz~G@ZPacFG~S!Utr)XUzbZ6kec}uSWYd95+cmbYf0m#B z@JgSTzM*tzXrcWlv>$=sS!Ua8jvPJuEnKuz$0|h?CWV#P$8n4pDK}7og-^e{W%VvW z4VQa}WWVt*OXsh?mA`i&)v2kfN_>*#@?iDcv8&@OlJqsu^vJ0whs?q zU%$TEu77?CA!xe~xrcOrXjMp@TUuJCZWG(DV_*=fZ|X*S?%X+`*nzS=9Tz6I;wvK} zBGv&gq3F#{^zi~KD63m!n*jDAN!*B!55wg|a=f!2`5*{h*Lg3)Z5< z>+aG{QU!qt@&F4Wl7bwFZy1j!RWS#jS;N9YI7Om?dCs-#N8O#S==$>J>^`A0rCSi` z0RS$9W`w3l0LWX=46%E~#Z|x-j=W0@@%cNGOo#|OyR7Cs1BNRDm9&Hf1Asd)(v%#9 z1yjU{;SSIHT8SniqOef%w&P;L#4jbd)oXNhtrS~7bRHz5A<(l9-#&1bw9X;-ga zZBXRMXZ1FY>h$T;xPy+fxC5nIv9abeBkv&5aHBsUX@*EAIQT(Gz0Ff`^e0Z8viSA$ zb61hmw)aVL44_or-aW9PHBBo3y$hkQE`h4=7cqSus+A}?05Xx5)x0@Hi9m5s^Q~vE z_?uS}UMxw@W3rCdr@t%Da$T4z(I02OwSw5%4FG%M8iGjd!-o&KmUYbI-31Kj$&h_3 zAeo6-z2yW#2=zFSt!ik<70G=t7%~$Bs=o@m6%=EUTGN_dhTeseyqE+%ji02X%Wb3576c!0k5H_SJu&42eFu+ zG#bd^9fO~Xo#~+JkOl|D1E@7>ECO&fi@d!2?)1=!H(Hp|Jp@CrA}}n{~s6075pz$ERMI=*4#` zA-oas%zO6iN&WIT==7zh!g`&j zr)NrL=5800S|dg*$H|!bvqdi7*7I-MhHl6Y$Axdt9tNmjHfzzf7QK2!7(qNcQOT3( zr#VqT3ExecQ1nJ11NlWnn30JozQ7MDKo661b80}Y046LV84+?sL%6(8T-<4K`W$X^ zH}8v!eZeLoA&^6$qVdHZ!M_7TLo`sr0n#5JwwgOTIb=$Y!~zKZw{f?y;79m5jdcib z-?@{2|Nf0=-7NArbu&*CI}PIK1MSSnd2@LjG6CJJV`>@+TrU`2AFwj=_3NI#^A;A= zn>TNkmX$pEXlRZCiGfe*Bufdm?zkZ=vjinOf2;RI+hGBSd+3eL(B!trTO zJaqIZ!^p@8l1M;mDj)vR%);XS^2g@pbpS+&W4E6b`l^92MWDt#$j@hc^ym>zgc2~@ zkt0WRjEo)&rLpv7zbP-LaLc&(Ucb&nWZR`#8_oEAw15Bp&3*nnprk|&nsBm5yjX2g zBuh%JWYgQXj8;}w896!R9GP2M2B80~sI5J;m;_z}yvsHzsbA4a7N@872ns5@yDx34 znXIty^7r@OW#yK8UTA&T_l@?eR;}XX;!4GiH1zR~8yXuK3Ho?XN;|{JA-_DS0yN8v z#pD#TP~9LR2a3j#<+d2*(~FCB2Pa+=FG4?hAH7D)JixWeEW_t}9eSkgK0XVg^8iEW zDaGB9#>&brViJnJ!+fAJsO$OpC?j@#N}Rlx3?eBId7g2L^g3u>NZ*>-kZ1}Ffr8^? z-S)wS5aK%4VGi7@tbTzV0aY8yx(!Qp4GIv#RfVYHJBTX28=?HPbV=~oJ((b|yD#D) zqNB7{e0+W$3@}0a<_J}C0bvkK_U|7Zz0;3A7MnrNDCiD+|78$_>XBP2K%t1a&sux_ zUHnRZ;RgzeeFHjXBE`dg@@4$vbNeO!*@T3I1xWvSa8r+n|wfjZw;D{vpU6iBBa))9F1#s)nP(EBJ9)o78Xe!S?j0M5XD zL|>iUV5t@Ek*k@#5jKs{=2X(Opj~`ZGq?6Xf5!lYS<0cu7xarmU+Hyx2l*I&cM6v% z`7{4Xb|EZ}qZ*az5vYRu7yC+Y9NsQ{<>wZnJEv|d*o2!WNS4LhVw{#RZs*bAu359D z{05)OIv$?)Ql>t~{(S{u$e4nZ{SG*fm;pz^alu-6vG0B7Cod(0BvEca@UftM`=_^s z<(&#pXB98dF)@ii8+2F3l^(rd6-ZD%m+b|*AVAQV@yW<+BEf^K9u!$^5MC!|(DD7z z!-wU_26seGS5AGYD=vCWA-DE%>W`V>lgntPp;;X{5C>DwF=cgKW7mM>o}M0}Od(BJ zKyi7!IVrEMpGU~HfCwifDWfVONe&KnYmybaj^`+lasB1Ugo1-zA(RLxOM31nS_2i@ z5ppEKKSpb{RX|`3ps6sL58wT^9g0Hi4EV_49tE-av)I%p(f96Mhu>f$>HsMkFfWL> zJd}*WhR$D=eG^tdkBW5_y*t4quuFk^15)|Jf@jGxhomUn>$i#y3cZ5M&mJx@F)AL>!-6~IuRpu*_3xjr z7G_(u^DeXt5*`8sB&!U&Ee+3dwSh3QeGSOuayWhdmD1jl#EF4!`l~v{d#k>!3OuMldU*Wfsxg54TvWH$FD-hz%b-lxA5bz&@C-3Dc4yD>PRir!@7l| z`?W$_^9T9hZV{0~W@cN-atj+5_Ct9H0cS76uE&Sx=w8n=R813&^xSFc!4w}KFO5#q z)5{A{lMrSgG*Y3RrL~TgbuG7lfiM=66R;aTBB#lIB`mMu=wZ#RXj-ZkroIe7vmWAhg@+&}x%o;o zB>f{J!N95V(?*}=OjMMW9dVzf<9r@jFDtY+OWKu#d=WFRq(KnMPM3mD^@LSRKu~b~ z)*Y7D>priUuLQooPV_Gz89+fGFZ611CN&mfXmy&ijivlzo^_aE+Z;y+) zSpcpA00PQ23~il%&)dJA@3tif4z;uyCI9WcgB+v|{-?rQSXxf~qe5fzR%2sDhvquZ z)FEdc*V9`?0nh^p6{MW1sHjN6x>KRx_~||C5R{VQcv|*XCdaho8WBT3T`W`ktbaQ# zZRbnZv0z|&MU{Z4%Xzm$(B3-W$blxF+}0FcV}TekDZUiskux52QeWS4dZ?acNH%)4 zl1?}UbKPdF(9xbuafy(FWo_OB;vv$-ja#>9icS8$83X5lE=BR`Rp~x~dnGp(7Ou{I zZ)d=hMzI-0AErU~4@efG{o6vAc|za3=^RpHk@MGM0W}*lgv*hkbeXSOjJrW)Aqo!!7>t-@3Z(9uN6FP@^Za-;Pkx#RH=*T3M`bt5-<1Dmj;k;93}!|em# z45ChhcU768JC~gVGLmQ{=xYeRfbNG~f*&I4wf=uF=>kY6n!^nSRaZI0Y$XsCJaX>+ zkOCU0pJZkd6#!J_0DMz*fZb4Xb~);%MWR`E>My6V`&7t;?ZOw%NzQ&>Eer9ZqPkkO z{9#1JqRWO*DyP=cA>fH#6DY^Gt*RfL|H5HAG zH-pZ`y~IgfuXh;Q+f7H}y8yXtEm!xN9X}T%J*0pqW1ecb2mwW}O zL(CPpp3<2!yyza7auPNFIQn@VL#(`MY}At{A|6T|h!uAQ4&cXRfUL**vJCX}fqyyY z+Pn_P8U!Lm5>gQw+4!dyEO^}9++0Oa%jA4^b#;}$d9wzfv4JjmwkaVTo(I%8a_h^; zJsDY9fjE_?vJ9x?Fb96o&57mP;IrsD<%3x~Chx38~&!U62s;Qy)A%LBJ6P_`9hj+v$9 zDv*fs>bK=iLeWKx64Dvu1n6vH7648p*d1O5xQxFuIquuL*SEO%05ZS1g~jxnG8CJ= z`}QfrXK_oRGdq#xZx0&?m*a+pnI_4bmWr{-#bUk9WiXjF%;R(j2??2*n^WP65JoE- z8t5TMjdta20|V9H-(UW!-q=@C&kSqn1loQ(RJ`50*M9rEE?X=(hx$HY*Ll>>iHY|d~`Kp`LgjrfeM z>8Plnf|TeV9?pQRG`o0_CHnC8{&btoZI8>@IXJ!$G1lvM;jg!judcA5b{{@^RL}cBoBcRs+7ui(W6KEwW~KBg|h@FnW#Plt$?v4j|Onw7<*~J zUOD?&`OY0X29V1TlRAGBZ{2z*n+BC>&8}U$hVM)TuoxSEN>9?O3)I)qN$EN4z5obv z|MjGAZ0tsq5yBo1m+|oML@`R3zk7m5;Sez?2g?~71xiL~XN(evQMA!0!&$#pIvyS6 zkUyJZ0b36iaDH3gJ=ndG@cfaR!H9#nh$ZM5CyAcBjs^6f z*V3#XZW=PRo8^mGIJ${KM6`M+(x7d=fU-mJg5x#>w+aGrFS09-&K##dd)Ls=*}$Nn z|Eli@4_$UW*f$oImPlI!b$?J)dA{e`wQG)Z-%qL@Is`POZ0G_>zoo?E3K6BSZE9uS ze-@Uj>oBJv?J+Mzlsh!beBkAg4tslh!GzSnn%MkAU-ak4jAAS_DZ`++h}ge4^A%!0 zQ4*mh^X=Wc4qrI@rD&x!i?$Ha0~WIyqKXr&kHqc>QW1DV1sA+!tm?^fJnaZ55QMPa zd?~ua01y?3cxF&eM6@NIENnLe_emYqK#+nK_@MOF$*q8Oe9?#dCnlo)J1Ouwr_hN2 z=u1Ou;3{;4)Co9nAKet1dYay=Uzipa7V^JYJej6WL|y>HJ3uBGz)Atzl0KRAJYbbZ zKfMtBwJEOu=FOXqkaq$@LcW0WhgT#B#00q+)Qs2D4SVdZXl!AeBoG@WIsO9&xbRF> zwoglfQ&mFlBWE$0GQ{Pf+M~VT+rFLV_pb?Jw3KoEPB^@NxGDn^6BC`GH_# zL&IdFXc-|%i@=70*z-q&N<&LqP%nCDeh`xj(WxL*Mz6lR zUr%ob+VStwnCSA-*i&hzK^hbsvCHEI#7z10_4KuFFTT9OZKzLlEIif31^+-jsuBkX zWQ00Y%O?uGw@}7-eU@24S%DU-!+6HJEn6bMhthLj&y1e=+VlmiX$^R1UXBjlJ5+{W8&jA$Sea~Kdh8XE-nwz zM(QXj`8BsBX@FI`&a03Fg_h_fr*cd*Q2o%6UC2pE@h$zkWc%#Ji(Nns?hsPHfpbx= z(~bWsm`fkzj|O!2)~zreuol01)rvy~8sEMFdgZqmZFxQnh@kqWfMaRJHU~z|siHW~ zf)fGb%?{qJ1+l5IGiEJ!c!Aiy_=w9tdo; zL{h3{p5(EeF)f&msBdVv2615&tFgRx} zxyvflh;xvEJTNpquE`;4$|j_4+hMfAZfyAz3IcEqKLZ1U%%vfiicPyVFxY`21aW^e zCr88!N`}Av^^lN|R4}3+vE~J>J}-_5H^WErc+K&=qI0PP_HeZlH~` z@6Oj4l@=Y!qm`7Bx&u3j63_`7H}~he@jQ*ay-5_=PLUkkLFU$$naqp~>uH5$;z#7@ z2Fu6uyA&t%LT3&)RSL56&O{$Qy_$XN{gqQw5ZX6@i~sbk{5kWS`^*x$5U5*gyFCWx z=BB{ZuBB)^(j9gNN|%5rORf0iRJQxs1lDbbn$cu$mW%2rWfnGk7Ko_+1BG*=OoOv+ zZuzMbCvJdF!wJb#yME2(^5wLz2cDzf4MYEQ^2X?5<{%3%W$s&R2!3tH&Ykkp?f_C) z0NG!c>>RQe8wbpZtt6~w@cfd$r|H_YYagbkt3y)JTYQ}q*x7mhqTbG!<3OcvT3U{u zo3YlCU+7=;p|dj`cAz!f!^PGTE)L_^(g=VEJ`8a|cF}U{wto&dqymNn_%SH*gAgXF z82BsE!t=PoBPeS4$lGX>T6#rEGqSFIbTf!T&8CbW~imv+BPR!GKHY~v=MR8&ElaNm#9f-yj@bd5+qZn1^xtg9y9v_el3nho0 z@}1i@J2NvCb?V+utprt+%j>2)nch9vpQ8e*%t6ejwds5G#gFiOMF8s?wcXLZ7oy(< zMFBZiwd6dAB!TAHCn>p8U%%5m zd3Zn*MREsH_^{Z^{}?>x#f6h!o0fO9ZK$J6umk?v%&^Ao+Nci1cJ!4fi3xVX4lhU#O!WxwdXk6ac50olH%XexT5 z@1`EU2bIsdJr1T1h>6iF`3gUcAq*wx zo~DaK^dn!276l$*e;*b@--b!YlCM607td2GGO!D6y`L^RQJdcyH@q^r&%Ij$d5E7f7ugQ#qZPf)*xcQq zG#vr-QlT(gW!;>oW8_o>nUi#++xyh(Qh6@Q_nu<$9lLhv0qX_@2Y>LGC{c$u1|j^~ zorC(g09#YOyu__n`=6=+0;dC`oor@o`VwuKi}IfR{pT#p8SB$%v(dGK0g1W?AL454 zIc>XxS(^vUThtUn^72=r7Evf*7AO?>FV7v^w5cGxsjV&F^fwMHW~#pAS-smNWL(II z9ws9*({1o88T|NPju%Ee_jMEcxp?>qzqe(g*Q+A4CS6?yXz!Hyqh&8Az{^CrIu!iz z&(ho~%CJ*ay6}HjCO2Kn8MBEL-|Xz{OPipIgSwjwOMX?{F8uUmS$f(jUES#(AE|eK zot;Y<)FM+lm?tF0Qjno_IIVf^bKl+Tnt4qf?CrS`--n!>@=~~x>bB8#pgBdes(jW) z5?UJ>=L6BhO3QvW?mBRwxOc|&1-sq2oX6(Y zW0tp9s*)tN(4108XM4S2_bu3D&YnA$IWEEvYMOM&8lRMH7{jdv4O5dtW#amED9A>{h zNmTz_2BO)|&yUDF$kHvO^Yz%=aJ;iBYmBN*LraTRr)<~c_Ukt3VvQ^2+KIJ|jSPxE zE}alyYv_b!8jIm0A?V?p(YO!R;@JENI9>sVRd&W?KKwIs|L53P3^*NXGAhFJJE<_A z8C>ocK$V7x+oy&HylSy$r0xJQ*-igx5p8(?J`yKaPz$X7TE&tL3kaCCzSCDD(3ivC zcNM z`WXQ5fc{?xUFRQ2Ds3Qfs1=VNKMp6i94O6glr{w2ums_%UTM4;zO+wFjE|Q$`H*NL zV5WMcSCX`oKcyLL_gG11Z7s5#n_Ka8F*X-fd)wyCiSG7qljIVY=6^g{j?gyl{m*(0 zoSV(J*|%@sVgBfK6!+m+eQWIG?8o!TEf~m7oD)2xt&5a9KR++wwd4}}ZrlF-v0y^2 zaef37)h(x%mabxbXnaxh#)QMs7GeyC!^Va$Jwxb!yZ|=sugbMC%uBTu_i#vbgR5Z( zu@b>j_z0h`*eCmRbrW?TT+yKW*qt9A10hZzRr0j>JcfiQbZY3}X*F!vy~b71XH2 zym_YXMe1fLKvuG%(A%2rb0GN}31ex&CWL(KYL=RSB_#${9yc0dWY>7nyH zA2S63E#MhJS8-%Gp3JFX`%_W2W8Z&ux{6AGgL&N1G547kX2A(WfPEAQ{yxC#OZU0Q z(|@o{`N%HAzu|7x0u5_#!F@zSgAd}`5(cPg8z=cyRhcH}4B^T_YZiu; zGq2y5;Z`TcR|*9Td_)A}U0JvF0F^4Hrb*>%4Q-E~K7Ab>^H%iG#4Qiw+6kF52>&o5 zf~#3YaL362_GFHyPrs+9q)-q%0RYahQl&n5vd87&`Ckve|AxU8;_!X=igML@Ef=gf@*2juJGL9Cq58dRM;(DPI9V0x{c$Noo4EYi%Mm{bzpt+C|B~I%P3T zJGGIX_MU=I5?VKPOrWtz^VxpGv9qbaxr21NV2AuoUdscCLrtlNi@4c%By$so!^^HTP!+sOIw4pd%GhX*%a)}Hw{{49I^SbHB?%|}}06TP@OFS5Y zV{@AO^!OqOpAX;#G-YID@}X8L(S>53pan??4MhuyS8h6ej@PA+L$Lb^u1G^{;f`WN94iw`lZVm!1Wc1&@+;=Epxa{Qq{3bn4i zOJM5Z==X1BCwNQW28CX0a5S^>=}4eut{NBJ``&q8-eW@Cd->{1pB4Ge=pkY=gt|5K z^XD;;lKnEwRr!vvA(1qM!ny=iq$sl0!KftR{c|$F0MFe&2^lVEkjwq#T@FBerYmRn zR=Fs_not+T8LsUDs-rZ z6dqJ(@E?S~2D9?&XRNc)%;VVN)Kou|A{CIM)n8|9@J4|A^G!VN%L`5(Je0kf>9hS6 ztCk>T*P}C}p{9b5>^i0rDqOQ9i$U2i!Tq)1DIXLV*o@YrD6%>u4w`N_f!dz($(SDL zN!>s>_`&v!t1)N*n4_$L;vc4_DiOrwJfbP%Jn~kL;U!nvo;|yFr=s+S;hhP}vOG~J zKg4@^AHwDM35zUcp!vSWmgv`-qTQ3WI1)%D=762h`hYl7 zfw>0Oj9P>WncZCMZ9HvgXD37wGNI{;LHGD z8iWpkyzhXmgeuJzy?=T86MZt41e}Q3j|YW?>|nG1xd)?opWb}>4i#&Q?A3KZ^W`wL z!W9t=`j0#t@QHot%k>X7p&epnXAdS1RvE+qHh8o(odwz77d;SUir}%(yQ4R#KiyU3 zSHi4nj!CgUoUw#*#melJlKLOw7*M6?)hiV}z31B=hzX|rcPbX^N%&zh5{p|SBe9r0 zhvaw-ty3l9bu8nazvfOA><@WTK$fjLcF^J|l8>P^4ghAWsHssKW>!3L51&KQ1iu{t z;bQ;@HX}Pb2>G}+k~?NkA2ap>Y>n9;~|I7o8x zMilUy0QFAXu{P>xDZ%}dXCM|q>;(`E+^iOO6$bo}l_<0)3)7c`?s9aM#TSW03Z(dMcz|{*n%px6?X?!ZYw|51B38Ne`SbU6z?gZpcBmb@+2_Lyb7Kk zguo!+J1!ES%I}9;Tb>vg86jip@Eztl7jJozk)a6AT31hxyvzuglOO5_8nEf(sw^xl zL{UJ`iLq-dx+9{gN7=g0XJ%#DwK$`&k}*!?>XuncE{s#Ye}Bx>F;N~c>>!vkDkSho zANn*606O&AHy|b=VZ8~r0Sg5M@%WiDEdBLVvEboB{z32JU$KUYm#Xt-O1nZrA5t6y zc+7Sl?cHz$GBB`#@2&?7SRF?fmq5Hq26CsFtt|s&!}%9>yI_O^k37Aq6)*=h7K#TG z3$Hv4g{(|{eP)dS%fTJLmR`E}dEH)Gawo#DT>>2}tD+_#DGjgW zWMtgnXogFGownfNLmIeQ|H^vG^P-=~=4pn6aUbhMW|ThNQdN`lT$s$HCR#C)Dmbx5 zk5WoXb~Y1Y5EA(t$Zb}5JyZ}3rtrvg3_buS9HLzx@V;9c0_VyMaH?l(A-AkFP*d%|YSZ1E}vkwP-js>60v}iG+LRMFTF(O>~!(Alm z*Zmi)trhY1EXYz29@ed)foC@apT{c)QsGTO${;3yq0nb(X@^XOFk=h6wKe+iHj(6Ju zIgM zp~iRNrAOd|1JbV@X`O}?Qn8udwcx~iFlv6S8!^7(1QSd)b4ZCu z^x;5-zY8RJD}tOx8tpD&!qcE&kWnHatqL^XfEiVWPPAKjPg}?x9dR@8`!R@h>6W!y zeugYTrU1zJKU50!%a;q4yUpXi5}XJ4PTuozSHXt|1P^hKr^g%ko$L1B*d=ld)rwE9 zYbOdT@hD<^hm7IjYz7t7?0whX*=dQMfk>L*?4$4ACG*5NmQ=o;%G*9EMY{2vGJ7Qr zBMqRFg7a!;j{+x{pYSdfGaykoU``qsGp?dwwvN0*1Pr(1Xfq$N>>%z<>TX)f8KepS z_Yo9Tq2TLUAH?4fPc4!O=-K0^PNg-^bGC1fsV6U3BlEXJ$c3z#rWs%9nw6eQ-I!0i zC-*eY6%R$gC9Wt8(I{e4hqreNOfy5zz!w=ZG8bs}fOsUxO_W^z%%#Z8U)oEikrOQ@;FK}NFLttl~>5*2d9S7+eWmyg`e;>Rm%Y$*b;ZE0a zYnWcim;*5M8hjB+PkmJ1pgA$mS+CoUOSIf z%85H{pbHGe6m(EB!wn>ZfEtp~eP#A<5BV&1G;_Jx_;LJUanRgS>^a} zvHc=>XC54hk9Ox!$i;$7WNs;*7tE#X#Zm)F4J5BD?{aZgrp>KD3W&-VExcS2^e^J$q`E9-^?wh z;o0HojWd?T3^SZug&%s*;uOo!8KsM^g@x*6MdS;kF_+hGoGH6n# zD@`^Ar{oAqKO41Qir&2tdk4@KSC<#Wh;sqWVg!#|!q{QWgVsjg&Vb~eQ#Bk5on?O? z?UR%F_se8g{S+x=h?AZD5?&J}%fo_BRSlSje8c>>A%Vvxbrz;7t<#$^YYr0vab%jP zf7kgJM1`8_8mN+6w`~g;<7}$_GWE|nP#L(EQ^8vno)awGYyUFQGLWr0#e?*@d=_c; z27V{kV}Y(t_EU9=B^}+mt{<8fWe>x3yaOWnmE!)!>V#Fc_|=rx!D3 za2MQ5|I}4-dTQviZsP42KW1s!DOg(at^$%p&`6`H-_#i$$6@U~mk7@?AKs1$EqhRg zJspsEPtIG0JnARg@v<9~k(M1IT(jYI&0Pg~CEpz8_(`$KoV(@>_r0Ni32YiEjfI?pc49=P;i&lj{WT!D@m51xqS=I|(6=~uE(jyq;C}cp0RW-HL|vE5Zt-2C<$n*}O?l;`X=Ug>wgSp@!L2P%%Z3 zGe#IpFSFfpQ-@hp>H}}TJG-VM&{87qeDayM9So%UHP!9#OXgH$TVbR z1TKLpW|M9L3Ssfce$TM*`(Y)?_9ukW7|bRNjs!M+ec-e5mlUDS&kV6>^qT3SDfqgs)uz&ITg*x0%e zv33@gHAjqw40r`ln7+_Vw`+NeCwAM)S(|WC5m!rHHOl&|Ra7jjKY0{X$kMB@ewzJXOz=3kY z$mj_67XP=F0@tT5j6j{N2k)Vd>fudm^<7oYUD2nydJs_Bx$2`|d9e zGg(Q}T9gzRUHbZQH*d`;~3Rg2DJoeZd(~Q_t!Xmr|3rV!L|Z@~3C# zH6~E3nSw?v1IuHbUmxBMhK^0&+^YAI-#SB34gZqPrL)i-}6uOqpxTW`-*9Q?9ZB57o+ zYSYhN0pTSU&ct71uKyWsaksRx-}*mmnzqn8(6;FI*hc7J$b>58*l#n`Q#apz4uPLt zL`o&vccYFU!ZWpL10Xd&xXc;&>j3QFrYaA281+uXMC9b?sL@x}Z{51GU-p+2f4d$k1JpiQD{TROX0 z6-VIsMZt;AvP1OL{qr)>Puu!*zfy%G)@aq2fGgKmY<-z}lSU3S(COOhmsHi$tZ=@K z^XRDIwbZ=|RTpN#)*@OeTfFohH+z<5fV^Eh`Q5L(i_^nF}%Du!F1$_p6;t3e(9IxOo|DZl_n&FT}91YnGL z7fnOifaQP#u#mHiCL*<`H%45IW73B+ft-uN;_i!1P=T=7A3uKFtGKKWeJ5J%_}lsw z(Q$E2VOT!xo7$^>^TWx>9k?LqBYlNEIYZK{f)IIkKdlPgB0_%jA(@?g-qe%djt(ltSsO15Cq&PJXA3iK;ZDJEgG%t#Ej(+s_ii7)e-Bv}F^I;&~GryRUqX7%_ z^G4O%w{ImV5K93-36Kn~x32gCL}-sf9hj_L`}Wf8W84K9O}%$d75ORHSj_px9!}yQ2?bQM+A^Gt;a)@ zE}X^#Pnka5A1E83zbmQ>q}&pfMBXM)8~j1z!Gj00&5QSppT2({u&pU7 z{$J1gQV8R69fMZ>)bk$-^|MF!cI>vmx2ylOKI@4MU=FQG4wJIHSKQvv^Y@=j0KCH&u!;6qE z{xJwFDU@SZ2)`1!9DmSPofkBsuEph#Vi!=fG z6%vJO!FgNr&uYsmAThaA&Yx7?w=QZ89aPIp*X(y6yt zMvb{nX|OoCa+6iX69ps1Y7ORqg~3Fm7m|WzXdg=dEt@FU5D* z)0M9@)#{h+-@-N2=?n;r`eIMc>#b#;fR4HAYPWN7Zc|4u|c7)1d> z19_KqwBTv-O3J3&d3n2GT)_ZG+h)AoNhr%}HU>#fDXH{=;2sS*QEaGT5}VR%7(W(H zHJZn}O!LSD(D0t!x^1jw`tgc}l$#$I2LQhI>apJz0%95-M|G~?{o@Vx}}v(t20P?mU?==G)!Lx*C+DdHz-k} zqPh-MTJM7rJr^ZfU`A;+T88l;zF-S-+eVvMvD!3ZN>EG2iXOv;9VqW{sux@%h3JlvoezZ${}BL^cQNGQJQ%)>yn4qen-M+S z^VmOqDYux5(xEIUBw~Z4!zG$y7vfvk#)Z9k`!)v@;;u)BT|5&NI>xz+7LDWedS!TL z3a|VG1aG30$v{^x)26&xI!yDfe zeMelW!t3n4V&Z_M5@pM|^5yHQ@T%N`f&dD9VTh2*zlOM>GqlQooV07DHkhacIFj-) zB=aNCkcqB_Q_Y{>y{6b^W@Zjez6Yo6Nba*7=-n$Wyo@=0^@iXCfTU+iesrLmCsc6i zg7%be?0&waiGXDQ`yP5wHB}>H*n*?JD_5<`p>-RwPy`V5yurE= zkL2;Yb-UC`B9(kVTsQQ<763Ok60~wT1fg~J$wJWo`Tb%21()6V(`cDQ?Z|R|d;G#n za()qI>Z9q5Hz}MlC^qF}n8;Qk5l)bNlv-5v`EwKpXX4M#*3+gnSG;|4`NFTONRHY8 z<%;5>S+m98^ot_t4T;1U`tIJ@L1J|f$rk=O=e7X>V?sKNrP#N;3zo5GZvW>o%h_~Z;LJBJe14i3p=QdO4G*U<` znS)zG)wjj2uH7(JpcY+Q{LOjpT=XZWBTKIA3|V)NR&z2d*f7o9|E$9+`)R>6{xS?f zGJqcXd@ds5hB(~boct?n_5saHAne(uF6Yi==j7agxfj9S{rSHu4SN#^u4q4a2=U2aQ#6K{WAN&Xx;Q@O!7KVHa$5TcSib;So7{ zzV=JyN7PZkQYyTu*EqTz(Kgy#T{8szMaL2Ankaz3Z=f&^1k+6=y%c#BIszrdFC5@t zS)bm)e-$LJTo&|GaflWnV$G*U$SrjjM{!7uJ__6|c^SQ@$KCYrv`)YtvAU}aYY53~ zj0B4UuT@_9XQm^xB(+EL>3g~yaoO@^nI9mYB_3M<9RhXhDg>h7B#4Bw3)1ML^l@(D zPZ~f;-o(-LoE{$j@g{DLtp^W=;34F<(2RDXj5DRf2ug%pt&KyZrb?IO60)L5l(=*4 zPjY_AGu#V}_$%qK=n)Ek=GRj+Y}DvFi{wR(bC~B1kJfvOHvw-<2XWYOSUw zy0cFcz5wY*v`chZ7r|!BVI%MLi!2I>wdxJ)eagU)vi-`HwL!%*<84GB_z>RH&&}c6 z>+G&dDYwrX<8^AeYSE!a(!xdopXbn~FZ}rYx}5&>o0(Hut1d8fE?Q$={h?;}xFgFk zwknN;%UBLPbqDR1LZtYdF2~@(#+jRURt31&9b^W9{xp(i)8$UHEFv#~7a>isTELwToo%_>xJsq6jgDC!(J z?1AlaNE9s#UAWii6J`$1?;|9HOo93$g)HIwpO+U>IY8=HADiHmsX`&ocv`EhVtFWI zQMO+D6PvGNnO{Uf{6=*mP*xn1OdTsy2@~4q?`U!=~VpN6d|)MeTm% zVE9-t6ys)Rt%rGeT0@7n=ZgFhul_2Bpcud=81MS1zvu$sDEFUlwr)n-*hs;r zO!1mUInTaZxtVvT6stm}JKlXk=zkXhe0&1>&dz#A5 zBH;9M0_sLW4zLH-K4<;bl*kC)aphm=`JtSZwYs=^(aRUKTanZc67R$1Wj?FdDySyp{w%elkXm`lV*l>#^+za9a+F7P#a8x%=ZCk8`YPL-I^`X8@7wU|Boz_0QN zm!GL^OMbPA+&$;SXAh?gL#-S1lgq8600(#bF=UQ4=)v6n;mHLa-7xcftX@L|)pD<* zlpPV83IO&w-wR$2yPH1)HHp#cTNm%SM6PgQxdlhE?$ev^IQnqu8StY z#>Z{3?Uo4x4y1OESYyn~t8#5j8HMXYG~6mH-yhwg!<>og#~C;)Zf7|I4N)J7GWF!? z(|aO%&pu;c2WWkdl>J=gr_YYOUpk5evScoylK)Kt>tT$+x3l`#UH04pkcF`S0dFaG znoVHzrtIVOyhWhPiY+TCk(j~7?j5TbW^f3#+GHoEDC2b_*aJG#7SgI%-uiqkfRoR7 zMKhN_-xgopCZGZW6FlaT_}!|1Pgte|E&tE8EG#aZR6V%)JVn3>m zj;1n0iESGbT7M+pU#rl@m^lfF(9Qz~CYVn0tZdY@sScL}Mi<3RN({5zjv134kM)`tFbefOiKvH>8nBrS5r-Y8q&XPN zF+|iGsA&qne#?0bEZ)j??0b}wF|+2+)2C0_vdv*nBe{PM04Y&* zjQ#T+@z~6ZOOO1jlz)X`{sCL$81UMJRbLlrtvcJH;2Kl3ltyyq!JLf&KiiR|QuExm z+41P;jl?0=+=_6aftU8e)D$P17Qa~(lHyFo{$k1}$=3pnow}+~T3Y&sB6jawjSHIE9Eojp*l4ZrY4VKtJ@kDL@; zM3@ww5bP+!F@$iYz+gQ)4;fzbYndzH6(HcQNpBqu{ZZaUfiWVt+dn(qYDWAsox1pZ zewB8rNg=MWrD4=}JHm>&{~xiO_KH<~xt>~Hq$#m;uI$YvZmiR~?_FSKU$iI>yDuoB zOu2!?&)OWLwdAqye8WJxy=}+~j0X?xtcAv0jlL9TbC@y86N*V`=`h?pH{AS~^g!`r z<~DBDuVxtyM$Ur=_UoI~cdWmATM-RiBR}IygfSQwg%5JkAhdVNqD3e9kZG(dF~>3O z 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 pr>l08 threshold. - -Documentation -============= - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -Needed Modules -============== - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -.. image:: tree_dependency.png - -* `Psiref_Utils `_ - diff --git a/plugins/Psiref_threshold/psi_ref.irp.f b/plugins/Psiref_threshold/psi_ref.irp.f deleted file mode 100644 index ee69ef5c..00000000 --- a/plugins/Psiref_threshold/psi_ref.irp.f +++ /dev/null @@ -1,41 +0,0 @@ -use bitmasks - - BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ] -&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ] -&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ] -&BEGIN_PROVIDER [ integer, N_det_ref ] - implicit none - BEGIN_DOC - ! Reference wave function, defined as determinants with amplitudes > 0.05 - ! idx_ref gives the indice of the ref determinant in psi_det. - END_DOC - integer :: i, k, l - logical :: good - double precision, parameter :: threshold=0.05d0 - double precision :: t(N_states) - N_det_ref = 0 - do l = 1, N_states - t(l) = threshold * abs_psi_coef_max(l) - enddo - do i=1,N_det - good = .False. - do l=1, N_states - psi_ref_coef(i,l) = 0.d0 - good = good.or.(dabs(psi_coef(i,l)) > t(l)) - enddo - if (good) then - N_det_ref = N_det_ref+1 - do k=1,N_int - psi_ref(k,1,N_det_ref) = psi_det(k,1,i) - psi_ref(k,2,N_det_ref) = psi_det(k,2,i) - enddo - idx_ref(N_det_ref) = i - do k=1,N_states - psi_ref_coef(N_det_ref,k) = psi_coef(i,k) - enddo - endif - enddo - call write_int(output_determinants,N_det_ref, 'Number of determinants in the reference') - -END_PROVIDER - diff --git a/plugins/Psiref_threshold/tree_dependency.png b/plugins/Psiref_threshold/tree_dependency.png deleted file mode 100644 index 9c2088e1946aea55e4e7034ccb57865b43145554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8479 zcmch7hd|~rGlKnxFkWNA+$=>6bnI~Du*4`~4HXH;(tq>wTW{exB#Pulu^LN4T!G+Bq^NG6X@+-BMS%3%_^aCxrwbUTb^m zvf&qzwWgX1a&r3ht|}`YLD-R7DmV0f-!7*<(baPpZB8F@F9@+UJH7oRM#)E}-64h}UtL|1}F-^p>W z;iam-91_b<`gEf*=xslv5}KWhCw5M(JsBH6_g8Mtzsn=d<0y_j1bJ$-7#mKHRxBm3 z^$amYM@FxaWviSuYEUFmQ&nBN5^BX1MU<}HA?9=s|0!C9bMWKZp1){vq|UmU zSyNLJ5fPE!lPAQ)#B^kh-Q85Ks6-9B)C;Vv#byMutTBz&`9=a6x-GV%_XX(FyXM>^ z1?VHN69e0Medc|A-o9*=?33$L!OPm22A{K73WmZVk+{_ROO*(y6X)Zn`=8pY%UvoCZhc z-5hXO0A{wc~Rp99xC*Qq$*WKOy?KDIb6cq3oY>x$)FrRxD`}+E1 zd{#V1rdCEOd{#%VF-7?j`EL-OIdg`PP(AZ!ZLMNu9vK-Kbwr~Ucf8RNYuo&Mc9BzU zOkh=26+EPG9&T(b#=)jwaN=KB?T}DX#zaNYkq|a4`cUhLmz(E3eDL4_3WaiZ{`2RL zGYU07KQEHffgluNG|bHWaq6%xoGywyj$f5?4SasT)8*aY-+z;ma*l`qLDyNT+`M_2 zi%UgSwW+z8hl{JBu`z$p`Tf12sq?CgWk`faEda~!#OiWA{ z{{;QR|MxGH zl$2idX@=loYinp|XlZHPzI|I=9cJm;H_MIj@$$N- zuis+({l||VFo*T^M{(+#Ygo$W=H{#qr_s>VbT?--FxO+jD&NT1#KcZCS&Q4r*|{?C zXn$=@BuZ6NL&Lbh{x*#5?d^?1Wiuy~cF#lVFbJDh`mS5wyLV4dk0#U#hr_`xEG#U* zYinyOifYouNZ=KG28e_aXB%1h+NyUp&8=qYvXi9PTgW_4fACN6f^jv9@+} zbhNhKukzcfH~(e9h@m`pE>%9D{KJRozcXz_!5s4P^4I?bKYv7{bw^EL!+*_|BKrFJ zZxw>7zkK;pR+ijhpJ!1MxYU;mPj)}nHPBqukeBxI<;#tYjdXN$uyO0nY$qeDfk`PT zOQa5iFB&yrkMG|f94v6?N>_N8Z}k29cc_ID*Ac!rb=Jzel0NPB8$M$JCEm-%qRH*{ z1?i7xli7j}@8tC>DBdG!AfNXvXM+u1$V#^_7_=3Y5)<1vSgm1WW`2VHG;6;(Iy$;D z`b0;7UXM2+*QA7=fq^-yi5Nxq^fe7p@Wga$JUnNHE-!WXbTFm7E-$Uer@H%?l9G~# zL&Z_57^tely{@2@#l<%j#)Q_@!&OgqQhi3(cXqOHC>ifRP#kXG$N#7r=IB4!{*%$O z(Dq7@pN|iAeIx#*Vmm{8>n5apQ)A;*#z=*u1)W`wR57vm(?S@);~_gIytKS=wa@T|%>2T^SdZPEg`Tcdmv_Zp@AN@R0hBd&l9- zf{k-ei!euj@#F0j0N0Ogvqr_Sjxkq5%rAWlbmc4d%GL*Y(E!7_{dg9&aTT1PYkqP z=%9!g-~PoS^;_~}trpw*X_>1dUmp*&~3R!h*2gvM}+-!?=$D6OXrA!M|8F)M+0`uo+@?^4J`?| z^w?CawA=e`aGTZy{_M8v|2i0DXJ`_5{K1)#sN|uKuCfyTFO;eEX3m=!w)7-*o_;L( z@*6D?v7Q_2UP~)aMvCh*I2c)Eugt9mt#Uy3+}_+=+dJGD3mOv&_^&iS|7uXs38lhe zcU1ky=82{PxeIpr?8usM&{KCQ7Up0+Isw7wWo7X%hkCga>kAw*w0BOz!zhk|puy?p zgs5Kn^6A-UgB!^B@lo{Bqr2Ol3mhEZ3TYk1zf~~1j*{b{o%%ZsKZq?^g?cL-GvXs> z@OQWR-Q1`sDC+a7pUJWkBJ}jqM%e)e?1+c}xp_6Ym$dH!HTk(M7Fd>({r;Mljn)+r zA@L2@#KjS0acOCU-adHKPG$w_$cb%yFaZdrfE;vy+t*PVxt)<4KT zctC~t&iwe$5KTdXL`Hj?#>9Wm(iG;eNdGxViib8`@xLiuz-o`WeuWetiD60BUtF^y zK}_@O>y#!sQl&f;JZ^=nT{xQUNI}rEv-U#`wI3LZPjE6h4<7pu~rS)IM~GkHryxk6r^ z3dz>jcJy?k!bg&|h|e}!DkATe<=#wK#fbVrzd_!8`t(EM(NCU*`uchVadC0k@cr8! z^~L<$@861cmw5%C{i3mWbDd95j>eK-4pb>eDU?ZF#pC8iLh;B6`W&PL>61{~>tzZG zdp)K*$)D97`hvxlh3JfpjS&R;aQxln?a+jTgo`rXrH^(}(#pK4cX7l0{f{1n73G@3 z@)Q-Fy+W|+nl*aU+o($^ywGlTOXS*lwsICZ=_}ZN3*pg>Hjgg3q&IIIlTgB6OG{s? zaHh)mbeeto=+Ni2GmrU}O|reI7;y$RI+&Q_TiNb>WY}8A6?&|4*m$Z;H!6gi#`(ch zi$GE_(YJ|KYKjOU!YU*2pisn2?kuOf_L7w&XP_t_Z9PUU<1T5UhVL{9EeX3(0uM&v zF9#XEqT{OlPg9dUz1vO9(M$REX-nMx3z<^C z3fMX43RypLztLL5sa^aPn;LLp|IH-AxzQmzw~~dPRxyY6Cn~lzgp_nGw`9B{ zrSr!(8(YHaZ6@-w!Q#K4T?nv`^Dw5Qpt;SxyWT8vg>-*ck(-A5a$PVnkKA9&q?!U6 zD3U?v`K7ZKj~kU;8IR@^PR^4M#>j2I9>igpq8pPtX6Mp_(lj!wp`}o6D-q*QNI-Xb zN&XP%(rGJdV{QF0+Lwxiaw5qhFg!fms$ejTk}Zv6NFXc)C`nd& z;2RZAI|m1vJuXa`$cW+~0mZO+3$PG(4-Y)#@#Dt@)sEA@W^*9*T3XoSTT`w-ln**S zY}Y9jwu{Bdp{Z`uR$DX`T=aDXupES8AAxa!69izoALplma;#+a*gw}Xh z8OeFH-}*v(x-alboy!k;25_Z0<5mJzwgV3TlcSxzy*(ha+F1&F)A2WN-o$v9OuV(PPXD0yxi?EEUH;Le%HzjU&y`x++Zz;A zOZ@l#?&(LY8M}^@-!nK3@0lNTWsF z4!)a1>vPx?#f&Std0q^o&j-W@9h72_p-V_eI6XZryFFk7t9h1Ay6JLy)XJYf0>b}- zpT7qs4t)ReWxM6yMY}xtcO*F)=I2p%b~AZ3$1j7VtMc+-s~sB z7h#G@OiTop24R?I-s@Q8Eb(OKMeWXJjf$Jvg~rQ3Ue-$Wx3;!Q9**@bZ6WA^fq~7<&0b)H=2g=2@}n*zELL^pplPm! zp0DO4Cn5+}c^MfQ8F3oeOBY}T1=!iqRL@D~E-*5p93342$l$qMPovsnjv^!$J0W0E zEqmokD-#x#fltvz7xO}c7^xNcg252PX!H*cN9KLU;qD-4MfMj_QH{B5=g&V?E2WKS z{E&J4F_IXch?Hq~Q(KJM)Pr57nrM`8thPg7G9 zD7}Y=nEa)rwyWd>hzMikw^kJum2o_;JCRX)HX@8`=yK3EMWMpLy%twinh2`z^3vw$ zJIXCKHJnCBXsDm_>QtGk&x=NDAjMyS87hZGsbaPvqd|6c75-EQXL;@%~Umn{L zXR_z@KAoYG7gLml3r z+{C(J8_pPD@Ta(BIdaQlm_@Hml#!ew3_G{6=P#eEMNdM=MNOJc_FQSH5`Z?o^{m(T zOdLvt9IFtNWAGUd+12xeTxATMsBwfuP{s5wx%k-dgMM$DnLH3XcCqsx^?sQp{KAs5 z*(7pBRywuw_mxk*j{d57{Z2*3!`=oP_ve<|9ZZ;ym%cc;LM%(1 z)_rA{IMjJ*C&f&K7|b$@2ri6_$ZoWYA?T^*7#hKb3L`SCFrl?UEbhEHo~U#^zoM#| z@0pf)l04+X#R)og%%w{F|MeRFZ*Jnl;lGj>6chxW&=*8ZM1&v!nSBYdv9X{o@e>}? zw9E^samOzYGc z?**%?t3iY7^GWNuOJ%G15bN`K4Hdh1KYhI5xev%2+crWVTAnfhmyk#YrlINS>kI8FEG(oFY>rS=W+?e?(@Y_q3Q3zKPm6ZD0^{+g zrlwNLZBilcs;cBfMgK!dnG=@3sEEz(b;N)$XDTwz)y`sOV{7i|urI)&8sF=IDMcCBZ zjjzYYfe6}2AZFsHinykSYdN!m$WS$PuP#Fw|-EPzm4zz7sVXtskkY ztLy6O+Wre8qt_!B@2@s2MS>_E#o-%S=ayhK5E)Tv7qQU}+Hqyb!qOaSZG{KwNeo$x{Q|pjaa97_~vy|jy zXe{c5KhM|$hFMyUgJ+N=Z1FWa8};Bporr*}tSmHJXqNnjU$t)Cx?w2t(Z<);h&$e_ zLJgi1oSKM;HZWFTTYvm8X8LH+pxWEz-^FVA`TDAL(28iGH zXM{8oG-isN`oEf28JnA%o0!PR%d@hvrKhG=0gV_QHf4=bE3759UB6J3nK|<-M-TiD zFgs|;F7xv{O+jP7?g~ziYL~aL00x5*P5uJrLuF;<`}g?RZ_r!eGAqrGkDEIb<>g_6 zW2~yFIjLB!mI3DC;vyJaXH*k-sz}oP|K7^c*C-Uvdk4lrVc}+bvRIOk851+J=Iz@7 zv&jzLe+JG|Q7IOR&!N+z2Az*VvZuj&_!9Z3NW52u@0*%_>0b)(o2i=L+K=basotH8 z@Rv_l#kh=CmVu|_EJ2g&L@(Pv?_TD=I$FgU_d+96e!YQ4;cyK*KhKMMPqlNEDQYa} z1(z0)bP3iVT3S~@v786Hmho{obx1Sl#Ek2WOo?(Qy&q+6{= z=SSK4d56xoq-1218+)*9q>GJ7h<(A{!=MA^nC5tm%u_vqb7$uoo(D(d4J-9%5i+jUMau8~0A_w@Hf6{@j`#bX*2+1Iq#yXn3rgu0B#;Qu6id z*No@SKLR0=Br(0Vf)}OwIXl~}diT(-@?fRHqdZ`u5|`S3Yutqf+A%%-tG92p-t~vy z{|k;CkS!pPWu_~O#m?8iwc3^k9{G8DOCaoGVm-aLho04N`2C%}#j~2*J~ppyFwa_E zUjF|5d#D^I(PWbIitYcc4i*5PxOV+|MMiE8Gh>WGopt_jcRAhRO=5EF+xD7;A(&|5qQ-le;^{ z`ou|`$s*`z3tAD`bL*oVfDAD4y5@QoHnX#{!Pbh7jI4doq)o~Ggh-BpKiz6xbc3@Z zS~-m3PLBSLr<*sG<)&GMx1dG!@Lsh`+JLKN!Jt3z+pVSkAqq3^<=@u~E2ih>hU~E- z?Gp~203T~RgR&j-V#42-YDENugjNy_%^!Iw>pd#LT_rzDLL%wA_HM}7v-GBmjw(3! z$hdIOUWBO-7VIpaFtN=+5hr#^b!Xr1%rivR>K@3@;Jf}Trz(rE=o!PR6f5xLH` zZ)busCg5R1GLlWy2C;JRYt*b~Bo7|uMK%T^@0m1K@dsw#P z*o1`X(9l2ZwexHNo9APiVdqZsFidWL9s`OGNEehb5bN=};M&Ie8bV1XMn?0Cp&ymdxL!vuXgo0ek)Gi%6dsbJzFWP97wOZ#7GEFr z#ahXY-v|=|cAp~Q^2T@w(9+eXbuu%_-2G!?j>7GdmakKd3>FFMTyQSbd+zr0*Cuu# zfZ5~JVJ@yHCxbAMXaK-6oSe^8F`#a9&8zk!gsZ>FyUcySafAS~gmaj?ISHzmtI6#l zAt5EBeoN3Fw12#QIp{0|TtHjf{`5dVOiHTk+c&pGn|5Ftc~#rSKqj{0wF>ysAIF(B z#9dNT=lXBt41dXu0l5hRVv6pCP3Q{LmyrqWz{7Plrl{@XgH@W#Xc3GJBUmdBb$JuO zGo-50DGW(|{d#vin6kz8FGzZlgd1xS3~Di~cKJrh$;oMl_m>T9S_;P)JZI7-xv&V)*$j{Am0W$1%mck>PwY-(x*uz7IBdrtD&h`@clc2 z@Ed#qw}ws51^f6F?vV)j!Az3H8p9~G846a}7xH~G`J3C@uq@5H&0fF`+>Q?)zo(OG zqKR_NEH3tj&jKc@kvTgvlbDe3F0a~`1lkR_{=3Z`CXS)V_BYO!^Q#~r2;k3iNf;BN**2? znVLy!EmGipKq~R@IKY_$I2^~v$10yw#3Fvq8)$L&fGr?wQSHC*GxN%VKH-HHcfNj8@fbt3oy7Yd!2Ot6g`Vy7Q+R)O{0t$#3DDL7S*b6W!H#fHm=N-6) zfYtT$+iw@v5#)Rojax=JIeo5D3kWy@27|BzRfaLIUOgWp#dP7qf?VBFf(DplJgnxM zaFP@i6$M%wskIdaMHA;26UOTI0+lIb)yg#T3Q`BGpz%1&y2~&a6g8;!sdeW|YH)-N za!E7uu6(*q;UcjL1_x>KW5#_5jRSpSoJ)@=X7wZqn$WYc)%fqZ%es52s1QPF8W**# zlVNo1{QWC?&P%6Kbk$ntKMM|qLuM~N>Tm!_IGy%tI!f{rA!lY~HOSE~?nz5ad-@a) z$o$xta8g^8>ZP>g=Bb<79Gsl>GQs+OIk+rk5RbHE!{TrT3+-rEKSMWLpRZuhIpunrfz0WGKh3(!2}UIvn>!~QHGJ{$uBPWsD-VUwL`p-sH+UxL%#Qw0_Us6iB5 zhZ0}(l+HDX82T-t5L`zUu5#nX4KO?S5-0VbVu7~P(oV}^L>&}W(+S}A-!cE>R_Qf0 zH8pSsjB}ghK>2$~j{uP}?{=0jkujDTa4z0*J)5Wj$MLePlw&4f3d&=r)+Jdesx1KT z?o(cImKeINS-pGXRM=~t2oOF+K;8@E{g1qVc0yoOdhv{PmQ4@L3AuGsTji^g<+J|> DeZzG2 diff --git a/plugins/mrcc_selected/dressing.irp.f b/plugins/mrcc_selected/dressing.irp.f deleted file mode 100644 index c772e2aa..00000000 --- a/plugins/mrcc_selected/dressing.irp.f +++ /dev/null @@ -1,1076 +0,0 @@ -use bitmasks - - - - BEGIN_PROVIDER [ double precision, delta_ij_mrcc, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii_mrcc, (N_states, N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ij_s2_mrcc, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii_s2_mrcc, (N_states, N_det_ref) ] - use bitmasks - implicit none - integer :: gen, h, p, n, t, i, h1, h2, p1, p2, s1, s2, iproc - integer(bit_kind) :: mask(N_int, 2), omask(N_int, 2) - integer(bit_kind),allocatable :: buf(:,:,:) - logical :: ok - logical, external :: detEq - - delta_ij_mrcc = 0d0 - delta_ii_mrcc = 0d0 - delta_ij_s2_mrcc = 0d0 - delta_ii_s2_mrcc = 0d0 - PROVIDE dij - provide hh_shortcut psi_det_size! lambda_mrcc - !$OMP PARALLEL DO default(none) schedule(dynamic) & - !$OMP shared(psi_det_generators, N_det_generators, hh_exists, pp_exists, N_int, hh_shortcut) & - !$OMP shared(N_det_non_ref, N_det_ref, delta_ii_mrcc, delta_ij_mrcc, delta_ii_s2_mrcc, delta_ij_s2_mrcc) & - !$OMP private(h, n, mask, omask, buf, ok, iproc) - do gen= 1, N_det_generators - allocate(buf(N_int, 2, N_det_non_ref)) - iproc = omp_get_thread_num() + 1 - if(mod(gen, 1000) == 0) print *, "mrcc ", gen, "/", N_det_generators - do h=1, hh_shortcut(0) - call apply_hole_local(psi_det_generators(1,1,gen), hh_exists(1, h), mask, ok, N_int) - if(.not. ok) cycle - omask = 0_bit_kind - if(hh_exists(1, h) /= 0) omask = mask - n = 1 - do p=hh_shortcut(h), hh_shortcut(h+1)-1 - call apply_particle_local(mask, pp_exists(1, p), buf(1,1,n), ok, N_int) - if(ok) n = n + 1 - if(n > N_det_non_ref) stop "MRCC..." - end do - n = n - 1 - - if(n /= 0) then - call mrcc_part_dress(delta_ij_mrcc, delta_ii_mrcc, delta_ij_s2_mrcc, delta_ii_s2_mrcc, gen,n,buf,N_int,omask) - endif - - end do - deallocate(buf) - end do - !$OMP END PARALLEL DO -END_PROVIDER - - -! subroutine blit(b1, b2) -! double precision :: b1(N_states,N_det_non_ref,N_det_ref), b2(N_states,N_det_non_ref,N_det_ref) -! b1 = b1 + b2 -! end subroutine - - -subroutine mrcc_part_dress(delta_ij_, delta_ii_,delta_ij_s2_, delta_ii_s2_,i_generator,n_selected,det_buffer,Nint,key_mask) - use bitmasks - implicit none - - integer, intent(in) :: i_generator,n_selected, Nint - double precision, intent(inout) :: delta_ij_(N_states,N_det_non_ref,N_det_ref) - double precision, intent(inout) :: delta_ii_(N_states,N_det_ref) - double precision, intent(inout) :: delta_ij_s2_(N_states,N_det_non_ref,N_det_ref) - double precision, intent(inout) :: delta_ii_s2_(N_states,N_det_ref) - - integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) - integer :: i,j,k,l,m - integer,allocatable :: idx_alpha(:), degree_alpha(:) - logical :: good, fullMatch - - integer(bit_kind),allocatable :: tq(:,:,:) - integer :: N_tq, c_ref ,degree - - double precision :: hIk, hla, hIl, sla, dIk(N_states), dka(N_states), dIa(N_states) - double precision, allocatable :: dIa_hla(:,:), dIa_sla(:,:) - double precision :: haj, phase, phase2 - double precision :: f(N_states), ci_inv(N_states) - integer :: exc(0:2,2,2) - integer :: h1,h2,p1,p2,s1,s2 - integer(bit_kind) :: tmp_det(Nint,2) - integer :: iint, ipos - integer :: i_state, k_sd, l_sd, i_I, i_alpha - - integer(bit_kind),allocatable :: miniList(:,:,:) - integer(bit_kind),intent(in) :: key_mask(Nint, 2) - integer,allocatable :: idx_miniList(:) - integer :: N_miniList, ni, leng - double precision, allocatable :: hij_cache(:), sij_cache(:) - - integer(bit_kind), allocatable :: microlist(:,:,:), microlist_zero(:,:,:) - integer, allocatable :: idx_microlist(:), N_microlist(:), ptr_microlist(:), idx_microlist_zero(:) - integer :: mobiles(2), smallerlist - logical, external :: detEq, is_generable - !double precision, external :: get_dij, get_dij_index - - - leng = max(N_det_generators, N_det_non_ref) - allocate(miniList(Nint, 2, leng), tq(Nint,2,n_selected), idx_minilist(leng), hij_cache(N_det_non_ref), sij_cache(N_det_non_ref)) - allocate(idx_alpha(0:psi_det_size), degree_alpha(psi_det_size)) - !create_minilist_find_previous(key_mask, fullList, miniList, N_fullList, N_miniList, fullMatch, Nint) - call create_minilist_find_previous(key_mask, psi_det_generators, miniList, i_generator-1, N_miniList, fullMatch, Nint) - -! if(fullMatch) then -! return -! end if - - allocate(ptr_microlist(0:mo_tot_num*2+1), & - N_microlist(0:mo_tot_num*2) ) - allocate( microlist(Nint,2,N_minilist*4), & - idx_microlist(N_minilist*4)) - - if(key_mask(1,1) /= 0) then - call create_microlist(miniList, N_minilist, key_mask, microlist, idx_microlist, N_microlist, ptr_microlist, Nint) - call filter_tq_micro(i_generator,n_selected,det_buffer,Nint,tq,N_tq,microlist,ptr_microlist,N_microlist,key_mask) - else - call filter_tq(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_minilist) - end if - - - - deallocate(microlist, idx_microlist) - - allocate (dIa_hla(N_states,N_det_non_ref), dIa_sla(N_states,N_det_non_ref)) - - ! |I> - - ! |alpha> - - if(N_tq > 0) then - call create_minilist(key_mask, psi_non_ref, miniList, idx_minilist, N_det_non_ref, N_minilist, Nint) - if(N_minilist == 0) return - - - if(key_mask(1,1) /= 0) then !!!!!!!!!!! PAS GENERAL !!!!!!!!! - allocate(microlist_zero(Nint,2,N_minilist), idx_microlist_zero(N_minilist)) - - allocate( microlist(Nint,2,N_minilist*4), & - idx_microlist(N_minilist*4)) - call create_microlist(miniList, N_minilist, key_mask, microlist, idx_microlist, N_microlist, ptr_microlist, Nint) - - - do i=0,mo_tot_num*2 - do k=ptr_microlist(i),ptr_microlist(i+1)-1 - idx_microlist(k) = idx_minilist(idx_microlist(k)) - end do - end do - - do l=1,N_microlist(0) - do k=1,Nint - microlist_zero(k,1,l) = microlist(k,1,l) - microlist_zero(k,2,l) = microlist(k,2,l) - enddo - idx_microlist_zero(l) = idx_microlist(l) - enddo - end if - end if - - - do i_alpha=1,N_tq - if(key_mask(1,1) /= 0) then - call getMobiles(tq(1,1,i_alpha), key_mask, mobiles, Nint) - - if(N_microlist(mobiles(1)) < N_microlist(mobiles(2))) then - smallerlist = mobiles(1) - else - smallerlist = mobiles(2) - end if - - - do l=0,N_microlist(smallerlist)-1 - microlist_zero(:,:,ptr_microlist(1) + l) = microlist(:,:,ptr_microlist(smallerlist) + l) - idx_microlist_zero(ptr_microlist(1) + l) = idx_microlist(ptr_microlist(smallerlist) + l) - end do - - call get_excitation_degree_vector(microlist_zero,tq(1,1,i_alpha),degree_alpha,Nint,N_microlist(smallerlist)+N_microlist(0),idx_alpha) - do j=1,idx_alpha(0) - idx_alpha(j) = idx_microlist_zero(idx_alpha(j)) - end do - - else - call get_excitation_degree_vector(miniList,tq(1,1,i_alpha),degree_alpha,Nint,N_minilist,idx_alpha) - do j=1,idx_alpha(0) - idx_alpha(j) = idx_miniList(idx_alpha(j)) - end do - end if - - - do l_sd=1,idx_alpha(0) - k_sd = idx_alpha(l_sd) - call i_h_j(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hij_cache(k_sd)) - call get_s2(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,sij_cache(k_sd)) - enddo - ! |I> - do i_I=1,N_det_ref - ! Find triples and quadruple grand parents - call get_excitation_degree(tq(1,1,i_alpha),psi_ref(1,1,i_I),degree,Nint) - if (degree > 4) then - cycle - endif - - do i_state=1,N_states - dIa(i_state) = 0.d0 - enddo - - ! |alpha> - do k_sd=1,idx_alpha(0) - ! Loop if lambda == 0 - logical :: loop -! loop = .True. -! do i_state=1,N_states -! if (lambda_mrcc(i_state,idx_alpha(k_sd)) /= 0.d0) then -! loop = .False. -! exit -! endif -! enddo -! if (loop) then -! cycle -! endif - - call get_excitation_degree(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(k_sd)),degree,Nint) - if (degree > 2) then - cycle - endif - - ! - ! - !hIk = hij_mrcc(idx_alpha(k_sd),i_I) - ! call i_h_j(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(k_sd)),Nint,hIk) - - do i_state=1,N_states - dIK(i_state) = dij(i_I, idx_alpha(k_sd), i_state) - !dIk(i_state) = get_dij(psi_ref(1,1,i_I), psi_non_ref(1,1,idx_alpha(k_sd)), N_int) !!hIk * lambda_mrcc(i_state,idx_alpha(k_sd)) - !dIk(i_state) = psi_non_ref_coef(idx_alpha(k_sd), i_state) / psi_ref_coef(i_I, i_state) - enddo - - - ! |l> = Exc(k -> alpha) |I> - call get_excitation(psi_non_ref(1,1,idx_alpha(k_sd)),tq(1,1,i_alpha),exc,degree,phase,Nint) - call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) - do k=1,N_int - tmp_det(k,1) = psi_ref(k,1,i_I) - tmp_det(k,2) = psi_ref(k,2,i_I) - enddo - logical :: ok - call apply_excitation(psi_ref(1,1,i_I), exc, tmp_det, ok, Nint) - if(.not. ok) cycle - - ! - do i_state=1,N_states - dka(i_state) = 0.d0 - enddo - do l_sd=k_sd+1,idx_alpha(0) - call get_excitation_degree(tmp_det,psi_non_ref(1,1,idx_alpha(l_sd)),degree,Nint) - if (degree == 0) then - -! loop = .True. -! do i_state=1,N_states -! if (lambda_mrcc(i_state,idx_alpha(l_sd)) /= 0.d0) then -! loop = .False. -! exit -! endif -! enddo - loop = .false. - if (.not.loop) then - call get_excitation(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(l_sd)),exc,degree,phase2,Nint) - hIl = hij_mrcc(idx_alpha(l_sd),i_I) -! call i_h_j(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hIl) - do i_state=1,N_states - dka(i_state) = dij(i_I, idx_alpha(l_sd), i_state) * phase * phase2 - !dka(i_state) = get_dij(psi_ref(1,1,i_I), psi_non_ref(1,1,idx_alpha(l_sd)), N_int) * phase * phase2 !hIl * lambda_mrcc(i_state,idx_alpha(l_sd)) * phase * phase2 - !dka(i_state) = psi_non_ref_coef(idx_alpha(l_sd), i_state) / psi_ref_coef(i_I, i_state) * phase * phase2 - enddo - endif - - exit - endif - enddo - do i_state=1,N_states - dIa(i_state) = dIa(i_state) + dIk(i_state) * dka(i_state) - enddo - enddo - - do i_state=1,N_states - ci_inv(i_state) = psi_ref_coef_inv(i_I,i_state) - enddo - do l_sd=1,idx_alpha(0) - k_sd = idx_alpha(l_sd) - hla = hij_cache(k_sd) - sla = sij_cache(k_sd) -! call i_h_j(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hla) - do i_state=1,N_states - dIa_hla(i_state,k_sd) = dIa(i_state) * hla - dIa_sla(i_state,k_sd) = dIa(i_state) * sla - enddo - enddo - call omp_set_lock( psi_ref_lock(i_I) ) - do i_state=1,N_states - if(dabs(psi_ref_coef(i_I,i_state)).ge.1.d-3)then - do l_sd=1,idx_alpha(0) - k_sd = idx_alpha(l_sd) - delta_ij_(i_state,k_sd,i_I) = delta_ij_(i_state,k_sd,i_I) + dIa_hla(i_state,k_sd) - delta_ii_(i_state,i_I) = delta_ii_(i_state,i_I) - dIa_hla(i_state,k_sd) * ci_inv(i_state) * psi_non_ref_coef_transp(i_state,k_sd) - delta_ij_s2_(i_state,k_sd,i_I) = delta_ij_s2_(i_state,k_sd,i_I) + dIa_sla(i_state,k_sd) - delta_ii_s2_(i_state,i_I) = delta_ii_s2_(i_state,i_I) - dIa_sla(i_state,k_sd) * ci_inv(i_state) * psi_non_ref_coef_transp(i_state,k_sd) - enddo - else - delta_ii_(i_state,i_I) = 0.d0 - do l_sd=1,idx_alpha(0) - k_sd = idx_alpha(l_sd) - delta_ij_(i_state,k_sd,i_I) = delta_ij_(i_state,k_sd,i_I) + 0.5d0*dIa_hla(i_state,k_sd) - delta_ij_s2_(i_state,k_sd,i_I) = delta_ij_s2_(i_state,k_sd,i_I) + 0.5d0*dIa_sla(i_state,k_sd) - enddo - endif - enddo - call omp_unset_lock( psi_ref_lock(i_I) ) - enddo - enddo - deallocate (dIa_hla,dIa_sla,hij_cache,sij_cache) - deallocate(miniList, idx_miniList) -end - - - - - BEGIN_PROVIDER [ double precision, delta_ij, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii, (N_states, N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ij_s2, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii_s2, (N_states, N_det_ref) ] - use bitmasks - implicit none - integer :: i, j, i_state - - !mrmode : 1=mrcepa0, 2=mrsc2 add, 3=mrcc - - if(mrmode == 3) then - do i = 1, N_det_ref - do i_state = 1, N_states - delta_ii(i_state,i)= delta_ii_mrcc(i_state,i) - delta_ii_s2(i_state,i)= delta_ii_s2_mrcc(i_state,i) - enddo - do j = 1, N_det_non_ref - do i_state = 1, N_states - delta_ij(i_state,j,i) = delta_ij_mrcc(i_state,j,i) - delta_ij_s2(i_state,j,i) = delta_ij_s2_mrcc(i_state,j,i) - enddo - end do - end do - - ! =-=-= BEGIN STATE AVERAGE -! do i = 1, N_det_ref -! delta_ii(:,i)= delta_ii_mrcc(1,i) -! delta_ii_s2(:,i)= delta_ii_s2_mrcc(1,i) -! do i_state = 2, N_states -! delta_ii(:,i) += delta_ii_mrcc(i_state,i) -! delta_ii_s2(:,i) += delta_ii_s2_mrcc(i_state,i) -! enddo -! do j = 1, N_det_non_ref -! delta_ij(:,j,i) = delta_ij_mrcc(1,j,i) -! delta_ij_s2(:,j,i) = delta_ij_s2_mrcc(1,j,i) -! do i_state = 2, N_states -! delta_ij(:,j,i) += delta_ij_mrcc(i_state,j,i) -! delta_ij_s2(:,j,i) += delta_ij_s2_mrcc(i_state,j,i) -! enddo -! end do -! end do -! delta_ij = delta_ij * (1.d0/dble(N_states)) -! delta_ii = delta_ii * (1.d0/dble(N_states)) - ! =-=-= END STATE AVERAGE - ! - ! do i = 1, N_det_ref - ! delta_ii(i_state,i)= delta_mrcepa0_ii(i,i_state) - delta_sub_ii(i,i_state) - ! do j = 1, N_det_non_ref - ! delta_ij(i_state,j,i) = delta_mrcepa0_ij(i,j,i_state) - delta_sub_ij(i,j,i_state) - ! end do - ! end do - else if(mrmode == 2) then - do i = 1, N_det_ref - do i_state = 1, N_states - delta_ii(i_state,i)= delta_ii_old(i_state,i) - delta_ii_s2(i_state,i)= delta_ii_s2_old(i_state,i) - enddo - do j = 1, N_det_non_ref - do i_state = 1, N_states - delta_ij(i_state,j,i) = delta_ij_old(i_state,j,i) - delta_ij_s2(i_state,j,i) = delta_ij_s2_old(i_state,j,i) - enddo - end do - end do - else if(mrmode == 1) then - do i = 1, N_det_ref - do i_state = 1, N_states - delta_ii(i_state,i)= delta_mrcepa0_ii(i,i_state) - delta_ii_s2(i_state,i)= delta_mrcepa0_ii_s2(i,i_state) - enddo - do j = 1, N_det_non_ref - do i_state = 1, N_states - delta_ij(i_state,j,i) = delta_mrcepa0_ij(i,j,i_state) - delta_ij_s2(i_state,j,i) = delta_mrcepa0_ij_s2(i,j,i_state) - enddo - end do - end do - else - stop "invalid mrmode" - end if -END_PROVIDER - - -BEGIN_PROVIDER [ integer, HP, (2,N_det_non_ref) ] - integer :: i - do i=1,N_det_non_ref - call getHP(psi_non_ref(1,1,i), HP(1,i), HP(2,i), N_int) - end do -END_PROVIDER - - BEGIN_PROVIDER [ integer, cepa0_shortcut, (0:N_det_non_ref+1) ] -&BEGIN_PROVIDER [ integer, det_cepa0_idx, (N_det_non_ref) ] -&BEGIN_PROVIDER [ integer(bit_kind), det_cepa0_active, (N_int,2,N_det_non_ref) ] -&BEGIN_PROVIDER [ integer(bit_kind), det_ref_active, (N_int,2,N_det_ref) ] -&BEGIN_PROVIDER [ integer(bit_kind), active_sorb, (N_int,2) ] -&BEGIN_PROVIDER [ integer(bit_kind), det_cepa0, (N_int,2,N_det_non_ref) ] -&BEGIN_PROVIDER [ integer, nlink, (N_det_ref) ] -&BEGIN_PROVIDER [ integer, linked, (N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ integer, blokMwen, (N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, searchance, (N_det_ref) ] -&BEGIN_PROVIDER [ integer, child_num, (N_det_non_ref,N_det_ref) ] - - use bitmasks - implicit none - - integer(bit_kind),allocatable :: det_noactive(:,:,:) - integer, allocatable :: shortcut(:), idx(:) - integer(bit_kind) :: nonactive_sorb(N_int,2), det(N_int, 2) - integer i, II, j, k, n, ni, blok, degree - logical, external :: detEq - - allocate(det_noactive(N_int, 2, N_det_non_ref)) - allocate(idx(N_det_non_ref), shortcut(0:N_det_non_ref+1)) - print *, "pre start" - active_sorb(:,:) = 0_8 - nonactive_sorb(:,:) = not(0_8) - - if(N_det_ref > 1) then - do i=1, N_det_ref - do k=1, N_int - active_sorb(k,1) = ior(psi_ref(k,1,i), active_sorb(k,1)) - active_sorb(k,2) = ior(psi_ref(k,2,i), active_sorb(k,2)) - nonactive_sorb(k,1) = iand(psi_ref(k,1,i), nonactive_sorb(k,1)) - nonactive_sorb(k,2) = iand(psi_ref(k,2,i), nonactive_sorb(k,2)) - end do - end do - do k=1, N_int - active_sorb(k,1) = iand(active_sorb(k,1), not(nonactive_sorb(k,1))) - active_sorb(k,2) = iand(active_sorb(k,2), not(nonactive_sorb(k,2))) - end do - end if - - - do i=1, N_det_non_ref - do k=1, N_int - det_noactive(k,1,i) = iand(psi_non_ref(k,1,i), not(active_sorb(k,1))) - det_noactive(k,2,i) = iand(psi_non_ref(k,2,i), not(active_sorb(k,2))) - end do - end do - - call sort_dets_ab(det_noactive, det_cepa0_idx, cepa0_shortcut, N_det_non_ref, N_int) - - do i=1,N_det_non_ref - det_cepa0(:,:,i) = psi_non_ref(:,:,det_cepa0_idx(i)) - end do - - cepa0_shortcut(0) = 1 - cepa0_shortcut(1) = 1 - do i=2,N_det_non_ref - if(.not. detEq(det_noactive(1,1,i), det_noactive(1,1,i-1), N_int)) then - cepa0_shortcut(0) += 1 - cepa0_shortcut(cepa0_shortcut(0)) = i - end if - end do - cepa0_shortcut(cepa0_shortcut(0)+1) = N_det_non_ref+1 - - if(.true.) then - do i=1,cepa0_shortcut(0) - n = cepa0_shortcut(i+1) - cepa0_shortcut(i) - call sort_dets_ab(det_cepa0(1,1,cepa0_shortcut(i)), idx, shortcut, n, N_int) - do k=1,n - idx(k) = det_cepa0_idx(cepa0_shortcut(i)-1+idx(k)) - end do - det_cepa0_idx(cepa0_shortcut(i):cepa0_shortcut(i)+n-1) = idx(:n) - end do - end if - - - do i=1,N_det_ref - do k=1, N_int - det_ref_active(k,1,i) = iand(psi_ref(k,1,i), active_sorb(k,1)) - det_ref_active(k,2,i) = iand(psi_ref(k,2,i), active_sorb(k,2)) - end do - end do - - do i=1,N_det_non_ref - do k=1, N_int - det_cepa0_active(k,1,i) = iand(psi_non_ref(k,1,det_cepa0_idx(i)), active_sorb(k,1)) - det_cepa0_active(k,2,i) = iand(psi_non_ref(k,2,det_cepa0_idx(i)), active_sorb(k,2)) - end do - end do - - do i=1,N_det_non_ref - if(.not. detEq(psi_non_ref(1,1,det_cepa0_idx(i)), det_cepa0(1,1,i),N_int)) stop "STOOOP" - end do - - searchance = 0d0 - child_num = 0 - do J = 1, N_det_ref - nlink(J) = 0 - do blok=1,cepa0_shortcut(0) - do k=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1 - call get_excitation_degree(psi_ref(1,1,J),det_cepa0(1,1,k),degree,N_int) - if(degree <= 2) then - nlink(J) += 1 - linked(nlink(J),J) = k - child_num(k, J) = nlink(J) - blokMwen(nlink(J),J) = blok - searchance(J) += 1d0 + log(dfloat(cepa0_shortcut(blok+1) - cepa0_shortcut(blok))) - end if - end do - end do - end do - print *, "pre done" -END_PROVIDER - - -! BEGIN_PROVIDER [ double precision, delta_cas, (N_det_ref, N_det_ref, N_states) ] -! use bitmasks -! implicit none -! integer :: i,j,k -! double precision :: Hjk, Hki, Hij, pre(N_det_ref), wall -! integer :: i_state, degree, npre, ipre(N_det_ref), npres(N_det_ref) -! -! ! provide lambda_mrcc -! npres = 0 -! delta_cas = 0d0 -! call wall_time(wall) -! print *, "dcas ", wall -! do i_state = 1, N_states -! !!$OMP PARALLEL DO default(none) schedule(dynamic) private(pre,npre,ipre,j,k,Hjk,Hki,degree) shared(npres,lambda_mrcc,i_state, N_det_non_ref,psi_ref, psi_non_ref,N_int,delta_cas,N_det_ref) -! do k=1,N_det_non_ref -! if(lambda_mrcc(i_state, k) == 0d0) cycle -! npre = 0 -! do i=1,N_det_ref -! call i_h_j(psi_non_ref(1,1,k),psi_ref(1,1,i), N_int,Hki) -! if(Hki /= 0d0) then -! !!$OMP ATOMIC -! npres(i) += 1 -! npre += 1 -! ipre(npre) = i -! pre(npre) = Hki -! end if -! end do -! -! -! do i=1,npre -! do j=1,i -! !!$OMP ATOMIC -! delta_cas(ipre(i),ipre(j),i_state) += pre(i) * pre(j) * lambda_mrcc(i_state, k) -! end do -! end do -! end do -! !!$OMP END PARALLEL DO -! npre=0 -! do i=1,N_det_ref -! npre += npres(i) -! end do -! !stop -! do i=1,N_det_ref -! do j=1,i -! delta_cas(j,i,i_state) = delta_cas(i,j,i_state) -! end do -! end do -! end do -! -! call wall_time(wall) -! print *, "dcas", wall -! ! stop -! END_PROVIDER - - - BEGIN_PROVIDER [ double precision, delta_cas, (N_det_ref, N_det_ref, N_states) ] -&BEGIN_PROVIDER [ double precision, delta_cas_s2, (N_det_ref, N_det_ref, N_states) ] - use bitmasks - implicit none - integer :: i,j,k - double precision :: Sjk,Hjk, Hki, Hij - !double precision, external :: get_dij - integer i_state, degree - - provide lambda_mrcc dIj - do i_state = 1, N_states - !$OMP PARALLEL DO default(none) schedule(dynamic) private(j,k,Sjk,Hjk,Hki,degree) shared(lambda_mrcc,i_state, N_det_non_ref,psi_ref, psi_non_ref,N_int,delta_cas,delta_cas_s2,N_det_ref,dij) - do i=1,N_det_ref - do j=1,i - call get_excitation_degree(psi_ref(1,1,i), psi_ref(1,1,j), degree, N_int) - delta_cas(i,j,i_state) = 0d0 - delta_cas_s2(i,j,i_state) = 0d0 - do k=1,N_det_non_ref - - call i_h_j(psi_ref(1,1,j), psi_non_ref(1,1,k),N_int,Hjk) - call get_s2(psi_ref(1,1,j), psi_non_ref(1,1,k),N_int,Sjk) - - delta_cas(i,j,i_state) += Hjk * dij(i, k, i_state) ! * Hki * lambda_mrcc(i_state, k) - delta_cas_s2(i,j,i_state) += Sjk * dij(i, k, i_state) ! * Ski * lambda_mrcc(i_state, k) - end do - delta_cas(j,i,i_state) = delta_cas(i,j,i_state) - delta_cas_s2(j,i,i_state) = delta_cas_s2(i,j,i_state) - end do - end do - !$OMP END PARALLEL DO - end do - END_PROVIDER - - - - -logical function isInCassd(a,Nint) - use bitmasks - implicit none - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: a(Nint,2) - integer(bit_kind) :: inac, virt - integer :: ni, i, deg - - - isInCassd = .false. - - deg = 0 - do i=1,2 - do ni=1,Nint - virt = iand(not(HF_bitmask(ni,i)), not(active_sorb(ni,i))) - deg += popcnt(iand(virt, a(ni,i))) - if(deg > 2) return - end do - end do - - deg = 0 - do i=1,2 - do ni=1,Nint - inac = iand(HF_bitmask(ni,i), not(active_sorb(ni,i))) - deg += popcnt(xor(iand(inac,a(ni,i)), inac)) - if(deg > 2) return - end do - end do - isInCassd = .true. -end function - - -subroutine getHP(a,h,p,Nint) - use bitmasks - implicit none - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: a(Nint,2) - integer, intent(out) :: h, p - integer(bit_kind) :: inac, virt - integer :: ni, i, deg - - - !isInCassd = .false. - h = 0 - p = 0 - - deg = 0 - lp : do i=1,2 - do ni=1,Nint - virt = iand(not(HF_bitmask(ni,i)), not(active_sorb(ni,i))) - deg += popcnt(iand(virt, a(ni,i))) - if(deg > 2) exit lp - end do - end do lp - p = deg - - deg = 0 - lh : do i=1,2 - do ni=1,Nint - inac = iand(HF_bitmask(ni,i), not(active_sorb(ni,i))) - deg += popcnt(xor(iand(inac,a(ni,i)), inac)) - if(deg > 2) exit lh - end do - end do lh - h = deg - !isInCassd = .true. -end function - - - BEGIN_PROVIDER [ double precision, delta_mrcepa0_ij, (N_det_ref,N_det_non_ref,N_states) ] -&BEGIN_PROVIDER [ double precision, delta_mrcepa0_ii, (N_det_ref,N_states) ] -&BEGIN_PROVIDER [ double precision, delta_mrcepa0_ij_s2, (N_det_ref,N_det_non_ref,N_states) ] -&BEGIN_PROVIDER [ double precision, delta_mrcepa0_ii_s2, (N_det_ref,N_states) ] - use bitmasks - implicit none - - integer :: i_state, i, i_I, J, k, degree, degree2, m, l, deg, ni - integer :: p1,p2,h1,h2,s1,s2, p1_,p2_,h1_,h2_,s1_,s2_, sortRefIdx(N_det_ref) - logical :: ok - double precision :: phase_iI, phase_Ik, phase_Jl, phase_IJ, phase_al, diI, hIi, hJi, delta_JI, dkI(1), HkI, ci_inv(1), dia_hla(1) - double precision :: contrib, contrib2, contrib_s2, contrib2_s2, HIIi, HJk, wall - integer, dimension(0:2,2,2) :: exc_iI, exc_Ik, exc_IJ - integer(bit_kind) :: det_tmp(N_int, 2), made_hole(N_int,2), made_particle(N_int,2), myActive(N_int,2) - integer(bit_kind),allocatable :: sortRef(:,:,:) - integer, allocatable :: idx_sorted_bit(:) - integer, external :: get_index_in_psi_det_sorted_bit, searchDet - logical, external :: is_in_wavefunction, detEq - !double precision, external :: get_dij - integer :: II, blok - integer*8, save :: notf = 0 - - call wall_time(wall) - allocate(idx_sorted_bit(N_det), sortRef(N_int,2,N_det_ref)) - - sortRef(:,:,:) = det_ref_active(:,:,:) - call sort_det(sortRef, sortRefIdx, N_det_ref, N_int) - - idx_sorted_bit(:) = -1 - do i=1,N_det_non_ref - idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i - enddo - - ! To provide everything - contrib = dij(1, 1, 1) - - delta_mrcepa0_ii(:,:) = 0d0 - delta_mrcepa0_ij(:,:,:) = 0d0 - delta_mrcepa0_ii_s2(:,:) = 0d0 - delta_mrcepa0_ij_s2(:,:,:) = 0d0 - - do i_state = 1, N_states - !$OMP PARALLEL DO default(none) schedule(dynamic) shared(delta_mrcepa0_ij, delta_mrcepa0_ii, delta_mrcepa0_ij_s2, delta_mrcepa0_ii_s2) & - !$OMP private(m,i,II,J,k,degree,myActive,made_hole,made_particle,hjk,contrib,contrib2,contrib_s2,contrib2_s2) & - !$OMP shared(active_sorb, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef, cepa0_shortcut, det_cepa0_active) & - !$OMP shared(N_det_ref, N_det_non_ref,N_int,det_cepa0_idx,lambda_mrcc,det_ref_active, delta_cas, delta_cas_s2) & - !$OMP shared(notf,i_state, sortRef, sortRefIdx, dij) - do blok=1,cepa0_shortcut(0) - do i=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1 - do II=1,N_det_ref - call get_excitation_degree(psi_ref(1,1,II),psi_non_ref(1,1,det_cepa0_idx(i)),degree,N_int) - if (degree > 2 ) cycle - - do ni=1,N_int - made_hole(ni,1) = iand(det_ref_active(ni,1,II), xor(det_cepa0_active(ni,1,i), det_ref_active(ni,1,II))) - made_hole(ni,2) = iand(det_ref_active(ni,2,II), xor(det_cepa0_active(ni,2,i), det_ref_active(ni,2,II))) - - made_particle(ni,1) = iand(det_cepa0_active(ni,1,i), xor(det_cepa0_active(ni,1,i), det_ref_active(ni,1,II))) - made_particle(ni,2) = iand(det_cepa0_active(ni,2,i), xor(det_cepa0_active(ni,2,i), det_ref_active(ni,2,II))) - end do - - - kloop: do k=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1 !i - !if(lambda_mrcc(i_state, det_cepa0_idx(k)) == 0d0) cycle - - do ni=1,N_int - if(iand(made_hole(ni,1), det_cepa0_active(ni,1,k)) /= 0) cycle kloop - if(iand(made_particle(ni,1), det_cepa0_active(ni,1,k)) /= made_particle(ni,1)) cycle kloop - if(iand(made_hole(ni,2), det_cepa0_active(ni,2,k)) /= 0) cycle kloop - if(iand(made_particle(ni,2), det_cepa0_active(ni,2,k)) /= made_particle(ni,2)) cycle kloop - end do - do ni=1,N_int - myActive(ni,1) = xor(det_cepa0_active(ni,1,k), made_hole(ni,1)) - myActive(ni,1) = xor(myActive(ni,1), made_particle(ni,1)) - myActive(ni,2) = xor(det_cepa0_active(ni,2,k), made_hole(ni,2)) - myActive(ni,2) = xor(myActive(ni,2), made_particle(ni,2)) - end do - - j = searchDet(sortRef, myActive, N_det_ref, N_int) - if(j == -1) then - cycle - end if - j = sortRefIdx(j) - !$OMP ATOMIC - notf = notf+1 - -! call i_h_j(psi_non_ref(1,1,det_cepa0_idx(k)),psi_ref(1,1,J),N_int,HJk) - contrib = delta_cas(II, J, i_state) * dij(J, det_cepa0_idx(k), i_state) - contrib_s2 = delta_cas_s2(II, J, i_state) * dij(J, det_cepa0_idx(k), i_state) - - if(dabs(psi_ref_coef(J,i_state)).ge.1.d-3) then - contrib2 = contrib / psi_ref_coef(J, i_state) * psi_non_ref_coef(det_cepa0_idx(i),i_state) - contrib2_s2 = contrib_s2 / psi_ref_coef(J, i_state) * psi_non_ref_coef(det_cepa0_idx(i),i_state) - !$OMP ATOMIC - delta_mrcepa0_ii(J,i_state) -= contrib2 - delta_mrcepa0_ii_s2(J,i_state) -= contrib2_s2 - else - contrib = contrib * 0.5d0 - contrib_s2 = contrib_s2 * 0.5d0 - end if - !$OMP ATOMIC - delta_mrcepa0_ij(J, det_cepa0_idx(i), i_state) += contrib - delta_mrcepa0_ij_s2(J, det_cepa0_idx(i), i_state) += contrib_s2 - - end do kloop - end do - end do - end do - !$OMP END PARALLEL DO - end do - deallocate(idx_sorted_bit) - call wall_time(wall) - print *, "cepa0", wall, notf - -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, delta_sub_ij, (N_det_ref,N_det_non_ref,N_states) ] -&BEGIN_PROVIDER [ double precision, delta_sub_ii, (N_det_ref, N_states) ] - use bitmasks - implicit none - - integer :: i_state, i, i_I, J, k, degree, degree2, l, deg, ni - integer :: p1,p2,h1,h2,s1,s2, p1_,p2_,h1_,h2_,s1_,s2_ - logical :: ok - double precision :: phase_Ji, phase_Ik, phase_Ii - double precision :: contrib, contrib2, delta_IJk, HJk, HIk, HIl - integer, dimension(0:2,2,2) :: exc_Ik, exc_Ji, exc_Ii - integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2) - integer, allocatable :: idx_sorted_bit(:) - integer, external :: get_index_in_psi_det_sorted_bit - - integer :: II, blok - - provide delta_cas lambda_mrcc - allocate(idx_sorted_bit(N_det)) - idx_sorted_bit(:) = -1 - do i=1,N_det_non_ref - idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i - enddo - - do i_state = 1, N_states - delta_sub_ij(:,:,:) = 0d0 - delta_sub_ii(:,:) = 0d0 - - provide mo_bielec_integrals_in_map - - - !$OMP PARALLEL DO default(none) schedule(dynamic,10) shared(delta_sub_ij, delta_sub_ii) & - !$OMP private(i, J, k, degree, degree2, l, deg, ni) & - !$OMP private(p1,p2,h1,h2,s1,s2, p1_,p2_,h1_,h2_,s1_,s2_) & - !$OMP private(ok, phase_Ji, phase_Ik, phase_Ii, contrib2, contrib, delta_IJk, HJk, HIk, HIl, exc_Ik, exc_Ji, exc_Ii) & - !$OMP private(det_tmp, det_tmp2, II, blok) & - !$OMP shared(idx_sorted_bit, N_det_non_ref, N_det_ref, N_int, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef) & - !$OMP shared(i_state,lambda_mrcc, hf_bitmask, active_sorb) - do i=1,N_det_non_ref - if(mod(i,1000) == 0) print *, i, "/", N_det_non_ref - do J=1,N_det_ref - call get_excitation(psi_ref(1,1,J),psi_non_ref(1,1,i),exc_Ji,degree,phase_Ji,N_int) - if(degree == -1) cycle - - - do II=1,N_det_ref - call apply_excitation(psi_ref(1,1,II),exc_Ji,det_tmp,ok,N_int) - - if(.not. ok) cycle - l = get_index_in_psi_det_sorted_bit(det_tmp, N_int) - if(l == 0) cycle - l = idx_sorted_bit(l) - - call i_h_j(psi_ref(1,1,II), det_tmp, N_int, HIl) - - do k=1,N_det_non_ref - if(lambda_mrcc(i_state, k) == 0d0) cycle - call get_excitation(psi_ref(1,1,II),psi_non_ref(1,1,k),exc_Ik,degree2,phase_Ik,N_int) - - det_tmp(:,:) = 0_bit_kind - det_tmp2(:,:) = 0_bit_kind - - ok = .true. - do ni=1,N_int - det_tmp(ni,1) = iand(xor(HF_bitmask(ni,1), psi_non_ref(ni,1,k)), not(active_sorb(ni,1))) - det_tmp(ni,2) = iand(xor(HF_bitmask(ni,1), psi_non_ref(ni,1,i)), not(active_sorb(ni,1))) - ok = ok .and. (popcnt(det_tmp(ni,1)) + popcnt(det_tmp(ni,2)) == popcnt(xor(det_tmp(ni,1), det_tmp(ni,2)))) - - det_tmp(ni,1) = iand(xor(HF_bitmask(ni,2), psi_non_ref(ni,2,k)), not(active_sorb(ni,2))) - det_tmp(ni,2) = iand(xor(HF_bitmask(ni,2), psi_non_ref(ni,2,i)), not(active_sorb(ni,2))) - ok = ok .and. (popcnt(det_tmp(ni,1)) + popcnt(det_tmp(ni,2)) == popcnt(xor(det_tmp(ni,1), det_tmp(ni,2)))) - end do - - if(ok) cycle - - - call i_h_j(psi_ref(1,1,J), psi_non_ref(1,1,k), N_int, HJk) - call i_h_j(psi_ref(1,1,II), psi_non_ref(1,1,k), N_int, HIk) - if(HJk == 0) cycle - !assert HIk == 0 - delta_IJk = HJk * HIk * lambda_mrcc(i_state, k) - call apply_excitation(psi_non_ref(1,1,i),exc_Ik,det_tmp,ok,N_int) - if(ok) cycle - contrib = delta_IJk * HIl * lambda_mrcc(i_state,l) - if(dabs(psi_ref_coef(II,i_state)).ge.1.d-3) then - contrib2 = contrib / psi_ref_coef(II, i_state) * psi_non_ref_coef(l,i_state) - !$OMP ATOMIC - delta_sub_ii(II,i_state) -= contrib2 - else - contrib = contrib * 0.5d0 - endif - !$OMP ATOMIC - delta_sub_ij(II, i, i_state) += contrib - end do - end do - end do - end do - !$OMP END PARALLEL DO - end do - deallocate(idx_sorted_bit) -END_PROVIDER - - -subroutine set_det_bit(det, p, s) - implicit none - integer(bit_kind),intent(inout) :: det(N_int, 2) - integer, intent(in) :: p, s - integer :: ni, pos - - ni = (p-1)/bit_kind_size + 1 - pos = mod(p-1, bit_kind_size) - det(ni,s) = ibset(det(ni,s), pos) -end subroutine - - - BEGIN_PROVIDER [ double precision, h_cache, (N_det_ref,N_det_non_ref) ] -&BEGIN_PROVIDER [ double precision, s2_cache, (N_det_ref,N_det_non_ref) ] - implicit none - integer :: i,j - do i=1,N_det_ref - do j=1,N_det_non_ref - call i_h_j(psi_ref(1,1,i), psi_non_ref(1,1,j), N_int, h_cache(i,j)) - call get_s2(psi_ref(1,1,i), psi_non_ref(1,1,j), N_int, s2_cache(i,j)) - end do - end do -END_PROVIDER - - - -subroutine filter_tq(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_miniList) - - use bitmasks - implicit none - - integer, intent(in) :: i_generator,n_selected, Nint - - integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) - integer :: i,j,k,m - logical :: is_in_wavefunction - integer,allocatable :: degree(:) - integer,allocatable :: idx(:) - logical :: good - - integer(bit_kind), intent(inout) :: tq(Nint,2,n_selected) !! intent(out) - integer, intent(out) :: N_tq - - integer :: nt,ni - logical, external :: is_connected_to, is_generable - - integer(bit_kind),intent(in) :: miniList(Nint,2,N_det_generators) - integer,intent(in) :: N_miniList - - allocate(degree(psi_det_size)) - allocate(idx(0:psi_det_size)) - N_tq = 0 - - i_loop : do i=1,N_selected - do k=1, N_minilist - if(is_generable(miniList(1,1,k), det_buffer(1,1,i), Nint)) cycle i_loop - end do - - ! Select determinants that are triple or quadruple excitations - ! from the ref - good = .True. - call get_excitation_degree_vector(psi_ref,det_buffer(1,1,i),degree,Nint,N_det_ref,idx) - !good=(idx(0) == 0) tant que degree > 2 pas retourné par get_excitation_degree_vector - do k=1,idx(0) - if (degree(k) < 3) then - good = .False. - exit - endif - enddo - if (good) then - if (.not. is_in_wavefunction(det_buffer(1,1,i),Nint)) then - N_tq += 1 - do k=1,N_int - tq(k,1,N_tq) = det_buffer(k,1,i) - tq(k,2,N_tq) = det_buffer(k,2,i) - enddo - endif - endif - enddo i_loop -end - - -subroutine filter_tq_micro(i_generator,n_selected,det_buffer,Nint,tq,N_tq,microlist,ptr_microlist,N_microlist,key_mask) - - use bitmasks - implicit none - - integer, intent(in) :: i_generator,n_selected, Nint - - integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) - integer :: i,j,k,m - logical :: is_in_wavefunction - integer,allocatable :: degree(:) - integer,allocatable :: idx(:) - logical :: good - - integer(bit_kind), intent(inout) :: tq(Nint,2,n_selected) !! intent(out) - integer, intent(out) :: N_tq - - integer :: nt,ni - logical, external :: is_connected_to, is_generable - - integer(bit_kind),intent(in) :: microlist(Nint,2,*) - integer,intent(in) :: ptr_microlist(0:*) - integer,intent(in) :: N_microlist(0:*) - integer(bit_kind),intent(in) :: key_mask(Nint, 2) - - integer :: mobiles(2), smallerlist - - - allocate(degree(psi_det_size)) - allocate(idx(0:psi_det_size)) - N_tq = 0 - - i_loop : do i=1,N_selected - call getMobiles(det_buffer(1,1,i), key_mask, mobiles, Nint) - if(N_microlist(mobiles(1)) < N_microlist(mobiles(2))) then - smallerlist = mobiles(1) - else - smallerlist = mobiles(2) - end if - - if(N_microlist(smallerlist) > 0) then - do k=ptr_microlist(smallerlist), ptr_microlist(smallerlist)+N_microlist(smallerlist)-1 - if(is_generable(microlist(1,1,k), det_buffer(1,1,i), Nint)) cycle i_loop - end do - end if - - if(N_microlist(0) > 0) then - do k=1, N_microlist(0) - if(is_generable(microlist(1,1,k), det_buffer(1,1,i), Nint)) cycle i_loop - end do - end if - - ! Select determinants that are triple or quadruple excitations - ! from the ref - good = .True. - call get_excitation_degree_vector(psi_ref,det_buffer(1,1,i),degree,Nint,N_det_ref,idx) - !good=(idx(0) == 0) tant que degree > 2 pas retourné par get_excitation_degree_vector - do k=1,idx(0) - if (degree(k) < 3) then - good = .False. - exit - endif - enddo - if (good) then - if (.not. is_in_wavefunction(det_buffer(1,1,i),Nint)) then - N_tq += 1 - do k=1,N_int - tq(k,1,N_tq) = det_buffer(k,1,i) - tq(k,2,N_tq) = det_buffer(k,2,i) - enddo - endif - endif - enddo i_loop -end - - - - diff --git a/plugins/mrcc_selected/dressing_slave.irp.f b/plugins/mrcc_selected/dressing_slave.irp.f deleted file mode 100644 index c2e5dd55..00000000 --- a/plugins/mrcc_selected/dressing_slave.irp.f +++ /dev/null @@ -1,601 +0,0 @@ -subroutine mrsc2_dressing_slave_tcp(i) - implicit none - integer, intent(in) :: i - BEGIN_DOC -! Task for parallel MR-SC2 - END_DOC - call mrsc2_dressing_slave(0,i) -end - - -subroutine mrsc2_dressing_slave_inproc(i) - implicit none - integer, intent(in) :: i - BEGIN_DOC -! Task for parallel MR-SC2 - END_DOC - call mrsc2_dressing_slave(1,i) -end - -subroutine mrsc2_dressing_slave(thread,iproc) - use f77_zmq - - implicit none - BEGIN_DOC -! Task for parallel MR-SC2 - END_DOC - integer, intent(in) :: thread, iproc -! integer :: j,l - integer :: rc - - integer :: worker_id, task_id - character*(512) :: task - - integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket - integer(ZMQ_PTR) :: zmq_to_qp_run_socket - - integer(ZMQ_PTR), external :: new_zmq_push_socket - integer(ZMQ_PTR) :: zmq_socket_push - - double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:) - - - - integer :: i_state, i, i_I, J, k, k2, k1, kk, ll, degree, degree2, m, l, deg, ni, m2 - integer :: n(2) - integer :: p1,p2,h1,h2,s1,s2, blok, I_s, J_s, kn - logical :: ok - double precision :: phase_iI, phase_Ik, phase_Jl, phase_Ji, phase_al - double precision :: diI, hIi, hJi, delta_JI, dkI, HkI, ci_inv(N_states), cj_inv(N_states) - double precision :: contrib, contrib_s2, wall, iwall - double precision, allocatable :: dleat(:,:,:), dleat_s2(:,:,:) - integer, dimension(0:2,2,2) :: exc_iI, exc_Ik, exc_IJ - integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2), inac, virt - integer, external :: get_index_in_psi_det_sorted_bit, searchDet, detCmp - logical, external :: is_in_wavefunction, isInCassd, detEq - integer,allocatable :: komon(:) - logical :: komoned - !double precision, external :: get_dij - - zmq_to_qp_run_socket = new_zmq_to_qp_run_socket() - zmq_socket_push = new_zmq_push_socket(thread) - - call connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread) - - allocate (dleat(N_states, N_det_non_ref, 2), delta(N_states,0:N_det_non_ref, 2)) - allocate (dleat_s2(N_states, N_det_non_ref, 2), delta_s2(N_states,0:N_det_non_ref, 2)) - allocate(komon(0:N_det_non_ref)) - - do - call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task) - if (task_id == 0) exit - read (task,*) i_I, J, k1, k2 - do i_state=1, N_states - ci_inv(i_state) = 1.d0 / psi_ref_coef(i_I,i_state) - cj_inv(i_state) = 1.d0 / psi_ref_coef(J,i_state) - end do - n = 0 - delta(:,0,:) = 0d0 - delta(:,:nlink(J),1) = 0d0 - delta(:,:nlink(i_I),2) = 0d0 - delta_s2(:,0,:) = 0d0 - delta_s2(:,:nlink(J),1) = 0d0 - delta_s2(:,:nlink(i_I),2) = 0d0 - komon(0) = 0 - komoned = .false. - - - - - do kk = k1, k2 - k = det_cepa0_idx(linked(kk, i_I)) - blok = blokMwen(kk, i_I) - - call get_excitation(psi_ref(1,1,i_I),psi_non_ref(1,1,k),exc_Ik,degree,phase_Ik,N_int) - - if(J /= i_I) then - call apply_excitation(psi_ref(1,1,J),exc_Ik,det_tmp2,ok,N_int) - if(.not. ok) cycle - - l = searchDet(det_cepa0(1,1,cepa0_shortcut(blok)), det_tmp2, cepa0_shortcut(blok+1)-cepa0_shortcut(blok), N_int) - if(l == -1) cycle - ll = cepa0_shortcut(blok)-1+l - l = det_cepa0_idx(ll) - ll = child_num(ll, J) - else - l = k - ll = kk - end if - - - if(.not. komoned) then - m = 0 - m2 = 0 - - do while(m < nlink(i_I) .and. m2 < nlink(J)) - m += 1 - m2 += 1 - if(linked(m, i_I) < linked(m2, J)) then - m2 -= 1 - cycle - else if(linked(m, i_I) > linked(m2, J)) then - m -= 1 - cycle - end if - i = det_cepa0_idx(linked(m, i_I)) - - if(h_cache(J,i) == 0.d0) cycle - if(h_cache(i_I,i) == 0.d0) cycle - - komon(0) += 1 - kn = komon(0) - komon(kn) = i - - do i_state = 1,N_states - dkI = h_cache(J,i) * dij(i_I, i, i_state) - dleat(i_state, kn, 1) = dkI - dleat(i_state, kn, 2) = dkI - - dkI = s2_cache(J,i) * dij(i_I, i, i_state) - dleat_s2(i_state, kn, 1) = dkI - dleat_s2(i_state, kn, 2) = dkI - end do - - end do - - komoned = .true. - end if - - integer :: hpmin(2) - hpmin(1) = 2 - HP(1,k) - hpmin(2) = 2 - HP(2,k) - - do m = 1, komon(0) - - i = komon(m) - if(HP(1,i) <= hpmin(1) .and. HP(2,i) <= hpmin(2) ) then - cycle - end if - - call apply_excitation(psi_non_ref(1,1,i),exc_Ik,det_tmp,ok,N_int) - if(.not. ok) cycle - - do i_state = 1, N_states - contrib = dij(i_I, k, i_state) * dleat(i_state, m, 2) - contrib_s2 = dij(i_I, k, i_state) * dleat_s2(i_state, m, 2) - delta(i_state,ll,1) += contrib - delta_s2(i_state,ll,1) += contrib_s2 - if(dabs(psi_ref_coef(i_I,i_state)).ge.5.d-5) then - delta(i_state,0,1) -= contrib * ci_inv(i_state) * psi_non_ref_coef(l,i_state) - delta_s2(i_state,0,1) -= contrib_s2 * ci_inv(i_state) * psi_non_ref_coef(l,i_state) - endif - - if(I_i == J) cycle - contrib = dij(J, l, i_state) * dleat(i_state, m, 1) - contrib_s2 = dij(J, l, i_state) * dleat_s2(i_state, m, 1) - delta(i_state,kk,2) += contrib - delta_s2(i_state,kk,2) += contrib_s2 - if(dabs(psi_ref_coef(J,i_state)).ge.5.d-5) then - delta(i_state,0,2) -= contrib * cj_inv(i_state) * psi_non_ref_coef(k,i_state) - delta_s2(i_state,0,2) -= contrib_s2 * cj_inv(i_state) * psi_non_ref_coef(k,i_state) - end if - enddo !i_state - end do ! while - end do ! kk - - - call push_mrsc2_results(zmq_socket_push, I_i, J, delta, delta_s2, task_id) - call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id) - -! end if - - enddo - - deallocate(delta) - - call disconnect_from_taskserver(zmq_to_qp_run_socket,zmq_socket_push,worker_id) - call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket) - call end_zmq_push_socket(zmq_socket_push,thread) - -end - - -subroutine push_mrsc2_results(zmq_socket_push, I_i, J, delta, delta_s2, task_id) - use f77_zmq - implicit none - BEGIN_DOC -! Push integrals in the push socket - END_DOC - - integer, intent(in) :: i_I, J - integer(ZMQ_PTR), intent(in) :: zmq_socket_push - double precision,intent(inout) :: delta(N_states, 0:N_det_non_ref, 2) - double precision,intent(inout) :: delta_s2(N_states, 0:N_det_non_ref, 2) - integer, intent(in) :: task_id - integer :: rc , i_state, i, kk, li - integer,allocatable :: idx(:,:) - integer :: n(2) - logical :: ok - - allocate(idx(N_det_non_ref,2)) - rc = f77_zmq_send( zmq_socket_push, i_I, 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, i_I, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_send( zmq_socket_push, J, 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, J, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - - do kk=1,2 - n(kk)=0 - if(kk == 1) li = nlink(j) - if(kk == 2) li = nlink(i_I) - do i=1, li - ok = .false. - do i_state=1,N_states - if(delta(i_state, i, kk) /= 0d0) then - ok = .true. - exit - end if - end do - - if(ok) then - n(kk) += 1 -! idx(n,kk) = i - if(kk == 1) then - idx(n(1),1) = det_cepa0_idx(linked(i, J)) - else - idx(n(2),2) = det_cepa0_idx(linked(i, i_I)) - end if - - do i_state=1, N_states - delta(i_state, n(kk), kk) = delta(i_state, i, kk) - end do - end if - end do - - rc = f77_zmq_send( zmq_socket_push, n(kk), 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, n, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - if(n(kk) /= 0) then - rc = f77_zmq_send( zmq_socket_push, delta(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) ! delta(1,0,1) = delta_I delta(1,0,2) = delta_J - if (rc /= (n(kk)+1)*8*N_states) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_send( zmq_socket_push, delta_s2(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) ! delta_s2(1,0,1) = delta_I delta_s2(1,0,2) = delta_J - if (rc /= (n(kk)+1)*8*N_states) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta_s2, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_send( zmq_socket_push, idx(1,kk), n(kk)*4, ZMQ_SNDMORE) - if (rc /= n(kk)*4) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta, 8*n(kk), ZMQ_SNDMORE)' - stop 'error' - endif - end if - end do - - - rc = f77_zmq_send( zmq_socket_push, task_id, 4, 0) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_send( zmq_socket_push, task_id, 4, 0)' - stop 'error' - endif - -! ! Activate is zmq_socket_push is a REQ -! integer :: idummy -! rc = f77_zmq_recv( zmq_socket_push, idummy, 4, 0) -! if (rc /= 4) then -! print *, irp_here, 'f77_zmq_send( zmq_socket_push, idummy, 4, 0)' -! stop 'error' -! endif -end - - - -subroutine pull_mrsc2_results(zmq_socket_pull, I_i, J, n, idx, delta, delta_s2, task_id) - use f77_zmq - implicit none - BEGIN_DOC -! Push integrals in the push socket - END_DOC - - integer(ZMQ_PTR), intent(in) :: zmq_socket_pull - integer, intent(out) :: i_I, J, n(2) - double precision, intent(inout) :: delta(N_states, 0:N_det_non_ref, 2) - double precision, intent(inout) :: delta_s2(N_states, 0:N_det_non_ref, 2) - integer, intent(out) :: task_id - integer :: rc , i, kk - integer,intent(inout) :: idx(N_det_non_ref,2) - logical :: ok - - rc = f77_zmq_recv( zmq_socket_pull, i_I, 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, i_I, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_recv( zmq_socket_pull, J, 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, J, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - do kk = 1, 2 - rc = f77_zmq_recv( zmq_socket_pull, n(kk), 4, ZMQ_SNDMORE) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, n, 4, ZMQ_SNDMORE)' - stop 'error' - endif - - if(n(kk) /= 0) then - rc = f77_zmq_recv( zmq_socket_pull, delta(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) - if (rc /= (n(kk)+1)*8*N_states) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, delta, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_recv( zmq_socket_pull, delta_s2(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) - if (rc /= (n(kk)+1)*8*N_states) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, delta_s2, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)' - stop 'error' - endif - - rc = f77_zmq_recv( zmq_socket_pull, idx(1,kk), n(kk)*4, ZMQ_SNDMORE) - if (rc /= n(kk)*4) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, idx(1,kk), n(kk)*4, ZMQ_SNDMORE)' - stop 'error' - endif - end if - end do - - rc = f77_zmq_recv( zmq_socket_pull, task_id, 4, 0) - if (rc /= 4) then - print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, task_id, 4, 0)' - stop 'error' - endif - - -! ! Activate is zmq_socket_pull is a REP -! integer :: idummy -! rc = f77_zmq_send( zmq_socket_pull, idummy, 4, 0) -! if (rc /= 4) then -! print *, irp_here, 'f77_zmq_send( zmq_socket_pull, idummy, 4, 0)' -! stop 'error' -! endif -end - - - -subroutine mrsc2_dressing_collector(delta_ii_,delta_ij_,delta_ii_s2_,delta_ij_s2_) - use f77_zmq - implicit none - BEGIN_DOC -! Collects results from the AO integral calculation - END_DOC - - double precision,intent(inout) :: delta_ij_(N_states,N_det_non_ref,N_det_ref) - double precision,intent(inout) :: delta_ii_(N_states,N_det_ref) - double precision,intent(inout) :: delta_ij_s2_(N_states,N_det_non_ref,N_det_ref) - double precision,intent(inout) :: delta_ii_s2_(N_states,N_det_ref) - -! integer :: j,l - integer :: rc - - double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:) - - integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket - integer(ZMQ_PTR) :: zmq_to_qp_run_socket - - integer(ZMQ_PTR), external :: new_zmq_pull_socket - integer(ZMQ_PTR) :: zmq_socket_pull - - integer*8 :: control, accu - integer :: task_id, more - - integer :: I_i, J, l, i_state, n(2), kk - integer,allocatable :: idx(:,:) - - delta_ii_(:,:) = 0d0 - delta_ij_(:,:,:) = 0d0 - delta_ii_s2_(:,:) = 0d0 - delta_ij_s2_(:,:,:) = 0d0 - - zmq_to_qp_run_socket = new_zmq_to_qp_run_socket() - zmq_socket_pull = new_zmq_pull_socket() - - allocate ( delta(N_states,0:N_det_non_ref,2), delta_s2(N_states,0:N_det_non_ref,2) ) - - allocate(idx(N_det_non_ref,2)) - more = 1 - do while (more == 1) - - call pull_mrsc2_results(zmq_socket_pull, I_i, J, n, idx, delta, delta_s2, task_id) - - - do l=1, n(1) - do i_state=1,N_states - delta_ij_(i_state,idx(l,1),i_I) += delta(i_state,l,1) - delta_ij_s2_(i_state,idx(l,1),i_I) += delta_s2(i_state,l,1) - end do - end do - - do l=1, n(2) - do i_state=1,N_states - delta_ij_(i_state,idx(l,2),J) += delta(i_state,l,2) - delta_ij_s2_(i_state,idx(l,2),J) += delta_s2(i_state,l,2) - end do - end do - - - if(n(1) /= 0) then - do i_state=1,N_states - delta_ii_(i_state,i_I) += delta(i_state,0,1) - delta_ii_s2_(i_state,i_I) += delta_s2(i_state,0,1) - end do - end if - - if(n(2) /= 0) then - do i_state=1,N_states - delta_ii_(i_state,J) += delta(i_state,0,2) - delta_ii_s2_(i_state,J) += delta_s2(i_state,0,2) - end do - end if - - - if (task_id /= 0) then - call zmq_delete_task(zmq_to_qp_run_socket,zmq_socket_pull,task_id,more) - endif - - - enddo - deallocate( delta, delta_s2 ) - - call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket) - call end_zmq_pull_socket(zmq_socket_pull) - -end - - - - - BEGIN_PROVIDER [ double precision, delta_ij_old, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii_old, (N_states,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ij_s2_old, (N_states,N_det_non_ref,N_det_ref) ] -&BEGIN_PROVIDER [ double precision, delta_ii_s2_old, (N_states,N_det_ref) ] - implicit none - - integer :: i_state, i, i_I, J, k, kk, degree, degree2, m, l, deg, ni, m2 - integer :: p1,p2,h1,h2,s1,s2, blok, I_s, J_s, nex, nzer, ntot -! integer, allocatable :: linked(:,:), blokMwen(:, :), nlink(:) - logical :: ok - double precision :: phase_iI, phase_Ik, phase_Jl, phase_Ji, phase_al, diI, hIi, hJi, delta_JI, dkI(N_states), HkI, ci_inv(N_states), dia_hla(N_states) - double precision :: contrib, wall, iwall ! , searchance(N_det_ref) - integer, dimension(0:2,2,2) :: exc_iI, exc_Ik, exc_IJ - integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2), inac, virt - integer, external :: get_index_in_psi_det_sorted_bit, searchDet, detCmp - logical, external :: is_in_wavefunction, isInCassd, detEq - character*(512) :: task - integer(ZMQ_PTR) :: zmq_to_qp_run_socket - - integer :: KKsize = 1000000 - - - call new_parallel_job(zmq_to_qp_run_socket,'mrsc2') - - - call wall_time(iwall) -! allocate(linked(N_det_non_ref, N_det_ref), blokMwen(N_det_non_ref, N_det_ref), nlink(N_det_ref)) - - -! searchance = 0d0 -! do J = 1, N_det_ref -! nlink(J) = 0 -! do blok=1,cepa0_shortcut(0) -! do k=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1 -! call get_excitation_degree(psi_ref(1,1,J),det_cepa0(1,1,k),degree,N_int) -! if(degree <= 2) then -! nlink(J) += 1 -! linked(nlink(J),J) = k -! blokMwen(nlink(J),J) = blok -! searchance(J) += 1d0 + log(dfloat(cepa0_shortcut(blok+1) - cepa0_shortcut(blok))) -! end if -! end do -! end do -! end do - - - -! stop - nzer = 0 - ntot = 0 - do nex = 3, 0, -1 - print *, "los ",nex - do I_s = N_det_ref, 1, -1 -! if(mod(I_s,1) == 0) then -! call wall_time(wall) -! wall = wall-iwall -! print *, I_s, "/", N_det_ref, wall * (dfloat(N_det_ref) / dfloat(I_s)), wall, wall * (dfloat(N_det_ref) / dfloat(I_s))-wall -! end if - - - do J_s = 1, I_s - - call get_excitation_degree(psi_ref(1,1,J_s), psi_ref(1,1,I_s), degree, N_int) - if(degree /= nex) cycle - if(nex == 3) nzer = nzer + 1 - ntot += 1 -! if(degree > 3) then -! deg += 1 -! cycle -! else if(degree == -10) then -! KKsize = 100000 -! else -! KKsize = 1000000 -! end if - - - - if(searchance(I_s) < searchance(J_s)) then - i_I = I_s - J = J_s - else - i_I = J_s - J = I_s - end if - - KKsize = nlink(1) - if(nex == 0) KKsize = int(float(nlink(1)) / float(nlink(i_I)) * (float(nlink(1)) / 64d0)) - - !if(KKsize == 0) stop "ZZEO" - - do kk = 1 , nlink(i_I), KKsize - write(task,*) I_i, J, kk, int(min(kk+KKsize-1, nlink(i_I))) - call add_task_to_taskserver(zmq_to_qp_run_socket,task) - end do - - ! do kk = 1 , nlink(i_I) - ! k = linked(kk,i_I) - ! blok = blokMwen(kk,i_I) - ! write(task,*) I_i, J, k, blok - ! call add_task_to_taskserver(zmq_to_qp_run_socket,task) - ! - ! enddo !kk - enddo !J - - enddo !I - end do ! nex - print *, "tasked" -! integer(ZMQ_PTR) ∷ collector_thread -! external ∷ ao_bielec_integrals_in_map_collector -! rc = pthread_create(collector_thread, mrsc2_dressing_collector) - print *, nzer, ntot, float(nzer) / float(ntot) - provide nproc - !$OMP PARALLEL DEFAULT(none) SHARED(delta_ii_old,delta_ij_old,delta_ii_s2_old,delta_ij_s2_old) PRIVATE(i) NUM_THREADS(nproc+1) - i = omp_get_thread_num() - if (i==0) then - call mrsc2_dressing_collector(delta_ii_old,delta_ij_old,delta_ii_s2_old,delta_ij_s2_old) - else - call mrsc2_dressing_slave_inproc(i) - endif - !$OMP END PARALLEL - -! rc = pthread_join(collector_thread) - call end_parallel_job(zmq_to_qp_run_socket, 'mrsc2') - - -END_PROVIDER - - - diff --git a/plugins/mrcc_selected/ezfio_interface.irp.f b/plugins/mrcc_selected/ezfio_interface.irp.f deleted file mode 100644 index 062af449..00000000 --- a/plugins/mrcc_selected/ezfio_interface.irp.f +++ /dev/null @@ -1,61 +0,0 @@ -! DO NOT MODIFY BY HAND -! Created by $QP_ROOT/scripts/ezfio_interface/ei_handler.py -! from file /home/scemama/quantum_package/src/mrcc_selected/EZFIO.cfg - - -BEGIN_PROVIDER [ double precision, thresh_dressed_ci ] - implicit none - BEGIN_DOC -! Threshold on the convergence of the dressed CI energy - END_DOC - - logical :: has - PROVIDE ezfio_filename - - call ezfio_has_mrcc_selected_thresh_dressed_ci(has) - if (has) then - call ezfio_get_mrcc_selected_thresh_dressed_ci(thresh_dressed_ci) - else - print *, 'mrcc_selected/thresh_dressed_ci not found in EZFIO file' - stop 1 - endif - -END_PROVIDER - -BEGIN_PROVIDER [ integer, n_it_max_dressed_ci ] - implicit none - BEGIN_DOC -! Maximum number of dressed CI iterations - END_DOC - - logical :: has - PROVIDE ezfio_filename - - call ezfio_has_mrcc_selected_n_it_max_dressed_ci(has) - if (has) then - call ezfio_get_mrcc_selected_n_it_max_dressed_ci(n_it_max_dressed_ci) - else - print *, 'mrcc_selected/n_it_max_dressed_ci not found in EZFIO file' - stop 1 - endif - -END_PROVIDER - -BEGIN_PROVIDER [ integer, lambda_type ] - implicit none - BEGIN_DOC -! lambda type - END_DOC - - logical :: has - PROVIDE ezfio_filename - - call ezfio_has_mrcc_selected_lambda_type(has) - if (has) then - call ezfio_get_mrcc_selected_lambda_type(lambda_type) - else - print *, 'mrcc_selected/lambda_type not found in EZFIO file' - stop 1 - endif - -END_PROVIDER diff --git a/plugins/mrcc_selected/mrcc_selected.irp.f b/plugins/mrcc_selected/mrcc_selected.irp.f deleted file mode 100644 index 91592e62..00000000 --- a/plugins/mrcc_selected/mrcc_selected.irp.f +++ /dev/null @@ -1,19 +0,0 @@ -program mrsc2sub - implicit none - double precision, allocatable :: energy(:) - allocate (energy(N_states)) - - !mrmode : 1=mrcepa0, 2=mrsc2 add, 3=mrcc - mrmode = 3 - - read_wf = .True. - SOFT_TOUCH read_wf - call print_cas_coefs - call set_generators_bitmasks_as_holes_and_particles - call run(N_states,energy) - if(do_pt2_end)then - call run_pt2(N_states,energy) - endif - deallocate(energy) -end - diff --git a/plugins/mrcc_selected/mrcepa0_general.irp.f b/plugins/mrcc_selected/mrcepa0_general.irp.f deleted file mode 100644 index e3a2d1f5..00000000 --- a/plugins/mrcc_selected/mrcepa0_general.irp.f +++ /dev/null @@ -1,245 +0,0 @@ - - -subroutine run(N_st,energy) - implicit none - - integer, intent(in) :: N_st - double precision, intent(out) :: energy(N_st) - - integer :: i,j - - double precision :: E_new, E_old, delta_e - integer :: iteration - double precision :: E_past(4) - - integer :: n_it_mrcc_max - double precision :: thresh_mrcc - double precision, allocatable :: lambda(:) - allocate (lambda(N_states)) - - - thresh_mrcc = thresh_dressed_ci - n_it_mrcc_max = n_it_max_dressed_ci - - if(n_it_mrcc_max == 1) then - do j=1,N_states_diag - do i=1,N_det - psi_coef(i,j) = CI_eigenvectors_dressed(i,j) - enddo - enddo - SOFT_TOUCH psi_coef ci_energy_dressed - call write_double(6,ci_energy_dressed(1),"Final MRCC energy") - call ezfio_set_mrcepa0_energy(ci_energy_dressed(1)) - call save_wavefunction - energy(:) = ci_energy_dressed(:) - else - E_new = 0.d0 - delta_E = 1.d0 - iteration = 0 - lambda = 1.d0 - do while (delta_E > thresh_mrcc) - iteration += 1 - print *, '===========================' - print *, 'MRCEPA0 Iteration', iteration - print *, '===========================' - print *, '' - E_old = sum(ci_energy_dressed) - call write_double(6,ci_energy_dressed(1),"MRCEPA0 energy") - call diagonalize_ci_dressed(lambda) - E_new = sum(ci_energy_dressed) - delta_E = dabs(E_new - E_old) - call save_wavefunction - call ezfio_set_mrcepa0_energy(ci_energy_dressed(1)) - if (iteration >= n_it_mrcc_max) then - exit - endif - enddo - call write_double(6,ci_energy_dressed(1),"Final MRCEPA0 energy") - energy(:) = ci_energy_dressed(:) - endif -end - - -subroutine print_cas_coefs - implicit none - - integer :: i,j - print *, 'CAS' - print *, '===' - do i=1,N_det_cas - print *, (psi_cas_coef(i,j), j=1,N_states) - call debug_det(psi_cas(1,1,i),N_int) - enddo - call write_double(6,ci_energy(1),"Initial CI energy") - -end - - - - -subroutine run_pt2_old(N_st,energy) - implicit none - integer :: i,j,k - integer, intent(in) :: N_st - double precision, intent(in) :: energy(N_st) - double precision :: pt2_redundant(N_st), pt2(N_st) - double precision :: norm_pert(N_st),H_pert_diag(N_st) - - pt2_redundant = 0.d0 - pt2 = 0d0 - !if(lambda_mrcc_pt2(0) == 0) return - - print*,'Last iteration only to compute the PT2' - - print * ,'Computing the redundant PT2 contribution' - - if (mrmode == 1) then - - N_det_generators = lambda_mrcc_kept(0) - N_det_selectors = lambda_mrcc_kept(0) - - do i=1,N_det_generators - j = lambda_mrcc_kept(i) - do k=1,N_int - psi_det_generators(k,1,i) = psi_non_ref(k,1,j) - psi_det_generators(k,2,i) = psi_non_ref(k,2,j) - psi_selectors(k,1,i) = psi_non_ref(k,1,j) - psi_selectors(k,2,i) = psi_non_ref(k,2,j) - enddo - do k=1,N_st - psi_coef_generators(i,k) = psi_non_ref_coef(j,k) - psi_selectors_coef(i,k) = psi_non_ref_coef(j,k) - enddo - enddo - - else - - N_det_generators = N_det_non_ref - N_det_selectors = N_det_non_ref - - do i=1,N_det_generators - j = i - do k=1,N_int - psi_det_generators(k,1,i) = psi_non_ref(k,1,j) - psi_det_generators(k,2,i) = psi_non_ref(k,2,j) - psi_selectors(k,1,i) = psi_non_ref(k,1,j) - psi_selectors(k,2,i) = psi_non_ref(k,2,j) - enddo - do k=1,N_st - psi_coef_generators(i,k) = psi_non_ref_coef(j,k) - psi_selectors_coef(i,k) = psi_non_ref_coef(j,k) - enddo - enddo - - endif - - SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed - SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized - - call H_apply_mrcepa_PT2(pt2_redundant, norm_pert, H_pert_diag, N_st) - - print * ,'Computing the remaining contribution' - - threshold_selectors = max(threshold_selectors,threshold_selectors_pt2) - threshold_generators = max(threshold_generators,threshold_generators_pt2) - - N_det_generators = N_det_non_ref + N_det_ref - N_det_selectors = N_det_non_ref + N_det_ref - - psi_det_generators(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) - psi_selectors(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) - psi_coef_generators(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) - psi_selectors_coef(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) - - do i=N_det_ref+1,N_det_generators - j = i-N_det_ref - do k=1,N_int - psi_det_generators(k,1,i) = psi_non_ref(k,1,j) - psi_det_generators(k,2,i) = psi_non_ref(k,2,j) - psi_selectors(k,1,i) = psi_non_ref(k,1,j) - psi_selectors(k,2,i) = psi_non_ref(k,2,j) - enddo - do k=1,N_st - psi_coef_generators(i,k) = psi_non_ref_coef(j,k) - psi_selectors_coef(i,k) = psi_non_ref_coef(j,k) - enddo - enddo - - SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed - SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized - - call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st) - - - print *, "Redundant PT2 :",pt2_redundant - print *, "Full PT2 :",pt2 - print *, lambda_mrcc_kept(0), N_det, N_det_ref, psi_coef(1,1), psi_ref_coef(1,1) - pt2 = pt2 - pt2_redundant - - print *, 'Final step' - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', energy - print *, 'E+PT2 = ', energy+pt2 - print *, '-----' - - - call ezfio_set_mrcepa0_energy_pt2(energy(1)+pt2(1)) - -end - -subroutine run_pt2(N_st,energy) - implicit none - integer :: i,j,k - integer, intent(in) :: N_st - double precision, intent(in) :: energy(N_st) - double precision :: pt2(N_st) - double precision :: norm_pert(N_st),H_pert_diag(N_st) - - pt2 = 0d0 - !if(lambda_mrcc_pt2(0) == 0) return - - print*,'Last iteration only to compute the PT2' - - N_det_generators = N_det_cas - N_det_selectors = N_det_non_ref - - do i=1,N_det_generators - do k=1,N_int - psi_det_generators(k,1,i) = psi_ref(k,1,i) - psi_det_generators(k,2,i) = psi_ref(k,2,i) - enddo - do k=1,N_st - psi_coef_generators(i,k) = psi_ref_coef(i,k) - enddo - enddo - do i=1,N_det - do k=1,N_int - psi_selectors(k,1,i) = psi_det_sorted(k,1,i) - psi_selectors(k,2,i) = psi_det_sorted(k,2,i) - enddo - do k=1,N_st - psi_selectors_coef(i,k) = psi_coef_sorted(i,k) - enddo - enddo - - SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed - SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized - - call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st) - -! call ezfio_set_full_ci_energy_pt2(energy+pt2) - - print *, 'Final step' - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', energy - print *, 'E+PT2 = ', energy+pt2 - print *, '-----' - - call ezfio_set_mrcepa0_energy_pt2(energy(1)+pt2(1)) - -end -