From 86964672d736e5c7e9733585adc5070ede1c0c30 Mon Sep 17 00:00:00 2001 From: Pierre-Francois Loos Date: Thu, 7 Feb 2019 22:49:12 +0100 Subject: [PATCH] inital commit for quack --- GoDuck | 18 + GoSph | 17 + PyDuck | 321 ++ PyOptions.json | 145 + PyOptions.template.json | 145 + include/parameters.h | 12 + include/quadrature.h | 17 + input/auxbasis | 3 + input/basis | 14 + input/geminal | 1 + input/methods | 13 + input/molecule | 5 + input/options | 12 + input/weight | 14 + src/.DS_Store | Bin 0 -> 8196 bytes src/IntPak/CalcBoysF.f90 | 47 + src/IntPak/CalcNBasis.f90 | 28 + src/IntPak/CalcOm.f90 | 40 + src/IntPak/CalcOm3e.f90 | 44 + src/IntPak/CalcOmERI.f90 | 39 + src/IntPak/CalcOmErf.f90 | 39 + src/IntPak/CalcOmNuc.f90 | 40 + src/IntPak/CalcOmYuk.f90 | 43 + src/IntPak/Compute2eInt.f90 | 308 ++ src/IntPak/Compute3eInt.f90 | 328 ++ src/IntPak/Compute4eInt.f90 | 246 ++ src/IntPak/ComputeKin.f90 | 166 + src/IntPak/ComputeNuc.f90 | 189 ++ src/IntPak/ComputeOv.f90 | 170 + src/IntPak/FormVRR3e.f90 | 174 + src/IntPak/G2eInt.f90 | 140 + src/IntPak/G3eInt.f90 | 124 + src/IntPak/GF12Int.f90 | 107 + src/IntPak/GenerateShell.f90 | 30 + src/IntPak/HRR2e.f90 | 101 + src/IntPak/HRR3e.f90 | 128 + src/IntPak/HRRF12.f90 | 40 + src/IntPak/HRRNuc.f90 | 71 + src/IntPak/HRROv.f90 | 28 + src/IntPak/IntPak.f90 | 555 +++ src/IntPak/KinInt.f90 | 76 + src/IntPak/Makefile | 29 + src/IntPak/NormCoeff.f90 | 29 + src/IntPak/NucInt.f90 | 114 + src/IntPak/OvInt.f90 | 74 + src/IntPak/RRKin.f90 | 29 + src/IntPak/ReadBasis.f90 | 176 + src/IntPak/ReadGeminal.f90 | 25 + src/IntPak/ReadGeometry.f90 | 40 + src/IntPak/ReadNAtoms.f90 | 20 + src/IntPak/S2eInt.f90 | 70 + src/IntPak/S3eInt.f90 | 58 + src/IntPak/VRR2e.f90 | 130 + src/IntPak/VRR3e.f90 | 174 + src/IntPak/VRRF12.f90 | 36 + src/IntPak/VRRNuc.f90 | 76 + src/IntPak/VRROv.f90 | 28 + src/IntPak/obj/CalcBoysF.o | Bin 0 -> 1612 bytes src/IntPak/obj/CalcNBasis.o | Bin 0 -> 2052 bytes src/IntPak/obj/CalcOm.o | Bin 0 -> 1484 bytes src/IntPak/obj/CalcOm3e.o | Bin 0 -> 1720 bytes src/IntPak/obj/CalcOmERI.o | Bin 0 -> 1304 bytes src/IntPak/obj/CalcOmErf.o | Bin 0 -> 1336 bytes src/IntPak/obj/CalcOmNuc.o | Bin 0 -> 1404 bytes src/IntPak/obj/CalcOmYuk.o | Bin 0 -> 1916 bytes src/IntPak/obj/Compute2eInt.o | Bin 0 -> 10024 bytes src/IntPak/obj/Compute3eInt.o | Bin 0 -> 10252 bytes src/IntPak/obj/Compute4eInt.o | Bin 0 -> 5508 bytes src/IntPak/obj/ComputeKin.o | Bin 0 -> 5608 bytes src/IntPak/obj/ComputeNuc.o | Bin 0 -> 6192 bytes src/IntPak/obj/ComputeOv.o | Bin 0 -> 5832 bytes src/IntPak/obj/FormVRR3e.o | Bin 0 -> 4404 bytes src/IntPak/obj/G2eInt.o | Bin 0 -> 4152 bytes src/IntPak/obj/G3eInt.o | Bin 0 -> 3648 bytes src/IntPak/obj/GF12Int.o | Bin 0 -> 2900 bytes src/IntPak/obj/GenerateShell.o | Bin 0 -> 668 bytes src/IntPak/obj/HRR2e.o | Bin 0 -> 2320 bytes src/IntPak/obj/HRR3e.o | Bin 0 -> 2944 bytes src/IntPak/obj/HRRF12.o | Bin 0 -> 1608 bytes src/IntPak/obj/HRRNuc.o | Bin 0 -> 1700 bytes src/IntPak/obj/HRROv.o | Bin 0 -> 828 bytes src/IntPak/obj/IntPak.o | Bin 0 -> 9976 bytes src/IntPak/obj/KinInt.o | Bin 0 -> 1972 bytes src/IntPak/obj/NormCoeff.o | Bin 0 -> 1432 bytes src/IntPak/obj/NucInt.o | Bin 0 -> 3196 bytes src/IntPak/obj/OvInt.o | Bin 0 -> 1780 bytes src/IntPak/obj/RRKin.o | Bin 0 -> 1168 bytes src/IntPak/obj/ReadBasis.o | Bin 0 -> 9428 bytes src/IntPak/obj/ReadGeminal.o | Bin 0 -> 2020 bytes src/IntPak/obj/ReadGeometry.o | Bin 0 -> 3292 bytes src/IntPak/obj/ReadNAtoms.o | Bin 0 -> 1312 bytes src/IntPak/obj/S2eInt.o | Bin 0 -> 3496 bytes src/IntPak/obj/S3eInt.o | Bin 0 -> 1432 bytes src/IntPak/obj/VRR2e.o | Bin 0 -> 3672 bytes src/IntPak/obj/VRR3e.o | Bin 0 -> 6820 bytes src/IntPak/obj/VRRF12.o | Bin 0 -> 1752 bytes src/IntPak/obj/VRRNuc.o | Bin 0 -> 2028 bytes src/IntPak/obj/VRROv.o | Bin 0 -> 884 bytes src/IntPak/obj/utils.o | Bin 0 -> 6044 bytes src/IntPak/utils.f90 | 385 +++ src/MCQC/.DS_Store | Bin 0 -> 6148 bytes ...ois Loos's conflicted copy 2017-10-25).swp | Bin 0 -> 20480 bytes ...ois Loos's conflicted copy 2017-10-27).swp | Bin 0 -> 20480 bytes ...ois Loos's conflicted copy 2017-11-28).swp | Bin 0 -> 28672 bytes src/MCQC/ADC.f90 | 48 + src/MCQC/ADC2.f90 | 359 ++ src/MCQC/AO_values.f90 | 108 + src/MCQC/AOtoMO_integral_transform.f90 | 77 + src/MCQC/AOtoMO_oooa.f90 | 85 + src/MCQC/AOtoMO_oooo.f90 | 85 + src/MCQC/AOtoMO_oovv.f90 | 77 + src/MCQC/AOtoMO_transform.f90 | 18 + src/MCQC/Bethe_Salpeter_A_matrix.f90 | 44 + src/MCQC/Bethe_Salpeter_B_matrix.f90 | 44 + src/MCQC/CIS.f90 | 85 + src/MCQC/Coulomb_matrix_AO_basis.f90 | 34 + src/MCQC/Coulomb_matrix_MO_basis.f90 | 26 + src/MCQC/DIIS_extrapolation.f90 | 61 + src/MCQC/G0W0.f90 | 132 + src/MCQC/GF2.f90 | 131 + src/MCQC/GF2_diag.f90 | 124 + src/MCQC/GF3_diag.f90 | 488 +++ src/MCQC/Green_function.f90 | 65 + src/MCQC/Hartree_matrix_AO_basis.f90 | 33 + src/MCQC/Hartree_matrix_MO_basis.f90 | 26 + src/MCQC/MCMP2.f90 | 344 ++ src/MCQC/MCMP2.f90.x | 446 +++ src/MCQC/MCQC.f90 | 488 +++ src/MCQC/MOM.f90 | 190 ++ src/MCQC/MOM_overlap.f90 | 51 + src/MCQC/MOtoAO_transform.f90 | 27 + src/MCQC/MP2.f90 | 71 + src/MCQC/MP2F12.f90 | 131 + src/MCQC/MP3.f90 | 113 + src/MCQC/Makefile | 31 + src/MCQC/MinMCMP2.f90 | 121 + src/MCQC/NDrift.f90 | 67 + src/MCQC/Newton.f90 | 67 + src/MCQC/NormCoeff.f90 | 29 + src/MCQC/RHF.f90 | 171 + src/MCQC/RHF.f90.x | 171 + src/MCQC/SPHF.f90 | 170 + src/MCQC/SPMP2.f90 | 71 + src/MCQC/SPTDHF.f90 | 77 + src/MCQC/SP_linear_response.f90 | 81 + src/MCQC/SP_linear_response_A_matrix.f90 | 56 + src/MCQC/SP_linear_response_B_matrix.f90 | 54 + src/MCQC/TDHF.f90 | 77 + src/MCQC/UHF.f90.x | 199 ++ src/MCQC/antisymmetrize_ERI.f90 | 46 + src/MCQC/dcgw.f90 | 84 + src/MCQC/density.f90 | 51 + src/MCQC/density_matrix.f90 | 30 + src/MCQC/drift.f90 | 50 + src/MCQC/eNcusp.f90.x | 42 + src/MCQC/evGW.f90 | 207 ++ src/MCQC/exchange_matrix_AO_basis.f90 | 35 + src/MCQC/exchange_matrix_MO_basis.f90 | 26 + src/MCQC/excitation_density.f90 | 65 + src/MCQC/excitation_density_SOSEX.f90 | 65 + src/MCQC/form_CABS.f90.x | 60 + src/MCQC/generate_shell.f90 | 30 + src/MCQC/initialize_random_generator.f90 | 25 + src/MCQC/linear_response.f90 | 81 + src/MCQC/linear_response_A_matrix.f90 | 56 + src/MCQC/linear_response_B_matrix.f90 | 54 + src/MCQC/natural_orbital.f90 | 57 + src/MCQC/norm_trial.f90 | 53 + src/MCQC/obj/ADC.o | Bin 0 -> 5328 bytes src/MCQC/obj/ADC2.o | Bin 0 -> 20152 bytes src/MCQC/obj/AO_values.o | Bin 0 -> 8852 bytes src/MCQC/obj/AOtoMO_integral_transform.o | Bin 0 -> 7276 bytes src/MCQC/obj/AOtoMO_oooa.o | Bin 0 -> 10568 bytes src/MCQC/obj/AOtoMO_oooo.o | Bin 0 -> 10352 bytes src/MCQC/obj/AOtoMO_oovv.o | Bin 0 -> 9400 bytes src/MCQC/obj/AOtoMO_transform.o | Bin 0 -> 5872 bytes src/MCQC/obj/Bethe_Salpeter_A_matrix.o | Bin 0 -> 5388 bytes src/MCQC/obj/Bethe_Salpeter_B_matrix.o | Bin 0 -> 5364 bytes src/MCQC/obj/CIS.o | Bin 0 -> 6624 bytes src/MCQC/obj/Coulomb_matrix_AO_basis.o | Bin 0 -> 4036 bytes src/MCQC/obj/Coulomb_matrix_MO_basis.o | Bin 0 -> 6504 bytes src/MCQC/obj/DIIS_extrapolation.o | Bin 0 -> 7788 bytes src/MCQC/obj/G0W0.o | Bin 0 -> 14396 bytes src/MCQC/obj/GF2.o | Bin 0 -> 14600 bytes src/MCQC/obj/GF2_diag.o | Bin 0 -> 12280 bytes src/MCQC/obj/GF3_diag.o | Bin 0 -> 38316 bytes src/MCQC/obj/Green_function.o | Bin 0 -> 11592 bytes src/MCQC/obj/Hartree_matrix_AO_basis.o | Bin 0 -> 4116 bytes src/MCQC/obj/Hartree_matrix_MO_basis.o | Bin 0 -> 6624 bytes src/MCQC/obj/MCMP2.o | Bin 0 -> 46364 bytes src/MCQC/obj/MCQC.o | Bin 0 -> 35708 bytes src/MCQC/obj/MOM.o | Bin 0 -> 35988 bytes src/MCQC/obj/MOM_overlap.o | Bin 0 -> 8124 bytes src/MCQC/obj/MOtoAO_transform.o | Bin 0 -> 7620 bytes src/MCQC/obj/MP2.o | Bin 0 -> 7868 bytes src/MCQC/obj/MP2F12.o | Bin 0 -> 15480 bytes src/MCQC/obj/MP3.o | Bin 0 -> 10848 bytes src/MCQC/obj/MinMCMP2.o | Bin 0 -> 12160 bytes src/MCQC/obj/NDrift.o | Bin 0 -> 10460 bytes src/MCQC/obj/Newton.o | Bin 0 -> 7900 bytes src/MCQC/obj/NormCoeff.o | Bin 0 -> 3916 bytes src/MCQC/obj/RHF.o | Bin 0 -> 40384 bytes src/MCQC/obj/SPHF.o | Bin 0 -> 40780 bytes src/MCQC/obj/SPMP2.o | Bin 0 -> 7880 bytes src/MCQC/obj/SPTDHF.o | Bin 0 -> 7860 bytes src/MCQC/obj/SP_linear_response.o | Bin 0 -> 14308 bytes src/MCQC/obj/SP_linear_response_A_matrix.o | Bin 0 -> 5612 bytes src/MCQC/obj/SP_linear_response_B_matrix.o | Bin 0 -> 5480 bytes src/MCQC/obj/TDHF.o | Bin 0 -> 7848 bytes src/MCQC/obj/antisymmetrize_ERI.o | Bin 0 -> 4520 bytes src/MCQC/obj/dcgw.o | Bin 0 -> 2976 bytes src/MCQC/obj/density.o | Bin 0 -> 5072 bytes src/MCQC/obj/density_matrix.o | Bin 0 -> 3048 bytes src/MCQC/obj/drift.o | Bin 0 -> 3976 bytes src/MCQC/obj/evGW.o | Bin 0 -> 19656 bytes src/MCQC/obj/exchange_matrix_AO_basis.o | Bin 0 -> 4368 bytes src/MCQC/obj/exchange_matrix_MO_basis.o | Bin 0 -> 6516 bytes src/MCQC/obj/excitation_density.o | Bin 0 -> 8048 bytes src/MCQC/obj/excitation_density_SOSEX.o | Bin 0 -> 8088 bytes src/MCQC/obj/generate_shell.o | Bin 0 -> 2860 bytes src/MCQC/obj/initialize_random_generator.o | Bin 0 -> 3536 bytes src/MCQC/obj/linear_response.o | Bin 0 -> 14284 bytes src/MCQC/obj/linear_response_A_matrix.o | Bin 0 -> 5548 bytes src/MCQC/obj/linear_response_B_matrix.o | Bin 0 -> 5408 bytes src/MCQC/obj/natural_orbital.o | Bin 0 -> 7348 bytes src/MCQC/obj/norm_trial.o | Bin 0 -> 7656 bytes src/MCQC/obj/optimize_timestep.o | Bin 0 -> 2792 bytes src/MCQC/obj/orthogonalization_matrix.o | Bin 0 -> 8528 bytes src/MCQC/obj/overlap.o | Bin 0 -> 6320 bytes src/MCQC/obj/plot_GW.o | Bin 0 -> 10120 bytes src/MCQC/obj/print_G0W0.o | Bin 0 -> 7832 bytes src/MCQC/obj/print_GF2.o | Bin 0 -> 7272 bytes src/MCQC/obj/print_GF3.o | Bin 0 -> 7536 bytes src/MCQC/obj/print_RHF.o | Bin 0 -> 8844 bytes src/MCQC/obj/print_evGW.o | Bin 0 -> 8916 bytes src/MCQC/obj/print_excitation.o | Bin 0 -> 6180 bytes src/MCQC/obj/print_qsGW.o | Bin 0 -> 21260 bytes src/MCQC/obj/qsGW.o | Bin 0 -> 41692 bytes src/MCQC/obj/qsGW_PT.o | Bin 0 -> 12380 bytes src/MCQC/obj/read_F12_integrals.o | Bin 0 -> 8068 bytes src/MCQC/obj/read_MOs.o | Bin 0 -> 5856 bytes src/MCQC/obj/read_auxiliary_basis.o | Bin 0 -> 13104 bytes src/MCQC/obj/read_basis.o | Bin 0 -> 10180 bytes src/MCQC/obj/read_geometry.o | Bin 0 -> 7120 bytes src/MCQC/obj/read_integrals.o | Bin 0 -> 7176 bytes src/MCQC/obj/read_methods.o | Bin 0 -> 5460 bytes src/MCQC/obj/read_molecule.o | Bin 0 -> 6740 bytes src/MCQC/obj/read_options.o | Bin 0 -> 8732 bytes src/MCQC/obj/renormalization_factor.o | Bin 0 -> 8088 bytes src/MCQC/obj/rij.o | Bin 0 -> 2868 bytes src/MCQC/obj/self_energy_correlation.o | Bin 0 -> 9252 bytes src/MCQC/obj/self_energy_correlation_diag.o | Bin 0 -> 7908 bytes src/MCQC/obj/self_energy_exchange.o | Bin 0 -> 6496 bytes src/MCQC/obj/transition_probability.o | Bin 0 -> 4588 bytes src/MCQC/obj/utils.o | Bin 0 -> 13420 bytes src/MCQC/obj/wrap_lapack.o | Bin 0 -> 17616 bytes src/MCQC/optimize_timestep.f90 | 28 + src/MCQC/orthogonalization_matrix.f90 | 120 + src/MCQC/overlap.f90 | 40 + src/MCQC/plot_GW.f90 | 113 + src/MCQC/print_G0W0.f90 | 47 + src/MCQC/print_GF2.f90 | 44 + src/MCQC/print_GF3.f90 | 44 + src/MCQC/print_RHF.f90 | 60 + src/MCQC/print_evGW.f90 | 52 + src/MCQC/print_excitation.f90 | 36 + src/MCQC/print_qsGW.f90 | 110 + src/MCQC/qsGW.f90 | 222 ++ src/MCQC/qsGW_AO_basis.f90.x | 197 ++ src/MCQC/qsGW_MO_basis.f90.x | 203 ++ src/MCQC/qsGW_PT.f90 | 120 + src/MCQC/read_F12_integrals.f90 | 151 + src/MCQC/read_MOs.f90 | 58 + src/MCQC/read_auxiliary_basis.f90 | 176 + src/MCQC/read_basis.f90 | 128 + src/MCQC/read_geometry.f90 | 58 + src/MCQC/read_integrals.f90 | 120 + src/MCQC/read_methods.f90 | 97 + src/MCQC/read_molecule.f90 | 67 + src/MCQC/read_options.f90 | 151 + src/MCQC/renormalization_factor.f90 | 112 + src/MCQC/rij.f90 | 24 + src/MCQC/self_energy_correlation.f90 | 143 + src/MCQC/self_energy_correlation_diag.f90 | 137 + src/MCQC/self_energy_exchange.f90 | 25 + src/MCQC/transition_probability.f90 | 41 + src/MCQC/utils.f90 | 339 ++ src/MCQC/wrap_lapack.f90 | 207 ++ src/xcDFT/AO_values_grid.f90 | 101 + src/xcDFT/DIIS_extrapolation.f90 | 52 + src/xcDFT/Makefile | 34 + src/xcDFT/NormCoeff.f90 | 31 + src/xcDFT/RKS.f90 | 221 ++ src/xcDFT/density.f90 | 38 + src/xcDFT/dft_grid.f | 3017 +++++++++++++++++ src/xcDFT/electron_number.f90 | 20 + src/xcDFT/elements.f90 | 171 + src/xcDFT/exchange_energy.f90 | 79 + src/xcDFT/exchange_potential.f90 | 82 + src/xcDFT/fock_exchange_energy.f90 | 25 + src/xcDFT/fock_exchange_potential.f90 | 34 + src/xcDFT/generate_shell.f90 | 32 + src/xcDFT/gga_exchange_energy.f90 | 44 + src/xcDFT/gga_exchange_potential.f90 | 62 + src/xcDFT/gradient_density.f90 | 45 + src/xcDFT/hartree_coulomb.f90 | 33 + src/xcDFT/lda_exchange_energy.f90 | 36 + src/xcDFT/lda_exchange_potential.f90 | 46 + src/xcDFT/obj/AO_values_grid.o | Bin 0 -> 3396 bytes src/xcDFT/obj/DIIS_extrapolation.o | Bin 0 -> 2584 bytes src/xcDFT/obj/NormCoeff.o | Bin 0 -> 1432 bytes src/xcDFT/obj/RKS.o | Bin 0 -> 22196 bytes src/xcDFT/obj/density.o | Bin 0 -> 744 bytes src/xcDFT/obj/dft_grid.o | Bin 0 -> 95064 bytes src/xcDFT/obj/electron_number.o | Bin 0 -> 592 bytes src/xcDFT/obj/elements.o | Bin 0 -> 5228 bytes src/xcDFT/obj/exchange_energy.o | Bin 0 -> 1392 bytes src/xcDFT/obj/exchange_potential.o | Bin 0 -> 2788 bytes src/xcDFT/obj/fock_exchange_energy.o | Bin 0 -> 2128 bytes src/xcDFT/obj/fock_exchange_potential.o | Bin 0 -> 984 bytes src/xcDFT/obj/generate_shell.o | Bin 0 -> 668 bytes src/xcDFT/obj/gga_exchange_energy.o | Bin 0 -> 1208 bytes src/xcDFT/obj/gga_exchange_potential.o | Bin 0 -> 2304 bytes src/xcDFT/obj/gradient_density.o | Bin 0 -> 1272 bytes src/xcDFT/obj/hartree_coulomb.o | Bin 0 -> 976 bytes src/xcDFT/obj/lda_exchange_energy.o | Bin 0 -> 952 bytes src/xcDFT/obj/lda_exchange_potential.o | Bin 0 -> 1324 bytes src/xcDFT/obj/one_electron_density.o | Bin 0 -> 1348 bytes src/xcDFT/obj/orthogonalization_matrix.o | Bin 0 -> 2688 bytes src/xcDFT/obj/print_RKS.o | Bin 0 -> 5832 bytes src/xcDFT/obj/quadrature_grid.o | Bin 0 -> 3840 bytes src/xcDFT/obj/read_basis.o | Bin 0 -> 6356 bytes src/xcDFT/obj/read_geometry.o | Bin 0 -> 4308 bytes src/xcDFT/obj/read_grid.o | Bin 0 -> 1912 bytes src/xcDFT/obj/read_integrals.o | Bin 0 -> 3696 bytes src/xcDFT/obj/read_molecule.o | Bin 0 -> 2780 bytes src/xcDFT/obj/read_options.o | Bin 0 -> 1396 bytes src/xcDFT/obj/select_rung.o | Bin 0 -> 2564 bytes src/xcDFT/obj/utils.o | Bin 0 -> 4484 bytes src/xcDFT/obj/wrap_lapack.o | Bin 0 -> 5144 bytes src/xcDFT/obj/xcDFT.o | Bin 0 -> 4928 bytes src/xcDFT/one_electron_density.f90 | 47 + src/xcDFT/orthogonalization_matrix.f90 | 63 + src/xcDFT/print_RKS.f90 | 61 + src/xcDFT/quadrature_grid.f90 | 77 + src/xcDFT/read_basis.f90 | 117 + src/xcDFT/read_geometry.f90 | 58 + src/xcDFT/read_grid.f90 | 47 + src/xcDFT/read_integrals.f90 | 114 + src/xcDFT/read_molecule.f90 | 42 + src/xcDFT/read_options.f90 | 31 + src/xcDFT/select_rung.f90 | 45 + src/xcDFT/utils.f90 | 246 ++ src/xcDFT/wrap_lapack.f90 | 147 + src/xcDFT/xcDFT.f90 | 120 + utils/cp2input | 17 + utils/create_function.sh | 42 + utils/create_subroutine.sh | 42 + utils/fsplit | Bin 0 -> 31968 bytes utils/install_lapack.sh | 7 + utils/lapack-release | 1 + utils/reblock.f90 | 2764 +++++++++++++++ utils/rename | 14 + 363 files changed, 23876 insertions(+) create mode 100755 GoDuck create mode 100755 GoSph create mode 100755 PyDuck create mode 100644 PyOptions.json create mode 100644 PyOptions.template.json create mode 100644 include/parameters.h create mode 100644 include/quadrature.h create mode 100644 input/auxbasis create mode 100644 input/basis create mode 100644 input/geminal create mode 100644 input/methods create mode 100644 input/molecule create mode 100644 input/options create mode 100644 input/weight create mode 100644 src/.DS_Store create mode 100644 src/IntPak/CalcBoysF.f90 create mode 100644 src/IntPak/CalcNBasis.f90 create mode 100644 src/IntPak/CalcOm.f90 create mode 100644 src/IntPak/CalcOm3e.f90 create mode 100644 src/IntPak/CalcOmERI.f90 create mode 100644 src/IntPak/CalcOmErf.f90 create mode 100644 src/IntPak/CalcOmNuc.f90 create mode 100644 src/IntPak/CalcOmYuk.f90 create mode 100644 src/IntPak/Compute2eInt.f90 create mode 100644 src/IntPak/Compute3eInt.f90 create mode 100644 src/IntPak/Compute4eInt.f90 create mode 100644 src/IntPak/ComputeKin.f90 create mode 100644 src/IntPak/ComputeNuc.f90 create mode 100644 src/IntPak/ComputeOv.f90 create mode 100644 src/IntPak/FormVRR3e.f90 create mode 100644 src/IntPak/G2eInt.f90 create mode 100644 src/IntPak/G3eInt.f90 create mode 100644 src/IntPak/GF12Int.f90 create mode 100644 src/IntPak/GenerateShell.f90 create mode 100644 src/IntPak/HRR2e.f90 create mode 100644 src/IntPak/HRR3e.f90 create mode 100644 src/IntPak/HRRF12.f90 create mode 100644 src/IntPak/HRRNuc.f90 create mode 100644 src/IntPak/HRROv.f90 create mode 100644 src/IntPak/IntPak.f90 create mode 100644 src/IntPak/KinInt.f90 create mode 100644 src/IntPak/Makefile create mode 100644 src/IntPak/NormCoeff.f90 create mode 100644 src/IntPak/NucInt.f90 create mode 100644 src/IntPak/OvInt.f90 create mode 100644 src/IntPak/RRKin.f90 create mode 100644 src/IntPak/ReadBasis.f90 create mode 100644 src/IntPak/ReadGeminal.f90 create mode 100644 src/IntPak/ReadGeometry.f90 create mode 100644 src/IntPak/ReadNAtoms.f90 create mode 100644 src/IntPak/S2eInt.f90 create mode 100644 src/IntPak/S3eInt.f90 create mode 100644 src/IntPak/VRR2e.f90 create mode 100644 src/IntPak/VRR3e.f90 create mode 100644 src/IntPak/VRRF12.f90 create mode 100644 src/IntPak/VRRNuc.f90 create mode 100644 src/IntPak/VRROv.f90 create mode 100644 src/IntPak/obj/CalcBoysF.o create mode 100644 src/IntPak/obj/CalcNBasis.o create mode 100644 src/IntPak/obj/CalcOm.o create mode 100644 src/IntPak/obj/CalcOm3e.o create mode 100644 src/IntPak/obj/CalcOmERI.o create mode 100644 src/IntPak/obj/CalcOmErf.o create mode 100644 src/IntPak/obj/CalcOmNuc.o create mode 100644 src/IntPak/obj/CalcOmYuk.o create mode 100644 src/IntPak/obj/Compute2eInt.o create mode 100644 src/IntPak/obj/Compute3eInt.o create mode 100644 src/IntPak/obj/Compute4eInt.o create mode 100644 src/IntPak/obj/ComputeKin.o create mode 100644 src/IntPak/obj/ComputeNuc.o create mode 100644 src/IntPak/obj/ComputeOv.o create mode 100644 src/IntPak/obj/FormVRR3e.o create mode 100644 src/IntPak/obj/G2eInt.o create mode 100644 src/IntPak/obj/G3eInt.o create mode 100644 src/IntPak/obj/GF12Int.o create mode 100644 src/IntPak/obj/GenerateShell.o create mode 100644 src/IntPak/obj/HRR2e.o create mode 100644 src/IntPak/obj/HRR3e.o create mode 100644 src/IntPak/obj/HRRF12.o create mode 100644 src/IntPak/obj/HRRNuc.o create mode 100644 src/IntPak/obj/HRROv.o create mode 100644 src/IntPak/obj/IntPak.o create mode 100644 src/IntPak/obj/KinInt.o create mode 100644 src/IntPak/obj/NormCoeff.o create mode 100644 src/IntPak/obj/NucInt.o create mode 100644 src/IntPak/obj/OvInt.o create mode 100644 src/IntPak/obj/RRKin.o create mode 100644 src/IntPak/obj/ReadBasis.o create mode 100644 src/IntPak/obj/ReadGeminal.o create mode 100644 src/IntPak/obj/ReadGeometry.o create mode 100644 src/IntPak/obj/ReadNAtoms.o create mode 100644 src/IntPak/obj/S2eInt.o create mode 100644 src/IntPak/obj/S3eInt.o create mode 100644 src/IntPak/obj/VRR2e.o create mode 100644 src/IntPak/obj/VRR3e.o create mode 100644 src/IntPak/obj/VRRF12.o create mode 100644 src/IntPak/obj/VRRNuc.o create mode 100644 src/IntPak/obj/VRROv.o create mode 100644 src/IntPak/obj/utils.o create mode 100644 src/IntPak/utils.f90 create mode 100644 src/MCQC/.DS_Store create mode 100644 src/MCQC/.InitWeight.f90 (Pierre-Francois Loos's conflicted copy 2017-10-25).swp create mode 100644 src/MCQC/.MCQC.f90 (Pierre-Francois Loos's conflicted copy 2017-10-27).swp create mode 100644 src/MCQC/.MCQC.f90 (Pierre-Francois Loos's conflicted copy 2017-11-28).swp create mode 100644 src/MCQC/ADC.f90 create mode 100644 src/MCQC/ADC2.f90 create mode 100644 src/MCQC/AO_values.f90 create mode 100644 src/MCQC/AOtoMO_integral_transform.f90 create mode 100644 src/MCQC/AOtoMO_oooa.f90 create mode 100644 src/MCQC/AOtoMO_oooo.f90 create mode 100644 src/MCQC/AOtoMO_oovv.f90 create mode 100644 src/MCQC/AOtoMO_transform.f90 create mode 100644 src/MCQC/Bethe_Salpeter_A_matrix.f90 create mode 100644 src/MCQC/Bethe_Salpeter_B_matrix.f90 create mode 100644 src/MCQC/CIS.f90 create mode 100644 src/MCQC/Coulomb_matrix_AO_basis.f90 create mode 100644 src/MCQC/Coulomb_matrix_MO_basis.f90 create mode 100644 src/MCQC/DIIS_extrapolation.f90 create mode 100644 src/MCQC/G0W0.f90 create mode 100644 src/MCQC/GF2.f90 create mode 100644 src/MCQC/GF2_diag.f90 create mode 100644 src/MCQC/GF3_diag.f90 create mode 100644 src/MCQC/Green_function.f90 create mode 100644 src/MCQC/Hartree_matrix_AO_basis.f90 create mode 100644 src/MCQC/Hartree_matrix_MO_basis.f90 create mode 100644 src/MCQC/MCMP2.f90 create mode 100644 src/MCQC/MCMP2.f90.x create mode 100644 src/MCQC/MCQC.f90 create mode 100644 src/MCQC/MOM.f90 create mode 100644 src/MCQC/MOM_overlap.f90 create mode 100644 src/MCQC/MOtoAO_transform.f90 create mode 100644 src/MCQC/MP2.f90 create mode 100644 src/MCQC/MP2F12.f90 create mode 100644 src/MCQC/MP3.f90 create mode 100644 src/MCQC/Makefile create mode 100644 src/MCQC/MinMCMP2.f90 create mode 100644 src/MCQC/NDrift.f90 create mode 100644 src/MCQC/Newton.f90 create mode 100644 src/MCQC/NormCoeff.f90 create mode 100644 src/MCQC/RHF.f90 create mode 100644 src/MCQC/RHF.f90.x create mode 100644 src/MCQC/SPHF.f90 create mode 100644 src/MCQC/SPMP2.f90 create mode 100644 src/MCQC/SPTDHF.f90 create mode 100644 src/MCQC/SP_linear_response.f90 create mode 100644 src/MCQC/SP_linear_response_A_matrix.f90 create mode 100644 src/MCQC/SP_linear_response_B_matrix.f90 create mode 100644 src/MCQC/TDHF.f90 create mode 100644 src/MCQC/UHF.f90.x create mode 100644 src/MCQC/antisymmetrize_ERI.f90 create mode 100644 src/MCQC/dcgw.f90 create mode 100644 src/MCQC/density.f90 create mode 100644 src/MCQC/density_matrix.f90 create mode 100644 src/MCQC/drift.f90 create mode 100644 src/MCQC/eNcusp.f90.x create mode 100644 src/MCQC/evGW.f90 create mode 100644 src/MCQC/exchange_matrix_AO_basis.f90 create mode 100644 src/MCQC/exchange_matrix_MO_basis.f90 create mode 100644 src/MCQC/excitation_density.f90 create mode 100644 src/MCQC/excitation_density_SOSEX.f90 create mode 100644 src/MCQC/form_CABS.f90.x create mode 100644 src/MCQC/generate_shell.f90 create mode 100644 src/MCQC/initialize_random_generator.f90 create mode 100644 src/MCQC/linear_response.f90 create mode 100644 src/MCQC/linear_response_A_matrix.f90 create mode 100644 src/MCQC/linear_response_B_matrix.f90 create mode 100644 src/MCQC/natural_orbital.f90 create mode 100644 src/MCQC/norm_trial.f90 create mode 100644 src/MCQC/obj/ADC.o create mode 100644 src/MCQC/obj/ADC2.o create mode 100644 src/MCQC/obj/AO_values.o create mode 100644 src/MCQC/obj/AOtoMO_integral_transform.o create mode 100644 src/MCQC/obj/AOtoMO_oooa.o create mode 100644 src/MCQC/obj/AOtoMO_oooo.o create mode 100644 src/MCQC/obj/AOtoMO_oovv.o create mode 100644 src/MCQC/obj/AOtoMO_transform.o create mode 100644 src/MCQC/obj/Bethe_Salpeter_A_matrix.o create mode 100644 src/MCQC/obj/Bethe_Salpeter_B_matrix.o create mode 100644 src/MCQC/obj/CIS.o create mode 100644 src/MCQC/obj/Coulomb_matrix_AO_basis.o create mode 100644 src/MCQC/obj/Coulomb_matrix_MO_basis.o create mode 100644 src/MCQC/obj/DIIS_extrapolation.o create mode 100644 src/MCQC/obj/G0W0.o create mode 100644 src/MCQC/obj/GF2.o create mode 100644 src/MCQC/obj/GF2_diag.o create mode 100644 src/MCQC/obj/GF3_diag.o create mode 100644 src/MCQC/obj/Green_function.o create mode 100644 src/MCQC/obj/Hartree_matrix_AO_basis.o create mode 100644 src/MCQC/obj/Hartree_matrix_MO_basis.o create mode 100644 src/MCQC/obj/MCMP2.o create mode 100644 src/MCQC/obj/MCQC.o create mode 100644 src/MCQC/obj/MOM.o create mode 100644 src/MCQC/obj/MOM_overlap.o create mode 100644 src/MCQC/obj/MOtoAO_transform.o create mode 100644 src/MCQC/obj/MP2.o create mode 100644 src/MCQC/obj/MP2F12.o create mode 100644 src/MCQC/obj/MP3.o create mode 100644 src/MCQC/obj/MinMCMP2.o create mode 100644 src/MCQC/obj/NDrift.o create mode 100644 src/MCQC/obj/Newton.o create mode 100644 src/MCQC/obj/NormCoeff.o create mode 100644 src/MCQC/obj/RHF.o create mode 100644 src/MCQC/obj/SPHF.o create mode 100644 src/MCQC/obj/SPMP2.o create mode 100644 src/MCQC/obj/SPTDHF.o create mode 100644 src/MCQC/obj/SP_linear_response.o create mode 100644 src/MCQC/obj/SP_linear_response_A_matrix.o create mode 100644 src/MCQC/obj/SP_linear_response_B_matrix.o create mode 100644 src/MCQC/obj/TDHF.o create mode 100644 src/MCQC/obj/antisymmetrize_ERI.o create mode 100644 src/MCQC/obj/dcgw.o create mode 100644 src/MCQC/obj/density.o create mode 100644 src/MCQC/obj/density_matrix.o create mode 100644 src/MCQC/obj/drift.o create mode 100644 src/MCQC/obj/evGW.o create mode 100644 src/MCQC/obj/exchange_matrix_AO_basis.o create mode 100644 src/MCQC/obj/exchange_matrix_MO_basis.o create mode 100644 src/MCQC/obj/excitation_density.o create mode 100644 src/MCQC/obj/excitation_density_SOSEX.o create mode 100644 src/MCQC/obj/generate_shell.o create mode 100644 src/MCQC/obj/initialize_random_generator.o create mode 100644 src/MCQC/obj/linear_response.o create mode 100644 src/MCQC/obj/linear_response_A_matrix.o create mode 100644 src/MCQC/obj/linear_response_B_matrix.o create mode 100644 src/MCQC/obj/natural_orbital.o create mode 100644 src/MCQC/obj/norm_trial.o create mode 100644 src/MCQC/obj/optimize_timestep.o create mode 100644 src/MCQC/obj/orthogonalization_matrix.o create mode 100644 src/MCQC/obj/overlap.o create mode 100644 src/MCQC/obj/plot_GW.o create mode 100644 src/MCQC/obj/print_G0W0.o create mode 100644 src/MCQC/obj/print_GF2.o create mode 100644 src/MCQC/obj/print_GF3.o create mode 100644 src/MCQC/obj/print_RHF.o create mode 100644 src/MCQC/obj/print_evGW.o create mode 100644 src/MCQC/obj/print_excitation.o create mode 100644 src/MCQC/obj/print_qsGW.o create mode 100644 src/MCQC/obj/qsGW.o create mode 100644 src/MCQC/obj/qsGW_PT.o create mode 100644 src/MCQC/obj/read_F12_integrals.o create mode 100644 src/MCQC/obj/read_MOs.o create mode 100644 src/MCQC/obj/read_auxiliary_basis.o create mode 100644 src/MCQC/obj/read_basis.o create mode 100644 src/MCQC/obj/read_geometry.o create mode 100644 src/MCQC/obj/read_integrals.o create mode 100644 src/MCQC/obj/read_methods.o create mode 100644 src/MCQC/obj/read_molecule.o create mode 100644 src/MCQC/obj/read_options.o create mode 100644 src/MCQC/obj/renormalization_factor.o create mode 100644 src/MCQC/obj/rij.o create mode 100644 src/MCQC/obj/self_energy_correlation.o create mode 100644 src/MCQC/obj/self_energy_correlation_diag.o create mode 100644 src/MCQC/obj/self_energy_exchange.o create mode 100644 src/MCQC/obj/transition_probability.o create mode 100644 src/MCQC/obj/utils.o create mode 100644 src/MCQC/obj/wrap_lapack.o create mode 100644 src/MCQC/optimize_timestep.f90 create mode 100644 src/MCQC/orthogonalization_matrix.f90 create mode 100644 src/MCQC/overlap.f90 create mode 100644 src/MCQC/plot_GW.f90 create mode 100644 src/MCQC/print_G0W0.f90 create mode 100644 src/MCQC/print_GF2.f90 create mode 100644 src/MCQC/print_GF3.f90 create mode 100644 src/MCQC/print_RHF.f90 create mode 100644 src/MCQC/print_evGW.f90 create mode 100644 src/MCQC/print_excitation.f90 create mode 100644 src/MCQC/print_qsGW.f90 create mode 100644 src/MCQC/qsGW.f90 create mode 100644 src/MCQC/qsGW_AO_basis.f90.x create mode 100644 src/MCQC/qsGW_MO_basis.f90.x create mode 100644 src/MCQC/qsGW_PT.f90 create mode 100644 src/MCQC/read_F12_integrals.f90 create mode 100644 src/MCQC/read_MOs.f90 create mode 100644 src/MCQC/read_auxiliary_basis.f90 create mode 100644 src/MCQC/read_basis.f90 create mode 100644 src/MCQC/read_geometry.f90 create mode 100644 src/MCQC/read_integrals.f90 create mode 100644 src/MCQC/read_methods.f90 create mode 100644 src/MCQC/read_molecule.f90 create mode 100644 src/MCQC/read_options.f90 create mode 100644 src/MCQC/renormalization_factor.f90 create mode 100644 src/MCQC/rij.f90 create mode 100644 src/MCQC/self_energy_correlation.f90 create mode 100644 src/MCQC/self_energy_correlation_diag.f90 create mode 100644 src/MCQC/self_energy_exchange.f90 create mode 100644 src/MCQC/transition_probability.f90 create mode 100644 src/MCQC/utils.f90 create mode 100644 src/MCQC/wrap_lapack.f90 create mode 100644 src/xcDFT/AO_values_grid.f90 create mode 100644 src/xcDFT/DIIS_extrapolation.f90 create mode 100644 src/xcDFT/Makefile create mode 100644 src/xcDFT/NormCoeff.f90 create mode 100644 src/xcDFT/RKS.f90 create mode 100644 src/xcDFT/density.f90 create mode 100644 src/xcDFT/dft_grid.f create mode 100644 src/xcDFT/electron_number.f90 create mode 100644 src/xcDFT/elements.f90 create mode 100644 src/xcDFT/exchange_energy.f90 create mode 100644 src/xcDFT/exchange_potential.f90 create mode 100644 src/xcDFT/fock_exchange_energy.f90 create mode 100644 src/xcDFT/fock_exchange_potential.f90 create mode 100644 src/xcDFT/generate_shell.f90 create mode 100644 src/xcDFT/gga_exchange_energy.f90 create mode 100644 src/xcDFT/gga_exchange_potential.f90 create mode 100644 src/xcDFT/gradient_density.f90 create mode 100644 src/xcDFT/hartree_coulomb.f90 create mode 100644 src/xcDFT/lda_exchange_energy.f90 create mode 100644 src/xcDFT/lda_exchange_potential.f90 create mode 100644 src/xcDFT/obj/AO_values_grid.o create mode 100644 src/xcDFT/obj/DIIS_extrapolation.o create mode 100644 src/xcDFT/obj/NormCoeff.o create mode 100644 src/xcDFT/obj/RKS.o create mode 100644 src/xcDFT/obj/density.o create mode 100644 src/xcDFT/obj/dft_grid.o create mode 100644 src/xcDFT/obj/electron_number.o create mode 100644 src/xcDFT/obj/elements.o create mode 100644 src/xcDFT/obj/exchange_energy.o create mode 100644 src/xcDFT/obj/exchange_potential.o create mode 100644 src/xcDFT/obj/fock_exchange_energy.o create mode 100644 src/xcDFT/obj/fock_exchange_potential.o create mode 100644 src/xcDFT/obj/generate_shell.o create mode 100644 src/xcDFT/obj/gga_exchange_energy.o create mode 100644 src/xcDFT/obj/gga_exchange_potential.o create mode 100644 src/xcDFT/obj/gradient_density.o create mode 100644 src/xcDFT/obj/hartree_coulomb.o create mode 100644 src/xcDFT/obj/lda_exchange_energy.o create mode 100644 src/xcDFT/obj/lda_exchange_potential.o create mode 100644 src/xcDFT/obj/one_electron_density.o create mode 100644 src/xcDFT/obj/orthogonalization_matrix.o create mode 100644 src/xcDFT/obj/print_RKS.o create mode 100644 src/xcDFT/obj/quadrature_grid.o create mode 100644 src/xcDFT/obj/read_basis.o create mode 100644 src/xcDFT/obj/read_geometry.o create mode 100644 src/xcDFT/obj/read_grid.o create mode 100644 src/xcDFT/obj/read_integrals.o create mode 100644 src/xcDFT/obj/read_molecule.o create mode 100644 src/xcDFT/obj/read_options.o create mode 100644 src/xcDFT/obj/select_rung.o create mode 100644 src/xcDFT/obj/utils.o create mode 100644 src/xcDFT/obj/wrap_lapack.o create mode 100644 src/xcDFT/obj/xcDFT.o create mode 100644 src/xcDFT/one_electron_density.f90 create mode 100644 src/xcDFT/orthogonalization_matrix.f90 create mode 100644 src/xcDFT/print_RKS.f90 create mode 100644 src/xcDFT/quadrature_grid.f90 create mode 100644 src/xcDFT/read_basis.f90 create mode 100644 src/xcDFT/read_geometry.f90 create mode 100644 src/xcDFT/read_grid.f90 create mode 100644 src/xcDFT/read_integrals.f90 create mode 100644 src/xcDFT/read_molecule.f90 create mode 100644 src/xcDFT/read_options.f90 create mode 100644 src/xcDFT/select_rung.f90 create mode 100644 src/xcDFT/utils.f90 create mode 100644 src/xcDFT/wrap_lapack.f90 create mode 100644 src/xcDFT/xcDFT.f90 create mode 100755 utils/cp2input create mode 100755 utils/create_function.sh create mode 100755 utils/create_subroutine.sh create mode 100755 utils/fsplit create mode 100755 utils/install_lapack.sh create mode 160000 utils/lapack-release create mode 100644 utils/reblock.f90 create mode 100755 utils/rename diff --git a/GoDuck b/GoDuck new file mode 100755 index 0000000..98f014b --- /dev/null +++ b/GoDuck @@ -0,0 +1,18 @@ +#! /bin/bash + +set -e + +if [ $# -ne 2 ] +then + echo "You need two arguments [Molecule] [Basis] !!" +fi + +if [ $# = 2 ] +then + cp examples/molecule."$1" input/molecule + cp examples/basis."$1"."$2" input/basis + cp examples/basis."$1"."$2" input/weight + ./bin/IntPak + ./bin/MCQC +fi + diff --git a/GoSph b/GoSph new file mode 100755 index 0000000..0c86c9e --- /dev/null +++ b/GoSph @@ -0,0 +1,17 @@ +#! /bin/bash + +if [ $# -ne 1 ] +then + echo "You need one argument [BasisSetSize] !!" +fi + +if [ $# = 1 ] +then +cp examples/molecule.Sph input/molecule +cp examples/basis.Sph.Ylm"$1" input/basis +cp int/Sph_ERI_"$1".dat int/ERI.dat +cp int/Sph_Kin_"$1".dat int/Kin.dat +cp int/Sph_Nuc_"$1".dat int/Nuc.dat +cp int/Sph_Ov_"$1".dat int/Ov.dat +./bin/MCQC +fi diff --git a/PyDuck b/PyDuck new file mode 100755 index 0000000..25016c9 --- /dev/null +++ b/PyDuck @@ -0,0 +1,321 @@ +#!/usr/bin/env python2 +import sys +from termcolor import colored +import shlex +from subprocess import Popen, PIPE +import itertools +import re +import numpy as np +import os +from shutil import copy2 +import matplotlib.pyplot as plt +import json +from math import * +from collections import OrderedDict +import csv +import argparse +def GetDuckDir(): + return os.path.dirname(os.path.realpath(__file__)) + +def nNucl(molbaselines): + return float(molbaselines[1].split()[0]) + +def isMononucle(molbaselines): + return nNucl(molbaselines)==1 + +def openfileindir(path,readwrite): + mydir=os.path.dirname(path) + if not os.path.exists(mydir) and mydir!="": + os.makedirs(mydir) + return open(path,readwrite) +def outfile(Outdic,item,index=None): + itemdata=Outdic[item] + if itemdata["Enabled"]: + fmt=itemdata["Format"] + if index is not None: + filename=fmt.format(index) + else: + filename=fmt + if "Parent" in Outdic: + path=os.path.join(Outdic["Parent"],filename) + else: + path=filename + return openfileindir(path,'w') + else: + return + +def runDuck(mol,basis,x,molbaselines,molbase,basisbase): + #gennerate molecule file + currdir=os.getcwd() + os.chdir(GetDuckDir()) + molname='.'.join([mol,str(x)]) + lstw=list() + for i,line in enumerate(molbaselines): + if i<3: + lstw.append(line) + else: + if isMononucle(molbaselines): + if i==3: + lstw.append(' '.join([str(x)]+line.split()[1:])) + else: + v=[float(abs(x))/float(2),float(-abs(x)/float(2))] + val=v[i-3] + lstw.append(' '.join([line.split()[0],'0.','0.',str(val)])) + junkfiles=list() + with open(molbase+molname,'w') as n: + junkfiles.append(n.name) + n.write(os.linesep.join(lstw)) + #Copy basis + basisfile=basisbase+'.'.join([mol,basis]) + newbasisfile=basisbase+'.'.join([molname,basis]) + copy2(basisfile,newbasisfile) + junkfiles.append(newbasisfile) + #start child process Goduck + cmd=" ".join(["./GoDuck",molname, basis]) + Duck=Popen(shlex.split(cmd),stdout=PIPE) + (DuckOut, DuckErr) = Duck.communicate() + excode=Duck.wait() + for junk in junkfiles: + os.remove(junk) + os.chdir(currdir) + return (excode,DuckOut,DuckErr) + +def addvalue(dic,key,x,y): + if key not in dic: + dic[key]=list() + dic[key].append(y) + print(key) + print(x,y) + +def main(mol): + #get basepath for files + molbase='examples/molecule.' + basisbase=molbase.replace('molecule','basis') + with open('PyOptions.json','r') as jfile: + options=json.loads(jfile.read()) + basis=str(options['Basis']) + #Get mehtod to analyse + methodsdic=options['Methods'] + #Get datas to analyse in this method + scandic=options['Scan'] + scan=np.arange(scandic['Start'],scandic['Stop']+scandic['Step'],scandic['Step']) + print(scan) + mymethods=dict() + alllabels=list() + for method,methoddatas in methodsdic.iteritems(): + if methoddatas['Enabled']: + mymethods[method]=methoddatas + for label,labeldatas in methoddatas['Labels'].iteritems(): + if type(labeldatas) is dict: + enabled=labeldatas['Enabled'] + else: + enabled=labeldatas + if enabled and label not in alllabels: + alllabels.append(label) + graphdic=dict() + errorconvstring="Convergence failed" + with open(os.path.join(GetDuckDir(),molbase+mol),'r') as b: + molbaselines=b.read().splitlines() + if isMononucle(molbaselines): + print('monoatomic system: variation of the nuclear charge') + else: + print('polyatomic system: variation is on the distance') + for x in scan: + (DuckExit,DuckOut,DuckErr)=runDuck(mol,basis,x,molbaselines,molbase,basisbase) + #print DuckOut on file or not + if "Outputs" in options: + outdat=options["Outputs"] + if 'DuckOutput' in outdat: + outopt=outdat["DuckOutput"] + if outopt['Enabled']: + if outopt['Multiple']: + duckoutf=outfile(outopt,"DuckOutput",x) + else: + if x==scan[0]: + duckoutf=outfile(outdat,"DuckOutput") + duckoutf.write('Z' if isMononucle(molbaselines) else 'Distance'+' '+str(x)+os.linesep+os.linesep) + duckoutf.write(DuckOut) + if outopt['Multiple']: + duckoutf.close() + print("GoDuk exit code " + str(DuckExit)) + if DuckExit !=0: + #if GoDuck is not happy + print(DuckErr) + sys.exit(-1) + #get all data for the method + for method,methoddatas in mymethods.iteritems(): + isnan=False + if '{0}' in method: + if "index" in methoddatas: + methodheaders=[method.format(str(x)) for x in methoddatas['Index']] + else: + try: + print(method) + reglist=re.findall('(\d+)'.join([re.escape(s) for s in method.split('{0}')]),DuckOut) + print(reglist) + final=max([(int(i[0]) if type(i) is tuple else int(i)) for i in reglist]) + print(final) + methodheaders=[method.format(str(final))] + except: + isnan=True + methodheaders=[None] + method=method.replace('{0}','') + else: + methodheaders=list([method]) + for methodheader in methodheaders: + if len(methodheaders)!=1: + method=methodheader + lbldic=methoddatas['Labels'] + print(methodheader) + if methodheader is None: + methodtxt='' + else: + it=itertools.dropwhile(lambda line: methodheader + ' calculation' not in line , DuckOut.splitlines()) + it=itertools.takewhile(lambda line: 'Total CPU time for ' not in line, it) + methodtxt=os.linesep.join(it) + if errorconvstring in methodtxt: + print(colored(' '.join([method, errorconvstring, '!!!!!']),'red')) + isnan=True + if methodtxt=='': + print(colored('No data' +os.linesep+ 'RHF scf not converged or method not enabled','red')) + isnan=True + #find the expected values + for label,labeldatas in lbldic.iteritems(): + if type(labeldatas) is dict: + indexed=('Index' in labeldatas) + enabled=labeldatas['Enabled'] + graph=labeldatas['Graph'] if 'Graph' in labeldatas else 1 + else: + enabled=labeldatas + graph=1 + indexed=False + if enabled: + if graph not in graphdic: + graphdic[graph]=OrderedDict() + y=graphdic[graph] + if not indexed: + v=np.nan + print(method) + print(label) + if not isnan: + try: + m=re.search('\s+'.join([re.escape(w) for w in label.split()]) + "\s+(?:"+re.escape("(eV):")+"\s+)?(?:=\s+)?(-?\d+.?\d*)",methodtxt) + v=m.group(1) + except: + v=np.nan + addvalue(y,(method,label),x,v) + else: + startindex=-1 + columnindex=-1 + linedtxt=methodtxt.split(os.linesep) + for n,line in enumerate(linedtxt): + if all(x in line for x in ['|',' '+label+' ','#']): + startindex=n+2 + columnindex=[s.strip() for s in line.split('|')].index(label) + break + with open(os.path.join(GetDuckDir(),'input','molecule'),'r') as molfile: + molfile.readline() + line=molfile.readline() + nel=int(line.split()[1]) + print(nel) + HOMO=int(nel/2) + HO=HOMO + LUMO=HOMO+1 + BV=LUMO + for i in labeldatas['Index']: + v=np.nan + if type(i) is str or type(i) is unicode: + ival=eval(i) + if type(ival) is not int: + print('Index '+ str(i) + 'must be integer') + sys.exit(-2) + else: + ival=i + v=np.nan + if not isnan: + try: + if startindex!=-1 and columnindex!=-1: + line=linedtxt[startindex+ival-1] + v=float(line.split('|')[columnindex].split()[0]) + print(method) + print(label) + print(i) + else: + v=np.nan + except: + v=np.nan + key=(method,label,i) + addvalue(y,key,x,v) + tpl=(x,scan.tolist().index(x)+1,len(y[key])) + print(tpl) + if tpl[1]-tpl[2]: + sys.exit() + #define graph grid + maxgraph=max(graphdic.keys()) + maxrow=int(round(sqrt(maxgraph))) + maxcol=int(ceil(float(maxgraph)/float(maxrow))) + #define label ls + for graph,y in graphdic.iteritems(): + datas=list() + datas.append(["#x"]+scan.tolist()) + if len(y.keys())!=0: + plt.subplot(maxrow,maxcol,graph) + plt.xlabel('Z' if isMononucle(molbaselines) else 'Distance '+mol) + ylbls=list([basis]) + for i in range(0,2): + lst=list(set([key[i] for key in y.keys()])) + if len(lst)==1: + ylbls.append(lst[0]) + plt.ylabel(' '.join(ylbls)) + print('Legend') + print(list(y.keys())) + for key,values in y.iteritems(): + legend=list() + for el in key[0:2]: + if el not in ylbls: + legend.append(el) + if len(key)>2: + legend.append(str(key[2])) + #plot curves + lbl=' '.join(legend) + plt.plot(scan,y[key],'-o',label=lbl) + #print("min",x[y.index(min(y))]/2) + #generate legends + plt.legend() + dataout=False + if "Outputs" in options: + outputs=options['Outputs'] + if "DataOutput" in outputs: + DataOutput=outputs['DataOutput'] + dataout=DataOutput['Enabled'] + if dataout: + fmtlegendf='{0}({1})' + datas.append([fmtlegendf.format("y",lbl)]+y[key]) + if dataout: + csvdatas=zip(*datas) + with outfile(outputs,"DataOutput",graph) as csvf: + writer = csv.writer(csvf, delimiter=' ') + writer.writerow(['#']+ylbls) + writer.writerows(csvdatas) + #show graph + if "Outputs" in options: + outputs=options['Outputs'] + if "FigureOutput" in outputs: + figout=outputs["FigureOutput"] + if figout["Enabled"]: + plt.savefig(figout['Path']) + plt.show() +if __name__ == '__main__': + parser=argparse.ArgumentParser() + parser.add_argument("mol",nargs='?', help="molecule to compute",type=str) + parser.add_argument("-c,--copy", help="Copy sample option file",action="store_true",dest="copy") + args = parser.parse_args() + if len(sys.argv)==1: + parser.print_help() + else: + if args.copy: + copy2(os.path.join(GetDuckDir(),"PyOptions.template.json"),"PyOptions.json") + if args.mol is not None: + os.system("vim PyOptions.json") + if args.mol is not None: + main(args.mol) diff --git a/PyOptions.json b/PyOptions.json new file mode 100644 index 0000000..77b67a9 --- /dev/null +++ b/PyOptions.json @@ -0,0 +1,145 @@ +{ + "Scan": { + "Start":0.8, + "Stop":1.2, + "Step":0.01 + }, + "Basis":"6-31G", + "Outputs": { + "DataOutput": { + "Enabled":true, + "Format":"Duck{0}.dat" + }, + "DuckOutput": { + "Enabled":true, + "Multiple":false, + "Format":"DuckOut.out" + }, + "FigureOutput":{ + "Enabled":false, + "Path":"Figure.png" + } + }, + "Methods": { + "RHF":{ + "Enabled": true, + "Labels": { + "One-electron energy":false, + "Kinetic energy":false, + "Potential energy":false, + "Two-electron energy":false, + "Coulomb energy":false, + "Exchange energy":false, + "Electronic energy":false, + "Nuclear repulsion":false, + "Hartree-Fock energy":true, + "HF HOMO energy":false, + "HF LUMO energy":false, + "HF HOMO-LUMO gap":false + } + }, + "One-shot G0W0": { + "Enabled": true, + "Labels": { + "G0W0 HOMO energy":true, + "G0W0 LUMO energy":true, + "G0W0 HOMO-LUMO gap":false, + "G0W0 total energy":false, + "RPA correlation energy" :false, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":1 + }, + "Sigma_c (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":2 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO+1","LUMO+2"], + "Graph":3 + }, + "e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + } + } + }, + "Self-consistent evG{0}W{0}": { + "Enabled":false, + "Labels": { + "evGW HOMO energy":false, + "evGW LUMO energy":false, + "evGW HOMO-LUMO gap":false, + "evGW total energy":false, + "RPA correlation energy" :false, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":1 + }, + "Sigma_c (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":2 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":3 + }, + "e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + } + } + }, + "Self-consistent qsG{0}W{0}": { + "Enabled": false, + "Labels": { + "qsGW HOMO energy":false, + "qsGW LUMO energy":false, + "qsGW HOMO-LUMO gap":false, + "qsGW total energy":false, + "qsGW exchange energy":false, + "qsGW correlation energy":false, + "RPA correlation energy":{ + "Enabled":false, + "Graph":2 + }, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + }, + "e_QP-e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":5 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":6 + } + } + }, + "MP2": { + "Enabled": false, + "Labels": { + "MP2 correlation energy": { + "Enabled":true, + "Graph":4 + }, + "Direct part":false, + "Exchange part":false, + "MP2 total energy":true, + "MP2 energy":false + } + } + } +} diff --git a/PyOptions.template.json b/PyOptions.template.json new file mode 100644 index 0000000..77b67a9 --- /dev/null +++ b/PyOptions.template.json @@ -0,0 +1,145 @@ +{ + "Scan": { + "Start":0.8, + "Stop":1.2, + "Step":0.01 + }, + "Basis":"6-31G", + "Outputs": { + "DataOutput": { + "Enabled":true, + "Format":"Duck{0}.dat" + }, + "DuckOutput": { + "Enabled":true, + "Multiple":false, + "Format":"DuckOut.out" + }, + "FigureOutput":{ + "Enabled":false, + "Path":"Figure.png" + } + }, + "Methods": { + "RHF":{ + "Enabled": true, + "Labels": { + "One-electron energy":false, + "Kinetic energy":false, + "Potential energy":false, + "Two-electron energy":false, + "Coulomb energy":false, + "Exchange energy":false, + "Electronic energy":false, + "Nuclear repulsion":false, + "Hartree-Fock energy":true, + "HF HOMO energy":false, + "HF LUMO energy":false, + "HF HOMO-LUMO gap":false + } + }, + "One-shot G0W0": { + "Enabled": true, + "Labels": { + "G0W0 HOMO energy":true, + "G0W0 LUMO energy":true, + "G0W0 HOMO-LUMO gap":false, + "G0W0 total energy":false, + "RPA correlation energy" :false, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":1 + }, + "Sigma_c (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":2 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO+1","LUMO+2"], + "Graph":3 + }, + "e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + } + } + }, + "Self-consistent evG{0}W{0}": { + "Enabled":false, + "Labels": { + "evGW HOMO energy":false, + "evGW LUMO energy":false, + "evGW HOMO-LUMO gap":false, + "evGW total energy":false, + "RPA correlation energy" :false, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":1 + }, + "Sigma_c (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":2 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":3 + }, + "e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + } + } + }, + "Self-consistent qsG{0}W{0}": { + "Enabled": false, + "Labels": { + "qsGW HOMO energy":false, + "qsGW LUMO energy":false, + "qsGW HOMO-LUMO gap":false, + "qsGW total energy":false, + "qsGW exchange energy":false, + "qsGW correlation energy":false, + "RPA correlation energy":{ + "Enabled":false, + "Graph":2 + }, + "Z": { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":4 + }, + "e_QP-e_HF (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":5 + }, + "e_QP (eV)" : { + "Enabled":true, + "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], + "Graph":6 + } + } + }, + "MP2": { + "Enabled": false, + "Labels": { + "MP2 correlation energy": { + "Enabled":true, + "Graph":4 + }, + "Direct part":false, + "Exchange part":false, + "MP2 total energy":true, + "MP2 energy":false + } + } + } +} diff --git a/include/parameters.h b/include/parameters.h new file mode 100644 index 0000000..cf69187 --- /dev/null +++ b/include/parameters.h @@ -0,0 +1,12 @@ + integer,parameter :: nspin = 2 + integer,parameter :: maxShell = 50 + integer,parameter :: n1eInt = 3 + integer,parameter :: n2eInt = 4 + integer,parameter :: n3eInt = 3 + integer,parameter :: n4eInt = 3 + integer,parameter :: maxK = 20 + + double precision,parameter :: pi = acos(-1d0) + double precision,parameter :: HaToeV = 27.21138602d0 + double precision,parameter :: pmtoau = 0.0188973d0 + diff --git a/include/quadrature.h b/include/quadrature.h new file mode 100644 index 0000000..f4e8a13 --- /dev/null +++ b/include/quadrature.h @@ -0,0 +1,17 @@ + +! Gauss-Legendre quadrature roots and weights + + integer,parameter :: nQuad = 21 + double precision, save :: rQuad(1:nQuad) = & + (/ 0.00312391468981d0 , 0.0163865807168d0 , 0.0399503329248d0 , 0.0733183177083d0 , 0.115780018262d0 , & + 0.166430597901d0 , 0.224190582056d0 , 0.287828939896d0 , 0.355989341599d0 , 0.42721907292d0 , & + 0.5d0 , 0.57278092708d0 , 0.644010658401d0 , 0.712171060104d0 , 0.775809417944d0 , & + 0.833569402099d0 , 0.884219981738d0 , 0.926681682292d0 , 0.960049667075d0 , 0.983613419283d0 , & + 0.99687608531d0 /) + double precision, save :: wQuad(1:nQuad) = & + (/ 0.0080086141288872d0, 0.018476894885426d0, 0.028567212713429d0, 0.03805005681419d0 , 0.046722211728017d0, & + 0.054398649583574d0 , 0.060915708026864d0, 0.066134469316669d0, 0.069943697395537d0, 0.072262201994985d0, & + 0.07304056682485d0 , 0.072262201994985d0, 0.069943697395537d0, 0.066134469316669d0, 0.060915708026864d0, & + 0.054398649583574d0 , 0.046722211728017d0, 0.03805005681419d0 , 0.028567212713429d0, 0.018476894885426d0, & + 0.0080086141288872d0 /) + diff --git a/input/auxbasis b/input/auxbasis new file mode 100644 index 0000000..4317623 --- /dev/null +++ b/input/auxbasis @@ -0,0 +1,3 @@ +1 0 +2 0 +3 0 diff --git a/input/basis b/input/basis new file mode 100644 index 0000000..a18b478 --- /dev/null +++ b/input/basis @@ -0,0 +1,14 @@ +1 2 +S 3 1.00 + 18.7311370 0.03349460 + 2.8253937 0.23472695 + 0.6401217 0.81375733 +S 1 1.00 + 0.1612778 1.0000000 +2 2 +S 3 1.00 + 18.7311370 0.03349460 + 2.8253937 0.23472695 + 0.6401217 0.81375733 +S 1 1.00 + 0.1612778 1.0000000 diff --git a/input/geminal b/input/geminal new file mode 100644 index 0000000..d3827e7 --- /dev/null +++ b/input/geminal @@ -0,0 +1 @@ +1.0 diff --git a/input/methods b/input/methods new file mode 100644 index 0000000..183d9ac --- /dev/null +++ b/input/methods @@ -0,0 +1,13 @@ +# HF MOM + T F +# MP2 MP3 + F F +# CIS TDHF ADC + F F F +# GF2 GF3 + F F +# G0W0 evGW qsGW + T F F +# MCMP2 + F + diff --git a/input/molecule b/input/molecule new file mode 100644 index 0000000..1578c45 --- /dev/null +++ b/input/molecule @@ -0,0 +1,5 @@ +# nAt nEl nCore nRyd + 2 2 0 0 +# Znuc x y z +1. 0. 0. 0.4 +1. 0. 0. -0.4 \ No newline at end of file diff --git a/input/options b/input/options new file mode 100644 index 0000000..5549cb1 --- /dev/null +++ b/input/options @@ -0,0 +1,12 @@ +# RHF: maxSCF thresh DIIS n_diis guess_type ortho_type + 32 0.0000001 T 5 1 1 +# MPn: + +# CIS/TDHF: singlet triplet + T F +# GF: maxSCF thresh DIIS n_diis renormalization + 64 0.00001 T 5 3 +# GW: maxSCF thresh DIIS n_diis COHSEX SOSEX BSE TDA G0W GW0 linearize + 64 0.00001 T 15 F F F F F F F +# MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift + 1000000 100000 10 0.3 10000 1234 T diff --git a/input/weight b/input/weight new file mode 100644 index 0000000..a18b478 --- /dev/null +++ b/input/weight @@ -0,0 +1,14 @@ +1 2 +S 3 1.00 + 18.7311370 0.03349460 + 2.8253937 0.23472695 + 0.6401217 0.81375733 +S 1 1.00 + 0.1612778 1.0000000 +2 2 +S 3 1.00 + 18.7311370 0.03349460 + 2.8253937 0.23472695 + 0.6401217 0.81375733 +S 1 1.00 + 0.1612778 1.0000000 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..db094b720495cf76689843eca76e7347b03558b1 GIT binary patch literal 8196 zcmeHMTWl0n7(QPqFw+q_t(DdV+QHg_*ubvEQjE}Lw?x{46t>WEEwei#oj9GTJF{C# zEjIdMM14XGUc#GEG4VybzNrrqjaQ6;2NT1q(L`f3zUY7E%r?DH;}eiDCz^aLAL#kjT7^`E9Npx{k6{@aLxSn5gN?9l=Cj|Mk?5H=AwcRY;Uz}qd38D-{ z8Hh3vWgyBxl!2Qe1GHxIBF(ez3vEXwxyTB@E z#rV?n0Bx_B76%k%Z~2Xq$mQw0Nwp9wt7G@bsxI|;6qo3tMOi1Sp4|5+ zySxjsKJX6R z^LLGy4vo!2NY}?=`?-9pVVH&_NsXm9-Hmmde+el`PIuteYKSBW#SF zVrSSn_71zi-en)N&)IkEGP}xtVZXB9*zfEw02R0mORyBRs6!0Pu?7j;hgNi8JG#(= z9oUTnIEceIf*foN!^H@Scmk7n5>Me2PU8if!8yE+H*g+r;Uj#CFYy(=#y7ZvtN0mz zi03OS(RfGrjqH%c6R(AT@G;SaotKH2vEsZZP<=nl!=8k2xTGQHft?ipr zQ*VCO%br2T=?n}=Cs-A*t;8n5a$@-M6)Tm7y~IQF`0SZcnlb8PJ};z8+B z8*tPKI68)LOyDFj^=UkVXYm}K$BQ_Nm+=Z-#cRaZHv_(2zEUxy< z;_8pnxmwKR9ouz|k*vh+ndZ^mjmp3RF>oE<|8JZB{QpKhUNml$fhYslAp 1d-15) then + + nSigc2eInt = nSigc2eInt + 1 + t_c2eInt = end_c2eInt - start_c2eInt + + if(chemist_notation) then + + write(iFile,'(I6,I6,I6,I6,F20.15)') iBasA1,iBasB1,iBasA2,iBasB2,c2eInt + + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6,1X,I6,1X,I6)') & + '(a1b1|a2b2) = ',c2eInt,iBasA1,iBasB1,iBasA2,iBasB2 + endif + + else + + write(iFile,'(I6,I6,I6,I6,F20.15)') iBasA1,iBasA2,iBasB1,iBasB2,c2eInt + + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6,1X,I6,1X,I6)') & + ' = ',c2eInt,iBasA1,iBasA2,iBasB1,iBasB2 + endif + + endif + endif + +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB2) + enddo + iBasB2 = 0 +!------------------------------------------------------------------------ +! End loops over shell B2 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA2) + enddo + iBasA2 = 0 +!------------------------------------------------------------------------ +! End loops over shell A2 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB1) + enddo + iBasB1 = 0 +!------------------------------------------------------------------------ +! End loops over shell B1 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA1) + enddo + iBasA1 = 0 +!------------------------------------------------------------------------ +! End loops over shell A1 +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=iFile) + +end subroutine Compute2eInt diff --git a/src/IntPak/Compute3eInt.f90 b/src/IntPak/Compute3eInt.f90 new file mode 100644 index 0000000..c787602 --- /dev/null +++ b/src/IntPak/Compute3eInt.f90 @@ -0,0 +1,328 @@ +subroutine Compute3eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np3eInt,nSigp3eInt,nc3eInt,nSigc3eInt) + + +! Compute long-range Coulomb integrals + + implicit none + include 'parameters.h' + + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: iType,nShell + double precision,intent(in) :: ExpS + integer,intent(in) :: KG + double precision,intent(in) :: DG(KG),ExpG(KG) + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + integer :: KBra(3),KKet(3) + double precision :: CenterBra(3,3),CenterKet(3,3) + integer :: TotAngMomBra(3),TotAngMomKet(3) + integer :: AngMomBra(3,3),AngMomKet(3,3) + integer :: nShellFunctionBra(3),nShellFunctionKet(3) + integer,allocatable :: ShellFunctionA1(:,:),ShellFunctionA2(:,:),ShellFunctionA3(:,:) + integer,allocatable :: ShellFunctionB1(:,:),ShellFunctionB2(:,:),ShellFunctionB3(:,:) + double precision :: ExpBra(3),ExpKet(3) + double precision :: DBra(3),DKet(3) + double precision :: NormCoeff + + integer :: iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3 + integer :: iShA1,iShA2,iShA3,iShB1,iShB2,iShB3 + integer :: iShFA1,iShFA2,iShFA3,iShFB1,iShFB2,iShFB3 + integer :: iKA1,iKA2,iKA3,iKB1,iKB2,iKB3 + integer :: iFile + + double precision :: p3eInt,c3eInt + double precision :: start_c3eInt,end_c3eInt,t_c3eInt + +! Output variables + + integer,intent(out) :: np3eInt,nSigp3eInt,nc3eInt,nSigc3eInt + +! Compute three-electron integrals + + write(*,*) '**********************************' + write(*,*) ' Compute three-electron integrals ' + write(*,*) '**********************************' + write(*,*) + + np3eInt = 0 + nSigp3eInt = 0 + + nc3eInt = 0 + nSigc3eInt = 0 + + iBasA1 = 0 + iBasA2 = 0 + iBasA3 = 0 + iBasB1 = 0 + iBasB2 = 0 + iBasB3 = 0 + +! Open file to write down integrals + + iFile = 0 + + if(iType == 1) then + iFile = 31 + open(unit=iFile,file='int/3eInt_Type1.dat') + elseif(iType == 2) then + iFile = 32 + open(unit=iFile,file='int/3eInt_Type2.dat') + elseif(iType == 3) then + iFile = 33 + open(unit=iFile,file='int/3eInt_Type3.dat') + endif + +!------------------------------------------------------------------------ +! Loops over shell A1 +!------------------------------------------------------------------------ + do iShA1=1,nShell + + CenterBra(1,1) = CenterShell(iShA1,1) + CenterBra(1,2) = CenterShell(iShA1,2) + CenterBra(1,3) = CenterShell(iShA1,3) + + TotAngMomBra(1) = TotAngMomShell(iShA1) + nShellFunctionBra(1) = (TotAngMomBra(1)*TotAngMomBra(1) + 3*TotAngMomBra(1) + 2)/2 + allocate(ShellFunctionA1(1:nShellFunctionBra(1),1:3)) + call GenerateShell(TotAngMomBra(1),nShellFunctionBra(1),ShellFunctionA1) + + KBra(1) = KShell(iShA1) + + do iShFA1=1,nShellFunctionBra(1) + + iBasA1 = iBasA1 + 1 + AngMomBra(1,1) = ShellFunctionA1(iShFA1,1) + AngMomBra(1,2) = ShellFunctionA1(iShFA1,2) + AngMomBra(1,3) = ShellFunctionA1(iShFA1,3) + +!------------------------------------------------------------------------ +! Loops over shell A2 +!------------------------------------------------------------------------ + do iShA2=1,nShell + + CenterBra(2,1) = CenterShell(iShA2,1) + CenterBra(2,2) = CenterShell(iShA2,2) + CenterBra(2,3) = CenterShell(iShA2,3) + + TotAngMomBra(2) = TotAngMomShell(iShA2) + nShellFunctionBra(2) = (TotAngMomBra(2)*TotAngMomBra(2) + 3*TotAngMomBra(2) + 2)/2 + allocate(ShellFunctionA2(1:nShellFunctionBra(2),1:3)) + call GenerateShell(TotAngMomBra(2),nShellFunctionBra(2),ShellFunctionA2) + + KBra(2) = KShell(iShA2) + + do iShFA2=1,nShellFunctionBra(2) + + iBasA2 = iBasA2 + 1 + AngMomBra(2,1) = ShellFunctionA2(iShFA2,1) + AngMomBra(2,2) = ShellFunctionA2(iShFA2,2) + AngMomBra(2,3) = ShellFunctionA2(iShFA2,3) + +!------------------------------------------------------------------------ +! Loops over shell A3 +!------------------------------------------------------------------------ + do iShA3=1,nShell + + CenterBra(3,1) = CenterShell(iShA3,1) + CenterBra(3,2) = CenterShell(iShA3,2) + CenterBra(3,3) = CenterShell(iShA3,3) + + TotAngMomBra(3) = TotAngMomShell(iShA3) + nShellFunctionBra(3) = (TotAngMomBra(3)*TotAngMomBra(3) + 3*TotAngMomBra(3) + 2)/2 + allocate(ShellFunctionA3(1:nShellFunctionBra(3),1:3)) + call GenerateShell(TotAngMomBra(3),nShellFunctionBra(3),ShellFunctionA3) + + KBra(3) = KShell(iShA3) + + do iShFA3=1,nShellFunctionBra(3) + + iBasA3 = iBasA3 + 1 + AngMomBra(3,1) = ShellFunctionA3(iShFA3,1) + AngMomBra(3,2) = ShellFunctionA3(iShFA3,2) + AngMomBra(3,3) = ShellFunctionA3(iShFA3,3) + +!------------------------------------------------------------------------ +! Loops over shell B1 +!------------------------------------------------------------------------ + do iShB1=1,nShell + + CenterKet(1,1) = CenterShell(iShB1,1) + CenterKet(1,2) = CenterShell(iShB1,2) + CenterKet(1,3) = CenterShell(iShB1,3) + + TotAngMomKet(1) = TotAngMomShell(iShB1) + nShellFunctionKet(1) = (TotAngMomKet(1)*TotAngMomKet(1) + 3*TotAngMomKet(1) + 2)/2 + allocate(ShellFunctionB1(1:nShellFunctionKet(1),1:3)) + call GenerateShell(TotAngMomKet(1),nShellFunctionKet(1),ShellFunctionB1) + + KKet(1) = KShell(iShB1) + + do iShFB1=1,nShellFunctionKet(1) + + iBasB1 = iBasB1 + 1 + AngMomKet(1,1) = ShellFunctionB1(iShFB1,1) + AngMomKet(1,2) = ShellFunctionB1(iShFB1,2) + AngMomKet(1,3) = ShellFunctionB1(iShFB1,3) + +!------------------------------------------------------------------------ +! Loops over shell B2 +!------------------------------------------------------------------------ + do iShB2=1,nShell + + CenterKet(2,1) = CenterShell(iShB2,1) + CenterKet(2,2) = CenterShell(iShB2,2) + CenterKet(2,3) = CenterShell(iShB2,3) + + TotAngMomKet(2) = TotAngMomShell(iShB2) + nShellFunctionKet(2) = (TotAngMomKet(2)*TotAngMomKet(2) + 3*TotAngMomKet(2) + 2)/2 + allocate(ShellFunctionB2(1:nShellFunctionKet(2),1:3)) + call GenerateShell(TotAngMomKet(2),nShellFunctionKet(2),ShellFunctionB2) + + KKet(2) = KShell(iShB2) + + do iShFB2=1,nShellFunctionKet(2) + + iBasB2 = iBasB2 + 1 + AngMomKet(2,1) = ShellFunctionB2(iShFB2,1) + AngMomKet(2,2) = ShellFunctionB2(iShFB2,2) + AngMomKet(2,3) = ShellFunctionB2(iShFB2,3) + +!------------------------------------------------------------------------ +! Loops over shell B3 +!------------------------------------------------------------------------ + do iShB3=1,nShell + + CenterKet(3,1) = CenterShell(iShB3,1) + CenterKet(3,2) = CenterShell(iShB3,2) + CenterKet(3,3) = CenterShell(iShB3,3) + + TotAngMomKet(3) = TotAngMomShell(iShB3) + nShellFunctionKet(3) = (TotAngMomKet(3)*TotAngMomKet(3) + 3*TotAngMomKet(3) + 2)/2 + allocate(ShellFunctionB3(1:nShellFunctionKet(3),1:3)) + call GenerateShell(TotAngMomKet(3),nShellFunctionKet(3),ShellFunctionB3) + + KKet(3) = KShell(iShB3) + + do iShFB3=1,nShellFunctionKet(3) + + iBasB3 = iBasB3 + 1 + AngMomKet(3,1) = ShellFunctionB3(iShFB3,1) + AngMomKet(3,2) = ShellFunctionB3(iShFB3,2) + AngMomKet(3,3) = ShellFunctionB3(iShFB3,3) + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + call cpu_time(start_c3eInt) + + c3eInt = 0d0 + + do iKA1=1,KBra(1) + ExpBra(1) = ExpShell(iShA1,iKA1) + DBra(1) = DShell(iShA1,iKA1)*NormCoeff(ExpBra(1),AngMomBra(1,1:3)) + do iKA2=1,KBra(2) + ExpBra(2) = ExpShell(iShA2,iKA2) + DBra(2) = DShell(iShA2,iKA2)*NormCoeff(ExpBra(2),AngMomBra(2,1:3)) + do iKA3=1,KBra(3) + ExpBra(3) = ExpShell(iShA3,iKA3) + DBra(3) = DShell(iShA3,iKA3)*NormCoeff(ExpBra(3),AngMomBra(3,1:3)) + do iKB1=1,KKet(1) + ExpKet(1) = ExpShell(iShB1,iKB1) + DKet(1) = DShell(iShB1,iKB1)*NormCoeff(ExpKet(1),AngMomKet(1,1:3)) + do iKB2=1,KKet(2) + ExpKet(2) = ExpShell(iShB2,iKB2) + DKet(2) = DShell(iShB2,iKB2)*NormCoeff(ExpKet(2),AngMomKet(2,1:3)) + do iKB3=1,KKet(3) + ExpKet(3) = ExpShell(iShB3,iKB3) + DKet(3) = DShell(iShB3,iKB3)*NormCoeff(ExpKet(3),AngMomKet(3,1:3)) + + call S3eInt(debug,iType,np3eInt,nSigp3eInt, & + ExpS,KG,DG,ExpG, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet, & + p3eInt) + + c3eInt = c3eInt + DBra(1)*DBra(2)*DBra(3)*DKet(1)*DKet(2)*DKet(3)*p3eInt + + enddo + enddo + enddo + enddo + enddo + enddo + call cpu_time(end_c3eInt) + + nc3eInt = nc3eInt + 1 + if(abs(c3eInt) > 1d-15) then + nSigc3eInt = nSigc3eInt + 1 + t_c3eInt = end_c3eInt - start_c3eInt + write(iFile,'(F20.15,I6,I6,I6,I6,I6,I6)') & + c3eInt,iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3 + if(.true.) then + write(*,'(A15,1X,F16.10,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6)') & + '(a1a2a3|b1b2b3) = ',c3eInt,iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3 + endif + endif + +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB3) + enddo + iBasB3 = 0 +!------------------------------------------------------------------------ +! End loops over shell B3 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB2) + enddo + iBasB2 = 0 +!------------------------------------------------------------------------ +! End loops over shell B2 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB1) + enddo + iBasB1 = 0 +!------------------------------------------------------------------------ +! End loops over shell B1 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA3) + enddo + iBasA3 = 0 +!------------------------------------------------------------------------ +! End loops over shell A3 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA2) + enddo + iBasA2 = 0 +!------------------------------------------------------------------------ +! End loops over shell A2 +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA1) + enddo + iBasA1 = 0 +!------------------------------------------------------------------------ +! End loops over shell A1 +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=iFile) + +end subroutine Compute3eInt diff --git a/src/IntPak/Compute4eInt.f90 b/src/IntPak/Compute4eInt.f90 new file mode 100644 index 0000000..0f21fef --- /dev/null +++ b/src/IntPak/Compute4eInt.f90 @@ -0,0 +1,246 @@ +subroutine Compute4eInt(debug,nEl,iType,nShell,ExpS, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + npErf,nSigpErf,ncErf,nSigcErf) + + +! Compute long-range Coulomb integrals + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: nEl,iType,nShell + double precision :: ExpS + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + integer :: KA,KB,KC,KD + double precision :: CenterA(3),CenterB(3),CenterC(3),CenterD(3) + integer :: TotAngMomA,TotAngMomB,TotAngMomC,TotAngMomD + integer :: AngMomA(3),AngMomB(3),AngMomC(3),AngMomD(3) + integer :: nShellFunctionA,nShellFunctionB, & + nShellFunctionC,nShellFunctionD + integer,allocatable :: ShellFunctionA(:,:),ShellFunctionB(:,:), & + ShellFunctionC(:,:),ShellFunctionD(:,:) + double precision :: ExpA,ExpB,ExpC,ExpD + double precision,allocatable :: DA,DB,DC,DD + double precision :: NormCoeff + + integer :: iBasA,iBasB,iBasC,iBasD + integer :: iShA,iShB,iShC,iShD + integer :: iShFA,iShFB,iShFC,iShFD + integer :: iKA,iKB,iKC,iKD + + double precision :: pErf,cErf + double precision :: start_cErf,end_cErf,t_cErf + +! Output variables + + integer,intent(out) :: npErf,nSigpErf,ncErf,nSigcErf + +! Compute two-electron integrals over long-range Coulomb operator + + write(*,*) '**********************************' + write(*,*) ' Compute three-electron integrals ' + write(*,*) '**********************************' + write(*,*) + + npErf = 0 + nSigpErf = 0 + + ncErf = 0 + nSigcErf = 0 + + iBasA = 0 + iBasB = 0 + iBasC = 0 + iBasD = 0 + +! Open file to write down integrals + + open(unit=41,file='int/4eInt_Type1.dat') + +!------------------------------------------------------------------------ +! Loops over shell A +!------------------------------------------------------------------------ + do iShA=1,nShell + + CenterA(1) = CenterShell(iShA,1) + CenterA(2) = CenterShell(iShA,2) + CenterA(3) = CenterShell(iShA,3) + + TotAngMomA = TotAngMomShell(iShA) + nShellFunctionA = (TotAngMomA*TotAngMomA + 3*TotAngMomA + 2)/2 + allocate(ShellFunctionA(1:nShellFunctionA,1:3)) + call GenerateShell(TotAngMomA,nShellFunctionA,ShellFunctionA) + + KA = KShell(iShA) + + do iShFA=1,nShellFunctionA + + iBasA = iBasA + 1 + AngMomA(1) = ShellFunctionA(iShFA,1) + AngMomA(2) = ShellFunctionA(iShFA,2) + AngMomA(3) = ShellFunctionA(iShFA,3) + +!------------------------------------------------------------------------ +! Loops over shell B +!------------------------------------------------------------------------ + do iShB=1,iShA + + CenterB(1) = CenterShell(iShB,1) + CenterB(2) = CenterShell(iShB,2) + CenterB(3) = CenterShell(iShB,3) + + TotAngMomB = TotAngMomShell(iShB) + nShellFunctionB = (TotAngMomB*TotAngMomB + 3*TotAngMomB + 2)/2 + allocate(ShellFunctionB(1:nShellFunctionB,1:3)) + call GenerateShell(TotAngMomB,nShellFunctionB,ShellFunctionB) + + KB = KShell(iShB) + + do iShFB=1,nShellFunctionB + + iBasB = iBasB + 1 + AngMomB(1) = ShellFunctionB(iShFB,1) + AngMomB(2) = ShellFunctionB(iShFB,2) + AngMomB(3) = ShellFunctionB(iShFB,3) + +!------------------------------------------------------------------------ +! Loops over shell C +!------------------------------------------------------------------------ + do iShC=1,iShA + + CenterC(1) = CenterShell(iShC,1) + CenterC(2) = CenterShell(iShC,2) + CenterC(3) = CenterShell(iShC,3) + + TotAngMomC = TotAngMomShell(iShC) + nShellFunctionC = (TotAngMomC*TotAngMomC + 3*TotAngMomC + 2)/2 + allocate(ShellFunctionC(1:nShellFunctionC,1:3)) + call GenerateShell(TotAngMomC,nShellFunctionC,ShellFunctionC) + + KC = KShell(iShC) + + do iShFC=1,nShellFunctionC + + iBasC = iBasC + 1 + AngMomC(1) = ShellFunctionC(iShFC,1) + AngMomC(2) = ShellFunctionC(iShFC,2) + AngMomC(3) = ShellFunctionC(iShFC,3) + +!------------------------------------------------------------------------ +! Loops over shell D +!------------------------------------------------------------------------ + do iShD=1,iShC + + CenterD(1) = CenterShell(iShD,1) + CenterD(2) = CenterShell(iShD,2) + CenterD(3) = CenterShell(iShD,3) + + TotAngMomD = TotAngMomShell(iShD) + nShellFunctionD = (TotAngMomD*TotAngMomD + 3*TotAngMomD + 2)/2 + allocate(ShellFunctionD(1:nShellFunctionD,1:3)) + call GenerateShell(TotAngMomD,nShellFunctionD,ShellFunctionD) + + KD = KShell(iShD) + + do iShFD=1,nShellFunctionD + + iBasD = iBasD + 1 + AngMomD(1) = ShellFunctionD(iShFD,1) + AngMomD(2) = ShellFunctionD(iShFD,2) + AngMomD(3) = ShellFunctionD(iShFD,3) + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + call cpu_time(start_cErf) + + cErf = 0d0 + + do iKA=1,KA + ExpA = ExpShell(iShA,iKA) + DA = DShell(iShA,iKA)*NormCoeff(ExpA,AngMomA) + do iKB=1,KB + ExpB = ExpShell(iShB,iKB) + DB = DShell(iShB,iKB)*NormCoeff(ExpB,AngMomB) + do iKC=1,KC + ExpC = ExpShell(iShC,iKC) + DC = DShell(iShC,iKC)*NormCoeff(ExpC,AngMomC) + do iKD=1,KD + ExpD = ExpShell(iShD,iKD) + DD = DShell(iShD,iKD)*NormCoeff(ExpD,AngMomD) + +! Erf module +! call ErfInt(debug,npErf,nSigpErf, & +! ExpS, & +! ExpA,CenterA,AngMomA, & +! ExpB,CenterB,AngMomB, & +! ExpC,CenterC,AngMomC, & +! ExpD,CenterD,AngMomD, & +! pErf) + +! cErf = cErf + DA*DB*DC*DD*pErf + + enddo + enddo + enddo + enddo + call cpu_time(end_cErf) + + ncErf = ncErf + 1 + if(abs(cErf) > 1d-15) then + nSigcErf = nSigcErf + 1 + t_cErf = end_cErf - start_cErf + write(41,'(F20.15,I6,I6,I6,I6)') & + cErf,iBasA,iBasB,iBasC,iBasD + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6,1X,I6,1X,I6)') & + '(ab|erf(r)/r|cd) = ',cErf,iBasA,iBasB,iBasC,iBasD + endif + endif + +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionD) + enddo + iBasD = 0 +!------------------------------------------------------------------------ +! End loops over shell D +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionC) + enddo + iBasC = 0 +!------------------------------------------------------------------------ +! End loops over shell C +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB) + enddo + iBasB = 0 +!------------------------------------------------------------------------ +! End loops over shell B +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA) + enddo + iBasA = 0 +!------------------------------------------------------------------------ +! End loops over shell A +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=41) + +end subroutine Compute4eInt diff --git a/src/IntPak/ComputeKin.f90 b/src/IntPak/ComputeKin.f90 new file mode 100644 index 0000000..2a9fd0c --- /dev/null +++ b/src/IntPak/ComputeKin.f90 @@ -0,0 +1,166 @@ +subroutine ComputeKin(debug,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + npKin,nSigpKin,ncKin,nSigcKin) + + +! Compute one-electron kinetic integrals + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: nShell + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + integer :: KA,KB + double precision :: CenterA(3),CenterB(3) + integer :: TotAngMomA,TotAngMomB + integer :: AngMomA(3),AngMomB(3) + integer :: nShellFunctionA,nShellFunctionB + integer,allocatable :: ShellFunctionA(:,:),ShellFunctionB(:,:) + double precision :: ExpA,ExpB + double precision,allocatable :: DA,DB + double precision :: NormCoeff + + integer :: iBasA,iBasB + integer :: iShA,iShB + integer :: iShFA,iShFB + integer :: iKA,iKB + + double precision :: pKin,cKin + double precision :: start_cKin,end_cKin,t_cKin + +! Output variables + + integer,intent(out) :: npKin,nSigpKin,ncKin,nSigcKin + +! Compute one-electron integrals + + write(*,*) '****************************************' + write(*,*) ' Compute one-electron kinetic integrals ' + write(*,*) '****************************************' + write(*,*) + + npKin = 0 + nSigpKin = 0 + + ncKin = 0 + nSigcKin = 0 + + iBasA = 0 + iBasB = 0 + +! Open file to write down integrals + + open(unit=9,file='int/Kin.dat') + +!------------------------------------------------------------------------ +! Loops over shell A +!------------------------------------------------------------------------ + do iShA=1,nShell + + CenterA(1) = CenterShell(iShA,1) + CenterA(2) = CenterShell(iShA,2) + CenterA(3) = CenterShell(iShA,3) + + TotAngMomA = TotAngMomShell(iShA) + nShellFunctionA = (TotAngMomA*TotAngMomA + 3*TotAngMomA + 2)/2 + allocate(ShellFunctionA(1:nShellFunctionA,1:3)) + call GenerateShell(TotAngMomA,nShellFunctionA,ShellFunctionA) + + KA = KShell(iShA) + + do iShFA=1,nShellFunctionA + + iBasA = iBasA + 1 + AngMomA(1) = ShellFunctionA(iShFA,1) + AngMomA(2) = ShellFunctionA(iShFA,2) + AngMomA(3) = ShellFunctionA(iShFA,3) + +!------------------------------------------------------------------------ +! Loops over shell B +!------------------------------------------------------------------------ + do iShB=1,nShell + + CenterB(1) = CenterShell(iShB,1) + CenterB(2) = CenterShell(iShB,2) + CenterB(3) = CenterShell(iShB,3) + + TotAngMomB = TotAngMomShell(iShB) + nShellFunctionB = (TotAngMomB*TotAngMomB + 3*TotAngMomB + 2)/2 + allocate(ShellFunctionB(1:nShellFunctionB,1:3)) + call GenerateShell(TotAngMomB,nShellFunctionB,ShellFunctionB) + + KB = KShell(iShB) + + do iShFB=1,nShellFunctionB + + iBasB = iBasB + 1 + AngMomB(1) = ShellFunctionB(iShFB,1) + AngMomB(2) = ShellFunctionB(iShFB,2) + AngMomB(3) = ShellFunctionB(iShFB,3) + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + call cpu_time(start_cKin) + + cKin = 0d0 + + do iKA=1,KA + ExpA = ExpShell(iShA,iKA) + DA = DShell(iShA,iKA)*NormCoeff(ExpA,AngMomA) + do iKB=1,KB + ExpB = ExpShell(iShB,iKB) + DB = DShell(iShB,iKB)*NormCoeff(ExpB,AngMomB) + + call KinInt(npKin,nSigpKin, & + ExpA,CenterA,AngMomA, & + ExpB,CenterB,AngMomB, & + pKin) + + cKin = cKin + DA*DB*pKin + + enddo + enddo + call cpu_time(end_cKin) + + ncKin = ncKin + 1 + if(abs(cKin) > 1d-15) then + nSigcKin = nSigcKin + 1 + t_cKin = end_cKin - start_cKin + write(9,'(I6,I6,F20.15)') iBasA,iBasB,cKin + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6)') '(a|T|b) = ',cKin,iBasA,iBasB + endif + endif +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB) + enddo + iBasB = 0 +!------------------------------------------------------------------------ +! End loops over shell B +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA) + enddo + iBasA = 0 +!------------------------------------------------------------------------ +! End loops over shell A +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=9) + +end subroutine ComputeKin diff --git a/src/IntPak/ComputeNuc.f90 b/src/IntPak/ComputeNuc.f90 new file mode 100644 index 0000000..40e10f9 --- /dev/null +++ b/src/IntPak/ComputeNuc.f90 @@ -0,0 +1,189 @@ +subroutine ComputeNuc(debug,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + NAtoms,ZNuc,XYZAtoms, & + npNuc,nSigpNuc,ncNuc,nSigcNuc) + + +! Compute electron repulsion integrals + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: nShell + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + integer :: NAtoms + double precision :: ZNuc(NAtoms),XYZAtoms(NAtoms,3) + +! Local variables + + integer :: KA,KB + double precision :: CenterA(3),CenterB(3),CenterC(3) + integer :: TotAngMomA,TotAngMomB + integer :: AngMomA(3),AngMomB(3) + integer :: nShellFunctionA,nShellFunctionB + integer,allocatable :: ShellFunctionA(:,:),ShellFunctionB(:,:) + double precision :: ExpA,ExpB,ZC + double precision,allocatable :: DA,DB + double precision :: NormCoeff + + integer :: iBasA,iBasB + integer :: iShA,iShB,iNucC + integer :: iShFA,iShFB + integer :: iKA,iKB + + double precision :: pNuc,cNuc + double precision :: start_cNuc,end_cNuc,t_cNuc + +! Output variables + + integer,intent(out) :: npNuc,nSigpNuc,ncNuc,nSigcNuc + +! Compute one-electron nuclear attraction integrals + + write(*,*) '***************************************************' + write(*,*) ' Compute one-electron nuclear attraction integrals ' + write(*,*) '***************************************************' + write(*,*) + + npNuc = 0 + nSigpNuc = 0 + + ncNuc = 0 + nSigcNuc = 0 + + iBasA = 0 + iBasB = 0 + iNucC = 0 + +! Open file to write down integrals + + open(unit=10,file='int/Nuc.dat') + +!------------------------------------------------------------------------ +! Loops over shell A +!------------------------------------------------------------------------ + do iShA=1,nShell + + CenterA(1) = CenterShell(iShA,1) + CenterA(2) = CenterShell(iShA,2) + CenterA(3) = CenterShell(iShA,3) + + TotAngMomA = TotAngMomShell(iShA) + nShellFunctionA = (TotAngMomA*TotAngMomA + 3*TotAngMomA + 2)/2 + allocate(ShellFunctionA(1:nShellFunctionA,1:3)) + call GenerateShell(TotAngMomA,nShellFunctionA,ShellFunctionA) + + KA = KShell(iShA) + + do iShFA=1,nShellFunctionA + + iBasA = iBasA + 1 + AngMomA(1) = ShellFunctionA(iShFA,1) + AngMomA(2) = ShellFunctionA(iShFA,2) + AngMomA(3) = ShellFunctionA(iShFA,3) + +!------------------------------------------------------------------------ +! Loops over shell B +!------------------------------------------------------------------------ + do iShB=1,nShell + + CenterB(1) = CenterShell(iShB,1) + CenterB(2) = CenterShell(iShB,2) + CenterB(3) = CenterShell(iShB,3) + + TotAngMomB = TotAngMomShell(iShB) + nShellFunctionB = (TotAngMomB*TotAngMomB + 3*TotAngMomB + 2)/2 + allocate(ShellFunctionB(1:nShellFunctionB,1:3)) + call GenerateShell(TotAngMomB,nShellFunctionB,ShellFunctionB) + + KB = KShell(iShB) + + do iShFB=1,nShellFunctionB + + iBasB = iBasB + 1 + AngMomB(1) = ShellFunctionB(iShFB,1) + AngMomB(2) = ShellFunctionB(iShFB,2) + AngMomB(3) = ShellFunctionB(iShFB,3) + +!------------------------------------------------------------------------ +! Loops over nuclear centers +!------------------------------------------------------------------------ + call cpu_time(start_cNuc) + + cNuc = 0d0 + + do iNucC=1,NAtoms + + CenterC(1) = XYZAtoms(iNucC,1) + CenterC(2) = XYZAtoms(iNucC,2) + CenterC(3) = XYZAtoms(iNucC,3) + + ZC = ZNuc(iNucC) + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + + do iKA=1,KA + ExpA = ExpShell(iShA,iKA) + DA = DShell(iShA,iKA)*NormCoeff(ExpA,AngMomA) + do iKB=1,KB + ExpB = ExpShell(iShB,iKB) + DB = DShell(iShB,iKB)*NormCoeff(ExpB,AngMomB) + + call NucInt(debug,npNuc,nSigpNuc, & + ExpA,CenterA,AngMomA, & + ExpB,CenterB,AngMomB, & + CenterC, & + pNuc) + + cNuc = cNuc - DA*DB*ZC*pNuc + + enddo + enddo +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + call cpu_time(end_cNuc) +!------------------------------------------------------------------------ +! End loops over nuclear centers C +!------------------------------------------------------------------------ + + ncNuc = ncNuc + 1 + if(abs(cNuc) > 1d-15) then + nSigcNuc = nSigcNuc + 1 + t_cNuc = end_cNuc - start_cNuc + write(10,'(I6,I6,F20.15)') iBasA,iBasB,cNuc + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6)') '(a|V|b) = ',cNuc,iBasA,iBasB + write(*,*) + endif + endif + + enddo + deallocate(ShellFunctionB) + enddo + iBasB = 0 +!------------------------------------------------------------------------ +! End loops over shell B +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA) + enddo + iBasA = 0 +!------------------------------------------------------------------------ +! End loops over shell A +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=10) + +end subroutine ComputeNuc diff --git a/src/IntPak/ComputeOv.f90 b/src/IntPak/ComputeOv.f90 new file mode 100644 index 0000000..3aceb65 --- /dev/null +++ b/src/IntPak/ComputeOv.f90 @@ -0,0 +1,170 @@ +subroutine ComputeOv(debug,NBasis,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + npOv,nSigpOv,ncOv,nSigcOv,S) + + +! Compute one-electron overlap integrals + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: NBasis,nShell + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + integer :: KA,KB + double precision :: CenterA(3),CenterB(3) + integer :: TotAngMomA,TotAngMomB + integer :: AngMomA(3),AngMomB(3) + integer :: nShellFunctionA,nShellFunctionB + integer,allocatable :: ShellFunctionA(:,:),ShellFunctionB(:,:) + double precision :: ExpA,ExpB + double precision,allocatable :: DA,DB + double precision :: NormCoeff + + integer :: iBasA,iBasB + integer :: iShA,iShB + integer :: iShFA,iShFB + integer :: iKA,iKB + + double precision :: pOv,cOv + double precision :: start_cOv,end_cOv,t_cOv + +! Output variables + + integer,intent(out) :: npOv,nSigpOv,ncOv,nSigcOv + double precision,intent(out) :: S(NBasis,NBasis) + + +! Compute one-electron integrals + + write(*,*) '****************************************' + write(*,*) ' Compute one-electron overlap integrals ' + write(*,*) '****************************************' + write(*,*) + + npOv = 0 + nSigpOv = 0 + + ncOv = 0 + nSigcOv = 0 + + iBasA = 0 + iBasB = 0 + +! Open file to write down integrals + + open(unit=8,file='int/Ov.dat') + +!------------------------------------------------------------------------ +! Loops over shell A +!------------------------------------------------------------------------ + do iShA=1,nShell + + CenterA(1) = CenterShell(iShA,1) + CenterA(2) = CenterShell(iShA,2) + CenterA(3) = CenterShell(iShA,3) + + TotAngMomA = TotAngMomShell(iShA) + nShellFunctionA = (TotAngMomA*TotAngMomA + 3*TotAngMomA + 2)/2 + allocate(ShellFunctionA(1:nShellFunctionA,1:3)) + call GenerateShell(TotAngMomA,nShellFunctionA,ShellFunctionA) + + KA = KShell(iShA) + + do iShFA=1,nShellFunctionA + + iBasA = iBasA + 1 + AngMomA(1) = ShellFunctionA(iShFA,1) + AngMomA(2) = ShellFunctionA(iShFA,2) + AngMomA(3) = ShellFunctionA(iShFA,3) + +!------------------------------------------------------------------------ +! Loops over shell B +!------------------------------------------------------------------------ + do iShB=1,nShell + + CenterB(1) = CenterShell(iShB,1) + CenterB(2) = CenterShell(iShB,2) + CenterB(3) = CenterShell(iShB,3) + + TotAngMomB = TotAngMomShell(iShB) + nShellFunctionB = (TotAngMomB*TotAngMomB + 3*TotAngMomB + 2)/2 + allocate(ShellFunctionB(1:nShellFunctionB,1:3)) + call GenerateShell(TotAngMomB,nShellFunctionB,ShellFunctionB) + + KB = KShell(iShB) + + do iShFB=1,nShellFunctionB + + iBasB = iBasB + 1 + AngMomB(1) = ShellFunctionB(iShFB,1) + AngMomB(2) = ShellFunctionB(iShFB,2) + AngMomB(3) = ShellFunctionB(iShFB,3) + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + call cpu_time(start_cOv) + + cOv = 0d0 + + do iKA=1,KA + ExpA = ExpShell(iShA,iKA) + DA = DShell(iShA,iKA)*NormCoeff(ExpA,AngMomA) + do iKB=1,KB + ExpB = ExpShell(iShB,iKB) + DB = DShell(iShB,iKB)*NormCoeff(ExpB,AngMomB) + + call OvInt(npOv,nSigpOv, & + ExpA,CenterA,AngMomA, & + ExpB,CenterB,AngMomB, & + pOv) + + cOv = cOv + DA*DB*pOv + + enddo + enddo + call cpu_time(end_cOv) + + ncOv = ncOv + 1 + S(iBasA,iBasB) = cOv + if(abs(cOv) > 1d-15) then + nSigcOv = nSigcOv + 1 + t_cOv = end_cOv - start_cOv + write(8,'(I6,I6,F20.15)') iBasA,iBasB,cOv + if(debug) then + write(*,'(A10,1X,F16.10,1X,I6,1X,I6)') '(a|b) = ',cOv,iBasA,iBasB + endif + endif + +!------------------------------------------------------------------------ +! End loops over contraction degrees +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionB) + enddo + iBasB = 0 +!------------------------------------------------------------------------ +! End loops over shell B +!------------------------------------------------------------------------ + enddo + deallocate(ShellFunctionA) + enddo + iBasA = 0 +!------------------------------------------------------------------------ +! End loops over shell A +!------------------------------------------------------------------------ + write(*,*) + +! Close files to write down integrals + + close(unit=8) + +end subroutine ComputeOv diff --git a/src/IntPak/FormVRR3e.f90 b/src/IntPak/FormVRR3e.f90 new file mode 100644 index 0000000..124fbe9 --- /dev/null +++ b/src/IntPak/FormVRR3e.f90 @@ -0,0 +1,174 @@ +subroutine FormVRR3e(ExpZ,ExpG,CenterZ,DY0,DY1,D2Y0,D2Y1,delta0,delta1,Y0,Y1) + +! Form stuff we need... + + implicit none + include 'parameters.h' + + +! Input variables + + double precision,intent(in) :: ExpZ(3),ExpG(3,3) + double precision,intent(in) :: CenterZ(3,3) + +! Local variables + + integer :: i,j,k,l + double precision :: ZetaMat(3,3) + double precision :: CMat(3,3),GMat(3,3) + double precision :: Delta0Mat(3,3),Delta1Mat(3,3) + double precision :: InvDelta0Mat(3,3),InvDelta1Mat(3,3) + double precision :: CenterY(3,3,3) + double precision :: YMat(3,3),Y2Mat(3,3) + double precision :: DYMat(3,3,3),D2YMat(3,3,3,3) + double precision :: D0Mat(3,3),D1Mat(3,3) + + double precision :: KappaCross + +! Output variables + + double precision,intent(out) :: DY0(3),DY1(3),D2Y0(3,3),D2Y1(3,3) + double precision,intent(out) :: delta0,delta1,Y0,Y1 + +! Initalize arrays + + ZetaMat = 0d0 + CMat = 0d0 + GMat = 0d0 + YMat = 0d0 + Y2Mat = 0d0 + D0Mat = 0d0 + D1Mat = 0d0 + +! Form the zeta matrix Eq. (15a) + + do i=1,3 + ZetaMat(i,i) = ExpZ(i) + enddo + +! print*,'Zeta' +! call matout(3,3,ZetaMat) + +! Form the C matrix Eq. (15a) + + CMat(1,1) = 1d0 + CMat(2,2) = 1d0 + CMat(1,2) = -1d0 + CMat(2,1) = -1d0 + +! print*,'C' +! call matout(3,3,CMat) + +! Form the G matrix Eq. (15b) + + do i=1,3 + do j=1,i-1 + GMat(i,j) = - ExpG(j,i) + enddo + do j=i+1,3 + GMat(i,j) = - ExpG(i,j) + enddo + enddo + + do i=1,3 + do j=1,i-1 + GMat(i,i) = GMat(i,i) + ExpG(j,i) + enddo + do j=i+1,3 + GMat(i,i) = GMat(i,i) + ExpG(i,j) + enddo + enddo + +! print*,'G' +! call matout(3,3,GMat) + +! Form the Y and Y^2 matrices Eq. (16b) + + do i=1,3 + do j=i+1,3 + do k=1,3 + CenterY(i,j,k) = CenterZ(i,k) - CenterZ(j,k) + Y2Mat(i,j) = Y2Mat(i,j) + CenterY(i,j,k)**2 + enddo + YMat(i,j) = sqrt(Y2Mat(i,j)) + enddo + enddo + +! print*,'Y' +! call matout(3,3,YMat) + +! print*,'Y2' +! call matout(3,3,Y2Mat) + +! Form the delta0 and delta1 matrices Eq. (14) + + do i=1,3 + do j=1,3 + Delta0Mat(i,j) = ZetaMat(i,j) + GMat(i,j) + Delta1Mat(i,j) = Delta0Mat(i,j) + CMat(i,j) + enddo + enddo + +! Form the DY and D2Y matrices + + do i=1,3 + do j=1,3 + do k=1,3 + DYMat(i,j,k) = KappaCross(i,j,k)*YMat(j,k)/ExpZ(i) + do l=1,3 + D2YMat(i,j,k,l) = 0.5d0*KappaCross(i,k,l)*KappaCross(j,k,l)/(ExpZ(i)*ExpZ(j)) + enddo + enddo + enddo + enddo + +! Compute the inverse of the Delta0 and Delta1 matrices + +! InvDelta0Mat = Delta0Mat +! InvDelta1Mat = Delta1Mat + do i=1,3 + do j=1,3 + InvDelta0Mat(i,j) = Delta0Mat(i,j) + InvDelta1Mat(i,j) = Delta1Mat(i,j) + enddo + enddo +! call amove(3,3,Delta0Mat,InvDelta0Mat) +! call amove(3,3,Delta1Mat,InvDelta1Mat) + + call CalcInv3(InvDelta0Mat,delta0) + call CalcInv3(InvDelta1Mat,delta1) + +! call matout(3,3,InvDelta0Mat) +! call matout(3,3,InvDelta1Mat) +! print*, 'delta0,delta1 = ',delta0,delta1 + +! Form the Delta matrix Eq. (16a) + + do i=1,3 + do j=1,3 + do k=1,3 + do l=1,3 + D0Mat(i,j) = D0Mat(i,k) + ZetaMat(i,k)*InvDelta0Mat(k,l)*ZetaMat(l,j) + D1Mat(i,j) = D1Mat(i,k) + ZetaMat(i,k)*InvDelta1Mat(k,l)*ZetaMat(l,j) + enddo + enddo + enddo + enddo + +! Form the derivative matrices + + do i=1,3 + call CalcTrAB(3,D0Mat,D2YMat,DY0(i)) + call CalcTrAB(3,D1Mat,D2YMat,DY1(i)) + do j=1,3 + call CalcTrAB(3,D0Mat,D2YMat,D2Y0(i,j)) + call CalcTrAB(3,D1Mat,D2YMat,D2Y1(i,j)) + enddo + enddo + +! Compute Y0 and Y1 + + call CalcTrAB(3,D0Mat,Y2Mat,Y0) + call CalcTrAB(3,D1Mat,Y2Mat,Y1) + +end subroutine FormVRR3e diff --git a/src/IntPak/G2eInt.f90 b/src/IntPak/G2eInt.f90 new file mode 100644 index 0000000..bdccbd7 --- /dev/null +++ b/src/IntPak/G2eInt.f90 @@ -0,0 +1,140 @@ +function G2eInt(debug,iType, & + ExpG, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet) + +! Compute recursively the primitive two-electron integral [ab|cd] + + implicit none + include 'parameters.h' + + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: iType + double precision,intent(in) :: ExpBra(2),ExpKet(2) + double precision,intent(in) :: ExpG + double precision,intent(in) :: CenterBra(2,3),CenterKet(2,3) + integer,intent(in) :: AngMomBra(2,3),AngMomKet(2,3) + +! Local variables + + integer :: TotAngMomBra(3),TotAngMomKet(3) + double precision :: ExpZi(2),ExpY(2,2) + double precision :: CenterZ(2,3),CenterAB(2,3),CenterZA(2,3),CenterY(2,2,3) + double precision :: NormABSq(2),NormYSq(2,2) + double precision :: GAB(2) + double precision,allocatable :: Om(:) + double precision :: fG + double precision :: HRR2e,VRR2e + double precision :: a1a2b1b2 + + integer :: i,j,k,maxm + double precision :: start_Om,finish_Om,start_RR,finish_RR,t_Om,t_RR + +! Output variables + double precision :: G2eInt + +! Pre-computed shell-pair quantities + + do i=1,2 + ExpZi(i) = 1d0/(ExpBra(i) + ExpKet(i)) + enddo + + NormABSq = 0d0 + do j=1,3 + do i=1,2 + CenterZ(i,j) = (ExpBra(i)*CenterBra(i,j) + ExpKet(i)*CenterKet(i,j))*ExpZi(i) + CenterAB(i,j) = CenterBra(i,j) - CenterKet(i,j) + CenterZA(i,j) = CenterZ(i,j) - CenterBra(i,j) + NormABSq(i) = NormABSq(i) + CenterAB(i,j)**2 + enddo + enddo + + do i=1,2 + GAB(i) = (pi*ExpZi(i))**(1.5d0)*exp(-ExpBra(i)*ExpKet(i)*NormABSq(i)*ExpZi(i)) + enddo + +! Pre-computed shell-quartet quantities + + do i=1,2 + do j=1,2 + ExpY(i,j) = 1d0/(ExpZi(i) + ExpZi(j)) + enddo + enddo + + do i=1,2 + do j=1,2 + NormYSq(i,j) = 0d0 + do k=1,3 + CenterY(i,j,k) = CenterZ(i,k) - CenterZ(j,k) + NormYSq(i,j) = NormYSq(i,j) + CenterY(i,j,k)**2 + enddo + enddo + enddo + +! fG = (ExpZ(1)*ExpZ(2)*ExpG)/(ExpZ(1)*ExpZ(2) + ExpZ(1)*ExpG + ExpZ(2)*ExpG) + fG = 1d0/(ExpZi(1) + 1d0/ExpG + ExpZi(2)) + +! Total angular momemtum + + maxm = 0 + do i=1,2 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + TotAngMomKet(i) = AngMomKet(i,1) + AngMomKet(i,2) + AngMomKet(i,3) + maxm = maxm + TotAngMomBra(i) + TotAngMomKet(i) + enddo + +! Pre-compute (00|00)^m + + allocate(Om(0:maxm)) + call cpu_time(start_Om) + + if(iType == 1) then + call CalcOmERI(maxm,ExpY(1,2),NormYSq(1,2),Om) + elseif(iType == 3) then + call CalcOmYuk(maxm,ExpG,ExpY(1,2),fG,NormYSq(1,2),Om) + elseif(iType == 4) then + call CalcOmErf(maxm,ExpY(1,2),fG,NormYSq(1,2),Om) + endif + + call cpu_time(finish_Om) + +! Print (00|00)^m + + if(debug) then + write(*,*) '(00|00)^m' + do i=0,maxm + write(*,*) i,Om(i) + enddo + write(*,*) + endif + +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) + + if(TotAngMomKet(1) == 0 .and. TotAngMomKet(2) == 0) then + if(TotAngMomBra(1) == 0 .and. TotAngMomBra(2) == 0) then + a1a2b1b2 = Om(0) + else + a1a2b1b2 = VRR2e(0,AngMomBra,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) + endif + else + a1a2b1b2 = HRR2e(AngMomBra,AngMomKet,maxm,Om,ExpZi,ExpY,CenterAB,CenterZA,CenterY) + endif + + call cpu_time(finish_RR) + +! Timings + + t_Om = finish_Om - start_Om + t_RR = finish_RR - start_RR + +! Print result + + G2eInt = GAB(1)*GAB(2)*a1a2b1b2 + +end function G2eInt diff --git a/src/IntPak/G3eInt.f90 b/src/IntPak/G3eInt.f90 new file mode 100644 index 0000000..e91f721 --- /dev/null +++ b/src/IntPak/G3eInt.f90 @@ -0,0 +1,124 @@ +function G3eInt(debug,iType, & + ExpG13,ExpG23, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet) + +! Compute two-electron integrals over the Yukawa operator + + implicit none + include 'parameters.h' + + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: iType + double precision,intent(in) :: ExpG13,ExpG23 + double precision,intent(in) :: ExpBra(3),ExpKet(3) + double precision,intent(in) :: CenterBra(3,3),CenterKet(3,3) + integer,intent(in) :: AngMomBra(3,3),AngMomKet(3,3) + +! Local variables + + double precision :: ExpG(3,3) + integer :: TotAngMomBra(3),TotAngMomKet(3) + double precision :: ExpZ(3) + double precision :: CenterZ(3,3),CenterAB(3,3),CenterZA(3,3) + double precision :: NormABSq(3) + double precision :: GAB(3) + double precision,allocatable :: Om(:) + double precision :: HRR3e,VRR3e + + double precision :: DY0(3),DY1(3),D2Y0(3,3),D2Y1(3,3) + double precision :: delta0,delta1,Y0,Y1 + + integer :: i,j,maxm + double precision :: start_Om,finish_Om,t_Om,start_RR,finish_RR,t_RR + double precision :: a1a2a3b1b2b3 + +! Output variables + double precision :: G3eInt + +! Gaussian geminal exponents + + ExpG = 0d0 + ExpG(1,3) = ExpG13 + ExpG(2,3) = ExpG23 + +! Pre-computed quantities for shell-pair + + do i=1,3 + ExpZ(i) = ExpBra(i) + ExpKet(i) + enddo + + NormABSq = 0d0 + do i=1,3 + do j=1,3 + CenterZ(i,j) = (ExpBra(i)*CenterBra(i,j) + ExpKet(i)*CenterKet(i,j))/ExpZ(i) + CenterAB(i,j) = CenterBra(i,j) - CenterKet(i,j) + CenterZA(i,j) = CenterZ(i,j) - CenterBra(i,j) + NormABSq(i) = NormABSq(i) + CenterAB(i,j)**2 + enddo + enddo + + do i=1,3 + GAB(i) = (pi/ExpZ(i))**(1.5d0)*exp(-ExpBra(i)*ExpKet(i)*NormABSq(i)/ExpZ(i)) + enddo + +! Pre-computed shell-sextet quantities + + call FormVRR3e(ExpZ,ExpG,CenterZ,DY0,DY1,D2Y0,D2Y1,delta0,delta1,Y0,Y1) + +! Total angular momemtum + + maxm = 0 + do i=1,3 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + TotAngMomKet(i) = AngMomKet(i,1) + AngMomKet(i,2) + AngMomKet(i,3) + maxm = maxm + TotAngMomBra(i) + TotAngMomKet(i) + enddo + +! Pre-compute (000|000)^m + + allocate(Om(0:maxm)) + call cpu_time(start_Om) + call CalcOm3e(maxm,delta0,delta1,Y0,Y1,Om) + call cpu_time(finish_Om) + +! Print (000|000)^m + + if(.false.) then + write(*,*) '(000|000)^m' + do i=0,maxm + write(*,*) i,Om(i) + enddo + write(*,*) + endif + +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) + if(TotAngMomKet(1) == 0 .and. TotAngMomKet(2) == 0 .and. TotAngMomKet(3) == 0) then + if(TotAngMomBra(1) == 0 .and. TotAngMomBra(2) == 0 .and. TotAngMomBra(3) == 0) then + a1a2a3b1b2b3 = Om(0) + else + a1a2a3b1b2b3 = VRR3e(0,AngMomBra,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + else + a1a2a3b1b2b3 = HRR3e(AngMomBra,AngMomKet,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + + + call cpu_time(finish_RR) + +! Timings + + t_Om = finish_Om - start_Om + t_RR = finish_RR - start_RR + +! Print result + + G3eInt = GAB(1)*GAB(2)*GAB(3)*a1a2a3b1b2b3 + +end function G3eInt diff --git a/src/IntPak/GF12Int.f90 b/src/IntPak/GF12Int.f90 new file mode 100644 index 0000000..38be824 --- /dev/null +++ b/src/IntPak/GF12Int.f90 @@ -0,0 +1,107 @@ +function GF12Int(ExpG,ExpA,CenterA,AngMomA,ExpB,CenterB,AngMomB,ExpC,CenterC,AngMomC,ExpD,CenterD,AngMomD) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + +! Input variables + + double precision,intent(in) :: ExpG + double precision,intent(in) :: ExpA,ExpB,ExpC,ExpD + double precision,intent(in) :: CenterA(3),CenterB(3),CenterC(3),CenterD(3) + integer,intent(in) :: AngMomA(3),AngMomB(3),AngMomC(3),AngMomD(3) + + +! Local variables + + double precision :: ExpAi,ExpBi,ExpCi,ExpDi,ExpGi + double precision :: ExpP,ExpQ,ExpPi,ExpQi,ExpPGQi + double precision :: CenterP(3),CenterQ(3),CenterAB(3),CenterCD(3),CenterPQSq(3),CenterRA(3),CenterRC(3) + double precision :: NormABSq,NormCDSq + double precision :: GAB,GCD + double precision :: fP,fG,fQ,gP,gG,gQ + double precision :: HRRF12 + + integer :: i + double precision :: pi + double precision :: start_RR,finish_RR,t_RR + double precision :: Gabcd(3) + +! Output variables + double precision :: GF12Int + + pi = 4d0*atan(1d0) + +! Pre-computed shell quantities + + ExpAi = 1d0/ExpA + ExpBi = 1d0/ExpB + ExpCi = 1d0/ExpC + ExpDi = 1d0/ExpD + ExpGi = 1d0/ExpG + +! Pre-computed quantities for shell-pair AB + + ExpP = ExpA + ExpB + ExpPi = 1d0/ExpP + + NormABSq = 0d0 + Do i=1,3 + CenterP(i) = (ExpA*CenterA(i) + ExpB*CenterB(i))*ExpPi + CenterAB(i) = CenterA(i) - CenterB(i) + NormABSq = NormABSq + CenterAB(i)**2 + Enddo + + GAB = (pi*ExpPi)**(1.5d0)*exp(-NormABSq/(ExpAi+ExpBi)) + +! Pre-computed quantities for shell-pair CD + + ExpQ = ExpC + ExpD + ExpQi = 1d0/ExpQ + + NormCDSq = 0d0 + Do i=1,3 + CenterQ(i) = (ExpC*CenterC(i) + ExpD*CenterD(i))*ExpQi + CenterCD(i) = CenterC(i) - CenterD(i) + NormCDSq = NormCDSq + CenterCD(i)**2 + Enddo + + GCD = (pi*ExpQi)**(1.5d0)*exp(-NormCDSq/(ExpCi+ExpDi)) + +! Pre-computed shell-quartet quantities + + ExpPGQi = ExpPi + ExpGi + ExpQi + + Do i=1,3 + CenterPQSq(i) = (CenterP(i) - CenterQ(i))**2 + Enddo + + fP = ExpPi/ExpPGQi + fG = ExpGi/ExpPGQi + fQ = ExpQi/ExpPGQi + + gP = (1d0 - fP)*0.5d0*ExpPi + gG = fP*0.5d0*expQi + gQ = (1d0 - fQ)*0.5d0*ExpQi + + do i=1,3 + CenterRA(i) = CenterP(i) - CenterA(i) + fP*(CenterQ(i) - CenterP(i)) + CenterRC(i) = CenterQ(i) - CenterC(i) + fQ*(CenterP(i) - CenterQ(i)) + enddo +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) +! Loop over cartesian directions + Do i=1,3 + Gabcd(i) = HRRF12(AngMomA(i),AngMomB(i),AngMomC(i),AngMomD(i),fG,gP,gG,gQ,ExpPGQi, & + CenterPQSq(i),CenterRA(i),CenterRC(i),CenterAB(i),CenterCD(i)) + Enddo + call cpu_time(finish_RR) + +! Print result + + GF12Int = GAB*GCD*Gabcd(1)*Gabcd(2)*Gabcd(3) + t_RR = finish_RR - start_RR + +end function GF12Int diff --git a/src/IntPak/GenerateShell.f90 b/src/IntPak/GenerateShell.f90 new file mode 100644 index 0000000..933d40b --- /dev/null +++ b/src/IntPak/GenerateShell.f90 @@ -0,0 +1,30 @@ +subroutine GenerateShell(atot,nShellFunction,ShellFunction) + + implicit none + +! Input variables + + integer,intent(in) :: atot,nShellFunction + +! Local variables + + integer :: ax,ay,az,ia + +! Output variables + + integer,intent(out) :: ShellFunction(nShellFunction,3) + + ia = 0 + do ax=atot,0,-1 + do az=0,atot + ay = atot - ax - az + if(ay >= 0) then + ia = ia + 1 + ShellFunction(ia,1) = ax + ShellFunction(ia,2) = ay + ShellFunction(ia,3) = az + endif + enddo + enddo + +end subroutine GenerateShell diff --git a/src/IntPak/HRR2e.f90 b/src/IntPak/HRR2e.f90 new file mode 100644 index 0000000..bd22a34 --- /dev/null +++ b/src/IntPak/HRR2e.f90 @@ -0,0 +1,101 @@ +recursive function HRR2e(AngMomBra,AngMomKet, & + maxm,Om,ExpZi,ExpY, & + CenterAB,CenterZA,CenterY) & + result(a1a2b1b2) + +! Horintal recurrence relations for two-electron integrals + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: AngMomBra(2,3),AngMomKet(2,3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm),ExpZi(2),ExpY(2,2) + double precision,intent(in) :: CenterAB(2,3),CenterZA(2,3),CenterY(2,2,3) + +! Local variables + + logical :: NegAngMomKet(2) + integer :: TotAngMomBra(2),TotAngMomKet(2) + integer :: a1p(2,3),b1m(2,3),a2p(2,3),b2m(2,3) + integer :: i,j,xyz + double precision :: VRR2e + +! Output variables + + double precision :: a1a2b1b2 + + do i=1,2 + NegAngMomKet(i) = AngMomKet(i,1) < 0 .or. AngMomKet(i,2) < 0 .or. AngMomKet(i,3) < 0 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + TotAngMomKet(i) = AngMomKet(i,1) + AngMomKet(i,2) + AngMomKet(i,3) + enddo + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ +! if(NegAngMomKet(1) .or. NegAngMomKet(2)) then +! a1a2b1b2 = 0d0 +!------------------------------------------------------------------------ +! 1st and 2nd vertical recurrence relations: +!------------------------------------------------------------------------ +! elseif(TotAngMomKet(1) == 0 .and. TotAngMomKet(2) == 0) then + if(TotAngMomKet(1) == 0 .and. TotAngMomKet(2) == 0) then + a1a2b1b2 = VRR2e(0,AngMomBra,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) +!------------------------------------------------------------------------ +! 1st horizontal recurrence relation (2 terms): +!------------------------------------------------------------------------ + elseif(TotAngMomKet(2) == 0) then + do i=1,2 + do j=1,3 + a1p(i,j) = AngMomBra(i,j) + b1m(i,j) = AngMomKet(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomKet(1,1) > 0) then + xyz = 1 + elseif(AngMomKet(1,2) > 0) then + xyz = 2 + elseif(AngMomKet(1,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRR2e!' + endif +! End loop over cartesian directions + a1p(1,xyz) = a1p(1,xyz) + 1 + b1m(1,xyz) = b1m(1,xyz) - 1 + a1a2b1b2 = HRR2e(a1p,b1m,maxm,Om,ExpZi,ExpY,CenterAB,CenterZA,CenterY) & + + CenterAB(1,xyz)*HRR2e(AngMomBra,b1m,maxm,Om,ExpZi,ExpY,CenterAB,CenterZA,CenterY) +!------------------------------------------------------------------------ +! 2nd horizontal recurrence relation (2 terms): +!------------------------------------------------------------------------ + else + do i=1,2 + do j=1,3 + a2p(i,j) = AngMomBra(i,j) + b2m(i,j) = AngMomKet(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomKet(2,1) > 0) then + xyz = 1 + elseif(AngMomKet(2,2) > 0) then + xyz = 2 + elseif(AngMomKet(2,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRR2e!' + endif +! End loop over cartesian directions + a2p(2,xyz) = a2p(2,xyz) + 1 + b2m(2,xyz) = b2m(2,xyz) - 1 + a1a2b1b2 = HRR2e(a2p,b2m,maxm,Om,ExpZi,ExpY,CenterAB,CenterZA,CenterY) & + + CenterAB(2,xyz)*HRR2e(AngMomBra,b2m,maxm,Om,ExpZi,ExpY,CenterAB,CenterZA,CenterY) + endif + +end function HRR2e diff --git a/src/IntPak/HRR3e.f90 b/src/IntPak/HRR3e.f90 new file mode 100644 index 0000000..0e1fa21 --- /dev/null +++ b/src/IntPak/HRR3e.f90 @@ -0,0 +1,128 @@ +recursive function HRR3e(AngMomBra,AngMomKet,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) & + result(a1a2a3b1b2b3) + +! Horizontal recurrence relations for three-electron integrals + + implicit none + include 'parameters.h' + + +! Input variables + + integer,intent(in) :: AngMomBra(3,3),AngMomKet(3,3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm),ExpZ(3),CenterAB(3,3),CenterZA(3,3) + double precision,intent(in) :: DY0(3),DY1(3),D2Y0(3,3),D2Y1(3,3) + +! Local variables + + logical :: NegAngMomKet(3) + integer :: TotAngMomBra(3),TotAngMomKet(3) + integer :: a1p(3,3),b1m(3,3),a2p(3,3),b2m(3,3),a3p(3,3),b3m(3,3) + integer :: i,j,xyz + double precision :: VRR3e + +! Output variables + + double precision :: a1a2a3b1b2b3 + + do i=1,3 + NegAngMomKet(i) = AngMomKet(i,1) < 0 .or. AngMomKet(i,2) < 0 .or. AngMomKet(i,3) < 0 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + TotAngMomKet(i) = AngMomKet(i,1) + AngMomKet(i,2) + AngMomKet(i,3) + enddo + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ + if(NegAngMomKet(1) .or. NegAngMomKet(2) .or. NegAngMomKet(3)) then + a1a2a3b1b2b3 = 0d0 +!------------------------------------------------------------------------ +! 1st and 2nd vertical recurrence relations: +!------------------------------------------------------------------------ + elseif(TotAngMomKet(1) == 0 .and. TotAngMomKet(2) == 0 .and. TotAngMomKet(3) == 0) then + a1a2a3b1b2b3 = VRR3e(0,AngMomBra,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) +!------------------------------------------------------------------------ +! 1st horizontal recurrence relation (2 terms): +!------------------------------------------------------------------------ + elseif(TotAngMomKet(2) == 0 .and. TotAngMomKet(3) == 0) then + do i=1,3 + do j=1,3 + a1p(i,j) = AngMomBra(i,j) + b1m(i,j) = AngMomKet(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomKet(1,1) > 0) then + xyz = 1 + elseif(AngMomKet(1,2) > 0) then + xyz = 2 + elseif(AngMomKet(1,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRR3e!' + endif +! End loop over cartesian directions + a1p(1,xyz) = a1p(1,xyz) + 1 + b1m(1,xyz) = b1m(1,xyz) - 1 + a1a2a3b1b2b3 = HRR3e(a1p,b1m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + CenterAB(1,xyz)* & + HRR3e(AngMomBra,b1m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) +!------------------------------------------------------------------------ +! 2nd horizontal recurrence relation (2 terms): +!------------------------------------------------------------------------ + elseif(TotAngMomKet(3) == 0) then + do i=1,3 + do j=1,3 + a2p(i,j) = AngMomBra(i,j) + b2m(i,j) = AngMomKet(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomKet(2,1) > 0) then + xyz = 1 + elseif(AngMomKet(2,2) > 0) then + xyz = 2 + elseif(AngMomKet(2,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRR3e!' + endif +! End loop over cartesian directions + a2p(2,xyz) = a2p(2,xyz) + 1 + b2m(2,xyz) = b2m(2,xyz) - 1 + a1a2a3b1b2b3 = HRR3e(a2p,b2m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + CenterAB(2,xyz)* & + HRR3e(AngMomBra,b2m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) +!------------------------------------------------------------------------ +! 3rd horizontal recurrence relation (2 terms): +!------------------------------------------------------------------------ + else + do i=1,3 + do j=1,3 + a3p(i,j) = AngMomBra(i,j) + b3m(i,j) = AngMomKet(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomKet(3,1) > 0) then + xyz = 1 + elseif(AngMomKet(3,2) > 0) then + xyz = 2 + elseif(AngMomKet(3,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRR3e!' + endif +! End loop over cartesian directions + a3p(3,xyz) = a3p(3,xyz) + 1 + b3m(3,xyz) = b3m(3,xyz) - 1 + a1a2a3b1b2b3 = HRR3e(a3p,b3m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + CenterAB(3,xyz)* & + HRR3e(AngMomBra,b3m,maxm,Om,ExpZ,CenterAB,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + +end function HRR3e diff --git a/src/IntPak/HRRF12.f90 b/src/IntPak/HRRF12.f90 new file mode 100644 index 0000000..6ad2efe --- /dev/null +++ b/src/IntPak/HRRF12.f90 @@ -0,0 +1,40 @@ +recursive function HRRF12(AngMomA,AngMomB,AngMomC,AngMomD,fG,gP,gG,gQ,ExpPGQi, & + CenterPQSq,CenterRA,CenterRC,CenterAB,CenterCD) & + result(Gabcd) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + +! Input variables + integer,intent(in) :: AngMomA,AngMomB,AngMomC,AngMomD + double precision,intent(in) :: ExpPGQi + double precision,intent(in) :: fG,gP,gG,gQ + double precision,intent(in) :: CenterPQSq,CenterRA,CenterRC + double precision,intent(in) :: CenterAB,CenterCD + +! Local variables + double precision :: VRRF12 + double precision :: Gabcd + + If(AngMomB < 0 .or. AngMomD < 0) then + Gabcd = 0d0 + Else + If(AngMomB == 0 .and. AngMomD == 0) then + Gabcd = VRRF12(AngMomA,AngMomC,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) + Else + If(AngMomD == 0) then + Gabcd = HRRF12(AngMomA+1,AngMomB-1,AngMomC,AngMomD,fG,gP,gG,gQ,ExpPGQi, & + CenterPQSq,CenterRA,CenterRC,CenterAB,CenterCD) & + + CenterAB*HRRF12(AngMomA,AngMomB-1,AngMomC,AngMomD,fG,gP,gG,gQ, & + ExpPGQi,CenterPQSq,CenterRA,CenterRC,CenterAB,CenterCD) + Else + Gabcd = HRRF12(AngMomA,AngMomB,AngMomC+1,AngMomD-1,fG,gP,gG,gQ,ExpPGQi, & + CenterPQSq,CenterRA,CenterRC,CenterAB,CenterCD) & + + CenterCD*HRRF12(AngMomA,AngMomB,AngMomC,AngMomD-1,fG,gP,gG,gQ, & + ExpPGQi,CenterPQSq,CenterRA,CenterRC,CenterAB,CenterCD) + EndIf + EndIf + EndIf + +end function HRRF12 diff --git a/src/IntPak/HRRNuc.f90 b/src/IntPak/HRRNuc.f90 new file mode 100644 index 0000000..822a9b5 --- /dev/null +++ b/src/IntPak/HRRNuc.f90 @@ -0,0 +1,71 @@ +recursive function HRRNuc(AngMomA,AngMomB,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + result(Gab) + +! Horizontal recurrence relation for one-electron nuclear attraction integrals + + implicit none + +! Input variables + + integer,intent(in) :: AngMomA(3),AngMomB(3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm) + double precision,intent(in) :: ExpPi + double precision,intent(in) :: CenterAB(3),CenterPA(3),CenterPC(3) + +! Local variables + + logical :: NegAngMomB + integer :: TotAngMomA,TotAngMomB + integer :: xyz,ap(3),bm(3) + integer :: i + double precision :: VRRNuc + +! Output variables + + double precision :: Gab + + NegAngMomB = AngMomB(1) < 0 .or. AngMomB(2) < 0 .or. AngMomB(3) < 0 + + TotAngMomA = AngMomA(1) + AngMomA(2) + AngMomA(3) + TotAngMomB = AngMomB(1) + AngMomB(2) + AngMomB(3) + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ + if(NegAngMomB) then + Gab = 0d0 + else +!------------------------------------------------------------------------ +! Vertical recurrence relations: (a|0) +!------------------------------------------------------------------------ + if(TotAngMomB == 0) then + Gab = VRRNuc(0,AngMomA,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) + else +!------------------------------------------------------------------------ +! 1st horizontal recurrence relation (2 terms): (a|b+) +!------------------------------------------------------------------------ + do i=1,3 + ap(i) = AngMomA(i) + bm(i) = AngMomB(i) + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomB(1) > 0) then + xyz = 1 + elseif(AngMomB(2) > 0) then + xyz = 2 + elseif(AngMomB(3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in HRRNuc!' + endif +! End loop over cartesian directions + ap(xyz) = ap(xyz) + 1 + bm(xyz) = bm(xyz) - 1 + Gab = HRRNuc(ap,bm,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + + CenterAB(xyz)*HRRNuc(AngMomA,bm,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) + endif + endif + +end function HRRNuc diff --git a/src/IntPak/HRROv.f90 b/src/IntPak/HRROv.f90 new file mode 100644 index 0000000..135140e --- /dev/null +++ b/src/IntPak/HRROv.f90 @@ -0,0 +1,28 @@ +recursive function HRROv(AngMomA,AngMomB,ExpPi,CenterAB,CenterPA) & + result(Gab) + +! Horizontal recurrence relations for one-electron overlap integrals + + implicit none + +! Input variables + integer,intent(in) :: AngMomA,AngMomB + double precision,intent(in) :: ExpPi + double precision,intent(in) :: CenterAB,CenterPA + +! Local variables + double precision :: VRROv + double precision :: Gab + + if(AngMomB < 0) then + Gab = 0d0 + else + if(AngMomB == 0) then + Gab = VRROv(AngMomA,ExpPi,CenterPA) + else + Gab = HRROv(AngMomA+1,AngMomB-1,ExpPi,CenterAB,CenterPA) & + + CenterAB*HRROv(AngMomA,AngMomB-1,ExpPi,CenterAB,CenterPA) + endif + endif + +end function HRROv diff --git a/src/IntPak/IntPak.f90 b/src/IntPak/IntPak.f90 new file mode 100644 index 0000000..88720bc --- /dev/null +++ b/src/IntPak/IntPak.f90 @@ -0,0 +1,555 @@ +program IntPak + + implicit none + include 'parameters.h' + + logical :: debug + logical :: doOv,doKin,doNuc,doERI,doF12,doYuk,doErf + logical :: do3eInt(n3eInt),do4eInt(n4eInt) + integer :: NAtoms,NBasis,iType + double precision :: ExpS + integer :: KG + double precision,allocatable :: DG(:),ExpG(:) + double precision,allocatable :: ZNuc(:),XYZAtoms(:,:) + + integer :: nShell + integer,allocatable :: TotAngMomShell(:),KShell(:) + double precision,allocatable :: CenterShell(:,:),DShell(:,:),ExpShell(:,:) + + double precision :: start_1eInt(n1eInt),end_1eInt(n1eInt),t_1eInt(n1eInt) + double precision :: start_2eInt(n2eInt),end_2eInt(n2eInt),t_2eInt(n2eInt) + double precision :: start_3eInt(n3eInt),end_3eInt(n3eInt),t_3eInt(n3eInt) + double precision :: start_4eInt(n4eInt),end_4eInt(n4eInt),t_4eInt(n4eInt) + + integer :: np1eInt(n1eInt),nSigp1eInt(n1eInt),nc1eInt(n1eInt),nSigc1eInt(n1eInt) + integer :: np2eInt(n2eInt),nSigp2eInt(n2eInt),nc2eInt(n2eInt),nSigc2eInt(n2eInt) + integer :: np3eInt(n3eInt),nSigp3eInt(n3eInt),nc3eInt(n3eInt),nSigc3eInt(n3eInt) + integer :: np4eInt(n4eInt),nSigp4eInt(n4eInt),nc4eInt(n4eInt),nSigc4eInt(n4eInt) + + double precision,allocatable :: S(:,:) + + +! Hello World + + write(*,*) + write(*,*) '********************************' + write(*,*) '* IntPak *' + write(*,*) '* Integral Package for dummies *' + write(*,*) '********************************' + write(*,*) + +! Debugger on? + + debug = .false. +! debug = .true. + +! Which integrals do you want? + + doOv = .true. + doKin = .true. + doNuc = .true. + doERI = .true. + doF12 = .false. + doYuk = .false. + doErf = .false. + + do3eInt(1) = .false. + do3eInt(2) = .false. + do3eInt(3) = .false. + + do4eInt(1) = .false. + do4eInt(2) = .false. + do4eInt(3) = .false. + +!------------------------------------------------------------------------ +! Read input information +!------------------------------------------------------------------------ + + call ReadNAtoms(NAtoms) + + allocate(ZNuc(1:NAtoms),XYZAtoms(1:NAtoms,1:3)) + + call ReadGeometry(NAtoms,ZNuc,XYZAtoms) + + allocate(CenterShell(1:maxShell,1:3),TotAngMomShell(1:maxShell),KShell(1:maxShell), & + DShell(1:maxShell,1:maxK),ExpShell(1:maxShell,1:maxK)) + + call ReadBasis(NAtoms,XYZAtoms,nShell,CenterShell, & + TotAngMomShell,KShell,DShell,ExpShell) + + call CalcNBasis(nShell,TotAngMomShell,NBasis) + + call ReadGeminal(ExpS) + +!------------------------------------------------------------------------ +! Memory allocation +!------------------------------------------------------------------------ + allocate(S(1:NBasis,1:NBasis)) + +!------------------------------------------------------------------------ +! Compute one-electron overlap integrals +!------------------------------------------------------------------------ + if(doOv) then + + iType = 1 + + call cpu_time(start_1eInt(iType)) + call ComputeOv(debug,NBasis,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np1eInt(iType),nSigp1eInt(iType),nc1eInt(iType),nSigc1eInt(iType),S) + call cpu_time(end_1eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive overlap integrals = ',np1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive overlap integrals = ',nSigp1eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted overlap integrals = ',nc1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted overlap integrals = ',nSigc1eInt(iType) + + write(*,*) + + t_1eInt(iType) = end_1eInt(iType) - start_1eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_1eInt(iType),' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute one-electron kinetic integrals +!------------------------------------------------------------------------ + + if(doKin) then + + iType = 2 + + call cpu_time(start_1eInt(iType)) + call ComputeKin(debug,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np1eInt(iType),nSigp1eInt(iType),nc1eInt(iType),nSigc1eInt(iType)) + call cpu_time(end_1eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive kinetic integrals = ',np1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive kinetic integrals = ',nSigp1eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted kinetic integrals = ',nc1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted kinetic integrals = ',nSigc1eInt(iType) + + write(*,*) + + t_1eInt(iType) = end_1eInt(iType) - start_1eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_1eInt(iType),' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute one-electron nuclear attraction integrals +!------------------------------------------------------------------------ + + if(doNuc) then + + iType = 3 + + call cpu_time(start_1eInt(iType)) + call ComputeNuc(debug,nShell, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + NAtoms,ZNuc,XYZAtoms, & + np1eInt(iType),nSigp1eInt(iType),nc1eInt(iType),nSigc1eInt(iType)) + call cpu_time(end_1eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive nuclear integrals = ',np1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive nuclear integrals = ',nSigp1eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted nuclear integrals = ',nc1eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted nuclear integrals = ',nSigc1eInt(iType) + + write(*,*) + + t_1eInt(iType) = end_1eInt(iType) - start_1eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_1eInt(iType),' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute ERIs +!------------------------------------------------------------------------ + + if(doERI) then + + iType = 1 + KG = 1 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 1d0 /) + ExpG = (/ 0d0 /) + + call cpu_time(start_2eInt(iType)) + call Compute2eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType)) + call cpu_time(end_2eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive ERIs = ',np2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive ERIs = ',nSigp2eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted ERIs = ',nc2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted ERIs = ',nSigc2eInt(iType) + + write(*,*) + + t_2eInt(iType) = end_2eInt(iType) - start_2eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_2eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute F12 two-electron integrals +!------------------------------------------------------------------------ + + if(doF12) then + + iType = 2 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + +! KG = 10 +! allocate(DG(1:KG),ExpG(1:KG)) + +! DG = (/ 220.983854141, 18.52358977132, 4.81060044582, 1.892812227999, & +! 0.920641976732, 0.505281134191, 0.295757471525, 0.1753021140139, & +! 0.0969611396173, 0.0386163391551 /) +! ExpG = (/ 5722.54799330, 191.0413784782, 27.4417708701, 6.39987966572, & +! 1.82203908762, 0.548835646170, 0.156252937904, 0.036440796942, & +! 0.0052344680925, 0.00017474733304 /) + +! KG = 20 +! allocate(DG(1:KG),ExpG(1:KG)) + +! DG = (/ 841.88478132, 70.590185207, 18.3616020768, 7.2608642093, & +!3.57483416444, 2.01376031082, 1.24216542801, 0.81754348620, & +!0.564546514023, 0.404228610699, 0.297458536575, 0.223321219537, & +!0.169933732064, 0.130190978230, 0.099652303426, 0.075428246546, & +!0.0555635614051, 0.0386791283055, 0.0237550435652, 0.0100062783874 /) + +! ExpG = (/84135.654509, 2971.58727634, 474.716025959, 130.676724560, & +!47.3938388887, 20.2078651631, 9.5411021938, 4.8109546955, & +!2.52795733067, 1.35894103210, 0.73586710268, 0.39557629706, & +!0.20785895177, 0.104809693858, 0.049485682527, 0.021099788990, & +!0.007652472186, 0.0021065225215, 0.0003365204879, 0.00001188556749 /) + + + + call cpu_time(start_2eInt(iType)) + call Compute2eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType)) + call cpu_time(end_2eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive geminal integrals = ',np2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive geminal integrals = ',nSigp2eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted geminal integrals = ',nc2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted geminal integrals = ',nSigc2eInt(iType) + + write(*,*) + + t_2eInt(iType) = end_2eInt(iType) - start_2eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_2eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute Yukawa two-electron integrals +!------------------------------------------------------------------------ + + if(doYuk) then + + iType = 3 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_2eInt(iType)) + call Compute2eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType)) + call cpu_time(end_2eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive Yukawa integrals = ',np2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive Yukawa integrals = ',nSigp2eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted Yukawa integrals = ',nc2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted Yukawa integrals = ',nSigc2eInt(iType) + + write(*,*) + + t_2eInt(iType) = end_2eInt(iType) - start_2eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_2eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute long-range Coulomb two-electron integrals +!------------------------------------------------------------------------ + + if(doErf) then + + iType = 4 + KG = 1 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 1d0 /) + ExpG = (/ 1d0 /) + ExpS = ExpS*ExpS + + call cpu_time(start_2eInt(iType)) + call Compute2eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType)) + call cpu_time(end_2eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive long-range Coulomb integrals = ',np2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive long-range Coulomb integrals = ',nSigp2eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted long-range Coulomb integrals = ',nc2eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted long-range Coulomb integrals = ',nSigc2eInt(iType) + + write(*,*) + + t_2eInt(iType) = end_2eInt(iType) - start_2eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_2eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute three-electron integrals: Type 1 => chain C12 S23 +!------------------------------------------------------------------------ + + if(do3eInt(1)) then + + iType = 1 + KG = 1 +! KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 1d0 /) + ExpG = (/ 1d0 /) +! DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) +! ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_3eInt(iType)) + call Compute3eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np3eInt(iType),nSigp3eInt(iType),nc3eInt(iType),nSigc3eInt(iType)) + call cpu_time(end_3eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f23/r12 integrals = ',np3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f23/r12 integrals = ',nSigp3eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f23/r12 integrals = ',nc3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f23/r12 integrals = ',nSigc3eInt(iType) + + write(*,*) + + t_3eInt(iType) = end_3eInt(iType) - start_3eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_3eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute three-electron integrals: Type 2 => cyclic C12 S13 S23 +!------------------------------------------------------------------------ + + if(do3eInt(2)) then + + iType = 2 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_3eInt(iType)) + call Compute3eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np3eInt(iType),nSigp3eInt(iType),nc3eInt(iType),nSigc3eInt(iType)) + call cpu_time(end_3eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f13.f23/r12 integrals = ',np3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f13.f23/r12 integrals = ',nSigp3eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f13.f23/r12 integrals = ',nc3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f13.f23/r12 integrals = ',nSigc3eInt(iType) + + write(*,*) + + t_3eInt(iType) = end_3eInt(iType) - start_3eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_3eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute three-electron integrals: Type 3 => chain S13 S23 +!------------------------------------------------------------------------ + + if(do3eInt(3)) then + + iType = 3 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_3eInt(iType)) + call Compute3eInt(debug,iType,nShell, & + ExpS,KG,DG,ExpG, & + CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + np3eInt(iType),nSigp3eInt(iType),nc3eInt(iType),nSigc3eInt(iType)) + call cpu_time(end_3eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f13.f23 integrals = ',np3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f13.f23 integrals = ',nSigp3eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f13.f23 integrals = ',nc3eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f13.f23 integrals = ',nSigc3eInt(iType) + + write(*,*) + + t_3eInt(iType) = end_3eInt(iType) - start_3eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_3eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute four-electron integrals: Type 1 => chain C12 S14 S23 +!------------------------------------------------------------------------ + + if(do4eInt(1)) then + + iType = 1 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_4eInt(iType)) +! call Compute4eInt(debug,iType,nShell,ExpS, & +! ExpS,KG,DG,ExpG, & +! CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & +! np4eInt(iType),nSigp4eInt(iType),nc4eInt(iType),nSigc4eInt(iType)) + call cpu_time(end_4eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f14.f23/r12 integrals = ',np4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f14.f23/r12 integrals = ',nSigp4eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f14.f23/r12 integrals = ',nc4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f14.f23/r12 integrals = ',nSigc4eInt(iType) + + write(*,*) + + t_4eInt(iType) = end_4eInt(iType) - start_4eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_4eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute four-electron integrals: Type 2 => trident C12 S13 S14 +!------------------------------------------------------------------------ + + if(do4eInt(2)) then + + iType = 2 + KG = 6 + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_4eInt(iType)) +! call Compute4eInt(debug,iType,nShell,ExpS, & +! ExpS,KG,DG,ExpG, & +! CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & +! np4eInt(iType),nSigp4eInt(iType),nc4eInt(iType),nSigc4eInt(iType)) + call cpu_time(end_4eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f13.f14/r12 integrals = ',np4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f13.f14/r12 integrals = ',nSigp4eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f13.f14/r12 integrals = ',nc4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f13.f14/r12 integrals = ',nSigc4eInt(iType) + + write(*,*) + + t_4eInt(iType) = end_4eInt(iType) - start_4eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_4eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif + +!------------------------------------------------------------------------ +! Compute four-electron integrals: Type 3 => chain C12 S13 S34 +!------------------------------------------------------------------------ + + if(do4eInt(3)) then + + iType = 3 + KG = 6 + allocate(DG(1:KG),ExpG(1:KG)) + DG = (/ 0.3144d0, 0.3037d0, 0.1681d0, 0.09811d0, 0.06024d0, 0.03726d0 /) + ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /) + + call cpu_time(start_4eInt(iType)) +! call Compute4eInt(debug,iType,nShell, & +! ExpS,KG,DG,ExpG, & +! CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & +! np4eInt(iType),nSigp4eInt(iType),nc4eInt(iType),nSigc4eInt(iType)) + call cpu_time(end_4eInt(iType)) + + write(*,'(A65,1X,I9)') 'Total number of primitive f13.f34/r12 integrals = ',np4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant primitive f13.f34/r12 integrals = ',nSigp4eInt(iType) + + write(*,'(A65,1X,I9)') 'Total number of contracted f13.f34/r12 integrals = ',nc4eInt(iType) + write(*,'(A65,1X,I9)') 'Number of significant contracted f13.f34/r12 integrals = ',nSigc4eInt(iType) + + write(*,*) + + t_4eInt(iType) = end_4eInt(iType) - start_4eInt(iType) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time = ',t_4eInt(iType),' seconds' + write(*,*) + + deallocate(DG,ExpG) + + endif +!------------------------------------------------------------------------ +! End of IntPak +!------------------------------------------------------------------------ +end program IntPak diff --git a/src/IntPak/KinInt.f90 b/src/IntPak/KinInt.f90 new file mode 100644 index 0000000..e7394e8 --- /dev/null +++ b/src/IntPak/KinInt.f90 @@ -0,0 +1,76 @@ +subroutine KinInt(npKin,nSigpKin,ExpA,CenterA,AngMomA,ExpB,CenterB,AngMomB,pKin) + +! Compute one-electron kinetic integrals + + implicit none + +! Input variables + + double precision,intent(in) :: ExpA,ExpB + double precision,intent(in) :: CenterA(3),CenterB(3) + integer,intent(in) :: AngMomA(3),AngMomB(3) + + +! Local variables + + double precision :: ExpAi,ExpBi + double precision :: ExpP,ExpPi + double precision :: CenterP(3),CenterAB(3),CenterPA(3) + double precision :: NormABSq + double precision :: GAB + double precision :: HRROv,RRKin + + integer :: i + double precision :: pi + double precision :: start_RR,finish_RR,t_RR + double precision :: s(3),k(3) + +! Output variables + + integer,intent(inout) :: npKin,nSigpKin + double precision,intent(out) :: pKin + + pi = 4d0*atan(1d0) + +! Pre-computed shell quantities + + ExpAi = 1d0/ExpA + ExpBi = 1d0/ExpB + +! Pre-computed quantities for shell-pair AB + + ExpP = ExpA + ExpB + ExpPi = 1d0/ExpP + + NormABSq = 0d0 + Do i=1,3 + CenterP(i) = (ExpA*CenterA(i) + ExpB*CenterB(i))*ExpPi + CenterPA(i) = CenterP(i) - CenterA(i) + CenterAB(i) = CenterA(i) - CenterB(i) + NormABSq = NormABSq + CenterAB(i)**2 + Enddo + + GAB = (pi*ExpPi)**(1.5d0)*exp(-NormABSq/(ExpAi+ExpBi)) + +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) +! Loop over cartesian directions + Do i=1,3 + s(i) = HRROv(AngMomA(i),AngMomB(i),ExpPi,CenterAB(i),CenterPA(i)) + k(i) = RRKin(AngMomA(i),AngMomB(i),ExpA,ExpB,ExpPi,CenterAB(i),CenterPA(i)) + Enddo + call cpu_time(finish_RR) + + pKin = k(1)*s(2)*s(3) + s(1)*k(2)*s(3) + s(1)*s(2)*k(3) + pKin = GAB*pKin + t_RR = finish_RR - start_RR + +! Print result + npKin = npKin + 1 + if(abs(pKin) > 1d-15) then + nSigpKin = nSigpKin + 1 + endif + +end subroutine KinInt diff --git a/src/IntPak/Makefile b/src/IntPak/Makefile new file mode 100644 index 0000000..432854f --- /dev/null +++ b/src/IntPak/Makefile @@ -0,0 +1,29 @@ +IDIR =../../include +LDIR =../../lib +BDIR =../../bin +ODIR = obj +SDIR =. +FC = gfortran +FFLAGS = -Wall -O3 -I$(IDIR) +DFLAGS = -g -msse4.2 -fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant + + +LIBS = $(LDIR)/*.a $(LDIR)/slatec/src/static/libslatec.a + + +SRC = $(wildcard *.f90) + +OBJ = $(patsubst %.f90,$(ODIR)/%.o,$(SRC)) + + +$(ODIR)/%.o: %.f90 + $(FC) -c -o $@ $< $(FFLAGS) + +$(BDIR)/IntPak: $(OBJ) + $(FC) -o $@ $^ $(FFLAGS) $(LIBS) + +debug: $(OBJ) + $(FC) -o $(BDIR)/$@ $^ $(FFLAGS) $(LIBS) $(DFLAGS) + +clean: + rm -f $(ODIR)/*.o $(BDIR)/IntPak $(BDIR)/debug diff --git a/src/IntPak/NormCoeff.f90 b/src/IntPak/NormCoeff.f90 new file mode 100644 index 0000000..9e6cabf --- /dev/null +++ b/src/IntPak/NormCoeff.f90 @@ -0,0 +1,29 @@ +function NormCoeff(alpha,a) + + implicit none + +! Input variables + + double precision,intent(in) :: alpha + integer,intent(in) :: a(3) + +! local variable + double precision :: pi,dfa(3),dfac + integer :: atot + +! Output variable + double precision NormCoeff + + pi = 4d0*atan(1d0) + atot = a(1) + a(2) + a(3) + + dfa(1) = dfac(2*a(1))/(2d0**a(1)*dfac(a(1))) + dfa(2) = dfac(2*a(2))/(2d0**a(2)*dfac(a(2))) + dfa(3) = dfac(2*a(3))/(2d0**a(3)*dfac(a(3))) + + + NormCoeff = (2d0*alpha/pi)**(3d0/2d0)*(4d0*alpha)**atot + NormCoeff = NormCoeff/(dfa(1)*dfa(2)*dfa(3)) + NormCoeff = sqrt(NormCoeff) + +end function NormCoeff diff --git a/src/IntPak/NucInt.f90 b/src/IntPak/NucInt.f90 new file mode 100644 index 0000000..36e678a --- /dev/null +++ b/src/IntPak/NucInt.f90 @@ -0,0 +1,114 @@ +subroutine NucInt(debug,npNuc,nSigpNuc, & + ExpA,CenterA,AngMomA, & + ExpB,CenterB,AngMomB, & + CenterC, & + pNuc) + +! Compute recursively the primitive one-electron nuclear attraction integrals + + implicit none + +! Input variables + + logical,intent(in) :: debug + double precision,intent(in) :: ExpA,ExpB + double precision,intent(in) :: CenterA(3),CenterB(3),CenterC(3) + integer,intent(in) :: AngMomA(3),AngMomB(3) + +! Local variables + + double precision :: ExpAi,ExpBi + integer :: TotAngMomA,TotAngMomB + double precision :: ExpP,ExpPi + double precision :: CenterP(3),CenterAB(3),CenterPA(3),CenterPC(3) + double precision :: NormABSq,NormPCSq + double precision :: G + double precision,allocatable :: Om(:) + double precision :: HRRNuc + double precision :: Gab + + double precision :: pi + integer :: i,maxm + double precision :: start_Om,finish_Om,start_RR,finish_RR,t_Om,t_RR + +! Output variables + + integer,intent(inout) :: npNuc,nSigpNuc + double precision,intent(out) :: pNuc + + pi = 4d0*atan(1d0) + +! Pre-computed shell quantities + + ExpAi = 1d0/ExpA + ExpBi = 1d0/ExpB + +! Pre-computed quantities for shell-pair AB + + ExpP = ExpA + ExpB + ExpPi = 1d0/ExpP + + NormABSq = 0d0 + NormPCSq = 0d0 + do i=1,3 + CenterP(i) = (ExpA*CenterA(i) + ExpB*CenterB(i))*ExpPi + CenterAB(i) = CenterA(i) - CenterB(i) + CenterPA(i) = CenterP(i) - CenterA(i) + CenterPC(i) = CenterP(i) - CenterC(i) + NormABSq = NormABSq + CenterAB(i)**2 + NormPCSq = NormPCSq + CenterPC(i)**2 + enddo + + G = (pi*ExpPi)**(1.5d0)*exp(-NormABSq/(ExpAi+ExpBi)) + +! Total angular momemtum + + TotAngMomA = AngMomA(1) + AngMomA(2) + AngMomA(3) + TotAngMomB = AngMomB(1) + AngMomB(2) + AngMomB(3) + + maxm = TotAngMomA + TotAngMomB + +! Pre-compute (0|V|0)^m + + allocate(Om(0:maxm)) + call cpu_time(start_Om) + call CalcOmNuc(maxm,ExpPi,NormPCSq,Om) + call cpu_time(finish_Om) + +! Print (0|V|0)^m + + if(debug) then + write(*,*) '(0|V|0)^m' + do i=0,maxm + write(*,*) i,Om(i) + enddo + write(*,*) + endif + +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) + Gab = HRRNuc(AngMomA,AngMomB,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) + call cpu_time(finish_RR) + +! Timings + + t_Om = finish_Om - start_Om + t_RR = finish_RR - start_RR + +! Print result + + pNuc = G*Gab + + npNuc = npNuc + 1 + if(abs(pNuc) > 1d-15) then + nSigpNuc = nSigpNuc + 1 +! write(*,'(A10,1X,F16.10,1X,I6,1X,I6)') '[a|V|b] = ',pNuc + endif + +! Deallocate arrays + + deallocate(Om) + +end subroutine NucInt diff --git a/src/IntPak/OvInt.f90 b/src/IntPak/OvInt.f90 new file mode 100644 index 0000000..2426440 --- /dev/null +++ b/src/IntPak/OvInt.f90 @@ -0,0 +1,74 @@ +subroutine OvInt(npOv,nSigpOv,ExpA,CenterA,AngMomA,ExpB,CenterB,AngMomB,pOv) + +! Compute one-electron overlap integrals + + implicit none + +! Input variables + + double precision,intent(in) :: ExpA,ExpB + double precision,intent(in) :: CenterA(3),CenterB(3) + integer,intent(in) :: AngMomA(3),AngMomB(3) + + +! Local variables + + double precision :: ExpAi,ExpBi + double precision :: ExpP,ExpPi + double precision :: CenterP(3),CenterAB(3),CenterPA(3) + double precision :: NormABSq + double precision :: G + double precision :: HRROv + + integer :: i + double precision :: pi + double precision :: start_RR,finish_RR,t_RR + double precision :: Gab(3) + +! Output variables + + integer,intent(inout) :: npOv,nSigpOv + double precision,intent(out) :: pOv + + pi = 4d0*atan(1d0) + +! Pre-computed shell quantities + + ExpAi = 1d0/ExpA + ExpBi = 1d0/ExpB + +! Pre-computed quantities for shell-pair AB + + ExpP = ExpA + ExpB + ExpPi = 1d0/ExpP + + NormABSq = 0d0 + Do i=1,3 + CenterP(i) = (ExpA*CenterA(i) + ExpB*CenterB(i))*ExpPi + CenterPA(i) = CenterP(i) - CenterA(i) + CenterAB(i) = CenterA(i) - CenterB(i) + NormABSq = NormABSq + CenterAB(i)**2 + Enddo + + G = (pi*ExpPi)**(1.5d0)*exp(-NormABSq/(ExpAi+ExpBi)) + +!------------------------------------------------------------------------ +! Launch reccurence relations! +!------------------------------------------------------------------------ + call cpu_time(start_RR) +! Loop over cartesian directions + Do i=1,3 + Gab(i) = HRROv(AngMomA(i),AngMomB(i),ExpPi,CenterAB(i),CenterPA(i)) + Enddo + call cpu_time(finish_RR) + + pOv = G*Gab(1)*Gab(2)*Gab(3) + t_RR = finish_RR - start_RR + +! Print result + npOv = npOv + 1 + if(abs(pOv) > 1d-15) then + nSigpOv = nSigpOv + 1 + endif + +end subroutine OvInt diff --git a/src/IntPak/RRKin.f90 b/src/IntPak/RRKin.f90 new file mode 100644 index 0000000..30993f2 --- /dev/null +++ b/src/IntPak/RRKin.f90 @@ -0,0 +1,29 @@ +function RRKin(AngMomA,AngMomB,ExpA,ExpB,ExpPi,CenterAB,CenterPA) & + result(Gab) + +! Recurrence relation for one-electron kinetic integrals + + implicit none + +! Input variables + integer,intent(in) :: AngMomA,AngMomB + double precision,intent(in) :: ExpA,ExpB,ExpPi + double precision,intent(in) :: CenterAB,CenterPA + +! Local variables + double precision :: HRROv + double precision :: a,b,s1,s2,s3,s4 + double precision :: Gab + + a = dble(AngMomA) + b = dble(AngMomB) + + s1 = HRROv(AngMomA-1,AngMomB-1,ExpPi,CenterAB,CenterPA) + s2 = HRROv(AngMomA+1,AngMomB-1,ExpPi,CenterAB,CenterPA) + s3 = HRROv(AngMomA-1,AngMomB+1,ExpPi,CenterAB,CenterPA) + s4 = HRROv(AngMomA+1,AngMomB+1,ExpPi,CenterAB,CenterPA) + + Gab = 0.5d0*a*b*s1 - ExpA*b*s2 - a*ExpB*s3 + 2d0*ExpA*ExpB*s4 + + +end function RRKin diff --git a/src/IntPak/ReadBasis.f90 b/src/IntPak/ReadBasis.f90 new file mode 100644 index 0000000..9a1db2a --- /dev/null +++ b/src/IntPak/ReadBasis.f90 @@ -0,0 +1,176 @@ +subroutine ReadBasis(NAtoms,XYZAtoms,nShell,CenterShell, & + TotAngMomShell,KShell,DShell,ExpShell) + +! Read basis set information + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: NAtoms + double precision,intent(in) :: XYZAtoms(NAtoms,3) + +! Local variables + + integer :: nShAt,iAt + integer :: i,j,k + character :: shelltype + +! Output variables + + integer,intent(out) :: nShell + double precision,intent(out) :: CenterShell(maxShell,3) + integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +!------------------------------------------------------------------------ +! Primary basis set information +!------------------------------------------------------------------------ + +! Open file with basis set specification + + open(unit=2,file='input/basis') + +! Read basis information + + write(*,'(A28)') 'Gaussian basis set' + write(*,'(A28)') '------------------' + + nShell = 0 + do i=1,NAtoms + read(2,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = XYZAtoms(iAt,k) + enddo + +! Shell type and contraction degree + + read(2,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(2,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells in OBS',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=2) + +!------------------------------------------------------------------------ +! Auxiliary basis set information +!------------------------------------------------------------------------ + +! Open file with auxilairy basis specification + + open(unit=3,file='input/auxbasis') + +! Read basis information + + write(*,'(A28)') 'Auxiliary basis set' + write(*,'(A28)') '-------------------' + + do i=1,NAtoms + read(3,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = XYZAtoms(iAt,k) + enddo + +! Shell type and contraction degree + + read(3,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(3,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells in ABS',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=3) + +end subroutine ReadBasis diff --git a/src/IntPak/ReadGeminal.f90 b/src/IntPak/ReadGeminal.f90 new file mode 100644 index 0000000..fcd2c70 --- /dev/null +++ b/src/IntPak/ReadGeminal.f90 @@ -0,0 +1,25 @@ +subroutine ReadGeminal(ExpS) + +! Read the geminal information + + implicit none + +! Input variables + double precision,intent(out) :: ExpS + +! Open file with geometry specification + open(unit=4,file='input/geminal') + +! Read exponent of Slater geminal + read(4,*) ExpS + + + write(*,'(A28)') '------------------' + write(*,'(A28,1X,F16.10)') 'Slater geminal exponent',ExpS + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with geminal information + close(unit=4) + +end subroutine ReadGeminal diff --git a/src/IntPak/ReadGeometry.f90 b/src/IntPak/ReadGeometry.f90 new file mode 100644 index 0000000..8f51671 --- /dev/null +++ b/src/IntPak/ReadGeometry.f90 @@ -0,0 +1,40 @@ +subroutine ReadGeometry(NAtoms,ZNuc,XYZAtoms) + +! Read molecular geometry + + implicit none + +! Input variables + integer,intent(in) :: NAtoms + double precision,intent(out) :: ZNuc(NAtoms),XYZAtoms(NAtoms,3) + +! Local variables + integer :: i + +! Open file with geometry specification + open(unit=1,file='input/molecule') + +! Read number of atoms + read(1,*) + read(1,*) + read(1,*) + + do i=1,NAtoms + read(1,*) ZNuc(i),XYZAtoms(i,1),XYZAtoms(i,2),XYZAtoms(i,3) + enddo + +! Print geometry + write(*,'(A28)') 'Molecular geometry' + write(*,'(A28)') '------------------' + do i=1,NAtoms + write(*,'(A28,1X,I16)') 'Atom n. ',i + write(*,'(A28,1X,F16.10)') 'Z = ',ZNuc(i) + write(*,'(A28,1X,F16.10,F16.10,F16.10)') 'Atom coordinates:',XYZAtoms(i,1),XYZAtoms(i,2),XYZAtoms(i,3) + enddo + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with geometry specification + close(unit=1) + +end subroutine ReadGeometry diff --git a/src/IntPak/ReadNAtoms.f90 b/src/IntPak/ReadNAtoms.f90 new file mode 100644 index 0000000..9f78096 --- /dev/null +++ b/src/IntPak/ReadNAtoms.f90 @@ -0,0 +1,20 @@ +subroutine ReadNAtoms(NAtoms) + +! Read number of atoms + + implicit none + +! Input variables + integer,intent(out) :: NAtoms + +! Open file with geometry specification + open(unit=1,file='input/molecule') + +! Read number of atoms + read(1,*) + read(1,*) NAtoms + +! Close file with geometry specification + close(unit=1) + +end subroutine ReadNAtoms diff --git a/src/IntPak/S2eInt.f90 b/src/IntPak/S2eInt.f90 new file mode 100644 index 0000000..833677d --- /dev/null +++ b/src/IntPak/S2eInt.f90 @@ -0,0 +1,70 @@ +subroutine S2eInt(debug,iType,np2eInt,nSigp2eInt, & + ExpS,KG,DG,ExpG, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet, & + p2eInt) + +! Perform contraction over the operator for two-electron integrals + + implicit none + include 'parameters.h' + + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: iType + double precision,intent(in) :: ExpS + integer,intent(in) :: KG + double precision,intent(in) :: DG(KG),ExpG(KG) + double precision,intent(in) :: ExpBra(2),ExpKet(2) + double precision,intent(in) :: CenterBra(2,3),CenterKet(2,3) + integer,intent(in) :: AngMomBra(2,3),AngMomKet(2,3) + +! Local variables + + double precision :: ExpSG + double precision :: G2eInt,GF12Int + + integer :: k + +! Output variables + + integer,intent(out) :: np2eInt,nSigp2eInt + double precision :: p2eInt + + p2eInt = 0d0 + +! Gaussian geminal + + if(iType == 2) then + do k=1,KG + ExpSG = ExpG(k)*ExpS**2 + p2eInt = p2eInt & + + DG(k)*GF12Int(ExpSG, & + ExpBra(1),CenterBra(1,1:3),AngMomBra(1,1:3), & + ExpKet(1),CenterKet(1,1:3),AngMomKet(1,1:3), & + ExpBra(2),CenterBra(2,1:3),AngMomBra(2,1:3), & + ExpKet(2),CenterKet(2,1:3),AngMomKet(2,1:3)) + enddo + else + do k=1,KG + ExpSG = ExpG(k)*ExpS**2 + p2eInt = p2eInt & + + DG(k)*G2eInt(debug,iType, & + ExpSG, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet) + enddo + endif + +! Print result + + np2eInt = np2eInt + 1 + + if(abs(p2eInt) > 1d-15) then + nSigp2eInt = nSigp2eInt + 1 + if(.false.) write(*,'(A15,1X,F16.10)') '[a1a2|b1b2] = ',p2eInt + endif + +end subroutine S2eInt diff --git a/src/IntPak/S3eInt.f90 b/src/IntPak/S3eInt.f90 new file mode 100644 index 0000000..faccdaf --- /dev/null +++ b/src/IntPak/S3eInt.f90 @@ -0,0 +1,58 @@ +subroutine S3eInt(debug,iType,np3eInt,nSigp3eInt, & + ExpS,KG,DG,ExpG, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet, & + p3eInt) + +! Perform contraction over the operators for three-electron integrals + + implicit none + include 'parameters.h' + + +! Input variables + + logical,intent(in) :: debug + integer,intent(in) :: iType + double precision,intent(in) :: ExpS + integer,intent(in) :: KG + double precision,intent(in) :: DG(KG),ExpG(KG) + double precision,intent(in) :: ExpBra(3),ExpKet(3) + double precision,intent(in) :: CenterBra(3,3),CenterKet(3,3) + integer,intent(in) :: AngMomBra(3,3),AngMomKet(3,3) + +! Local variables + + double precision :: ExpSG13,ExpSG23 + double precision :: G3eInt + + integer :: k,l + +! Output variables + + integer,intent(out) :: np3eInt,nSigp3eInt + double precision :: p3eInt + + p3eInt = 0d0 + do k=1,KG + do l=1,KG + ExpSG13 = ExpG(k)*ExpS**2 + ExpSG23 = ExpG(l)*ExpS**2 + p3eInt = p3eInt & + + DG(k)*DG(l)*G3eInt(debug,iType, & + ExpSG13,ExpSG23, & + ExpBra,CenterBra,AngMomBra, & + ExpKet,CenterKet,AngMomKet) + enddo + enddo + +! Print result + + np3eInt = np3eInt + 1 + + if(abs(p3eInt) > 1d-15) then + nSigp3eInt = nSigp3eInt + 1 + if(.false.) write(*,'(A15,1X,F16.10)') '[a1a2a3|b1b2b3] = ',p3eInt + endif + +end subroutine S3eInt diff --git a/src/IntPak/VRR2e.f90 b/src/IntPak/VRR2e.f90 new file mode 100644 index 0000000..0dde145 --- /dev/null +++ b/src/IntPak/VRR2e.f90 @@ -0,0 +1,130 @@ +recursive function VRR2e(m,AngMomBra,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + result(a1a2) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: m + integer,intent(in) :: AngMomBra(2,3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm),ExpZi(2),ExpY(2,2) + double precision,intent(in) :: CenterZA(2,3),CenterY(2,2,3) + +! Local variables + + logical :: NegAngMomBra(2) + integer :: TotAngMomBra(2) + integer :: a1m(2,3),a2m(2,3) + integer :: a1mm(2,3),a2mm(2,3) + integer :: a1m2m(2,3) + double precision :: fZ(2) + integer :: i,j,xyz + +! Output variables + + double precision :: a1a2 + + do i=1,2 + NegAngMomBra(i) = AngMomBra(i,1) < 0 .or. AngMomBra(i,2) < 0 .or. AngMomBra(i,3) < 0 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + enddo + + fZ(1) = ExpY(1,2)*ExpZi(1) + fZ(2) = ExpY(1,2)*ExpZi(2) + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ +! if(NegAngMomBra(1) .or. NegAngMomBra(2)) then +! a1a2 = 0d0 +!------------------------------------------------------------------------ +! Fundamental integral: (00|00)^m +!------------------------------------------------------------------------ +! elseif(TotAngMomBra(1) == 0 .and. TotAngMomBra(2) == 0) then + if(TotAngMomBra(1) == 0 .and. TotAngMomBra(2) == 0) then + a1a2 = Om(m) +!------------------------------------------------------------------------ +! 1st vertical recurrence relation (4 terms): (a+0|00)^m +!------------------------------------------------------------------------ + elseif(TotAngMomBra(2) == 0) then + do i=1,2 + do j=1,3 + a1m(i,j) = AngMomBra(i,j) + a1mm(i,j) = AngMomBra(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomBra(1,1) > 0) then + xyz = 1 + elseif(AngMomBra(1,2) > 0) then + xyz = 2 + elseif(AngMomBra(1,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRR2e!' + endif +! End loop over cartesian directions + a1m(1,xyz) = a1m(1,xyz) - 1 + a1mm(1,xyz) = a1mm(1,xyz) - 2 + if(AngMomBra(1,xyz) <= 0) then + a1a2 = 0d0 + elseif(AngMomBra(1,xyz) == 1) then + a1a2 = CenterZA(1,xyz)*VRR2e(m,a1m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + - fZ(1)*CenterY(1,2,xyz)*VRR2e(m+1,a1m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) + else + a1a2 = CenterZA(1,xyz)*VRR2e(m,a1m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + - fZ(1)*CenterY(1,2,xyz)*VRR2e(m+1,a1m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + + 0.5d0*dble(AngMomBra(1,xyz)-1)*ExpZi(1)*( & + VRR2e(m,a1mm,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + - fZ(1)*VRR2e(m+1,a1mm,maxm,Om,ExpZi,ExpY,CenterZA,CenterY)) + endif +!------------------------------------------------------------------------ +! 2nd vertical recurrence relation (5 terms): (a0|c+0)^m +!------------------------------------------------------------------------ + else + do i=1,2 + do j=1,3 + a2m(i,j) = AngMomBra(i,j) + a2mm(i,j) = AngMomBra(i,j) + a1m2m(i,j) = AngMomBra(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomBra(2,1) > 0) then + xyz = 1 + elseif(AngMomBra(2,2) > 0) then + xyz = 2 + elseif(AngMomBra(2,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRR2e!' + endif +! End loop over cartesian directions + a2m(2,xyz) = a2m(2,xyz) - 1 + a2mm(2,xyz) = a2mm(2,xyz) - 2 + a1m2m(1,xyz) = a1m2m(1,xyz) - 1 + a1m2m(2,xyz) = a1m2m(2,xyz) - 1 + if(AngMomBra(2,xyz) <= 0) then + a1a2 = 0d0 + elseif(AngMomBra(2,xyz) == 1) then + a1a2 = CenterZA(2,xyz)*VRR2e(m,a2m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + + fZ(2)*CenterY(1,2,xyz)*VRR2e(m+1,a2m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) + else + a1a2 = CenterZA(2,xyz)*VRR2e(m,a2m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + + fZ(2)*CenterY(1,2,xyz)*VRR2e(m+1,a2m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + + 0.5d0*dble(AngMomBra(2,xyz)-1)*ExpZi(2)*( & + VRR2e(m,a2mm,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) & + - fZ(2)*VRR2e(m+1,a2mm,maxm,Om,ExpZi,ExpY,CenterZA,CenterY)) + endif + if(AngMomBra(1,xyz) > 0) & + a1a2 = a1a2 & + + 0.5d0*dble(AngMomBra(1,xyz))*fZ(2)*ExpZi(1)*VRR2e(m+1,a1m2m,maxm,Om,ExpZi,ExpY,CenterZA,CenterY) + endif + +end function VRR2e diff --git a/src/IntPak/VRR3e.f90 b/src/IntPak/VRR3e.f90 new file mode 100644 index 0000000..3033bff --- /dev/null +++ b/src/IntPak/VRR3e.f90 @@ -0,0 +1,174 @@ +recursive function VRR3e(m,AngMomBra,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + result(a1a2a3) + +! Vertical recurrence relations for three-electron integrals + + implicit none + include 'parameters.h' + + +! Input variables + + integer,intent(in) :: m + integer,intent(in) :: AngMomBra(3,3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm),ExpZ(3),CenterZA(3,3) + double precision,intent(in) :: DY0(3),DY1(3),D2Y0(3,3),D2Y1(3,3) + +! Local variables + + logical :: NegAngMomBra(3) + integer :: TotAngMomBra(3) + integer :: a1m(3,3),a2m(3,3),a3m(3,3) + integer :: a1mm(3,3),a2mm(3,3),a3mm(3,3) + integer :: a1m2m(3,3),a1m3m(3,3),a2m3m(3,3) + integer :: i,j,xyz + +! Output variables + + double precision :: a1a2a3 + + do i=1,3 + NegAngMomBra(i) = AngMomBra(i,1) < 0 .or. AngMomBra(i,2) < 0 .or. AngMomBra(i,3) < 0 + TotAngMomBra(i) = AngMomBra(i,1) + AngMomBra(i,2) + AngMomBra(i,3) + enddo + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ + if(NegAngMomBra(1) .or. NegAngMomBra(2) .or. NegAngMomBra(3)) then + a1a2a3 = 0d0 +!------------------------------------------------------------------------ +! Fundamental integral: (000|000)^m +!------------------------------------------------------------------------ + elseif(TotAngMomBra(1) == 0 .and. TotAngMomBra(2) == 0 .and. TotAngMomBra(3) == 0) then + a1a2a3 = Om(m) +!------------------------------------------------------------------------ +! 1st vertical recurrence relation (4 terms): (a1+00|000)^m +!------------------------------------------------------------------------ + elseif(TotAngMomBra(2) == 0 .and. TotAngMomBra(3) == 0) then + do i=1,3 + do j=1,3 + a1m(i,j) = AngMomBra(i,j) + a1mm(i,j) = AngMomBra(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomBra(1,1) > 0) then + xyz = 1 + elseif(AngMomBra(1,2) > 0) then + xyz = 2 + elseif(AngMomBra(1,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRR3e!' + endif +! End loop over cartesian directions + a1m(1,xyz) = a1m(1,xyz) - 1 + a1mm(1,xyz) = a1mm(1,xyz) - 2 + if(AngMomBra(1,xyz) == 0) then + a1a2a3 = 0d0 + elseif(AngMomBra(1,xyz) == 1) then + a1a2a3 = (CenterZA(1,xyz) - DY0(1))*VRR3e(m, a1m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(1) - DY0(1))*VRR3e(m+1,a1m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + else + a1a2a3 = (CenterZA(1,xyz) - DY0(1))*VRR3e(m, a1m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(1) - DY0(1))*VRR3e(m+1,a1m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + dble(AngMomBra(1,xyz)-1)*(0.5d0/ExpZ(1) - D2Y0(1,1))*VRR3e(m, a1mm,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(1,xyz)-1)*(D2Y1(1,1) - D2Y0(1,1))*VRR3e(m+1,a1mm,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif +!------------------------------------------------------------------------ +! 2nd vertical recurrence relation (6 terms): (a1a2+0|000)^m +!------------------------------------------------------------------------ + elseif(TotAngMomBra(3) == 0) then + do i=1,3 + do j=1,3 + a2m(i,j) = AngMomBra(i,j) + a2mm(i,j) = AngMomBra(i,j) + a1m2m(i,j) = AngMomBra(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomBra(2,1) > 0) then + xyz = 1 + elseif(AngMomBra(2,2) > 0) then + xyz = 2 + elseif(AngMomBra(2,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRR3e!' + endif +! End loop over cartesian directions + a2m(2,xyz) = a2m(2,xyz) - 1 + a2mm(2,xyz) = a2mm(2,xyz) - 2 + a1m2m(1,xyz) = a1m2m(1,xyz) - 1 + a1m2m(2,xyz) = a1m2m(2,xyz) - 1 + if(AngMomBra(2,xyz) == 0) then + a1a2a3 = 0d0 + elseif(AngMomBra(2,xyz) == 1) then + a1a2a3 = (CenterZA(2,xyz) - DY0(2))*VRR3e(m, a2m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(2) - DY0(2))*VRR3e(m+1,a2m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + else + a1a2a3 = (CenterZA(2,xyz) - DY0(2))*VRR3e(m, a2m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(2) - DY0(2))*VRR3e(m+1,a2m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + dble(AngMomBra(2,xyz)-1)*(0.5d0/ExpZ(2) - D2Y0(2,2))*VRR3e(m, a2mm, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(2,xyz)-1)*(D2Y1(2,2) - D2Y0(2,2))*VRR3e(m+1,a2mm, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + if(AngMomBra(1,xyz) > 0) & + a1a2a3 = a1a2a3 & + + dble(AngMomBra(1,xyz))*(-D2Y0(2,1))*VRR3e(m, a1m2m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(1,xyz))*(D2Y1(2,1) - D2Y0(2,1))*VRR3e(m+1,a1m2m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) +!------------------------------------------------------------------------ +! 3rd vertical recurrence relation (8 terms): (a1a2a3+|000)^m +!------------------------------------------------------------------------ + else + do i=1,3 + do j=1,3 + a3m(i,j) = AngMomBra(i,j) + a3mm(i,j) = AngMomBra(i,j) + a1m3m(i,j) = AngMomBra(i,j) + a2m3m(i,j) = AngMomBra(i,j) + enddo + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomBra(3,1) > 0) then + xyz = 1 + elseif(AngMomBra(3,2) > 0) then + xyz = 2 + elseif(AngMomBra(3,3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRR3e!' + endif +! End loop over cartesian directions + a3m(3,xyz) = a3m(3,xyz) - 1 + a3mm(3,xyz) = a3mm(3,xyz) - 2 + a1m3m(1,xyz) = a1m3m(1,xyz) - 1 + a1m3m(3,xyz) = a1m3m(3,xyz) - 1 + a2m3m(2,xyz) = a2m3m(2,xyz) - 1 + a2m3m(3,xyz) = a2m3m(3,xyz) - 1 + if(AngMomBra(3,xyz) == 0) then + a1a2a3 = 0d0 + elseif(AngMomBra(3,xyz) == 1) then + a1a2a3 = (CenterZA(3,xyz) - DY0(3))*VRR3e(m, a3m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(3) - DY0(3))*VRR3e(m+1,a3m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + else + a1a2a3 = (CenterZA(3,xyz) - DY0(3))*VRR3e(m, a3m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - (DY1(3) - DY0(3))*VRR3e(m+1,a3m, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + + dble(AngMomBra(3,xyz)-1)*(0.5d0/ExpZ(3) - D2Y0(3,3))*VRR3e(m, a3mm, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(3,xyz)-1)*(D2Y1(3,3) - D2Y0(3,3))*VRR3e(m+1,a3mm, maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + if(dble(AngMomBra(1,xyz)) > 0) & + a1a2a3 = a1a2a3 & + + dble(AngMomBra(1,xyz))*(-D2Y0(3,1))*VRR3e(m, a1m3m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(1,xyz))*(D2Y1(3,1) - D2Y0(3,1))*VRR3e(m+1,a1m3m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + if(dble(AngMomBra(2,xyz)) > 0) & + a1a2a3 = a1a2a3 & + + dble(AngMomBra(2,xyz))*(-D2Y0(3,2))*VRR3e(m, a2m3m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) & + - dble(AngMomBra(2,xyz))*(D2Y1(3,2) - D2Y0(3,2))*VRR3e(m+1,a2m3m,maxm,Om,ExpZ,CenterZA,DY0,DY1,D2Y0,D2Y1) + endif + +end function VRR3e diff --git a/src/IntPak/VRRF12.f90 b/src/IntPak/VRRF12.f90 new file mode 100644 index 0000000..0537cf9 --- /dev/null +++ b/src/IntPak/VRRF12.f90 @@ -0,0 +1,36 @@ +recursive function VRRF12(AngMomA,AngMomC,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) & + result(Gac) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + +! Input variables + + integer,intent(in) :: AngMomA,AngMomC + double precision,intent(in) :: ExpPGQi + double precision,intent(in) :: fG,gP,gG,gQ + double precision,intent(in) :: CenterPQSq,CenterRA,CenterRC + +! Output variables + + double precision :: Gac + + if(AngMomA < 0 .or. AngMomC < 0) then + Gac = 0d0 + else + if(AngMomA == 0 .and. AngMomC == 0) then + Gac = sqrt(fG)*exp(-CenterPQSq/ExpPGQi) + else + If(AngMomC == 0) then + Gac = CenterRA*VRRF12(AngMomA-1,AngMomC,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) & + + dble(AngMomA-1)*gP*VRRF12(AngMomA-2,AngMomC,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) + else + Gac = CenterRC*VRRF12(AngMomA,AngMomC-1,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) & + + dble(AngMomA)*gG*VRRF12(AngMomA-1,AngMomC-1,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) & + + dble(AngMomC-1)*gQ*VRRF12(AngMomA,AngMomC-2,fG,gP,gG,gQ,ExpPGQi,CenterPQSq,CenterRA,CenterRC) + endIf + endIf + endIf + +end function VRRF12 diff --git a/src/IntPak/VRRNuc.f90 b/src/IntPak/VRRNuc.f90 new file mode 100644 index 0000000..82bd454 --- /dev/null +++ b/src/IntPak/VRRNuc.f90 @@ -0,0 +1,76 @@ +recursive function VRRNuc(m,AngMomA,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + result(Ga) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + +! Input variables + + integer,intent(in) :: m + integer,intent(in) :: AngMomA(3) + integer,intent(in) :: maxm + double precision,intent(in) :: Om(0:maxm) + double precision,intent(in) :: ExpPi + double precision,intent(in) :: CenterAB(3),CenterPA(3),CenterPC(3) + +! Local variables + + logical :: NegAngMomA + integer :: TotAngMomA + integer :: xyz,am(3),amm(3) + integer :: i + +! Output variables + + double precision :: Ga + + NegAngMomA = AngMomA(1) < 0 .or. AngMomA(2) < 0 .or. AngMomA(3) < 0 + TotAngMomA = AngMomA(1) + AngMomA(2) + AngMomA(3) + +!------------------------------------------------------------------------ +! Termination condition +!------------------------------------------------------------------------ + + if(NegAngMomA) then + + Ga = 0d0 + + else +!------------------------------------------------------------------------ +! Fundamental integral: (0|0)^m +!------------------------------------------------------------------------ + if(TotAngMomA == 0) then + + Ga = Om(m) + + else +!------------------------------------------------------------------------ +! Vertical recurrence relation (4 terms): (a+|0)^m +!------------------------------------------------------------------------ + do i=1,3 + am(i) = AngMomA(i) + amm(i) = AngMomA(i) + enddo +! Loop over cartesian directions + xyz = 0 + if (AngMomA(1) > 0) then + xyz = 1 + elseif(AngMomA(2) > 0) then + xyz = 2 + elseif(AngMomA(3) > 0) then + xyz = 3 + else + write(*,*) 'xyz = 0 in VRRNuc!' + endif +! End loop over cartesian directions + am(xyz) = am(xyz) - 1 + amm(xyz) = amm(xyz) - 2 + Ga = CenterPA(xyz)*VRRNuc(m,am,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + + 0.5d0*dble(am(xyz))*ExpPi*VRRNuc(m,amm,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + - CenterPC(xyz)*ExpPi*VRRNuc(m+1,am,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) & + - 0.5d0*dble(am(xyz))*ExpPi**2*VRRNuc(m+1,amm,maxm,Om,ExpPi,CenterAB,CenterPA,CenterPC) + endif + endif + +end function VRRNuc diff --git a/src/IntPak/VRROv.f90 b/src/IntPak/VRROv.f90 new file mode 100644 index 0000000..0041318 --- /dev/null +++ b/src/IntPak/VRROv.f90 @@ -0,0 +1,28 @@ +recursive function VRROv(AngMomA,ExpPi,CenterPA) & + result(Ga) + +! Compute two-electron integrals over Gaussian geminals + + implicit none + +! Input variables + + integer,intent(in) :: AngMomA + double precision,intent(in) :: ExpPi + double precision,intent(in) :: CenterPA + +! Output variables + + double precision :: Ga + + if(AngMomA < 0) then + Ga = 0d0 + else + if(AngMomA == 0) then + Ga = 1d0 + else + Ga = CenterPA*VRROv(AngMomA-1,ExpPi,CenterPA) + 0.5d0*dble(AngMomA-1)*ExpPi*VRROv(AngMomA-2,ExpPi,CenterPA) + endif + endif + +end function VRROv diff --git a/src/IntPak/obj/CalcBoysF.o b/src/IntPak/obj/CalcBoysF.o new file mode 100644 index 0000000000000000000000000000000000000000..e9354b587549ad9cbdb4e761ba4266374c7cb02b GIT binary patch literal 1612 zcma)6?MqWp7(biWT)ymF$!LYEQ6rY1ZKdKsu%Xfw_91G9Q0}^xHw8tpNfv%6mf@mF zAN$aU{(vCpFW9tT8IfV%>Vwh?ifMBZS(NsB?mgG05ct4zpZDK+&bj9~uYWDC7cpij zVEBL~FtdVPq%gK0JWhfC5fy@5R6`_eU@~GI4^mZQ-6Jt5f>brs+7U9XfAXVPi}0w{ zRmhl)!Vy32}Mf!a8x@$XLR^WI=febLS7joH!-xQm84Tfhsp1D7VC^!W$ zu~prZk4+9$?e0;vp-6wXQLr7aL7Z2{2(u1>*MVlUzxPBV%?@3>SYl5 zL9l>{OnU715$ze3A$xCTHH41EpCVD4!Lbgve}~emyEu` zGr0gSuXsQFXiHnZ)Z&NrjSa%eC;T=2uF(Cad!5flUbbngG%UtU|6Egra9M7gWtI`y zB9|7~?gRKS{FUIj4TH>iXA<2`yF6hv6i2eaP+a#Ux>C&Uxl?E;-uNzwTC#UZK17P` zUXfr3mjDoehOkLA7$p*2vKhr|w? zry-Hz6#I9&U}H4HBr%WnT1YzzTw)mMxv@hx->aj-Hiz}Fuw{{dP}F;beL&b=VONoj z#?1GH-Z_qjOhPZz-zJfsZ!>jp;2KjeUy1bhs!WYW`l6Qxu3yzu*4JDIt_7b2pJ1(u L@xJ+B5qsHRtwswy literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/CalcNBasis.o b/src/IntPak/obj/CalcNBasis.o new file mode 100644 index 0000000000000000000000000000000000000000..493ed813c2a6ee1ad731e81fa3c5074ce170695c GIT binary patch literal 2052 zcma)7U1%It6uz^aw%a!DUH`C3mn^tS3yEZ7Tf0z@u^XAg2F>Vx7BsE9uJR3A%F$u@;Gd1C(?JY2+UMAjf;nRO5N z3i;xl2Alcb6$J-H#Ww%J))_WVG;J_vWzEcBe7_rL=35keVNsR_Ut^1*jda+*?0{yN znKM~0(9E|a_}&q9z2Ku)b8!n}6xzYqfC#w|!|1Mk&vw_QoSo2*klzCA#moByh&q;r zlKAhGjzbXI*e}KJMwI83<4X5&)&Ay~I`(rI%TDl$+xz($e&KOYJ4(H@65!)$cHmLsLNv zGZ^~HUW)mfWbm~r6e(+0;r!a*=8aZ^*N|Z@QgnX!Q~0OtYharXmVQ`uUU1zBI11C` zlqt*LugqIRs$QEI`D#_MSCafv#X0zDmyQOOr0lj>%GpOdl(J99f+^dIrBzh);9RgD$v=4?2Gw3ry)@Sc(?f^SC`v@Cos6Yj z8d{Q0iOWRC#IKs9dtxKguak5>)){?fqVyXga-wvL@4h+oe0dby?jsYKYRfLqBXIg1 zc{p~Jj@XHl%8SZL<xVLf`jKZc#a!_TBhkTjE1d`SwEs=W-4^d@ zI~?D?=g9DxzN{H77|}i|iyFgu-OAzG0HrT<`IC!;8XxlWZ)!By9QuaIYuKyl-NI$xaBL8^rKnlbvX? zadGz>1=BJ!d97$^FPr!(H2Nq|G_t0q4`j@Yj!(vaJw*Q|pd}i%*ArE>TM?3GH aQH>2A+6UbWeG=Nqx>WBo5{E_F!PsA;xQQD8 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/CalcOm.o b/src/IntPak/obj/CalcOm.o new file mode 100644 index 0000000000000000000000000000000000000000..59072d81575f9c76dd3eec17622e3b3eadf2301b GIT binary patch literal 1484 zcmb7EK}Zx)7=CM`Znf@P!NV3U&0(S?u-pnVC~Qh$41*|5CH1*&v$?dpBjbu&C&7%S z-0be9W5XBXc21g7zGX6=;`Iefe(=%0gl!( zHUOk|brw!mC!Lm}Z-JEmHodpg`KDj!bYAH_dUucE{5)?=tt7iL2cD4Znd#LoXSv*T zx^iqa4E~4)jp+@8w|_UBChapVXxwSijOqDK=Q+Qz2=3}U#*IoziyO|G%VRZ$^DH&* z^2Uhf@}Z{)+O@b>IlaVh%~A!AdCjMm5Jj{sPrgBxLg{Z23~1ryy;;7yov|!md*SkZ z3&tI#|SGp{}FLF7KzF`WMi0f8-sW zjgj}`bH>#3WS8^l;-EgD59&j@_~L6EC-7vLp3hsEbSY;Q)d_1ne_1ul8PmM17R-WW zUsLnBLT=M-SZ||B#y+$a=1!hnY;YxCf70Ynu+a5$EL4t#Vv+jrJ-p-@jPIg~4c~%$ z!xTC_(b#N_LN6d1zq`c`)QaLyC1+|C`byE3n{^6K4~w==)%(G)QiGXo(N>?f_<2dc zPW2%!7w{qMiQ~{6LLtsr^L~39q)$M+?DxSsBp;DnmwZ(6PU2`VxQ|J2 zF6R(>cW4u3DU5CAJFB=_#VL1lJ`oEJq1CgS+^SXKo9IfcC_%-4z;H2 zMR>HA6)c-6sIXZQA(>`rrtVaxE=q@KuEqO9;_M6yfI~BeB)1!y*k83$x13@%9k@F2 z{*ricS&{6(gSm#j;PwCP`#bTTNxYb>It+kzjOZFP`hM1=S$2vwD+qMry^(l#W!;rH&{=({P0W}8Gl^%mVYQ%KaYVK5O~K2xjke98YkWQ-hl9~ozI z?y7OxC>(d6oIWMymW3$o{hMHgTi`L_=6PJqw{mW)(I=V*S}G#`0f_leLd&cOcZk2G zuHxnp7xRn4y{Fyy0rj31+Xco9zTO+iEfZYzwDJ3XiDzgr&C|9hysRbvFKZ(|Q4;ir zaOSx#aWk}yS9$jX;0|!ntn)N9#64|n1sYmscpPQVJndY8tI*y8;2KY&(|bzjUxbZm z5dQ~74`A)#STa2A_sGt-kcNcD8ORJ*v;E}A`w0J{Lhk+qaK;{^FwfPcuAB>?n8Gve zf5AA~7)o>dTiy|EOj*h`vk~tordz)BT+H1U!hL=Aym8JrZ;Tt}JDOB950dbUA&qL) zE*0w)drH4-U#d>%R-yY@@ zQ+Y`I+o?T}=$hz;+yMIyl5kT}e?sCNNnD4-0i~uOF+rjXiPXd~NW51m9TEeLlf=D= zRv@ED4Bw>@vH`S+A|eY+cKFT+vax~ioyf@eW0`-JY%~b({eIY*j6r32aGUw%-cpPx z1#XXT>#%op*gHFHs%@`l=Cpkouhhk|?bMy(lxfeHmgCqCGp)un!_#G1%&ZmZcVlL$ rSS?+!ugsLqK(}jymdUC|hrokCA+X9sc>v}B%ZlLP>xV_W53Si}M$ZVO literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/CalcOmERI.o b/src/IntPak/obj/CalcOmERI.o new file mode 100644 index 0000000000000000000000000000000000000000..7bd9fc741266043d5ac010fc106313f063a5aec4 GIT binary patch literal 1304 zcma)5&ubGw6rPxEv&43Ht5qXfSTI5^q3tb2rLHD0feKYqZP9ibx4Ug%(}nF8Q$Z18 z#l=QFc=I3d;2+@4T0Im|q$d#%iXgPwT;iePA@#kTT`fVu2XDUjW8U}P?9ROXS#QP& zi9`u3paLk_1*)P!$U)FMnD~dR2RRjMKtdll398Qr$e3$XTrdJ*tdJWmgx(*NcJN`X z2unMr1#%N16vp&9*D1|T2Z2^TCEz(4GJ~5~m zZQ%>g84@yP%rMg_mW{vjoecOM2L+P>Uj~S9w%vrxgj|S8Pz8<7IIjMl1R#a|IMXWN zFd)?V2;iR=&y1}g{rg{l`QM^l%zInfg}m3)MzliSdp&ZVRyR{r?|p`}bg`cI>XmL< zJ6^{zp7P)}m9synS4fKM*ooc+i!Lrx?}dEp2?QFNti))|O(urCEmKadHsr2sQf$a$ zaq6w~FM~UjO!&3A#dTl-3%e-^&WH-xAu z@6Sd>QyyC}HF>Wfz_lrP5d2}FuVvYK(Jk4t>Q#H*no^C5ZWvQ)*(lr2f@+n@CI6O}ADtS0 z*V!2C##)fbwR0p=Q6fr5Ond+zX$fM7K|gJC3GY1-@b62?{ar#E8i{*RZm2bZr&3F8 z0{%^@?{>R@pIgdQV>~h`yazunWr7Vno#J&WheXhTgXojPrHKO*u%_FPk&vDyEb#8q z4*?<6a~%){N^5}duG1A8PU80Z*H@<2uDzX3sIhacqac12hc6%0>KXgy}^~x66i8V%)xBFU*;Y Q0t(S=zj#u3+E3Us4E zw|eiP*Zzdwl1k_y>M0T;5-cz(f_;jhw(rajlBFIxaPD``J@Yl5L1EmicZ>yL% zS3dcX?&pyoDOGj3_q*;T)NR^SUrDHXX-)UmUl+O z6V!?(k4msIYSPavy~SEVEpn{b&{uj@u?sWj*DCU;Ur|M#NMiYzD*EZ4Wz#f|$Oo2b zR~+yuvXSGx_sNhXsF~wiz}|OEFZaZ-T^r2#*ZR`4lLwTT_Zr%o)a%QZNd(v#414Lf-%7h5Kg)-?UavCny;byMBSiit$){ zcawMz_p^$*{m{*7Akn{P0=>Qzzgs6zaZ>V5ePAeMAuv*_4FX-T)Oo8hFw#p+0==&^ zDQo~*q;%kR2H{jdsRWP=HwZxVIq_+lL5U4J{1nF8e}V{o*YN@f?v4jQENQ<1Y=qwj z6oCp5C!Qe0Uz4b%B}_#9M}JX5AnKp9}k_>Tqirr?Ky5Zj_oisreQE%$kJmnp37RftM=lY$phOi7!KK-U$YnTQ|2+&rw6^< K#jGCEPWBtHIm811 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/CalcOmNuc.o b/src/IntPak/obj/CalcOmNuc.o new file mode 100644 index 0000000000000000000000000000000000000000..342f73dc3c892d40709518e093cf8e2101a65ed4 GIT binary patch literal 1404 zcmb7E-%C?b9RE(IF3a5+KCDQ(4~s^y(CT49p*JU7V}Y2Ok$PP7P6wM;t`lbv1Zs52 zW$*n1J@g0kmX$tKM9@n_1c3!bg|Qc<2krB{_uLwz9{R%fe7-+F=bY_(?yH~QcN&O% zwS)!ghf)nxWrOGd^cE-nA=@&iau3Aw!AYzRA5e&bQ7piaB1C`pP`~H>!C(a+_lB|T z;k2J_FnA(FdZu7yrzT{enlB`Ij>vo)F35NEL>||3alTx(U|6YK+znOp#U)=@b_`YV zdH3`Pg)k;X#!BUlzw`AxhPd zZ1+N05OS2as+Tt4zeKy#V{d7LJ@$?^&||;U`UfuR3*Vy2^wCF5dtvEg(%vYxoG+dE z6oCJbgZk30t|Yc~yFU{6%)9BgVd+b&y1lL}K0u(XDIrBK6(ZrJy;W91HM;$zeYLDK zCnJHfGWr-+A`*6bm);?da4`ks8&NwVvLx_zf5wsH%Hc)Mk#0ZDD4Wm9%CQ%yPcYq3 z6DJ(9vU1s>NS@w+nRrinsmq7MG{c--(-+pFy1jX2L>tydv{6lbaTrTyfAW_{Cx6Y_)e{Bs3pH^M3?LQ{Hq7sZq~a-e4)XQ zv7q3X|1F>~7p;Bwm z-p?ucip;@u=DfnCC}NfV!75*^^0~IMp2V~{hp)p##Q literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/CalcOmYuk.o b/src/IntPak/obj/CalcOmYuk.o new file mode 100644 index 0000000000000000000000000000000000000000..96cca687169b05cdacdf3bb3572f59f020d89a49 GIT binary patch literal 1916 zcmb7EU5Fc16uxPv-PrEV%*qODb#ag@_R)>*lMDXf~>6w@8j*-0Cm>@2e> zo7F`YwksXdXy1M6n~(bDo1t#$qLeD4uJplz54xbJK}%_|@jLTlW6%c=Irsd3=iECt z_xhcm?~O2)+RLzjCGgxHEE*W}FnEUo|3OPs2wI{VlCcd;M!b)lAj@hxt!AW0c4@X; zx^E}in+Xmi&2kd}qZE|bI*EiV%U*8!^~KY%!?ON~w;tm>5yyW8SUg(jiNgsT=5y;! z$FI8ir$gT`-Uo4k8dqqTi{?v6PLx>wjaP^q!+6~oFCFLSfHyebAU35~mUG6c`PGK= z?|9oW-up3LA;z2D&lrUcGIk~og@R)Z_cC@Mv?*s2JcoQbZxtWUg+v{j0~66q#B?11 zAAVnm|3&(7{ncV{OFworxT2SinZdPJL~vJZ{8Se9$j5{%HoJkrd22#+p1nfH^HJpO z3&prC0+XjjFu{MMuA)7`kzNe8L>qqP+!(geQ`AGE)8s+~mqqX$%<+7;rer?r>54jw z@OXu*J*Dy~v=UEam3U7%u?@xKBE)T@|5bw<)C2VtSHn~lrJG&l{EHZg;N+h2(%pPF ze**xQd&>N`HRU*+40SPhL3B#ofV##rCMKE|L5WWy?F;zAAuvF$M)aie*g2|W!v1pe z26|7EVcNIFRpTpCnR5O&ti2gUHUDG-`Rz46neUpxt#JNyIKR<$`84csaD%Hx@Jr|~ z+J9gtI4O*an2z;#VVm60JF}@HJ2-Y!mA8w*bppG_-nxWz>?4BKJ61{rqtVevI6;N> zr#?gj0<*+3;hGceQGTSt>0Cbt(@_I%?ZIGY_mO_TKe*qGt+E;X@Y+eeqMy{~b!(Tf z?(Z)eVB?cixB*yW6sNwy4v@{Tqsep7w{bWpa5xa-5W64V>-R#raRL5E!8fr@qU1ee68*zu_1!&@GWpJ4iEfIlb)-niT-YbkO_y_T@0aLrCKonF zBzi;Tiz(?2LI>nR6v#!1nFvaY5#tV#NJ|PT53&`s#a}w>Q+vjyW+3sKdIrk_@IMZT z7a;pJ@X5agN&Zzx%$Kb~rXjyaG1RF`keDf3gv8sB)gbY1&6C8?at%@j&^nl?43?3Q zyq{DjBe5IDD`cZl@_yxED`=F^Q78jus1Mroc?a#xkWE)}Fn(yr)`o06w5MyH-}I}C zmbYvZ8?7IR;C3Ru>X Vw^CoI9fo$rS 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 b+VN&1wPOp;hjDH;b_(@Xun8K^M)2@Y%i9;; literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ComputeKin.o b/src/IntPak/obj/ComputeKin.o new file mode 100644 index 0000000000000000000000000000000000000000..57d9f43590806012fd415ffdc91f7ff2a8ee85fd GIT binary patch literal 5608 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 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ComputeNuc.o b/src/IntPak/obj/ComputeNuc.o new file mode 100644 index 0000000000000000000000000000000000000000..0e38a42a9f4b91a583c829d64d8d017238f65f93 GIT binary patch literal 6192 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 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ComputeOv.o b/src/IntPak/obj/ComputeOv.o new file mode 100644 index 0000000000000000000000000000000000000000..0d87d8f15c94ab4f130372bceb53905a9e94db79 GIT binary patch literal 5832 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 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/FormVRR3e.o b/src/IntPak/obj/FormVRR3e.o new file mode 100644 index 0000000000000000000000000000000000000000..0b2092565ff5ce750a9b1943067bd30034c659a4 GIT binary patch literal 4404 zcma)9Z){sv6@PBL)r>axMWm~NS~b!ga-;=0bPP`#!VXS(nO@c`c-?!D#Yxjx9b{{i zT2+Ng>7e|~TM`=hPBh7qVU@Inisb?(6{iiYR&Xe*@nAJ4^oN-;z> zczhl{4QdaN5KlInA2^p+eZ^Fm#Gauq$M=Qpt%swbb#{v#HFpmUs6% z*2}loA2f`Q#mInRdE=7Sp;ao&5NdFV)(|wjj6Sx0$^2$om>p(LJUkF0ToU+AVV(`= z#OLND%}P!jcpqRJ$^w*^DDhlc#Mld&TtwlT0*Fti2V(c;|XNHj<$kYRyKumGz`eR+yI2Ca{^`! zGqOsoa7LhX7ISSPcAHVlN=(xXHE`?7to!>EXjE2MZ?=YD_IpHoXtPbYAHi?;i6pAt z8pZ1=@;O5IDM<@~%6nro1q1ZDSIFXhD9dsU&T^vh6NGnfQVwt9b>JqvIR`j_HsQPt zxbp|9$CO-xGa5pd2}cii#d0ap{U*IGvowKscNfxduc1{a&UKEBIll&-6Je)FXj;JP?hQQvtP=7^YyX|`{?jXXX8 zY(`qjF^>w4Kg4QG%Q&w|IwBb}3nS5VQV#J3NU-CBb26zSJOZu4O+z4>&dW~GG$#v? zGX51GKgsH{>|~mjNm}@`U=U=l@~)2Z%EnqHP)43&=tUr)q1`~59GFP)fq;pW+Q?gHmwdmNr|3nf_h1!&?G}j^({&mkzaC-m+C{?6SQ-7Apbt zu45}wKF83t1FM^&XUPs+FIMZ?OPPihWHA0tC(ZOkrdF#JuLO!)b>0F85ffh`(bYh) zR)@od@(>eSTeVsWo>TCUhHJ`FOe{l+3D3(ooi8SqVoOC=7QQh{vGX#j3rYgfv>*aQELB^HEf-Jy48zqzk ztA$O@F$-it*)GUgASrfI3CjKoS&*+N)4WWwr%tex@}vUhd6mE(EKeS#7Ds9=6&il; zwm2<&+e^nVt)?1bM=2WxqXuu6aPXiS9O4(qrK8kpb$E1MmHh$Eb4;r=1Rpr7DPxAy zE@MYDDmGAqz_zR^6?QbM8dSDr`I>JM_DxPHz`R^z75s1bw$lpZ7YkEB1LZ)LZ?)uG zt@u_6-zuswxN4MYjw_1H=Ve7n$~?t9sEaIVz&wGS)02Q2QPnvj)fp;(F%$@&5@srH zd7GBEWP5)CY)Y~p$eXYqmI=@orUSPuskYS9^+Ru-*9~OuT~eIHgrfgX1j*2pn;GN+ z0o@qpjH(>i4~U)8MM4O0oguo44^LX8vFKd%5gXce!9tzrf3 zGMOFQz>d6(61h0Mom3SD$u-%=)qqSiH_=!S9M*n!d_jKN32;kT=Rt`PJl z7;mWhE7+UP2$C5#0HO4a^ERb2QfjzO!q7_y32LhYdT6F0<#XYST&_86{WoRqJj`4{DGnRfwC}4idC#@%yMB>)5#%B26EKP2+s&wtb@( z1%B9N1kRZObKl<3Bt|s~`60A542K^7yU+;Y&xKKM{$x)uM4j+NosvXLLDh+kKM1i>*RphTo8m5sEP(UIHP^cnNP!zC-C_Z%Rp9HN3!2fPe z6A!~RHBO^T^UIoljCcf~J3aj3+2P?M1L*hn4ff}U`%dWY3oo5L gk~Idu^>wtz(Y}WE7}^oEuNrNZ`s!{0M~%k$AN+71P5=M^ literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/G2eInt.o b/src/IntPak/obj/G2eInt.o new file mode 100644 index 0000000000000000000000000000000000000000..dac9610a4f1c0df4fd90e1721f58f43941013ac0 GIT binary patch literal 4152 zcma)9Z){sv6@OmdnzuFeb-NPGSXQ&$AscYzblu3%(DH;0uaY}ukWm}lyjjU}V`j&Z zMgw_Sx)k{}um9p?V z_q~_6?wEMeeZOo9teYp8BaD55GPx}A3Iv%hl zDz=ZKgHxih!H(1Qf-zFC6@adHM`GRUx+6_f5H8}QT521SpA51zM&Mk!-aAytrw8`g zhDN>xn)%%3Ve+m4mY8$XVL{DpUkvBEzFI4 z9>wzZSs*QfkJjs4Zbz_jjjzKpH1dUPKCkUxZCGzTH@WD#(XXfS$*l3&e45QywfPk6 z1NEOVbDdMH0a!s-RUjF|NBz+ z>@shuKU7~-yLX#^cu_OY|3EX})n2)(V8u7s!9cWhig!ZR%u()7vDUPrm5N-0B^74= z`zg^4l^yiZ&7D%2zlJC;gw`&F?$0YJ=3luHW(PG-ip6h2n+8oxiIz_AE}~(vSx~iV z-W2PpVR{B`aEZ-9u40@?u>@?_|H1-APK(8S1@o6MHw*a|3!LW1PzUr6Sl|>737^FK zR8p6R1q%EnQID4ee#Kw12tew;3~T%{n3hBql_iiieudI_*3$Stp(tuS%2;86KHi0h z8Ok#VqsZYC%k#0oDDPZhp4YjkhFXA*#s48z=hsT2S(NkK3fr9EXiV%pGB0Di19RdW zoUgOMB==d_q5E&L0NS*cJ;OtYnoenKV1Y^)!wl7X63a(skzs|!XFh~Z24tbyaEM6V zEOXc*Bqg|a1(j@ovlAVkK@oeVozQQP?-71nM8-dK*zIM2qMIv-J|k*@n&Cbt6f^f` zg)>4tl=Zt5SmaX{^_jcUKEknT(Z~2DegC;!oJiiaBkDc}Oiq5EzlD{M!&bsOkt`BnFkm7I2H- zM&%3U9K5}1Da>0$`VNsJQKh6Z-L}H(A}XAtoj+z(0C|!xVTI-y1Wj_y3c4(mn58U( zx06nB#ftemIL=e<3iWBpGU6o0&SFfXwc@x?>#A1kVC!jG!7mQuUC8fX6DIi>Cb6~_ zEJ>aZ^AUQyLEdW4BcI1ya8+H4uG-t6mtYvxj%pK?k*!+!*;xgqDY9!5s~QW}#JR!j zE_03*w}D41pXNs~-(C?@YN>g==3>POJQc@lO{{oK2r?_qK_KTt>&_Y)=-0}x^C~iw zl!0o ztE;P8Sv(T3bnSOzn4{N;c|1kYwwEDlW|7xGrkRtXT_W^NdL^NV@>3A(6|VPgl=hk? z))^-%?9g#oBJHc=6<5^krEEYxdGq)+;FDP zXN>e3MxQThWOMlgzDzosE=b?oVeA?xY)?HClKi32Xeboup;q5}RiCqL4oYKp`_!KE z2E*O|{>lTLj^9?>!S%E6ORf=*%hS@V(9wMl_D3+5a2V-w-cKbNM^JKmesP~n2f*!p zt;w?Z%CaT+C-0YOtKFejH&{Z)c(Y9JJMM}iU&EApL6NtRzNpA_X5E);TvB9uXCl9y zzz5wOGD-oH1%5k|1zrn07AT^ejq(%Z4}QT5{%y7{cq)qY7T#xDBq=y$z1Oy#0HT)Q z7!bV(z5sj(7zEl9FWC4?8(#(DeKXh!R1kk0 zNg%fU9QXy;_X4qmw&#KPrU~u@g0d|LL@8|#0m<(QiXp#CK=Qi?r1>n6{5#P{;`IU1 z+a5yfsrymPyTRdncRXzC*FZ*BE9qF6^Bu9p)@2k+*R!O9*!eE#ARP&v_xi8ddWY@* zRomZZ>yO##8Aq}>%INSe6klGdY|Ky9w-?5KG!2}Bs2FCIEnSX+yJtt@&@kN zBt0l4ecuiPyt<_KCNsUc?1ABz*JLA~u9H)cf11zlFo69wuCKaxa9A&-vxeRwWxhk> bn;1`HJcY3n<4KGiQbe=972BcF2uc41C^=%; literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/G3eInt.o b/src/IntPak/obj/G3eInt.o new file mode 100644 index 0000000000000000000000000000000000000000..e7d2695bcfe77cc2f07140bacf5387a2b92ae057 GIT binary patch literal 3648 zcmb7HUu+vi8Xwn7;?m&V&?uNwBNj9j4#Fpg0*VBu%bp$Bz*dTiOKst16D4*NVaGYw zrQwQtK}}DrT;Js+BoN9&g(6XjJn&EnkRsuv=^v?xh9?T*N(yR8MNy;VCBR+7@0-~r zISU>bW%irz-|zb~vzzgyAHTm{&zR58@W50sPj10O$Hcf7Gfez%jD>(yR9zd72PUIg z=la=pDKlDf84%k}bS4uUytj&y69(Z?E)&}rYaxNc#)x>sw)+p3ibKN(TtO|KhqKew zFK=axYV<~JNx&-%AKXZ=7BA`MMLE$3-N{%jhSbQXZRdtcnPOkA-Q)ki-d-0kl$HV*uukCRms?BfA#nW7e4&ZIZ2zo#+we8HHoh|m|Gg45CH{s%S(4oNScJmu; zkac5Q2Bk(mIf#gT7Ys3|H&okeu)iDh)Lo3d2?{^fjY)$-(4-J_jHD+PzhfBtx}1w` z)eo_~%y{0|Yb16%^Lw8&U%eSdJ6BX~i&>uLgIJrD8NPtD%=6=1cdJ@8-(4|OP0Jc; zv!4`US7DY<^AR|yt>c{bWkqdF@W85ibdK!1H308td~h{kT*Z2lVZ`uU4(slk-|Z@eTpYZ9#`*~;=R%$`L%#1 z-6@ig>OHAS%M79-gZ3<$tVvDk2VqBN1%1gzQCt=Vsd*G|p2~qf{a*l|MURK6tKX`v zGkin@NMSwBt8R>0Vl)7e+dOrFK+eHs1r+P>)fF{$jjVLI&?Xw##MCl0Yb$E{f9UiK z?-t16TiCJdP~IZ5zlLG*BP068pDH5Cn9|QOj z0$qgj6$Jefn3H@=W`v|un8}-PpAx4D+5sNIbDBp*5{)??h5I~2C-{QQ>l4A~)LT;> zzOW=S(eOF|FTv5pMuh{??X0Q^$kZI+WYv8lLC>j)3{itXPAz~D>Wwl62o-)53BU;+ z_FRQVM#6i64UUTh*D=0E2rh>>DW!Q z0NWn0AR#2T(Y~ZYE|(10o_Q5V#=`wzuzAVIkV0{8z#r2M_>A+{rBM?M z0+^6iVb$(j@Gbb3eQO_~NEY`k#C=s5PlGYvG>^?k&EwV4CbRP7*#Jaz;+c7T-Bjai zB2#Eh=d3!u2MTJ{N$A_EQdLgysO8+~a&DOA5^uLEY5vM?XBpKxUs+C?N2M9OCN_D2 zJ+;A><6J9SJg_a!Lsl6+TW1gLgm4hx0}$r6&Z)=Wf;~=TC;P4|`$zS@aj?h++hIC4 zEawX&VL7)==d1M+PhyVHqz#}KvfBdK2yMU#@p+OdQQ63YI^R~sp5nwxg>y?#1hcq~ zGh*>Do(=SJz{Y%ap8j{eu-`}<`;8vMhHmzZk&tPa&J{$)*8hppYpa48q)8d{QhfTH zdhzueN7mQZU0WeEa=Ai(Uumc?tRF5M$_?n5(f&+kK+k9Lh2qP4ZYV#raS5UbVyyi+ z6p1H(x_@hjE2t%7o}kHH`2Mzs`9?LL)=(dqz^-!49ndWz9~$2Mj44Q$1+{-|QE*dW z!O%bbQleKBxd@-QL!p~YF#3-=1t=`oeym=hdqZ%sPI(`y;8LAJcaPw5okDkr;98wR z_nqKay`-DpN{ODd0gdg2yDBcsGcLv*KB2h`gZpM;? zB+(=ZDD;KfCK<%THAuu06nT2_nk7Da7=%4<(uvAtKpxi;dj>Xo4SmY6G@^ iL(&+&P@1wBE- zV2pnA{qpf+zW7^e=xM%!$7gv9hQL?P5%P&V>AKxLZoas6N4Fk$ny=sEyW`mpd;WDi zqtpK^Qdv(a0o2}0V1UMShtX4juvHJHlX{96ja#s@eD$>e{NK&qWWR53w7WLG=j^?E z5==E=t*F_;iaH09GMKEKk`_kuB6fBrA@(%YMAMC$NRL8}*Al{-&z+K$6LK0dpAgG7 z1fB9eIm(D$$ppt=BhKc*c0IF6{mb$GG2gXc96EwyvU5@MRt}{ z7N(r?5gCTWWaBp3o~#^~1^Nox2nZG9%bYwSj{zntM`cQTeNHr=(!PnzIYjXY@wMhf z`f5!ywn+rqgpD#+F$1}@Dw>bTAu!~{{p$$x0>*E^D035FjA^m0n#j!7MD`M5gxJo@C3*h(*w%cS3&qI=R%R6G{7*Lmt(sCN=2{{Z0)VTpA zC%72fS_y8I`4O7lP7zs4U~RBA?@+0U+(qnj21ZLg{1fnbjGsn=H=Xl|+azMV2eT}= zkw>HzHNAojCK1_pn9zJSi;XmmvsSmb&pMU&9bAQ292R|DFb=BR?2OpcfHEg#3QlKb z2iG9C%Q{(BCJ9BI#9-!oB>fU2zKzXBn00;1G9#$XWjHbcgUgsxRY3q3q5lqvWLce7 z{JLoFl3U>H9c-jZkiN^!Zlf|&FwrFtnfsVNDx*9rs6T*CelLS<+%2PCu~Zp!W>hL1 zP^i4ZO6Q*IY>^ws1jZMys48X2F-*6u8#;Y*H)($QeH^ZntZ5Y;7 zM=oOzfp$v^YW4x~Z>)|!*U++v5a$m=I8cmugf>Vx^$EC`u2P%gsJ?B0nF$pwqe9GZ z54U1aw(|VJcARy9!;SmoNqvHl!Nx(^!FiI3+!!{@@m!n+g_oEt?>{bFm22RSzKEc@ z0F*fmV?|5^=1Ik@92u0C6nIQTc69~M<9J+vOIiMHWG~Y%WTWwvoKg##9^p{nVDR$d z+G5e)*agQu`vXl!d5n1Nk)dBfkp7u}I0X*CJ>EqK-W+iM$p?;X`VaK8*yDuUqE^Dy zekkfJI2G-;a{y<6pb9q#P{DmFeFQNACXS$$V9Eng0>yIPkH0M-II6ybKX$k zvkgX|&k9(J7Y3Q8af~lVpMs-o{&$06B2z}l`g)#L!Ur3)60Mk8i4D#-L12VhzgnP` z_JM^a-;bf`2J;~P8A7uSW{|kwG@Pl~eL+enL;=ZNQ+7M2#l1t5eEE!VLT_Gk%15`UpTG9qgs@r$&1_(Ocmz{i%g zkZ6&&A@Pg6=;6hX_%vvl2Z@YCChyMeWDS7pe_<+s$050X#KYe}a{Wd~u3ry{ zU*wE3HzKwtqmXblM~M(Z>mfr};D3Lu@^G37L+e22e9FV^#Ms#XzH0O4w|MgjV#M6< zVSe8TIO4aLpwz*~-#h+1Uvl;H)a$X~7IuAVxZQmP!~HlPU%7o}$u-=bVi7tNjO{9x nid%QO9~C}vOWSvJyX{7A=bPwl=x?B}G}bu!OD_)83jTiq)BJf} literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/GenerateShell.o b/src/IntPak/obj/GenerateShell.o new file mode 100644 index 0000000000000000000000000000000000000000..b3685b14950b75e68e0fb83fd3d1f757f7c0665d GIT binary patch literal 668 zcmX^A>+L^w1_nlE1|R{%EI^z9VkiJH5J&>?3or{iaRDma0MY{lFh0;s1`uWf2?9ZU zd`W6W34{&dhqy+BAowsAObN(5kXzt@g`ok?1~TH~Q#0bziV|~EA)@i|sOD8b6-Pkn zA3*a!ehdIQ2;?Si28Il%6qr&0k^&$WFBg~(QX>Jx2~hP7Kw1XK2kK)80AdgTc^QU5 z>d672J3zXEeUjx|y7_%uZ~O3j-0<#|k@o7-f-$PY3k%@YCg!={EpGl z@?`B*$L3dzmHVS(4}&y{fOP}iUlqi_SRueDz{Acl0q7YUpg72%5B@^{EIt@mKtAOY zXk%hw12H6;nOU;IA`l48W|CMTsS; T#TltNIq?jx9*}4?WMBXQrhr@S literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/HRR2e.o b/src/IntPak/obj/HRR2e.o new file mode 100644 index 0000000000000000000000000000000000000000..d344d80bae7471cd5954374be417c481a9c1c61c GIT binary patch literal 2320 zcma)8U1$_n6uzsIWNPBh3bAYCr6k>^xiL+&dL^Q58jnPSryKW%e$nMZ? zrEDXcExkKB2fyp)Cb!_i`ifwn!W@}v;EG@-MFqP_QJX6 zoO{mw&bi;r+}%5m|JZ0^%(tCkf=Cdy4Wg34*h`QPDexa7-QWdO+JjN`fyqc*JZQ_Z zqiGw47?u?Yk4CEA6Wt~@5FVKe0BNDH#O6p+z~MyTyk7M(Hgw@Pg zd=m_Y1_{u@POk&X2|{FHm@n(chxrXX za){qPZt@?Fnf!0_;-fU0a85{0rp0M=4$FpfIAA!hw;K8W*Ydq`*jF-q%Svtx<-@s( zGJllPdkp7Ti{YFMa9fj|lx*;b7Q|XB{D6~^VoG923t)Z#d6@eiGZHYb8hl&}=><9r zTtmawA?-*^IrAN1^uqWyrp#PJ?3S|E&{P;jEZ#P_p+#WapeRKKluM0hC41ACUG)v~ zKL@#eRW77%s!GUUu#R)^RzO7+_!Rnqf#-QdF?LZ zYsxM|>sT990=?_7Z7pPGuLn^B$YL)F5GMb*4$A=+>a93{TT|XNw9uL|3NQeu=Edv8 z^~qEExPD4Mty?(ho_Y5nIz8a_Ih-oFF8~TYJZ3jw{Rp`av9(~htCB0aSsTBV>E}xhn9~cW!|=|@aU5nlMfu)zr)`r(RJewd8)%}Nfn)mPCX^N9W+Y?cOM#X8``3Qy+~;G+C!E? z@W^_RG<>(*WgNH(N5mV@xsI0-y>$Ks4QASZgGRV>2^z`mUqVyf0yO1)3Qc+Q(3BU4 zro0jsW%!FkFMJgfLZ?Zil%IY{{fJec!+G+NQ2pIIBjPGij}e3TVGjs@48B6$i$P|M z%l6m#^t)UeAF1>4hv8goHfbj(6IRN$-bqf|(b_c%q+-#eH5H#sPEOgdp2?~1v(C;Y eu=(v|vO8)qEAHu;gWW7_dcV literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/HRR3e.o b/src/IntPak/obj/HRR3e.o new file mode 100644 index 0000000000000000000000000000000000000000..7de757ffd5ff5016e74c736a13e2b64f8b803130 GIT binary patch literal 2944 zcmb_eT}T{P6uuir-Riotfvp(OIw?c(p%$$K4Aj=qnRFI5vZztp7zb;1qs1z$8*B4W z47$Z(+!)%IP$;EPXkYr4htS%rp(fIYv|+`Nju zB*9OK|0eN)HN~|e8^eCdbX8nGAj}PS!FK&!x^WM#_Z2>HPjPKT_cv^Aog| zI#eSkm}nIRDM@^)Sk=33RhLDKd~OZydHck^5ZYz zZGcuj?n$T9J8L#ys8Njf!(}fTVF$YEk1*E(t~&C_T6HjE)j_dd9hAAkFxTw$zuHm-vKI-t}69Dj3#&U5L6@I+%HNs#A1uISGRXc7Gv%9K575& zebR34lXk&)+1V-aH0_=3z4GzFvR3ubVy!=ewSMfCo7h9L(d3hobV4ZcZ~3W^X*y9V zCFu}X@M%xg!4ynPi=!~m%6)3WJY$1;I*6jd!nim=W7o)ojyJN9JU1?02AoD;MQ4ck zlFoEBag0>Q7MPpE6lqgc@lJd}18Gw?!MoAqmy$Fa)pi}rz}F-t-DFtcr@nyUi7Fe; zsNyk|p|D+*9iu{;JW`SlZih8|?^2RhPnEs$q@30Ne`TO&S7mc#yeh8a2vPMdM@rNo z8=Wa+w;^aunySV6*sPHHdi02X*_Z4V17>;yLiwH4`Iolqyl#w5n^&zleKNCHRfI{wP5JgdR7oh39gc;M(*M;`xIov~N+xenhSh{;JFQc~od%dvELC}|n0cl1L_2`H}MJdWmxtf3&nWqQ* z0PQiL2iQ+}sfeTmdCD~?36&0&_6JANqra9~WTl~3FC#Tw8=hQwqgOA$wr)>}wsmVt zbi{LOIxBXpTvlvPbMf{j7caQ`C6zw)POp5zR?4YFVAOheJ!2Y{yRT+Mo7Zz@JS}pj zK}*7Is3L8~yHCtbw03Oprn}v4Ry4C>kBfa?tC;Umrlk+3&54ZYwDgz(XU^o@-JYN} z630FwNI>hJ*Xed!`kl1NTlx%6@Qb?Jso8mJ&YHItEPJbVq4Kx*StuL(%>X z{A)f!6NvBO1(SsLMq%{t*J6))7;b=~8SA}_?z5JxGZ{&(^)b4k+Qrp~G_JT&xyNBw z=|NF?ixQS4lvRn<05<~M4DhkaMk(20L;q64@7@XeVi*#AN=Pxft6EZmAt5HApV95# zdiHYX)h?sYf#$f;)yP_3ovrtRit`8!{MWgNltIa0QFgc}i8`W}KG~Xsg=7}P;y0S~ uJ!OFqY-neI8Xko2o95Pura;L2#l;8r{?bxm{F1HM#lV>4@&i0hDL(<}%RHX| literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/HRRNuc.o b/src/IntPak/obj/HRRNuc.o new file mode 100644 index 0000000000000000000000000000000000000000..80d4888605aa18b185dac02774b77696b749ae88 GIT binary patch literal 1700 zcmb7EL1+_c6#moxN#nYmiHln+SR7%%9BfHfT`DLzbplg1YUxJpTI*0^VhY_9rem$8 zuu2-qPmEjk)Z-pKdRRn6uxzCTY1c*ewucojwy0Qg@Sxc2_h$ZRNZG^wFkk-B%u-r^K`)fTBT57K`pj{!YrNT@xn8;xD7^WGF*747B|6V zoHNdz6iddLKCx;f`@~;oddoW_39N+7 z-c$N1EL{C4)Tl`42gHmXQ)lmiH@_Ch{~qWQ>%GE!c*rUv=cL$3kez%OwaPPk)DlYx z@uK>hK93p_ERaXn;?-&useVGGSB)e-vWmLH)Z39@iGQFcbPXwY{7eF?Wa>SjTni() zqW)m&v5GnfHY@*Fvu-@5iwq4L7mQ)!qG2y))V(HS8TIYLVkXn2?w$4KiV3;jnc`3J z#CSw=Uq1}8I=}4F>teHeq1JTy7-g@~HhBKkFQ54e@7z6NL%cU0p*mZCxk+qwd_pigkgTcr=?y*1kN(PhPl*#4_%ofG4j*e=>rQ)53s;gBoO(sB|L`#yvF$+$aA8{ z`t%ZV9j8j<=O#`UQ`&Dgb824E%G_6?w}PCWUL|%j#KWZY)C{!-h+BjsmedG;DbP zFB0O`$|O*s$&g@WAqoO&-y!e*@Of>+H%5LW*1ju4uvMQMn*R-`GuaV&<~gx_-Cz$i z*!bXH&Wt;*Gm^6>T>Gjs>Za?@$T5*gJ9a8N;*6wRXj@`xdG@989Fiv;CwC=fGdnAl Vu@eW`*okjg-15Ji-LSgR$G;D0INJaK literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/HRROv.o b/src/IntPak/obj/HRROv.o new file mode 100644 index 0000000000000000000000000000000000000000..516457f5ea099b34728d11173ed029a7879e9f88 GIT binary patch literal 828 zcmb7C&ubG=5T0$HZEWlA7IIiI*gZU9p?K(@u#mzlq);`5h;5%95^^b(5KAaM6oSH| z4fIg(KM;@p3BlHz;7Raiy)B|va%{o)&F))_PzoKG`DWgHGjHCHPv<}XOcFWc1OpY& zr|g7K$ZcqndY79Tb0K>c^B6seb&Qh`t=siZJM*)+x>&3Ji*xUdb+{kT@&ygj)`IqO z4x`rfrf#&JZPv3@t^e=$){@^@jL?VAcnaj1riq$1m4bxz*}FBB#>@$zzinNJ;u2!i z(F&A>=gO7&>71OnhQzB4@2nqJS0AbFk7$45WxsQ0*?d?sAC>v6%*Bhl74u%1Ukm;8 z6;$^mda@p`#p}lnZ>~(V@2Or}2HnI_y?1t+Z?s zEDvJOpOHu?^L60O3JFt@h2%MC1MhKJ76x8T$dSE>iuO#-&O>rKzT?kK77lUXBdqhi zoT8Q`e?Jm@Bd*^Y6BFzN2jhb8#|>YJ%!#@;1i!GmBJKgE+{h9#2yBB43W7h=w9s5| zB@qOcc_=2hA96sn5yD`9cNXX(k^hgIh`o`AV|OIPN84_-wzf6tW`>I@`*sUNe*ra* Bcpv}( literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/IntPak.o b/src/IntPak/obj/IntPak.o new file mode 100644 index 0000000000000000000000000000000000000000..6b9c6b95ca090c5577b6944e9b459b25042ffa4b GIT binary patch literal 9976 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 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/KinInt.o b/src/IntPak/obj/KinInt.o new file mode 100644 index 0000000000000000000000000000000000000000..da5f77d06cf0e608ea89401022cb7bcfb7377cc5 GIT binary patch literal 1972 zcmb7FUuauZ7(Yqx)?4jzZgiFiMl(DQnHWs`GlC4)tEt?|olKXlH`?`DY_2V4Z3x*` zq-aOV*d>kbp$~#0KJ48+i0m=5tIWUCIkt%+)fYFJv}B-hW9sj__got*K6v1}zwh_` zKj+?@oW1_bAKi?Fx)>f11;WCR1SyQ&2{}rR|5&S(h?Srmtbn5?Bk}41ZM#~Wu0oN^ zw(|p4K45G3gRDdKC|BFa*d}r-Y?dHcwq2U27AvErtZ!Lg?{ZK_Ca4=2lcRc;V6K1F z%WU&Z>+5O3K4n50^*U=rf|-3TGngI_+4_oY3!Fqzm>6Z>GD9} zsgbtn7LQX*402SSkA=e?21g#-1)&wZ1A2Wb1TFse(uefD`W`*MXLsgXwpS))-BWrru1uJKoUTKu+~hFcXzi(97=7pHzOo;Tdh!gO;&H5+5Xa(LgM zYSiaM8lyS9@H_IanXW0c79Uw{@#vW7$Fn5TaC`)np2>zu<7|BFeU*Uqr}F zhYx=R`2sD=8sEAgj-ju^SI+URCQVoP7y}{V4vERnTD*YhXkH|c^9=eHt|R0u@C?K| zsTLpp1abjk^Wt4^Bhdvh>nnMYM56a)UWSDZ1ty~|Gov{X!(czdoTC;6(y%MX;FFi= zfi5H8q2m(l*eBTMVBY{29X{k$@#%!qN+S;jPDBJKH%#+Up94osjjMMr~2CjM|Of=MEg9p}_viSo~?BEQpi7>$q6Op*LIbpzJ96n8-@bmlhVSS%IqT7pLYio6fueW!^Qn~z%Ej|5xdw+W8 zy{>cH*J3$QMymP+WAXIW@k3u(RG>M?BlIP7;pmSsY4&oPC5$r0_1u&=~k z@A8#IL-Cd5{00RDSR{R9qpxIZ-AWHxPK1>fT#=Ju<#yuDuyQvcIPIJKZxLo?0UwgG zfo$l5=7V|);~+Qw0TB0Fd;q92mbw?%3#5Lyfl_Y*$vy+bEU804TxszP5GyW#xQkNv z0FfI14MwPOdBE`mIIgY{Lflgk3m8FQaBn{;c^fubPeI7PD*5BY(J;7|ACo)*8?8qn z6dzprPZP(6f_s%5%W$K{K z?3X7dCnl>Tak{r~^I`QPx~yx!gU-Nsm= znPGry@HLvG;INbM4Do;1jV76RqiSLfO-4?-WI~jSi)A^NJU5ij?eloHqI5`)dP!sG zq@>0k5X2@#X{KCUD3mfXBE&(xRi%?s3+B;C+zW+ByU~OwPK#inFk6(-!+JHPx2hH` zE4_6H(I+^{*tAMTz%g1h>o^i|s!75(QQr>Cw=gyU#5#5fPKHqA^r}{PW51yPW$rci zsypK5My_PT@7blVd9TvvS4-T_hWEJRRqktk_|2;X`e0S-3q9@+R=Y0r)V`3o7yj@P zpXz3($E~_)Q9CS3WWx_VwJ5Gfyl#$qT!#>fmvvsa7p+PjRIA?A zl$^CMXT@?!$Z;tbn9fH?Zb4*<%UUn|97$#lOX^B8DLbxs+(AhP?IBu_0!u=08*GfH z>t=o%>=oqq_lXjuXj`N9--Qm!HdLQhnPV@bWlm~2PEBC1h~O(kAH~Toz05=N-Su&I z%pG?pT!HvoL|)X*;o1hNk_|*7``MrD_Hw^Yw<~T9oRA5YxO15$7OjMJtW96Wfq01c zDfrf&wD_JdjZT(fJ#CVc2V3@JM^ T74(AkvZ1W}^Ynm`r=j%+OWoQ6 literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/NucInt.o b/src/IntPak/obj/NucInt.o new file mode 100644 index 0000000000000000000000000000000000000000..3aae4f9ed711e3c0524602545fb17b5c90b61f37 GIT binary patch literal 3196 zcmb7GYitx%6uzZPSzbHK!&;3SmgN3eVk%n|ED45A*i9~G(IQLPDsmF0woayY5mU39a=^u@g`@^ z{m$b%XYRf8`0~bYW78NbD`&VsJdk};a0x;%?t_E~|HtrF*p8BnaWFU;iF7kf%cnc@ z6C|1zk0#<1*qN260Sw}!>5x~p;$huncZQ~=+Ve(Bc9S%?`5d0G^mn5fx<_ZYZwY+4 zZ2LrmZobR1uj!KDAl=+uhNfj&@@XTPskMXLd~B+14@!=bt3O#zdKuPF^3^Q0Y;L}w zi*E#clR131ne2(Cr8jH3k!(#n_|E;PlYB!?9`=FOZwL!OYd4dz&5nyShxlnSdj?&t zm@4SAh$o#u0>=S^V)YOj6iGtoj_k7`|97bC^{8@bSZz?(tu{}n@pZzywN~u7cpXiS zD*i>H(9gqYT$piQrz@estE#d+tVfj4*TT&6D#Qe+rYP*@wTRPIrLxTn>p}$Ig!~{1 zycyxt0Gx~?mgPk3W6)DfT3cuH3` zoTFkv(0!&X+RM995RPHs;~?td2@v0cWlUERXD|mx;~99rMd}YI5(a0R7vLKhujtA> z!$h+WG^47LxS}lD%}X}tX|#!e(C4_3&kaK5(SF~{s_k%g;3QWp&lD)MlA{@dzLP!*>u8QbwAb`=sTcu(4XkadW*&3 z&2aBAIz?(B>QM^~9f+DI zjKXRV?BydU&^N5~y$6kW^G7QXOfmD1n0ZMQd#(Mer^!2rsgD&Rybh6tIIoQr`>h?h zO^$Y~<*TwR*81TbH%53+AT10Zjx##bmAJJ^J*-Su7F*NAGh4jmtAkDK7@(&lX8!u@ zMshP^G+dC#ENij6M27(pxb z9k0X+=qOe|ClgB|%dNALSzAVf_;jV_R@S>(xVz@mnudt`rS5#F; z;x`vgud8hM^|klQPcN4t-A?GZJzj9|d^st5{%Ka$=`Zuon&#bw=ivbC4?sp_g7ZCP z9vm6w^Y5JEp)a7X>g96V5-fT=bX0ty{;3{%pnTyMD?GH+zS^E?cJRRp&xc6&9jWlp z5%HBOJdLD*tql0*0MGE%+KFM?9Fi4mRV6#HmDkFc$v#GMK=LsMKiG{qgjyPNX&Lo3j)L!I`4$^thH=uEf0*9bM8F(A| zUfAD&o&}cOf!OfCC2#qyuB8_jVuN;0KIGuePhn?`xNTP8Q;zOeIUlX8s@>!2N zdY9NQu_Cco;%S62cm6xB5g%|^`oAX(zAB05Q9N$Q`L8$zKXE$aCrlj|2S7r6X; zT=)?eUhl%&T=3d6$@$Y(Bl|t`SB$nfWJyQ&?-xWl>!>(zv!J z>4n6!Y)1;b8q+o#2IiQgl9^Pl)tYBkE}PtKs;xuIx3s3UT9#Q!@)%?(WC`R^$Rm)4 PSyb3RoHamUEEoG5F>HDF literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/OvInt.o b/src/IntPak/obj/OvInt.o new file mode 100644 index 0000000000000000000000000000000000000000..fd8aef79797494a50f89b7482066fce2f21965da GIT binary patch literal 1780 zcma)6U27Cq7(Q#pWYWet6K!RSU0h)<)GMI%4jA-p@vY6x~=uQ(^lV#ba zp)Ku7M7ktfbLo|=zrY)RKqOjB@gs`(0fmO#G#83-1L6m=r5;d-LT0jng)$*h z$-Y#;-r`ZELweLZw2?7`(i$rg1SUjww2;XUXA^#;UT-MSQ4K|isZnJlnCm^gc!vzt z>lN$tDiEmEkTV8iKp`?C!pjez%=p22y^7MSsGd1B-y+_ZQXeulqEZqpJWX0{`ap83 z3B#9A-vX>OGDgRVK6VgJ7W@YE^Xc%~c`5&Y%WiwV$2Fy(W zB+xe`pWzihV5Y3FGp*WMyDf|uTZVEs>8ELh*Y_Mg_JAJPV(p%4o=5`&Ij8#vOUq8_Z<(Sarch7$fKK7^PZ}CA z)c$f3S~)E~S6^rPb-Jtzqs~N~9@Js`E}8`zQQ3*HTnoi%SH7QXg%LrLc3#5HQ%M#= z_A*+S$5Zl+Jibffgl11QhMZGZ=wEYm!0xvP>_J=1g9WzQ>93x5hTFPRuXZ$dZ9VeO z`HKyAzETy%pz>eeehv6XY7zSJ5DQJ3A+x1PpT!^kG~%DamsCUWU11vC9K$@j!C!=b zZ_sE;BU;w{NNi@KMmNT2Khvnul`#@iO&Z-gV=<(4pxsEQ0v}?2UsMVDVEUkUq8|E@ zFMtq>GyrwR+MZ$yXtpgVyrA$5kn$&h&A<#0->t}YAS|*Oh&$dE0zxW6zYdm>c9~|8 zC=j25K| zh5*;$cL_Lf*b#V%>VH^%NM1ZwoV11}BPU%lA=-`Aw#2fol&h6rb&A%M4(ZV>-ykqT zmpWUcl$sE&<#r=nY?b7R5WnlCI$6~)4V`orIwI};CPbqtmcqrAhCKaK?}nP|j%unZ zJqJSc5gcNysjia55iLTwgGo&s8(sjP-oA|BAft~>!^wz4PEXOS>PevgH+Oc)+bVx1T0%=V%h4=7k4X-l{}u%6%(VT^Y1C|(d~rkcRlXJrj<-< z=)1p3`i#AuJS+jzuAX7qs-;9b8hr zr!vh+wSx@G0%c5S97Q$&(z(Z}1~L7896)VKZ6LYB`%3%~G{f-H6~ROpURb^;SlO39 LyCQ3yDlqmF`I*rn literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ReadBasis.o b/src/IntPak/obj/ReadBasis.o new file mode 100644 index 0000000000000000000000000000000000000000..1c00adef0ad045ed9bbcde6897e3b464f5eb6d82 GIT binary patch literal 9428 zcmd5?4Qv$06<&t}3;~~M5-^2@1D3xA6WbximQ9;8c32mOknr0EI2-%?Q_P*?I~S8W zimA^8>o{rkl;F&VK%tf z2bV=dro!8h2lRM?-sT_*a(O%}OV+Nms6OE6%XI(Uic%|0255MuvovRyNnn=UzBthI22dU&UJVV#z$N5;7Il(#sx9c+V#I)UgyU$=FqpyDMqL^wvY7i)9$ zNJ!&klc*)}rVtI))$^TGLu6F+W3717>rpNY89ovhegmzhOTs~|wu{U7wv$lP5LMIH z0uyX9Mb`c3tcN)w@f?Gg!{L-g&rPbS$38cDKLhTdZXTsaX)xs#33#?MGS~3TvL_i{2?GTGa&YAt(1+xU=V!bOb?#?Oi$_2hndmv ziE~^~dl=P)Z==|v=_oEZ87WFZ05mfIxbZR?$|X#U4$E1y){2MH%8~Ywg|P?7u<}in z#fFA5L- zh8_uSyJ_%R9M0dE_7|>jhGrvZ3YR-WQ?Zv67CS@F5g&1e&LKM#E^&s!PN41#Ey0df zSn3Q7!vyPLjM6qV8Py6HVNDje`$7@ysZmB}pGR+dFm{bH2M|@qJt~IJ8Ue;=j4fQe z?PhzobJuJ*pzTu1i5#lk)SaWZbysmN(yNnPpQ|9i@D;t7Y8g;G>@2+a`}i%Tkp-us z+$#}bbC4C)bX=-^(D)g6t}^q&)nJK?Kcy^ z6%!;9{kN=Ou`uy4WlB6YjY;h`&|n#_A8&;eBlkz zes1o|_1GW~L1vDZzV)m^ndzQKJrrZoy^-JSW=QT30SzJ`e!9O0t>|lCu^^2R-qF!d zeObwpq`Bnx!ulb~^NDjiwvX8SPEW`9tQ%G0GoF%7AM{JFOt=ZspezL|hD25qWPOGC z{rgl0)tv6c>uqTB`xcwdq*h$=`Mo7Jzqc6KcLDQz&`80B@$&mx31)D$Xhwc7zjJ5*kaAtlVo(e>M?*VdaF1N+F#N*4h$@>4z?*p&TeHeqWJ_nyr`zO~ia4jAK6Q`XR zjj!1>a->G@fktRs3+6H0%kh*Z?ALe!%AFx3cq@Lp1C@JJspYc;VV)S{<-`C&dN;xefdA`_`fw&`fdzPUr{1` zh@Paz7ap9xokOM%FB*gJ=k7%MjLgV`(%|Cz@}$A(D;X+%1<)5aLVlD;13&&G6OpAi z6KK$fO2d{!8uld8U?hqpW~Ci_Nn9^29V!in6KOEM>BZYQjmhTt<~E z;0yT~{%d+of^?A*D_nl^9rHoE-Pu0XA~zCPfp^SK@?T49Qgy^R zw+Z*Cg0 zo^WU9&ci)dDQRx-`@FtjV6op9Y^f> zTWML_N0^1Ywvi6Lf~9qiaLmOad~{l#aF{ShB$$vP8caxaa1Xs(slYJ+>sDO_#7BFz z6gX8;GOyle(tih%ejW&2YP--62t7mSvluW;P;VG*8?QqaUl5)0m-KW@mo;lBp~_kk@~;EXwrWHvfl+D_HOl$K=yk9h?!J(0?8Kw zQcn;_em^h+?d3r7JAmZ7iNUh{8j$iX0oi^KNO{iz$@eU97I34W4rIT@K)6_42xPw- za1PGO>Ziadpg#i61imYH9H@d`1Ek!?fRyuXAVNSb5IPr#DOP6-Jsn6r z2yg~40GtM_pfiD&@!=Lzsx||urvXSkn}8hWIw0lD1ah2HfaDtwq~9Ds^7mp@pr~E} zlK%*hd;x8p&+5+Lnc1f+fU3r+;mK0nqL<IyvAe=?AE z-3KJ!SRnaQfvKqf91rsS4oJQeK&5DmD$`1t9&n1xUGmAmw}y$T)gZ=+!{R(GsDHfYg%< zq@FimEae{pa-LoQP6KY^Ab_KQjH8#ZZBb7rkb1&Eva|pxrv%7xeiKN(T%ZQjfaISF zWE}CAR`S0GX7Zf@lCKL$zBhmjkzWAG=LOQf^}rdxrGoiD+V^3KxsSF2DX$qg9T))8 zzA7N)WCGb`7La^XfaIG9gh}dXAo<=^OujQf##0**O)9oAUaAWZ{LjG#B7VP4JB-FO z2)6RctE3^&`aM1(^bSl4uV;mh2>q1M`-H9)`qx5xg#NA2tA&0~=tqVAQ0QWz|0VRB zLZ|Wt9@pzarwjdKp{EJW|D~Y)3x$4K=tqUF7rIjDN};z3{avAV3;npzuL`XTeM0D? zLccBaYeJt9`gx)MBy^k57lm#T`rktTj5H?R`u~MI&`#XebrA&{sT9P}Gtp>o9~(p0 z#PEL_L$j~F{|{nl#8_1Oz8HF04BZn$;~zn4s{M^P9{D_c1ggD_p32$^9+$k0aa-$r zL2pfTTOjE1H+X$<*&DqT_4WqvZfUFwdhK=nH4nfe`Ul{k%KptzTv_iAL@Bn6@l@fY zXtxLrkW!VXUNKsY^R!2)U!0FSn~yve_*lpSAGs{>@em7qEWn+^M>Zc1lHw!VD3Qt` am7|pC=0DVAlVrV7;3JC^AK6)$PUSx*Dh4tD literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ReadGeminal.o b/src/IntPak/obj/ReadGeminal.o new file mode 100644 index 0000000000000000000000000000000000000000..3b9e0dbd7a974db3d0f18a64597e1eab610e3b00 GIT binary patch literal 2020 zcmb7FPe>GD6#rI7T~o*H541uHd)P=}$965lphH7iW9&iv6GG`Qth4UYIxDjiiI8-w~j%VsM8`Hf&%MOr@%u|)TN?=I!Jl2esAWRbsRDBgSWr$eeb>Bd*7Qkv#-{^ ztv4_hsAc$p2oP2SiPDC#HpmS!Y_nF#7c0uq)xpU~Y(Ai>TKbHI4PUA{+&4PxY8&{O z=OR9e{e_<}nFTgS;4W277cDbqO!5OipUV^C_C~i5uJdwTI@Fgg7{!eO{d~W9U1xbj zn~$$b#5by{XVr|UP3g{opHJZhEOP%W_~;o_>YVmBF_z^f8)Epi@6xi%)+wC&@*MuV zfh+ZlHKRtvu>lAz_Zd*>K}aJV?r_QHlrmB<)?ZqeM^a^p_VRH5W2y!@*@)tt4Jq?q zL#RqAeN;-lv6D&#^Aw;iDW!KxDIW_eB_X!l8w*j13N}40*eox^61=sapxVxrIc%Ir zPnd{9+a*<6U83uN*9~#e&XYp2fmA7GC!^j_vQfH(?Y6YXiB-zo*f?iZD(9|HDW2{z zU{g}rb{H|WdZL#06Pbr;N5$=>;QucUeY9IcZQs<tYMmX{XNc zFMRfgKApZRUjI8jUH0iTPhNlBr{jY@nJJi-sTpd~QVY|%;XR`BVn#PrQ`hod1AH%= zIZOARRh`pW&D7GE@qhRb;Z`$f)A>Si6Rn#{oxp42%?ATmCbm0gww1qSD$Aehh8%?) QfpoDx#rfY!LL*7AzewpzlmGw# literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/ReadGeometry.o b/src/IntPak/obj/ReadGeometry.o new file mode 100644 index 0000000000000000000000000000000000000000..69cb45338a7127da73a85c6d7155538d6f2e7e31 GIT binary patch literal 3292 zcmbVOO>7%Q6kfMZW1z7eXu$=R7}$U#;^34tO>MxOoV zoA>6uH}l@k`rE&jmTM)+w^_mi-H$G9LXXlwl6Ig^kYIz>yM+m&v<6LZ*p#R{_JD?A znZp(ayctGMS8tDCtN3UQ8mPDuh{RgS2e^3hG7mEeZ};U$tJw^X1Tp-u74BuCgd z7n92I5Y}mnW6A_DNMk#xM72M@BaCSk=U_B@OgT@oSvd8PUy^oX)hH3P+w^ce!3mjt z5L~xMlx`sr=!8KU58YE^+qxQE<9D!JC&!_wAMn&BbtR^L;e<7b;PuIzlF%o!*m7l? z3SmU6Bscje_)eL zUc)tb58x0|<*x&dAXRBwVEcw7EOco$RbB{)6LB!P*HZjRo9^GS3SXY#3nnV^p15%=Nq?jG}9GySqqp}NwYI=mrs-?%BRsYu#b`=r182>Uf zHHRFqY|Oi|ff`&t8-Z#zbVa9hAWM4FMYNC=%vTGKjn&->dtX^ zuacV`g=V#k*#!byPmA@gq`)PbQ$mz>a`_Axs7o+`LGk#Yi#pc%D=2UBYlWG-) zqWPAnn0uwQy`?qLbU3=tGu6x_9N4-{p-{{Y=F^s0+9T0TM$LEnfaDtv`@&mm1Lv_n zx^?IkyoEQOn)psie)^&W!{;{nsQ`kJsm*LATJf_%>}-vn4k(y-e~UjrgN|~opFV@Z z=^FoS)Ml`QD=>(00}LVz!VCg_WD(z__${o%%@Mx|gyZ-O=a+%Fuj8Kr@sls$LGt53 zL@K9%v`z&+41AVjJx3pq*8h!7d3I-NpB}wBj+!2{v_w!oXecQ&G`<_ z^PF$z{1oT)oR4!}$GOe4MM7xB6i#lUB|HUK!-oxqNk6VAv z!&MJAJ)GW8_xcY!9DkVm`wB&?n9ds|%P5>M^X@5{FZG#4qiCjcZUJ=PDGpkud#hVO_-8%ntwsuMH^ZW_q) z<@K2kb^QYPNcjy5XFDathE645V=d4+J(KvXDbm6r@q9+W5fFXiI+Q{_s=3!G2LDrP zH=X^YZz=v+Yb?DSqMv*SS4efk+4)k$Fi!l@iR<a-7au4 z2gW5H;lZw5)hF-?Zd#1O<=D1a%o>w0m@t_F-fNOrj=w&~-pODJ4Pq8ZI*T6SOj0TB zv}ETEN58#RTdl3VUU8f4YqiK9gy%b#tD@&^ZbcUce&20v^<8n6RFK@A6_ML6v)r?=y`0O3;#~($v;|EdD^c0t{;|8kdMQ+y( t#&cn${7u)(gj#(+bThF4_o~{y_qVuE%z91Ux)O^{`o&%p{i{^&?GJ64xjz5^ literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/S2eInt.o b/src/IntPak/obj/S2eInt.o new file mode 100644 index 0000000000000000000000000000000000000000..5323856d7ddda50ae492c6b2a9c3d6aac1a54c7c GIT binary patch literal 3496 zcmb7HU1(fI6u#STw`+g)Za`}kOZQ=fMMzDmmaX+COSgD~HxO*vZt2e^Xl}PQwjr(( zq+rT!C6`TVg(!Il(uY3eAz&U-h!SidX%nGf@j(Kj^ugLxstpme7TfjvX3kC1s1FXA zIrE)!=A1d_%*@?a=CpfXJ$IyEy_>WfqkP#%f1}(s_X|Zd2 zpt)S3t*d~Ev|O%vXSO*&OK8;0X^(4L)>_t+WQDD6lAz^s?MDi2ovrP4TQ%z+_5wSy zAhG8DUdW0GKOl?tQiikKUP9~%vFc%uISX14XMl6LwtUX(Y<;WEaF*LkilJ)Btt0k& z)|vDp?0jI0RH4T?Sr0`trn?$_0Q%&l)>~EwDArj`=xp2*J6)`j4)VWRdT)A9dUv{c z_b%t;&D-!=d})PS9#0v0242mef3KRz~%%A0%$M zS99HRN#z+6aEqqRs);*+M_5e4ud8aE;#8t>+qDHdI|ENuwtcF-QmJ@$GqTUMC7q9= z74qz-HS68AWHLEmIwz-?!Tkr*2hs=Ahtj!8?+kO)6M-1%DGw@#uBR{Fg;nmP9#ChG ziE@gQQO6%t1KQP~YNC+A&5%)?3{!YkggORUFeE%3pXiMUFH47_H%4CHz9>DjBD6Ol zdaRh^yDH`MWw?z4D(Xy6-s3*~k~*VTnlux43$Dc}aQuwQv#uQivIHX)}ogQXwu6BbP=#TRIBy8&Gx1e5O6tzo%zG+HUNqy*_ke>C_Jz^IKADZ;PGli zG574_8$mQL2_AxF-K{aciyi`6$L*n#tdCtasCaF4?#&)d>`PtInw`6|q2P53)Qkcf_z#m}@^YoBf>og zh`9rPUL=#LOVSVDLKD)ss@CUYRL#>LWJzG-XHeY^{LoBGdMpUYfsQta+?~aw!Jqar zsJRP1oSB1xtB|5?*sKRNaSf_0c`TL4@}Tr5sXL*X()Viw8JmL$hd>+rOYnm_fe$}& z9tKsH*y;u~ah+2GTV2YmTQ=mji5W8?NL?45~5ku!nwi z851haftq|_E#^EXv!D`BGwwg0UPjObwFZ9*SL}K8t+)&b7Gps8qE9q+!?YZW zf4IU-s!y*plSE(GOp?8;!t@%e{UBl{sp9G|e_q5!B4M9&ED}zUPDBiUM(CADc#G(z zLD$4mV#$!CcoNTs#0`mtap=LK&Td>84Wd=ixMj|J}+TqF2r z2r1u=lHzY;lBET`harmf2~emWB8BPLe$W^e#35wciynhQLhun{$hnv;haSVi;CJqOi_4T9w uDl!7Ev#rg_y}hLkOLA83@Z!X)+oD literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/S3eInt.o b/src/IntPak/obj/S3eInt.o new file mode 100644 index 0000000000000000000000000000000000000000..55ba55f35029faa586358379ac3b17a15f6b7b91 GIT binary patch literal 1432 zcmaJ>&r1|h9Dk#04w^F)Nv%*g!8`1sA6gJAb!c#fC(J=={YC1m;BG5yA-2R4Ldj~l zj9Py{1VP83iEzK{N=32|NQbu1citNnslLp6-`}72ec$)qeERkMcOzq3 zJ;Q_%!C-Y5HVKTiVJwj2AGAraAY1WJ2PUHt;DLKyK3&K|P~>^Zo}px@9q=8s7U5Cu z9ww>{%41?7d0uWZpPnAibzTijNAY$Qj-?VT;1FI&Mkpx0j~ADQqj*72;L=sR9oD7v z!`Nig72k%*^LFEOK;v`Lx)FFH%iP8+eQ8iB_xRtqRw$A|?i>XC~|BjcTS50ezTfpXPqVyBm z`ATo8hO8X7F;DPlhG;(@5y0y#i{b~pw^-4U*|Ud0mqWCYNOH{KL0GI29t{>RU>@O9 zm|MB*RZTX*^%sL?xc*$w9^t##uAfBZejeNOXLyR*hZ=_yRE_0gx5ZUkT+8uT)f`#} zX0tgzS*z73w@-8tz>=fo+o%hDJ0?6q`3Ln=XHpq6*+RfYre(}af%rftPZkz2yGrMH zd(;_mMx8Oodta>6zV1*w2#7?Fq{i5(fiExK)PKI-stnr0n@lTMnsvNUe}=Iw?e#>!n~XMWhg0Y>3c}G&-IflR~`M7@>cLQPv{ua2e~G4Bb$C zQvoQ!7apmCTY%4?>#RD)8~0eM=>Pr@-+9FW68}`51BBVdEUQ z0YmsdIY~NQZrUE`G=_o1@I4cpDKW{-=(QeF@ng7uB|UjB?=kO=5^~*_S&xuEi%yp7 H?xegwim&hf literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/VRR2e.o b/src/IntPak/obj/VRR2e.o new file mode 100644 index 0000000000000000000000000000000000000000..8f546b3817433dcfa7e7f4eed5fe2242f917a7d5 GIT binary patch literal 3672 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 M;T>kFYhgO_AO5^gWB>pF literal 0 HcmV?d00001 diff --git a/src/IntPak/obj/VRRNuc.o b/src/IntPak/obj/VRRNuc.o new file mode 100644 index 0000000000000000000000000000000000000000..7d01565a92412cfbc18b45bd05ca048d2ec453d9 GIT binary patch literal 2028 zcma)7UuauZ7{BRm*0`;?Q52%>x+@%^C>`ybl0Ast?pDs=RzjD~l->050K);)(7{uTdf(!XxPNUPZx=l*`0?a-8&B&YjMll?KOo8qdesFV{c!6Op=1*M~!X z>DlbulLTAw-jsPgCwF|&g7+9m3XU@~ott!1GcnK5ipM2hNcxw7CrwR@Y^z+Q{!LCf z88>xq^55~|a`Tqlu`KZ_XdcyyK1@9ZgTOE%Wa!vObJHgZz6F2EDUZXWZczW?7(|p4 z4Z03g{_cFC{x34#H%=KNMq=b7zw&DynH9SiH?*s-Kr)MC>L4jmGG7cWZfaLMAP$t& z&LOd4rP~9)YYUyQEN%>mZ@KtJ*o>bLcevPslrS+_G$loj#W8GcVH>&flEuaiu`$@c z&V|Kdbwi7EF{4mxE7Ss9tXidc#@`k8^~8|)gNtfL>!}%q<-h<;+!8yyc%9uq)VelW zvqXaRnZjgdU3=DMAri-j#Qpk!7CE|ZiCr2K#x}_~JY$vZokk<0{kD!s zv`c&S`??mfSrlOb{{pqJ2{LLnL2TB;OE#O};s<2)Ghh)Ojt?Mt9uq8z0Bc?xV!UWF zj;bo3A(T~2u(%&9VgXH5f!{1@f!%Euh43*zuGO`q#dH)h+I1W7aK>yioflSgjux3u z*HbwHd=J`79{B(onW7?#MKOE1CIG70fJg4s7_7BsJkOGq2iuJX(lE)pnJL23KGc1) z){)T;Ei~^JnzziatkBIlea5hjGsc+V+{zsG*XbbCo3(qsjtiCR3#ZiR`;wg6PBXffBSh)Py&~Rl|Vich#Y7ST|<@kVDBOi0tfl; zp`ucS;mD_Lo)G z4?YCPiS>R-WkT94(e9S{21%&ePpQ(0#&=X~JeYq8r#3v-!C*GW&M+*BH$l7IU6`<#i{ dEH+lMWI_saSwYC4?=tDtp*d=W6=nas$;=~3Xw{PC5RLuwz#x~ z{)s}5J$fv(_x9pddJIKT){A&Be&5b))q>z--+b?T^X8k`nRoQ#^Usn~)=MG<@?ZwR?*-G0_> zb{5;SCZqM=db_sJx7dS7eio*v{ikW&T+*%1;`64-p4WSCi(goLXZ0M2@_eHrOLi)Q z2xGSQ*rklKCZMC9dpCe(AlAt|oW}Ffd6nnShtz-BMrm!ocP;h&3oL&b9<(yM_K`c|m3npS$*?~t-j9s2OBkf3v6@2EqD>;+?r+Unw@8ds{7JT=6>H zz<{s#5UwMu08C7o*O93Z98-^pcmsC==pvE#(M8MmfV45Vi^9AwxQWLhH@(v7EU##3 P-JhkOp0v__~w|6ULX*v4p-EbhBDSm#X`Oj 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 100) then +! double precision :: dble_logfact +! fact2 = dexp(dble_logfact(n)) +! endif +! +!end function +! +!double precision function dble_fact_odd(n) result(fact2) +! implicit none +! integer :: n +! double precision, save :: memo(1:100) +! integer, save :: memomax = 1 +! +! if (n<=memomax) then +! if (n<3) then +! fact2 = 1.d0 +! else +! fact2 = memo(n) +! endif +! return +! endif +! +! integer :: i +! memo(1) = 1.d0 +! do i=memomax+2,min(n,99),2 +! memo(i) = memo(i-2)* dble(i) +! enddo +! memomax = min(n,99) +! fact2 = memo(memomax) +! +! if (n > 99) then +! double precision :: dble_logfact +! fact2 = dexp(dble_logfact(n)) +! endif +! +!end function + diff --git a/src/MCQC/.DS_Store b/src/MCQC/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/ADC.f90 b/src/MCQC/ADC.f90 new file mode 100644 index 0000000..fb04c21 --- /dev/null +++ b/src/MCQC/ADC.f90 @@ -0,0 +1,48 @@ +subroutine ADC(singlet_manifold,triplet_manifold,maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,e,ERI) + +! ADC main routine + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: singlet_manifold,triplet_manifold + integer,intent(in) :: maxSCF + double precision,intent(in) :: thresh + integer,intent(in) :: max_diis + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: ispin + + +! Hello world + + write(*,*) + write(*,*)'**********************' + write(*,*)'| ADC(n) module |' + write(*,*)'**********************' + write(*,*) + +! ADC(2) calculation for singlet manifold + + if(singlet_manifold) then + + ispin = 1 + call ADC2(ispin,maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,e,ERI) + + endif + +! ADC(2) calculation for triplet manifold + + if(triplet_manifold) then + + ispin = 2 + call ADC2(ispin,maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,e,ERI) + + endif + +end subroutine ADC diff --git a/src/MCQC/ADC2.f90 b/src/MCQC/ADC2.f90 new file mode 100644 index 0000000..85d5469 --- /dev/null +++ b/src/MCQC/ADC2.f90 @@ -0,0 +1,359 @@ +subroutine ADC2(ispin,maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,e,ERI) + +! Compute ADC(2) excitation energies: see Schirmer, Cederbaum & Walter, PRA, 28 (1983) 1237 + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: ispin + integer,intent(in) :: maxSCF + double precision,intent(in) :: thresh + integer,intent(in) :: max_diis + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: nH,nP,nHH,nPP,nSCF,n_diis + double precision :: Conv + double precision,external :: Kronecker_delta + double precision,allocatable :: B_ADC(:,:),X_ADC(:,:),e_ADC(:),SigInf(:,:),G_ADC(:,:) + double precision,allocatable :: db_ERI(:,:,:,:),eOld(:),error_diis(:,:),e_diis(:,:) + + integer :: i,j,k,l + integer :: a,b,c,d + integer :: p,q,r,s + integer :: nADC,iADC,jADC + + +! Hello world + + write(*,*) + write(*,*)'***********************************' + write(*,*)'| 2nd-order ADC calculation |' + write(*,*)'***********************************' + write(*,*) + +! Number of holes + + nH = nO - nC + nHH = nH*(nH+1)/2 + +! Number of particles + + nP = nV - nR + nPP = nP*(nP+1)/2 + + write(*,*) 'Total states: ',nH+nP + write(*,*) 'Hole states: ',nH + write(*,*) 'Particle states: ',nP + +! Size of ADC(2) matrices + + nADC = nH + nP + nH*nPP + nHH*nP + write(*,'(1X,A25,I3,A6,I6)') 'Size of ADC(2) matrices: ',nADC,' x ',nADC + +! Memory allocation + + allocate(db_ERI(nBas,nBas,nBas,nBas),error_diis(nBas,max_diis),e_diis(nBas,max_diis),eOld(nADC), & + B_ADC(nADC,nADC),X_ADC(nADC,nADC),e_ADC(nADC),G_ADC(nADC,nADC),SigInf(nADC,nADC)) + +! Create double-bar MO integrals + + call antisymmetrize_ERI(ispin,nBas,ERI,db_ERI) + +! Initialization + + Conv = 1d0 + nSCF = 0 + n_diis = 0 + e_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + SigInf(:,:) = 0d0 + eOld(:) = 0d0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ +! +! | e + SigInf (U^I)^t (U^II)^t | +! | | +! B = | U^I K^I + C^I 0 | +! | | +! | U^II 0 K^II + C^II | +! +! + + do while(Conv > thresh .and. nSCF < maxSCF) + + ! + ! Build ADC(2) B matrix -- Eq. (38b) -- + ! + + write(*,'(1X,A7,1X,I4)') 'Cycle: ',nSCF + + ! + ! Diagonal part: static self-energy and epsilon + ! + + B_ADC(:,:) = 0d0 + B_ADC(nC+1:nV,nC+1:nV) = SigInf(nC+1:nV,nC+1:nV) + + jADC = 0 + + do p=nC+1,nV + + jADC = jADC + 1 + B_ADC(jADC,jADC) = e(p) + + enddo + + ! + ! U matrices -- Eq. (40a) -- + ! + + do p=nC+1,nV + + iADC = p - nC + jADC = nH + nP + + ! U^I: 2p-1h -- Eqs. (40a) and (41a) -- + + do i=nC+1,nO + do a=nO+1,nV-nR + do b=a,nV-nR + + jADC = jADC + 1 + B_ADC(iADC,jADC) = db_ERI(p,i,a,b) + + enddo + enddo + enddo + + ! U^II: 2h-1p -- Eqs. (40a) and (41b) -- + + do i=nC+1,nO + do j=i,nO + do a=nO+1,nV-nR + + jADC = jADC + 1 + B_ADC(iADC,jADC) = db_ERI(p,a,i,j) + + enddo + enddo + enddo + + enddo + + ! + ! K matrices -- Eq. (40b) -- + ! + + ! K^I: 2p-1h -- Eqs. (40b) and (41a) -- + + jADC = nH + nP + + do i=nC+1,nO + do a=nO+1,nV-nR + do b=a,nV-nR + + jADC = jADC + 1 + B_ADC(jADC,jADC) = e(a) + e(b) - e(i) + + enddo + enddo + enddo + + ! K^II: 2h-1p -- Eqs. (40b) and (41b) -- + + do i=nC+1,nO + do j=i,nO + do a=nO+1,nV + + jADC = jADC + 1 + B_ADC(jADC,jADC) = e(i) + e(j) - e(a) + + enddo + enddo + enddo + + ! + ! C matrices -- Eq. (42c) + ! + + ! C^I: 2p-1h-TDA -- Eqs. (42a) and (42c) -- + + iADC = nH + nP + + do i=nC+1,nO + do a=nO+1,nV-nR + do b=a,nV-nR + + iADC = iADC + 1 + jADC = nH + nP + + do j=nC+1,nO + do c=nO+1,nV + do d=c,nV-nR + + jADC = jADC + 1 + B_ADC(iADC,jADC) = B_ADC(iADC,jADC) & + + db_ERI(a,b,c,d)*Kronecker_delta(i,j) & + - db_ERI(j,b,i,d)*Kronecker_delta(a,c) & + - db_ERI(j,a,i,c)*Kronecker_delta(b,d) & + + db_ERI(b,a,c,d)*Kronecker_delta(i,j) & + - db_ERI(j,a,i,d)*Kronecker_delta(b,c) & + - db_ERI(j,b,i,c)*Kronecker_delta(a,d) + + enddo + enddo + enddo + + enddo + enddo + enddo + + ! C^II: 2p-1h-TDA -- Eqs. (42b) and (42c) -- + + iADC = nH + nP + nH * nPP + + do i=nC+1,nO + do j=i,nO + do a=nO+1,nV-nR + + iADC = iADC + 1 + jADC = nH + nP + nH*nPP + + do k=nC+1,nO + do l=k,nO + do b=nO+1,nV-nR + + jADC = jADC + 1 + B_ADC(iADC,jADC) = B_ADC(iADC,jADC) & + - db_ERI(i,j,k,l)*Kronecker_delta(a,b) & + + db_ERI(b,j,a,l)*Kronecker_delta(i,k) & + + db_ERI(b,i,a,k)*Kronecker_delta(j,l) & + - db_ERI(j,i,k,l)*Kronecker_delta(a,b) & + + db_ERI(b,i,a,l)*Kronecker_delta(j,k) & + + db_ERI(b,j,a,k)*Kronecker_delta(i,l) + + enddo + enddo + enddo + + enddo + enddo + enddo + + ! Fold B onto itself + + do iADC=1,nADC + do jADC=iADC+1,nADC + + B_ADC(jADC,iADC) = B_ADC(iADC,jADC) + + enddo + enddo + + ! Diagonalize B to obtain X and E -- Eq. (38a) -- + + X_ADC(:,:) = B_ADC(:,:) + call diagonalize_matrix(nADC,X_ADC,e_ADC) + + ! print results + + + write(*,*) '=================================' + write(*,*) 'ADC(2) excitation energies (eV)' + + do iADC=1,nADC + + if(NORM2(X_ADC(1:nH+nP,iADC)) > 0.1d0 ) & + write(*,'(2(2X,F12.6))') e_ADC(iADC)*HaToeV,NORM2(X_ADC(1:nH+nP,iADC)) + + enddo + + write(*,*) '=================================' + + ! Convergence criteria + + Conv = maxval(abs(e_ADC - eOld)) + + ! Store result for next iteration + + eOld(:) = e_ADC(:) + + ! Compute W -- Eq (11) -- + + SigInf(:,:) = 0d0 + + do i=nC+1,nO + do p=nC+1,nV-nR + do q=nC+1,nV-nR + + SigInf(p,q) = SigInf(p,q) - db_ERI(p,i,q,i) + + enddo + enddo + enddo + + ! Compute the one-particle Greeen function -- Eq. (28) -- + + G_ADC(:,:) = 0d0 + + do iADC=1,nADC + + if(e_ADC(iADC) > 0d0 ) cycle + + do p=nC+1,nV-nR + do q=nC+1,nV-nR + + G_ADC(p,q) = G_ADC(p,q) + X_ADC(p,iADC)*X_ADC(q,iADC) + + enddo + enddo + + enddo + + ! Compute static self-energy for next iteration -- Eq. (25) -- + + do p=nC+1,nV-nR + do q=nC+1,nV-nR + do r=nC+1,nV-nR + do s=nC+1,nV-nR + + SigInf(p,q) = SigInf(p,q) + db_ERI(p,r,q,s)*G_ADC(r,s) + + enddo + enddo + enddo + enddo + + ! Print results + +! call print_ADC2(nBas,nO,nSCF,Conv,e,eADC) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + endif + +end subroutine ADC2 diff --git a/src/MCQC/AO_values.f90 b/src/MCQC/AO_values.f90 new file mode 100644 index 0000000..f57124d --- /dev/null +++ b/src/MCQC/AO_values.f90 @@ -0,0 +1,108 @@ +subroutine AO_values(doDrift,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,r,AO,dAO) + +! Compute values of the AOs and their derivatives (if required) + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: doDrift + integer,intent(in) :: nBas,nShell,nWalk + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + double precision,intent(in) :: r(nWalk,2,3) + +! Local variables + + integer :: atot,nShellFunction,a(3) + integer,allocatable :: ShellFunction(:,:) + double precision :: rASq,xA,yA,zA,NormCoeff,prim + + integer :: iSh,iShF,iK,iW,iEl,iBas,ixyz + +! Output variables + + double precision,intent(out) :: AO(nWalk,2,nBas),dAO(nWalk,2,3,nBas) + +! Initialization + + AO = 0d0 + if(doDrift) dAO = 0d0 + iBas = 0 + +!------------------------------------------------------------------------ +! Loops over shells +!------------------------------------------------------------------------ + do iSh=1,nShell + + atot = TotAngMomShell(iSh) + nShellFunction = (atot*atot + 3*atot + 2)/2 + allocate(ShellFunction(1:nShellFunction,1:3)) + call generate_shell(atot,nShellFunction,ShellFunction) + + do iShF=1,nShellFunction + + iBas = iBas + 1 + a(1) = ShellFunction(iShF,1) + a(2) = ShellFunction(iShF,2) + a(3) = ShellFunction(iShF,3) + + do iW=1,nWalk + do iEl=1,2 + + xA = r(iW,iEl,1) - CenterShell(iSh,1) + yA = r(iW,iEl,2) - CenterShell(iSh,2) + zA = r(iW,iEl,3) - CenterShell(iSh,3) + +! Calculate distance for exponential + + rASq = xA**2 + yA**2 + zA**2 + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + do iK=1,KShell(iSh) + +! Calculate the exponential part + prim = DShell(iSh,iK)*NormCoeff(ExpShell(iSh,iK),a)*exp(-ExpShell(iSh,iK)*rASq) + AO(iW,iEl,iBas) = AO(iW,iEl,iBas) + prim + + if(doDrift) then + prim = -2d0*ExpShell(iSh,iK)*prim + do ixyz=1,3 + dAO(iW,iEl,ixyz,iBas) = dAO(iW,iEl,ixyz,iBas) + prim + enddo + endif + + enddo + + if(doDrift) then + + dAO(iW,iEl,1,iBas) = xA**(a(1)+1)*yA**a(2)*zA**a(3)*dAO(iW,iEl,1,iBas) + if(a(1) > 0) dAO(iW,iEl,1,iBas) = dAO(iW,iEl,1,iBas) + dble(a(1))*xA**(a(1)-1)*yA**a(2)*zA**a(3)*AO(iW,iEl,iBas) + + dAO(iW,iEl,2,iBas) = xA**a(1)*yA**(a(2)+1)*zA**a(3)*dAO(iW,iEl,2,iBas) + if(a(2) > 0) dAO(iW,iEl,2,iBas) = dAO(iW,iEl,2,iBas) + dble(a(2))*xA**a(1)*yA**(a(2)-1)*zA**a(3)*AO(iW,iEl,iBas) + + dAO(iW,iEl,3,iBas) = xA**a(1)*yA**a(2)*zA**(a(3)+1)*dAO(iW,iEl,3,iBas) + if(a(3) > 0) dAO(iW,iEl,3,iBas) = dAO(iW,iEl,3,iBas) + dble(a(3))*xA**a(1)*yA**a(2)*zA**(a(3)-1)*AO(iW,iEl,iBas) + + endif + +! Calculate polynmial part + + AO(iW,iEl,iBas) = xA**a(1)*yA**a(2)*zA**a(3)*AO(iW,iEl,iBas) + + enddo + enddo + + enddo + deallocate(ShellFunction) + enddo +!------------------------------------------------------------------------ +! End loops over shells +!------------------------------------------------------------------------ + +end subroutine AO_values diff --git a/src/MCQC/AOtoMO_integral_transform.f90 b/src/MCQC/AOtoMO_integral_transform.f90 new file mode 100644 index 0000000..27bd89d --- /dev/null +++ b/src/MCQC/AOtoMO_integral_transform.f90 @@ -0,0 +1,77 @@ +subroutine AOtoMO_integral_transform(nBas,c,ERI_AO_basis,ERI_MO_basis) + +! AO to MO transformation of two-electron integrals +! Semi-direct O(N^5) algorithm + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas),c(nBas,nBas) + +! Local variables + + double precision,allocatable :: scr(:,:,:,:) + integer :: mu,nu,la,si,i,j,k,l + +! Output variables + + double precision,intent(out) :: ERI_MO_basis(nBas,nBas,nBas,nBas) + +! Memory allocation + allocate(scr(nBas,nBas,nBas,nBas)) + + scr = 0d0 + do l=1,nBas + do si=1,nBas + do la=1,nBas + do nu=1,nBas + do mu=1,nBas + scr(mu,nu,la,l) = scr(mu,nu,la,l) + ERI_AO_basis(mu,nu,la,si)*c(si,l) + enddo + enddo + enddo + enddo + enddo + + do l=1,nBas + do la=1,nBas + do nu=1,nBas + do i=1,nBas + ERI_MO_basis(i,nu,la,l) = 0d0 + do mu=1,nBas + ERI_MO_basis(i,nu,la,l) = ERI_MO_basis(i,nu,la,l) + c(mu,i)*scr(mu,nu,la,l) + enddo + enddo + enddo + enddo + enddo + + scr = 0d0 + do l=1,nBas + do k=1,nBas + do la=1,nBas + do nu=1,nBas + do i=1,nBas + scr(i,nu,k,l) = scr(i,nu,k,l) + ERI_MO_basis(i,nu,la,l)*c(la,k) + enddo + enddo + enddo + enddo + enddo + + do l=1,nBas + do k=1,nBas + do j=1,nBas + do i=1,nBas + ERI_MO_basis(i,j,k,l) = 0d0 + do nu=1,nBas + ERI_MO_basis(i,j,k,l) = ERI_MO_basis(i,j,k,l) + c(nu,j)*scr(i,nu,k,l) + enddo + enddo + enddo + enddo + enddo + +end subroutine AOtoMO_integral_transform diff --git a/src/MCQC/AOtoMO_oooa.f90 b/src/MCQC/AOtoMO_oooa.f90 new file mode 100644 index 0000000..fc474e0 --- /dev/null +++ b/src/MCQC/AOtoMO_oooa.f90 @@ -0,0 +1,85 @@ +subroutine AOtoMO_oooa(nBas,nO,nA,cO,cA,O,ooOoa) + +! AO to MO transformation of two-electron integrals for the block oooa +! Semi-direct O(N^5) algorithm + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nO,nA + double precision,intent(in) :: cO(nBas,nO),cA(nBas,nA),O(nBas,nBas,nBas,nBas) + +! Local variables + + double precision,allocatable :: scr1(:,:,:,:),scr2(:,:,:,:) + integer :: mu,nu,la,si,i,j,k,x + +! Output variables + + double precision,intent(out) :: ooOoa(nO,nO,nO,nA) + +! Memory allocation + allocate(scr1(nBas,nBas,nBas,nBas),scr2(nBas,nBas,nBas,nBas)) + + write(*,*) + write(*,'(A42)') '----------------------------------------' + write(*,'(A42)') ' AO to MO transformation for oooa block ' + write(*,'(A42)') '----------------------------------------' + write(*,*) + + scr1 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + do x=1,nA + scr1(mu,nu,la,x) = scr1(mu,nu,la,x) + O(mu,nu,la,si)*cA(si,x) + enddo + enddo + enddo + enddo + enddo + + scr2 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do i=1,nO + do x=1,nA + scr2(i,nu,la,x) = scr2(i,nu,la,x) + cO(mu,i)*scr1(mu,nu,la,x) + enddo + enddo + enddo + enddo + enddo + + scr1 = 0d0 + do nu=1,nBas + do la=1,nBas + do i=1,nO + do k=1,nO + do x=1,nA + scr1(i,nu,k,x) = scr1(i,nu,k,x) + scr2(i,nu,la,x)*cO(la,k) + enddo + enddo + enddo + enddo + enddo + + ooOoa = 0d0 + do nu=1,nBas + do i=1,nO + do j=1,nO + do k=1,nO + do x=1,nA + ooOoa(i,j,k,x) = ooOoa(i,j,k,x) + cO(nu,j)*scr1(i,nu,k,x) + enddo + enddo + enddo + enddo + enddo + + deallocate(scr1,scr2) + +end subroutine AOtoMO_oooa diff --git a/src/MCQC/AOtoMO_oooo.f90 b/src/MCQC/AOtoMO_oooo.f90 new file mode 100644 index 0000000..d9ebe47 --- /dev/null +++ b/src/MCQC/AOtoMO_oooo.f90 @@ -0,0 +1,85 @@ +subroutine AOtoMO_oooo(nBas,nO,cO,O,ooOoo) + +! AO to MO transformation of two-electron integrals for the block oooo +! Semi-direct O(N^5) algorithm + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: cO(nBas,nO),O(nBas,nBas,nBas,nBas) + +! Local variables + + double precision,allocatable :: scr1(:,:,:,:),scr2(:,:,:,:) + integer :: mu,nu,la,si,i,j,k,l + +! Output variables + + double precision,intent(out) :: ooOoo(nO,nO,nO,nO) + +! Memory allocation + allocate(scr1(nBas,nBas,nBas,nBas),scr2(nBas,nBas,nBas,nBas)) + + write(*,*) + write(*,'(A42)') '----------------------------------------' + write(*,'(A42)') ' AO to MO transformation for oooo block ' + write(*,'(A42)') '----------------------------------------' + write(*,*) + + scr1 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + do l=1,nO + scr1(mu,nu,la,l) = scr1(mu,nu,la,l) + O(mu,nu,la,si)*cO(si,l) + enddo + enddo + enddo + enddo + enddo + + scr2 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do i=1,nO + do l=1,nO + scr2(i,nu,la,l) = scr2(i,nu,la,l) + cO(mu,i)*scr1(mu,nu,la,l) + enddo + enddo + enddo + enddo + enddo + + scr1 = 0d0 + do nu=1,nBas + do la=1,nBas + do i=1,nO + do k=1,nO + do l=1,nO + scr1(i,nu,k,l) = scr1(i,nu,k,l) + scr2(i,nu,la,l)*cO(la,k) + enddo + enddo + enddo + enddo + enddo + + ooOoo = 0d0 + do nu=1,nBas + do i=1,nO + do j=1,nO + do k=1,nO + do l=1,nO + ooOoo(i,j,k,l) = ooOoo(i,j,k,l) + cO(nu,j)*scr1(i,nu,k,l) + enddo + enddo + enddo + enddo + enddo + + deallocate(scr1,scr2) + +end subroutine AOtoMO_oooo diff --git a/src/MCQC/AOtoMO_oovv.f90 b/src/MCQC/AOtoMO_oovv.f90 new file mode 100644 index 0000000..05365c1 --- /dev/null +++ b/src/MCQC/AOtoMO_oovv.f90 @@ -0,0 +1,77 @@ +subroutine AOtoMO_oovv(nBas,nO,nV,cO,cV,O,ooOvv) + +! AO to MO transformation of two-electron integrals for the block oovv +! Semi-direct O(N^5) algorithm + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nO,nV + double precision,intent(in) :: cO(nBas,nO),cV(nBas,nV),O(nBas,nBas,nBas,nBas) + +! Local variables + + double precision,allocatable :: scr1(:,:,:,:),scr2(:,:,:,:) + integer :: mu,nu,la,si,i,j,a,b + +! Output variables + + double precision,intent(out) :: ooOvv(nO,nO,nV,nV) + +! Memory allocation + allocate(scr1(nBas,nBas,nBas,nBas),scr2(nBas,nBas,nBas,nBas)) + + scr1 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + do b=1,nV + scr1(mu,nu,la,b) = scr1(mu,nu,la,b) + O(mu,nu,la,si)*cV(si,b) + enddo + enddo + enddo + enddo + enddo + + scr2 = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do i=1,nO + do b=1,nV + scr2(i,nu,la,b) = scr2(i,nu,la,b) + cO(mu,i)*scr1(mu,nu,la,b) + enddo + enddo + enddo + enddo + enddo + + scr1 = 0d0 + do nu=1,nBas + do la=1,nBas + do i=1,nO + do a=1,nV + do b=1,nV + scr1(i,nu,a,b) = scr1(i,nu,a,b) + scr2(i,nu,la,b)*cV(la,a) + enddo + enddo + enddo + enddo + enddo + + ooOvv = 0d0 + do nu=1,nBas + do i=1,nO + do j=1,nO + do a=1,nV + do b=1,nV + ooOvv(i,j,a,b) = ooOvv(i,j,a,b) + cO(nu,j)*scr1(i,nu,a,b) + enddo + enddo + enddo + enddo + enddo + +end subroutine AOtoMO_oovv diff --git a/src/MCQC/AOtoMO_transform.f90 b/src/MCQC/AOtoMO_transform.f90 new file mode 100644 index 0000000..7919084 --- /dev/null +++ b/src/MCQC/AOtoMO_transform.f90 @@ -0,0 +1,18 @@ +subroutine AOtoMO_transform(nBas,c,A) + +! Perform AO to MO transformation of a matrix A for given coefficients c + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: c(nBas,nBas) + +! Output variables + + double precision,intent(inout):: A(nBas,nBas) + + A = matmul(transpose(c),matmul(A,c)) + +end subroutine AOtoMO_transform diff --git a/src/MCQC/Bethe_Salpeter_A_matrix.f90 b/src/MCQC/Bethe_Salpeter_A_matrix.f90 new file mode 100644 index 0000000..26f02d7 --- /dev/null +++ b/src/MCQC/Bethe_Salpeter_A_matrix.f90 @@ -0,0 +1,44 @@ +subroutine Bethe_Salpeter_A_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,A_lr) + +! Compute the extra term for Bethe-Salpeter equation for linear response + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + double precision,intent(in) :: Omega(nS),rho(nBas,nBas,nS) + +! Local variables + + double precision :: chi + integer :: i,j,a,b,ia,jb,kc + +! Output variables + + double precision,intent(out) :: A_lr(nS,nS) + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + chi = 0d0 + do kc=1,nS + chi = chi + rho(i,j,kc)*rho(a,b,kc)/Omega(kc) + enddo + + A_lr(ia,jb) = A_lr(ia,jb) - ERI(i,a,j,b) + 4d0*chi + + enddo + enddo + enddo + enddo + +end subroutine Bethe_Salpeter_A_matrix diff --git a/src/MCQC/Bethe_Salpeter_B_matrix.f90 b/src/MCQC/Bethe_Salpeter_B_matrix.f90 new file mode 100644 index 0000000..903e974 --- /dev/null +++ b/src/MCQC/Bethe_Salpeter_B_matrix.f90 @@ -0,0 +1,44 @@ +subroutine Bethe_Salpeter_B_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,B_lr) + +! Compute the extra term for Bethe-Salpeter equation for linear response + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + double precision,intent(in) :: Omega(nS),rho(nBas,nBas,nS) + +! Local variables + + double precision :: chi + integer :: i,j,a,b,ia,jb,kc + +! Output variables + + double precision,intent(out) :: B_lr(nS,nS) + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + chi = 0d0 + do kc=1,nS + chi = chi + rho(i,b,kc)*rho(a,j,kc)/Omega(kc) + enddo + + B_lr(ia,jb) = B_lr(ia,jb) - ERI(i,a,b,j) + 4d0*chi + + enddo + enddo + enddo + enddo + +end subroutine Bethe_Salpeter_B_matrix diff --git a/src/MCQC/CIS.f90 b/src/MCQC/CIS.f90 new file mode 100644 index 0000000..66142f5 --- /dev/null +++ b/src/MCQC/CIS.f90 @@ -0,0 +1,85 @@ +subroutine CIS(singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ERI,eHF) + +! Perform configuration interaction single calculation` + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),eHF(nBas) + +! Local variables + + logical :: dRPA + logical :: dump_matrix = .false. + logical :: dump_trans = .false. + integer :: ispin + double precision,allocatable :: A(:,:),Omega(:) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Configuration Interaction Singles |' + write(*,*)'************************************************' + write(*,*) + +! Switch on exchange for CIS + + dRPA = .false. + +! Memory allocation + + allocate(A(nS,nS),Omega(nS)) + +! Compute CIS matrix + + if(singlet_manifold) then + + ispin = 1 + call linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,eHF,ERI,A) + + if(dump_matrix) then + print*,'CIS matrix (singlet state)' + call matout(nS,nS,A) + write(*,*) + endif + + call diagonalize_matrix(nS,A,Omega) + call print_excitation('CIS ',ispin,nS,Omega) + + if(dump_trans) then + print*,'Singlet CIS transition vectors' + call matout(nS,nS,A) + write(*,*) + endif + + endif + + if(triplet_manifold) then + + ispin = 2 + call linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,eHF,ERI,A) + + if(dump_matrix) then + print*,'CIS matrix (triplet state)' + call matout(nS,nS,A) + write(*,*) + endif + + call diagonalize_matrix(nS,A,Omega) + call print_excitation('CIS ',ispin,nS,Omega) + + if(dump_trans) then + print*,'Triplet CIS transition vectors' + call matout(nS,nS,A) + write(*,*) + endif + + endif + +end subroutine CIS diff --git a/src/MCQC/Coulomb_matrix_AO_basis.f90 b/src/MCQC/Coulomb_matrix_AO_basis.f90 new file mode 100644 index 0000000..eaf6a3e --- /dev/null +++ b/src/MCQC/Coulomb_matrix_AO_basis.f90 @@ -0,0 +1,34 @@ +subroutine Coulomb_matrix_AO_basis(nBas,P,G,J) + +! Compute Coulomb matrix in the AO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: G(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(out) :: J(nBas,nBas) + + J = 0d0 + do si=1,nBas + do nu=1,nBas + do la=1,nBas + do mu=1,nBas + J(mu,nu) = J(mu,nu) + P(la,si)*G(mu,la,nu,si) + enddo + enddo + enddo + enddo + + +end subroutine Coulomb_matrix_AO_basis diff --git a/src/MCQC/Coulomb_matrix_MO_basis.f90 b/src/MCQC/Coulomb_matrix_MO_basis.f90 new file mode 100644 index 0000000..1fea11e --- /dev/null +++ b/src/MCQC/Coulomb_matrix_MO_basis.f90 @@ -0,0 +1,26 @@ +subroutine Coulomb_matrix_MO_basis(nBas,c,P,G,J) + +! Compute Coulomb matrix in the MO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: c(nBas,nBas),P(nBas,nBas) + double precision,intent(in) :: G(nBas,nBas,nBas,nBas) + +! Output variables + + double precision,intent(out) :: J(nBas,nBas) + +! Compute Hartree Hamiltonian in the AO basis + + call Coulomb_matrix_AO_basis(nBas,P,G,J) + +! Transform Coulomb matrix in the MO basis + + J = matmul(transpose(c),matmul(J,c)) + +end subroutine Coulomb_matrix_MO_basis diff --git a/src/MCQC/DIIS_extrapolation.f90 b/src/MCQC/DIIS_extrapolation.f90 new file mode 100644 index 0000000..4fb89dc --- /dev/null +++ b/src/MCQC/DIIS_extrapolation.f90 @@ -0,0 +1,61 @@ +subroutine DIIS_extrapolation(n_err,n_e,n_diis,error,e,error_in,e_inout) + +! Perform DIIS extrapolation + + implicit none + + include 'parameters.h' + +! Input variables + + integer,intent(in) :: n_err,n_e + double precision,intent(in) :: error_in(n_err),error(n_err,n_diis),e(n_e,n_diis) + +! Local variables + + double precision :: rcond + double precision,allocatable :: A(:,:),b(:),w(:) + +! Output variables + + integer,intent(inout) :: n_diis + double precision,intent(inout):: e_inout(n_e) + +! Memory allocaiton + + allocate(A(n_diis+1,n_diis+1),b(n_diis+1),w(n_diis+1)) + +! Update DIIS "history" + + call prepend(n_err,n_diis,error,error_in) + call prepend(n_e,n_diis,e,e_inout) + +! Build A matrix + + A(1:n_diis,1:n_diis) = matmul(transpose(error),error) + + A(1:n_diis,n_diis+1) = -1d0 + A(n_diis+1,1:n_diis) = -1d0 + A(n_diis+1,n_diis+1) = +0d0 + +! Build x matrix + + b(1:n_diis) = +0d0 + b(n_diis+1) = -1d0 + +! Solve linear system + + call linear_solve(n_diis+1,A,b,w,rcond) + +! Extrapolate + + if(rcond > 1d-14) then + + e_inout(:) = matmul(w(1:n_diis),transpose(e(:,1:n_diis))) + + else + + n_diis = 0 + + endif +end subroutine DIIS_extrapolation diff --git a/src/MCQC/G0W0.f90 b/src/MCQC/G0W0.f90 new file mode 100644 index 0000000..47f7db5 --- /dev/null +++ b/src/MCQC/G0W0.f90 @@ -0,0 +1,132 @@ +subroutine G0W0(COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,P,ERI_AO_basis,ERI_MO_basis,cHF,eHF,eG0W0) + +! Perform G0W0 calculation + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ENuc,ERHF + double precision,intent(in) :: cHF(nBas,nBas),eHF(nBas),Hc(nBas,nBas),P(nBas,nBas) + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas),ERI_MO_basis(nBas,nBas,nBas,nBas) + +! Local variables + + logical :: dRPA + integer :: ispin + double precision :: EcRPA + double precision,allocatable :: H(:,:),SigmaC(:),Z(:) + double precision,allocatable :: Omega(:,:),XpY(:,:,:),rho(:,:,:,:),rhox(:,:,:,:) + +! Output variables + + double precision :: eG0W0(nBas) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| One-shot G0W0 calculation |' + write(*,*)'************************************************' + write(*,*) + +! SOSEX correction + + if(SOSEX) write(*,*) 'SOSEX correction activated!' + write(*,*) + +! Switch off exchange for G0W0 + + dRPA = .true. + +! Spin manifold + + ispin = 1 + +! Memory allocation + + allocate(H(nBas,nBas),SigmaC(nBas),Z(nBas), & + Omega(nS,nspin),XpY(nS,nS,nspin), & + rho(nBas,nBas,nS,nspin),rhox(nBas,nBas,nS,nspin)) + +! Compute Hartree Hamiltonian in the MO basis + + call Hartree_matrix_MO_basis(nBas,cHF,P,Hc,ERI_AO_basis,H) + +! Compute linear response + + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,eHF,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + +! Compute correlation part of the self-energy + + call excitation_density(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + if(SOSEX) call excitation_density_SOSEX(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rhox(:,:,:,ispin)) + + call self_energy_correlation_diag(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,eHF, & + Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),SigmaC) + +! COHSEX static approximation + + if(COHSEX) then + + Z(:) = 1d0 + + else + + call renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,eHF,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),Z) + + endif + +! Solve the quasi-particle equation + + eG0W0(:) = eHF(:) + Z(:)*SigmaC(:) + +! Dump results + + call print_excitation('RPA ',ispin,nS,Omega(:,ispin)) + call print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigmaC,Z,eG0W0,EcRPA) + +! Plot stuff + + call plot_GW(nBas,nC,nO,nV,nR,nS,eHF,eG0W0,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin)) + +! Perform BSE calculation + + if(BSE) then + + ! Singlet manifold + + if(singlet_manifold) then + + ispin = 1 + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,eG0W0,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + ! Triplet manifold + + if(triplet_manifold) then + + ispin = 2 + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,eHF,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call excitation_density(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,eG0W0,ERI_MO_basis, & + rho(:,:,:,1),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + endif + + +end subroutine G0W0 diff --git a/src/MCQC/GF2.f90 b/src/MCQC/GF2.f90 new file mode 100644 index 0000000..6eab83c --- /dev/null +++ b/src/MCQC/GF2.f90 @@ -0,0 +1,131 @@ +subroutine GF2(maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,V,e0) + +! Perform second-order Green function calculation in diagonal approximation + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF + double precision,intent(in) :: thresh + integer,intent(in) :: max_diis + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: e0(nBas),V(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: nSCF,n_diis + double precision :: eps,Conv + double precision,allocatable :: eGF2(:),eOld(:),Bpp(:,:,:),error_diis(:,:),e_diis(:,:) + + integer :: i,j,a,b,p,q + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Second-order Green function calculation |' + write(*,*)'************************************************' + write(*,*) + +! Memory allocation + + allocate(Bpp(nBas,nBas,2),eGF2(nBas),eOld(nBas), & + error_diis(nBas,max_diis),e_diis(nBas,max_diis)) + +! Initialization + + Conv = 1d0 + nSCF = 0 + n_diis = 0 + e_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + eGF2(:) = e0(:) + eOld(:) = e0(:) + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF < maxSCF) + + ! Frequency-dependent second-order contribution + + Bpp(:,:,:) = 0d0 + + do p=nC+1,nBas-nR + do q=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + + eps = eGF2(p) + e0(a) - e0(i) - e0(j) + + Bpp(p,q,1) = Bpp(p,q,1) & + + (2d0*V(p,a,i,j) - V(p,a,j,i))*V(q,a,i,j)/eps + + enddo + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do q=nC+1,nBas-nR + do i=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps = eGF2(p) + e0(i) - e0(a) - e0(b) + + Bpp(p,q,2) = Bpp(p,q,2) & + + (2d0*V(p,i,a,b) - V(p,i,b,a))*V(q,i,a,b)/eps + + enddo + enddo + enddo + enddo + enddo + + print*,'Sig2 in GF2' + call matout(nBas,nBas,Bpp(:,:,1) + Bpp(:,:,2)) + +! eGF2(:) = e0(:) & +! + Bpp(:,1) + Bpp(:,2) + + Conv = maxval(abs(eGF2 - eOld)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBas,nBas,n_diis,error_diis,e_diis,eGF2-eOld,eGF2) + + eOld = eGF2 + + ! Print results + + call print_GF2(nBas,nO,nSCF,Conv,e0,eGF2) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + endif + +end subroutine GF2 diff --git a/src/MCQC/GF2_diag.f90 b/src/MCQC/GF2_diag.f90 new file mode 100644 index 0000000..219a38c --- /dev/null +++ b/src/MCQC/GF2_diag.f90 @@ -0,0 +1,124 @@ +subroutine GF2_diag(maxSCF,thresh,max_diis,nBas,nC,nO,nV,nR,V,e0) + +! Perform second-order Green function calculation in diagonal approximation + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF + double precision,intent(in) :: thresh + integer,intent(in) :: max_diis + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: e0(nBas),V(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: nSCF,n_diis + double precision :: eps,Conv + double precision,allocatable :: eGF2(:),eOld(:),Bpp(:,:),error_diis(:,:),e_diis(:,:) + + integer :: i,j,a,b,p + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Second-order Green function calculation |' + write(*,*)'************************************************' + write(*,*) + +! Memory allocation + + allocate(Bpp(nBas,2),eGF2(nBas),eOld(nBas), & + error_diis(nBas,max_diis),e_diis(nBas,max_diis)) + +! Initialization + + Conv = 1d0 + nSCF = 0 + n_diis = 0 + e_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + eGF2(:) = e0(:) + eOld(:) = e0(:) + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF < maxSCF) + + ! Frequency-dependent second-order contribution + + Bpp(:,:) = 0d0 + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + + eps = eGF2(p) + e0(a) - e0(i) - e0(j) + + Bpp(p,1) = Bpp(p,1) & + + (2d0*V(p,a,i,j) - V(p,a,j,i))*V(p,a,i,j)/eps + + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps = eGF2(p) + e0(i) - e0(a) - e0(b) + + Bpp(p,2) = Bpp(p,2) & + + (2d0*V(p,i,a,b) - V(p,i,b,a))*V(p,i,a,b)/eps + + enddo + enddo + enddo + enddo + + eGF2(:) = e0(:) & + + Bpp(:,1) + Bpp(:,2) + + Conv = maxval(abs(eGF2 - eOld)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBas,nBas,n_diis,error_diis,e_diis,eGF2-eOld,eGF2) + + eOld = eGF2 + + ! Print results + + call print_GF2(nBas,nO,nSCF,Conv,e0,eGF2) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + endif + +end subroutine GF2_diag diff --git a/src/MCQC/GF3_diag.f90 b/src/MCQC/GF3_diag.f90 new file mode 100644 index 0000000..b6fbfd6 --- /dev/null +++ b/src/MCQC/GF3_diag.f90 @@ -0,0 +1,488 @@ + subroutine GF3_diag(maxSCF,thresh,max_diis,renormalization,nBas,nC,nO,nV,nR,V,e0) + +! Perform third-order Green function calculation in diagonal approximation + + implicit none + include 'parameters.h' + +! Input variables + + double precision,intent(in) :: thresh + integer,intent(in) :: maxSCF,max_diis,renormalization + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: e0(nBas),V(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: nSCF,n_diis + double precision :: eps,eps1,eps2,Conv + double precision,allocatable :: Sig2(:),SigInf(:),Sig3(:),eGF3(:),eOld(:) + double precision,allocatable :: App(:,:),Bpp(:,:),Cpp(:,:),Dpp(:,:) + double precision,allocatable :: Z(:),X2h1p(:),X1h2p(:),Sig2h1p(:),Sig1h2p(:) + double precision,allocatable :: error_diis(:,:),e_diis(:,:) + + integer :: i,j,k,l,a,b,c,d,p + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Third-order Green function calculation |' + write(*,*)'************************************************' + write(*,*) + +! Memory allocation + + allocate(eGF3(nBas),eOld(nBas), & + Sig2(nBas),SigInf(nBas),Sig3(nBas), & + App(nBas,6),Bpp(nBas,2),Cpp(nBas,6),Dpp(nBas,6), & + Z(nBas),X2h1p(nBas),X1h2p(nBas),Sig2h1p(nBas),Sig1h2p(nBas), & + error_diis(nBas,max_diis),e_diis(nBas,max_diis)) + +!------------------------------------------------------------------------ +! Compute third-order frequency-independent contribution +!------------------------------------------------------------------------ + + App(:,:) = 0d0 + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = e0(j) + e0(i) - e0(a) - e0(b) + eps2 = e0(k) + e0(i) - e0(a) - e0(b) + + App(p,1) = App(p,1) & + - (2d0*V(p,k,p,j) - V(p,k,j,p))*(2d0*V(j,i,a,b) - V(j,i,b,a))*V(a,b,k,i)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = e0(j) + e0(i) - e0(a) - e0(b) + eps2 = e0(j) + e0(i) - e0(a) - e0(c) + + App(p,2) = App(p,2) & + + (2d0*V(p,c,p,b) - V(p,c,b,p))*(2d0*V(j,i,a,b) - V(j,i,b,a))*V(j,i,c,a)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = e0(j) + e0(i) - e0(a) - e0(b) + eps2 = e0(j) - e0(c) + + App(p,3) = App(p,3) & + + (2d0*V(p,c,p,j) - V(p,c,j,p))*(2d0*V(j,i,a,b) - V(j,i,b,a))*V(a,b,c,i)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + App(:,4) = App(:,3) + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = e0(j) + e0(i) - e0(a) - e0(b) + eps2 = e0(k) - e0(b) + + App(p,5) = App(p,5) & + - (2d0*V(p,b,p,k) - V(p,b,k,p))*(2d0*V(j,i,a,b) - V(j,i,b,a))*V(i,j,k,a)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + App(:,6) = App(:,5) + +! Frequency-independent part of the third-order self-energy + + SigInf(:) = App(:,1) + App(:,2) + App(:,3) + App(:,4) + App(:,5) + App(:,6) + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + + nSCF = 0 + n_diis = 0 + Conv = 1d0 + Sig2(:) = 0d0 + Sig3(:) = 0d0 + e_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + eGF3(:) = e0(:) + eOld(:) = e0(:) + + do while(Conv > thresh .and. nSCF < maxSCF) + + ! Frequency-dependent second-order contribution + + Bpp(:,:) = 0d0 + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + + eps = eGF3(p) + e0(a) - e0(i) - e0(j) + + Bpp(p,1) = Bpp(p,1) & + + (2d0*V(p,a,i,j) - V(p,a,j,i))*V(p,a,i,j)/eps + + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps = eGF3(p) + e0(i) - e0(a) - e0(b) + + Bpp(p,2) = Bpp(p,2) & + + (2d0*V(p,i,a,b) - V(p,i,b,a))*V(p,i,a,b)/eps + + enddo + enddo + enddo + enddo + + ! Total second-order Green function + + Sig2(:) = Bpp(:,1) + Bpp(:,2) + + ! Frequency-dependent third-order contribution: "C" terms + + Cpp(:,:) = 0d0 + + do p=nC+1,nBas-nR + do i=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + do d=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(i) - e0(a) - e0(b) + eps2 = eGF3(p) + e0(i) - e0(c) - e0(d) + + Cpp(p,1) = Cpp(p,1) & + + (2d0*V(p,i,a,b) - V(p,i,b,a))*V(a,b,c,d)*V(p,i,c,d)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(i) - e0(a) - e0(b) + eps2 = e0(j) + e0(k) - e0(a) - e0(b) + + Cpp(p,2) = Cpp(p,2) & + + (2d0*V(p,i,a,b) - V(p,i,b,a))*V(a,b,j,k)*V(p,i,j,k)/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + Cpp(:,3) = Cpp(:,2) + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(a) - e0(i) - e0(j) + eps2 = e0(i) + e0(j) - e0(b) - e0(c) + + Cpp(p,4) = Cpp(p,4) & + + (2d0*V(p,a,i,j) - V(p,a,j,i))*V(i,j,b,c)*V(p,a,b,c)/(eps1*eps2) + enddo + enddo + enddo + enddo + enddo + enddo + + Cpp(:,5) = Cpp(:,4) + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do l=nC+1,nO + do a=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(a) - e0(i) - e0(j) + eps2 = eGF3(p) + e0(a) - e0(k) - e0(l) + + Cpp(p,6) = Cpp(p,6) & + - (2d0*V(p,a,k,l) - V(p,a,l,k))*V(k,l,i,j)*V(p,a,i,j)/(eps1*eps2) + enddo + enddo + enddo + enddo + enddo + enddo + + ! Frequency-dependent third-order contribution: "D" terms + + Dpp(:,:) = 0d0 + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(i) - e0(a) - e0(b) + eps2 = eGF3(p) + e0(j) - e0(b) - e0(c) + + Dpp(p,1) = Dpp(p,1) & + + V(p,i,a,b)*(V(a,j,i,c)*( V(p,j,c,b) - 2d0*V(p,j,b,c)) & + + V(a,j,c,i)*( V(p,j,b,c) - 2d0*V(p,j,c,b)))/(eps1*eps2) + + Dpp(p,1) = Dpp(p,1) & + + V(p,i,b,a)*(V(a,j,i,c)*(4d0*V(p,j,b,c) - 2d0*V(p,j,c,b)) & + + V(a,j,c,i)*( V(p,j,c,b) - 2d0*V(p,j,b,c)))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(i) - e0(a) - e0(c) + eps2 = e0(i) + e0(j) - e0(a) - e0(b) + + Dpp(p,2) = Dpp(p,2) & + + V(p,i,c,a)*(V(a,b,i,j)*(4d0*V(p,b,c,j) - 2d0*V(p,b,j,c)) & + + V(a,b,j,i)*( V(p,b,j,c) - 2d0*V(p,b,c,j)))/(eps1*eps2) + + Dpp(p,2) = Dpp(p,2) & + + V(p,i,a,c)*(V(a,b,i,j)*( V(p,b,j,c) - 2d0*V(p,b,c,j)) & + + V(a,b,j,i)*( V(p,b,c,j) - 2d0*V(p,b,j,c)))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + Dpp(:,3) = Dpp(:,2) + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(a) - e0(j) - e0(k) + eps2 = e0(i) + e0(j) - e0(a) - e0(b) + + Dpp(p,4) = Dpp(p,4) & + + V(p,a,k,j)*(V(j,i,a,b)*(4d0*V(p,i,k,b) - 2d0*V(p,i,b,k)) & + + V(j,i,b,a)*( V(p,i,b,k) - 2d0*V(p,i,k,b)))/(eps1*eps2) + + Dpp(p,4) = Dpp(p,4) & + + V(p,a,j,k)*(V(j,i,a,b)*( V(p,i,b,k) - 2d0*V(p,i,k,b)) & + + V(j,i,b,a)*( V(p,i,k,b) - 2d0*V(p,i,b,k)))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + Dpp(:,5) = Dpp(:,4) + + do p=nC+1,nBas-nR + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = eGF3(p) + e0(a) - e0(i) - e0(k) + eps2 = eGF3(p) + e0(b) - e0(j) - e0(k) + + Dpp(p,6) = Dpp(p,6) & + - V(p,a,k,i)*(V(i,b,a,j)*(4d0*V(p,b,k,j) - 2d0*V(p,b,j,k)) & + + V(i,b,j,a)*( V(p,b,j,k) - 2d0*V(p,b,k,j)))/(eps1*eps2) + + Dpp(p,6) = Dpp(p,6) & + - V(p,a,i,k)*(V(i,b,a,j)*( V(p,b,j,k) - 2d0*V(p,b,k,j)) & + + V(i,b,j,a)*( V(p,b,k,j) - 2d0*V(p,b,j,k)))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + +! Compute renormalization factor (if required) + + Z(:) = 1d0 + + if(renormalization == 0) then + + Sig3(:) = SigInf(:) & + + Cpp(:,1) + Cpp(:,2) + Cpp(:,3) + Cpp(:,4) + Cpp(:,5) + Cpp(:,6) & + + Dpp(:,1) + Dpp(:,2) + Dpp(:,3) + Dpp(:,4) + Dpp(:,5) + Dpp(:,6) + + elseif(renormalization == 1) then + + Sig3(:) = SigInf(:) & + + Cpp(:,1) + Cpp(:,2) + Cpp(:,3) + Cpp(:,4) + Cpp(:,5) + Cpp(:,6) & + + Dpp(:,1) + Dpp(:,2) + Dpp(:,3) + Dpp(:,4) + Dpp(:,5) + Dpp(:,6) + + Z(:) = Cpp(:,2) + Cpp(:,3) + Cpp(:,4) + Cpp(:,5) & + + Dpp(:,2) + Dpp(:,3) + Dpp(:,4) + Dpp(:,5) + + Z(nC+1:nBas-nR) = Z(nC+1:nBas-nR)/Sig2(nC+1:nBas-nR) + Z(:) = 1d0/(1d0 - Z(:)) + + Sig3(:) = Z(:)*Sig3(:) + + elseif(renormalization == 2) then + + Sig2h1p(:) = Cpp(:,4) + Cpp(:,5) + Cpp(:,6) + Dpp(:,4) + Dpp(:,5) + Dpp(:,6) + Sig1h2p(:) = Cpp(:,1) + Cpp(:,2) + Cpp(:,3) + Dpp(:,1) + Dpp(:,2) + Dpp(:,3) + + X2h1p(:) = Cpp(:,4) + Cpp(:,5) + Dpp(:,4) + Dpp(:,5) + X1h2p(:) = Cpp(:,2) + Cpp(:,3) + Dpp(:,2) + Dpp(:,3) + + X2h1p(nC+1:nBas-nR) = X2h1p(nC+1:nBas-nR)/Bpp(nC+1:nBas-nR,1) + X1h2p(nC+1:nBas-nR) = X1h2p(nC+1:nBas-nR)/Bpp(nC+1:nBas-nR,2) + + Sig3(:) = SigInf(:) + & + + 1d0/(1d0 - X2h1p(:))*Sig2h1p(:) & + + 1d0/(1d0 - X1h2p(:))*Sig1h2p(:) + + elseif(renormalization == 3) then + + Sig3(:) = SigInf(:) & + + Cpp(:,1) + Cpp(:,2) + Cpp(:,3) + Cpp(:,4) + Cpp(:,5) + Cpp(:,6) & + + Dpp(:,1) + Dpp(:,2) + Dpp(:,3) + Dpp(:,4) + Dpp(:,5) + Dpp(:,6) + + Sig2h1p(:) = Cpp(:,4) + Cpp(:,5) + Cpp(:,6) + Dpp(:,4) + Dpp(:,5) + Dpp(:,6) + Sig1h2p(:) = Cpp(:,1) + Cpp(:,2) + Cpp(:,3) + Dpp(:,1) + Dpp(:,2) + Dpp(:,3) + + X2h1p(:) = Cpp(:,4) + Cpp(:,5) + Dpp(:,4) + Dpp(:,5) + X1h2p(:) = Cpp(:,2) + Cpp(:,3) + Dpp(:,2) + Dpp(:,3) + + X2h1p(nC+1:nBas-nR) = X2h1p(nC+1:nBas-nR)/Bpp(nC+1:nBas-nR,1) + X1h2p(nC+1:nBas-nR) = X1h2p(nC+1:nBas-nR)/Bpp(nC+1:nBas-nR,2) + + Z(:) = X2h1p(:)*Sig2h1p(:) + X1h2p(:)*Sig1h2p(:) + Z(nC+1:nBas-nR) = Z(nC+1:nBas-nR)/(Sig3(nC+1:nBas-nR) - SigInf(nC+1:nBas-nR)) + Z(:) = 1d0/(1d0 - Z(:)) + + Sig3(:) = Z(:)*Sig3(:) + + endif + + ! Total third-order Green function + + eGF3(:) = e0(:) + Sig2(:) + Sig3(:) + + ! Convergence criteria + + Conv = maxval(abs(eGF3 - eOld)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBas,nBas,n_diis,error_diis,e_diis,eGF3-eOld,eGF3) + + ! Store result for next iteration + + eOld(:) = eGF3(:) + + ! Print results + + call print_GF3(nBas,nO,nSCF,Conv,e0,Z,eGF3) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + endif + +end subroutine GF3_diag diff --git a/src/MCQC/Green_function.f90 b/src/MCQC/Green_function.f90 new file mode 100644 index 0000000..9feb5a3 --- /dev/null +++ b/src/MCQC/Green_function.f90 @@ -0,0 +1,65 @@ +subroutine Green_function(nBas,nO,nV,nWalk,nWP,cO,cV,eO_Quad,eV_Quad,AO, & + o1MO,o2MO,v1MO,v2MO,o11,o12,o21,o22,v11,v12,v21,v22) + +! Calculate the Green functions + + implicit none + + include 'parameters.h' + include 'quadrature.h' + +! Input variables + + integer,intent(in) :: nBas,nO,nV,nWalk,nWP + double precision,intent(in) :: AO(nWalk,2,nBas),cO(nBas,nO),cV(nBas,nV), & + eO_Quad(nQuad,nO),eV_Quad(nQuad,nV) + +! Local variables + + integer :: kW,lW,klW,i,a,q + double precision :: o1MO(nWalk,nO),o2MO(nWalk,nO),v1MO(nWalk,nV),v2MO(nWalk,nV) + +! Output variables + + double precision,intent(out) :: o11(nQuad,nWP),o12(nQuad,nWP),o21(nQuad,nWP),o22(nQuad,nWP) + double precision,intent(out) :: v11(nQuad,nWP),v12(nQuad,nWP),v21(nQuad,nWP),v22(nQuad,nWP) + +! Calculate occupied and virtual MOs + + o1MO = matmul(AO(:,1,:),cO) + o2MO = matmul(AO(:,2,:),cO) + v1MO = matmul(AO(:,1,:),cV) + v2MO = matmul(AO(:,2,:),cV) + +! Compute occupied Green functions + o11 = 0d0 + o12 = 0d0 + o21 = 0d0 + o22 = 0d0 + v11 = 0d0 + v12 = 0d0 + v21 = 0d0 + v22 = 0d0 + + do q=1,nQuad + klW = 0 + do kW=1,nWalk-1 + do lW=kW+1,nWalk + klW = klW + 1 + do i=1,nO + o11(q,klW) = o11(q,klW) + o1MO(kW,i)*o1MO(lW,i)*eO_Quad(q,i) + o12(q,klW) = o12(q,klW) + o1MO(kW,i)*o2MO(lW,i)*eO_Quad(q,i) + o21(q,klW) = o21(q,klW) + o2MO(kW,i)*o1MO(lW,i)*eO_Quad(q,i) + o22(q,klW) = o22(q,klW) + o2MO(kW,i)*o2MO(lW,i)*eO_Quad(q,i) + enddo + do a=1,nV + v11(q,klW) = v11(q,klW) + v1MO(kW,a)*v1MO(lW,a)*eV_Quad(q,a) + v12(q,klW) = v12(q,klW) + v1MO(kW,a)*v2MO(lW,a)*eV_Quad(q,a) + v21(q,klW) = v21(q,klW) + v2MO(kW,a)*v1MO(lW,a)*eV_Quad(q,a) + v22(q,klW) = v22(q,klW) + v2MO(kW,a)*v2MO(lW,a)*eV_Quad(q,a) + enddo + enddo + enddo + enddo + +end subroutine Green_function diff --git a/src/MCQC/Hartree_matrix_AO_basis.f90 b/src/MCQC/Hartree_matrix_AO_basis.f90 new file mode 100644 index 0000000..3ee7368 --- /dev/null +++ b/src/MCQC/Hartree_matrix_AO_basis.f90 @@ -0,0 +1,33 @@ +subroutine Hartree_matrix_AO_basis(nBas,P,Hc,G,H) + +! Compute Hartree matrix in the AO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: Hc(nBas,nBas),G(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(out) :: H(nBas,nBas) + + H = Hc + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + H(mu,nu) = H(mu,nu) + P(la,si)*G(mu,la,nu,si) + enddo + enddo + enddo + enddo + +end subroutine Hartree_matrix_AO_basis diff --git a/src/MCQC/Hartree_matrix_MO_basis.f90 b/src/MCQC/Hartree_matrix_MO_basis.f90 new file mode 100644 index 0000000..6cf85bd --- /dev/null +++ b/src/MCQC/Hartree_matrix_MO_basis.f90 @@ -0,0 +1,26 @@ +subroutine Hartree_matrix_MO_basis(nBas,c,P,Hc,G,H) + +! Compute Hartree matrix in the MO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: c(nBas,nBas),P(nBas,nBas) + double precision,intent(in) :: Hc(nBas,nBas),G(nBas,nBas,nBas,nBas) + +! Output variables + + double precision,intent(out) :: H(nBas,nBas) + +! Compute Hartree matrix in the AO basis + + call Hartree_matrix_AO_basis(nBas,P,Hc,G,H) + +! Transform Hartree matrix in the MO basis + + H = matmul(transpose(c),matmul(H,c)) + +end subroutine Hartree_matrix_MO_basis diff --git a/src/MCQC/MCMP2.f90 b/src/MCQC/MCMP2.f90 new file mode 100644 index 0000000..3851d25 --- /dev/null +++ b/src/MCQC/MCMP2.f90 @@ -0,0 +1,344 @@ + subroutine MCMP2(doDrift,nBas,nC,nO,nV,c,e,EcMP2, & + nMC,nEq,nWalk,dt,nPrint, & + nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + Norm, & + EcMCMP2,Err_EcMCMP2,Var_EcMCMP2) + +! Perform Monte Carlo MP2 calculation + + implicit none + + include 'parameters.h' + include 'quadrature.h' + +! Input variables + + logical,intent(in) :: doDrift + integer,intent(in) :: nBas,nC,nO,nV,nMC,nEq,nWalk,nPrint + double precision,intent(inout):: dt + double precision,intent(in) :: EcMP2(3) + double precision,intent(in) :: c(nBas,nBas),e(nBas) + + integer,intent(in) :: nShell + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: CenterShell(maxShell,3),DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + logical :: AcPh,EqPh,Accept,dump + double precision :: start_Eq,end_Eq,t_Eq,start_Ac,end_Ac,t_Ac + integer :: nWP + double precision :: Norm,NormSq,nData,tau + double precision,allocatable :: chi1(:,:,:),chi2(:,:,:),eta(:) + + double precision,allocatable :: cO(:,:),cV(:,:),eO(:),eV(:),P(:,:),eO_Quad(:,:),eV_Quad(:,:) + double precision,allocatable :: r(:,:,:), r12(:), gAO(:,:,:), g(:,:), w(:) + double precision,allocatable :: rp(:,:,:),r12p(:),gAOp(:,:,:), gp(:,:),wp(:) + double precision,allocatable :: o1MO(:,:),o2MO(:,:),v1MO(:,:),v2MO(:,:) + double precision,allocatable :: o11(:,:),o12(:,:),o21(:,:),o22(:,:) + double precision,allocatable :: v11(:,:),v12(:,:),v21(:,:),v22(:,:) + double precision,allocatable :: fd_Quad(:,:),fx_Quad(:,:),fd(:),fx(:),fdx(:) + + double precision,allocatable :: dgAO(:,:,:,:),dg(:,:,:),dgAOp(:,:,:,:),dgp(:,:,:) + double precision,allocatable :: F(:,:,:),Fp(:,:,:),T(:),Tp(:) + + double precision :: acceptance,D + double precision :: eloc_MP2(3),mean_MP2(3),variance_MP2(3) + + integer :: iW,kW,lW,klW,iMC,q + +! Output variables + + double precision,intent(out) :: EcMCMP2(3),Err_EcMCMP2(3),Var_EcMCMP2(3) + +! Number of distinct walker pairs + + nWP = nWalk*(nWalk-1)/2 + +! Diffusion coefficient + + D = 0.5d0 + +! Do diffusion-drift moves? + + if(doDrift) then + + write(*,*) + write(*,*) '*** Diffusion-drift algorithm ***' + write(*,*) + + else + + write(*,*) + write(*,*) '*** Diffusion-only algorithm ***' + write(*,*) + + endif + +! Print results + + dump = .true. + if(dump) open(unit=13,file='results/data') + +!------------------------------------------------------------------------ +! Memory allocation +!------------------------------------------------------------------------ + allocate(cO(nBas,nO),cV(nBas,nV),eO(nO),eV(nV), & + eO_Quad(nQuad,nO),eV_Quad(nQuad,nV), & + P(nBas,nBas),r(nWalk,2,3),rp(nWalk,2,3), & + chi1(nWalk,2,3),chi2(nWalk,2,3),eta(nWalk), & + r12(nWalk),r12p(nWalk),w(nWalk),wp(nWalk), & + g(nWalk,2),gp(nWalk,2),gAO(nWalk,2,nBas),gAOp(nWalk,2,nBas), & + dg(nWalk,2,3),dgp(nWalk,2,3),dgAO(nWalk,2,3,nBas),dgAOp(nWalk,2,3,nBas), & + o1MO(nWalk,nO),v1MO(nWalk,nV),o2MO(nWalk,nO),v2MO(nWalk,nV), & + o11(nQuad,nWP),v11(nQuad,nWP),o12(nQuad,nWP),v12(nQuad,nWP), & + o21(nQuad,nWP),v21(nQuad,nWP),o22(nQuad,nWP),v22(nQuad,nWP), & + fd_Quad(nQuad,nWP),fd(nWP),fx_Quad(nQuad,nWP),fx(nWP),fdx(nWP), & + T(nWalk),Tp(nWalk),F(nWalk,2,3),Fp(nWalk,2,3)) + +! Split MOs into occupied and virtual sets + + eO(1:nO) = e(nC+1:nC+nO) + eV(1:nV) = e(nC+nO+1:nBas) + + do q=1,nQuad + tau = 1d0/rQuad(q) + eO_Quad(q,1:nO) = exp(+eO(1:nO)*(tau-1d0))*sqrt(tau) + eV_Quad(q,1:nV) = exp(-eV(1:nV)*(tau-1d0))*sqrt(tau) + enddo + + cO(1:nBas,1:nO) = c(1:nBas,nC+1:nC+nO) + cV(1:nBas,1:nV) = c(1:nBas,nC+nO+1:nBas) + +! Compute norm of the trial wave function + + call norm_trial(nBas,nO,cO,P,Norm,NormSq) + +!------------------------------------------------------------------------ +! Initialize MC-MP2 calculation +!------------------------------------------------------------------------ + +! Initialize electron coordinates + + call random_number(r) + r = 2d0*r - 1d0 + +! Compute initial interelectronic distances + + call rij(nWalk,r,r12) + +! Compute initial AO values and their derivatives (if required) + + call AO_values(doDrift,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,r,gAO,dgAO) + +! Compute initial weight function + + call density(doDrift,nBas,nWalk,P,gAO,dgAO,g,dg) + +! Compute initial weights + + w(1:nWalk) = g(1:nWalk,1)*g(1:nWalk,2)/r12(1:nWalk) + +! Compute initial quantum force + + if(doDrift) call drift(nWalk,r,r12,g,dg,F) + +! Equilibration or Accumulation? + + AcPh = .false. + EqPh = .true. + +! Initialization + + nData = 0d0 + acceptance = 0d0 + + mean_MP2 = 0d0 + variance_MP2 = 0d0 + + T = 1d0 + Tp = 1d0 + +!------------------------------------------------------------------------ +! Start main Monte Carlo loop +!------------------------------------------------------------------------ + call cpu_time(start_Eq) + + do iMC=1,nEq+nMC + +! Timings + + if(iMC == nEq + 1) then + AcPh = .true. + EqPh = .false. + write(*,*) 'Time step value at the end of equilibration: dt = ',dt + write(*,*) + call cpu_time(end_Eq) + t_Eq = end_Eq - start_Eq + write(*,*) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for equilibration = ',t_Eq,' seconds' + write(*,*) + call cpu_time(start_Ac) + endif + +! Optimize time step to reach 50% acceptance + + if(EqPh .and. mod(iMC,100) == 0) call optimize_timestep(nWalk,iMC,acceptance,dt) + +! Move electrons + + call random_number(chi1) + call random_number(chi2) + +! Diffusion + + rp(:,:,:) = r(:,:,:) + sqrt(2d0*D*dt)*sqrt(-2d0*log(chi1(:,:,:)))*cos(2d0*pi*chi2(:,:,:)) + +! Drift + + if(doDrift) rp(:,:,:) = rp(:,:,:) + D*dt*F(:,:,:) + +! Compute new interelectronic distances + + call rij(nWalk,rp,r12p) + +! Compute new AO values and their derivatives (if required) + + call AO_values(doDrift,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,rp,gAOp,dgAOp) + + call Density(doDrift,nBas,nWalk,P,gAOp,dgAOp,gp,dgp) + +! Compute new weights + + wp(1:nWalk) = gp(1:nWalk,1)*gp(1:nWalk,2)/r12p(1:nWalk) + +! Compute new quantum force and transition probability + + if(doDrift) then + + call Drift(nWalk,rp,r12p,gp,dgp,Fp) + call transition_probability(nWalk,dt,D,r,rp,F,Fp,T,Tp) + + endif + +! Move for walkers + + call random_number(eta) + + do iW=1,nWalk + + Accept = (wp(iW)*Tp(iW))/(w(iW)*T(iW)) > eta(iW) + + if(Accept) then + + acceptance = acceptance + 1d0 + + r(iW,1:2,1:3) = rp(iW,1:2,1:3) + gAO(iW,1:2,1:nBas) = gAOp(iW,1:2,1:nBas) + r12(iW) = r12p(iW) + w(iW) = wp(iW) + + if(doDrift) F(iW,1:2,1:3) = Fp(iW,1:2,1:3) + + endif + + enddo + +! Accumulation phase + + if(AcPh) then + + nData = nData + 1d0 + +! Calculate Green functions + + call Green_function(nBas,nO,nV,nWalk,nWP,cO,cV,eO_Quad,eV_Quad,gAO, & + o1MO,o2MO,v1MO,v2MO,o11,o12,o21,o22,v11,v12,v21,v22) + +! Compute local energy + + fd_Quad = o11*o22*v11*v22 + o12*o21*v12*v21 + fx_Quad = o11*o22*v12*v21 + o12*o21*v11*v22 + + fd = matmul(wQuad,fd_Quad) + fx = matmul(wQuad,fx_Quad) + + eloc_MP2 = 0d0 + klW = 0 + do kW=1,nWalk-1 + do lW=kW+1,nWalk + klW = klW + 1 + eloc_MP2(2) = eloc_MP2(2) + fd(klW)/(r12(kW)*r12(lW)*w(kW)*w(lW)) + eloc_MP2(3) = eloc_MP2(3) + fx(klW)/(r12(kW)*r12(lW)*w(kW)*w(lW)) + enddo + enddo + + eloc_MP2(2) = -2d0*eloc_MP2(2)/dble(2*nWP) + eloc_MP2(3) = eloc_MP2(3)/dble(2*nWP) + + fdx = -2d0*fd + fx + eloc_MP2(1) = eloc_MP2(2) + eloc_MP2(3) + +! Accumulate results + + mean_MP2 = mean_MP2 + eloc_MP2 + variance_MP2 = variance_MP2 + eloc_MP2*eloc_MP2 + +! Print results + + if(mod(iMC,nPrint) == 0) then + + call compute_error(nData,mean_MP2,variance_MP2,Err_EcMCMP2) + EcMCMP2 = mean_MP2/nData + Var_EcMCMP2 = variance_MP2/nData + EcMCMP2 = Norm*EcMCMP2 + Var_EcMCMP2 = Norm*Var_EcMCMP2 + Err_EcMCMP2 = Norm*Err_EcMCMP2 + + write(*,*) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,I15)') 'Number of data points ','|',int(nData) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10I15)') 'acceptance ','|',int(100*acceptance/dble(nWalk*iMC)) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'MP2 correlation energy Total ','|',EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Statistical error Total ','|',Err_EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',Err_EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',Err_EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Variance Total ','|',Var_EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',Var_EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',Var_EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Dev. wrt deterministic Total ','|',EcMCMP2(1) - EcMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',EcMCMP2(2) - EcMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',EcMCMP2(3) - EcMP2(3) + write(*,*)'-------------------------------------------------------' + + if(dump) write(13,*) int(nData),EcMCMP2(1),Err_EcMCMP2(1) + + endif + + endif + +!------------------------------------------------------------------------ +! End main Monte Carlo loop +!------------------------------------------------------------------------ + enddo + +! Timing + + call cpu_time(end_Ac) + t_Ac = end_Ac - start_Ac + write(*,*) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for accumulation = ',t_Ac,' seconds' + write(*,*) + +! Close files + + if(dump) close(unit=13) + +end subroutine MCMP2 diff --git a/src/MCQC/MCMP2.f90.x b/src/MCQC/MCMP2.f90.x new file mode 100644 index 0000000..3d11fe0 --- /dev/null +++ b/src/MCQC/MCMP2.f90.x @@ -0,0 +1,446 @@ + subroutine MCMP2(varmin,doDrift,nBas,nEl,nC,nO,nV,c,e,EcMP2, & + nMC,nEq,nWalk,dt,nPrint, & + nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + TrialType,Norm,cTrial,gradient,hessian, & + EcMCMP2,Err_EcMCMP2,Var_EcMCMP2) + +! Perform Monte Carlo MP2 calculation + + implicit none + + include 'parameters.h' + include 'quadrature.h' + +! Input variables + + logical,intent(in) :: varmin,doDrift + integer,intent(in) :: nBas,nEl,nC,nO,nV,nMC,nEq,nWalk,nPrint + double precision,intent(inout):: dt + double precision,intent(in) :: EcMP2(3) + double precision,intent(in) :: c(nBas,nBas),e(nBas) + + integer,intent(in) :: nShell + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: CenterShell(maxShell,3),DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + logical :: AcPh,EqPh,Accept,dump + double precision :: start_Eq,end_Eq,t_Eq,start_Ac,end_Ac,t_Ac + integer :: nWP + double precision :: Norm,NormSq,nData,tau + double precision,allocatable :: chi1(:,:,:),chi2(:,:,:),eta(:) + + double precision,allocatable :: cO(:,:),cV(:,:),eO(:),eV(:),P(:,:),eO_Quad(:,:),eV_Quad(:,:) + double precision,allocatable :: r(:,:,:), r12(:), gAO(:,:,:), g(:,:), w(:) + double precision,allocatable :: rp(:,:,:),r12p(:),gAOp(:,:,:), gp(:,:),wp(:) + double precision,allocatable :: o1MO(:,:),o2MO(:,:),v1MO(:,:),v2MO(:,:) + double precision,allocatable :: o11(:,:),o12(:,:),o21(:,:),o22(:,:) + double precision,allocatable :: v11(:,:),v12(:,:),v21(:,:),v22(:,:) + double precision,allocatable :: fd_Quad(:,:),fx_Quad(:,:),fd(:),fx(:),fdx(:) + + double precision,allocatable :: dgAO(:,:,:,:),dg(:,:,:),dgAOp(:,:,:,:),dgp(:,:,:) + double precision,allocatable :: F(:,:,:),Fp(:,:,:),T(:),Tp(:) + + double precision :: acceptance,D + double precision :: eloc_MP2(3),mean_MP2(3),variance_MP2(3) + + integer :: iW,kW,lW,klW,iMC,i,a,q,iTr,jTr + + double precision :: el,del + double precision,allocatable :: psiTr(:,:),dw(:,:),deloc(:),edeloc(:),mean_de(:),mean_ede(:),mean_dede(:,:) + double precision,allocatable :: dwdw(:),mean_dw(:) + +! Output variables + + double precision,intent(out) :: EcMCMP2(3),Err_EcMCMP2(3),Var_EcMCMP2(3) + + integer,intent(in) :: TrialType + double precision,intent(inout):: cTrial(nBas),gradient(nBas),hessian(nBas,nBas) + +! Number of distinct walker pairs + + nWP = nWalk*(nWalk-1)/2 + +! Diffusion coefficient + + D = 0.5d0 + +! Do diffusion-drift moves? + + write(*,*) + if(doDrift) then + write(*,*) '*** Diffusion-drift algorithm ***' + else + write(*,*) '*** Diffusion-only algorithm ***' + endif + write(*,*) + +! Print results + + dump = .true. + if(dump) open(unit=13,file='results/data') + +! Variance minimization + + if(varmin) then + open(unit=14,file='results/varmin') + endif + +!------------------------------------------------------------------------ +! Memory allocation +!------------------------------------------------------------------------ + allocate(cO(nBas,nO),cV(nBas,nV),eO(nO),eV(nV), & + eO_Quad(nQuad,nO),eV_Quad(nQuad,nV), & + P(nBas,nBas),r(nWalk,2,3),rp(nWalk,2,3), & + chi1(nWalk,2,3),chi2(nWalk,2,3),eta(nWalk), & + r12(nWalk),r12p(nWalk),w(nWalk),wp(nWalk), & + g(nWalk,2),gp(nWalk,2),gAO(nWalk,2,nBas),gAOp(nWalk,2,nBas), & + dg(nWalk,2,3),dgp(nWalk,2,3),dgAO(nWalk,2,3,nBas),dgAOp(nWalk,2,3,nBas), & + o1MO(nWalk,nO),v1MO(nWalk,nV),o2MO(nWalk,nO),v2MO(nWalk,nV), & + o11(nQuad,nWP),v11(nQuad,nWP),o12(nQuad,nWP),v12(nQuad,nWP), & + o21(nQuad,nWP),v21(nQuad,nWP),o22(nQuad,nWP),v22(nQuad,nWP), & + fd_Quad(nQuad,nWP),fd(nWP),fx_Quad(nQuad,nWP),fx(nWP),fdx(nWP), & + T(nWalk),Tp(nWalk),F(nWalk,2,3),Fp(nWalk,2,3)) + + allocate(psiTr(nWalk,2),dw(nWalk,nBas),deloc(nBas),edeloc(nBas), & + mean_de(nBas),mean_ede(nBas),mean_dede(nBas,nBas)) + allocate(dwdw(nBas),mean_dw(nBas)) + +! Split MOs into occupied and virtual sets + + eO(1:nO) = e(nC+1:nC+nO) + eV(1:nV) = e(nC+nO+1:nBas) + + do q=1,nQuad + tau = 1d0/rQuad(q) + do i=1,nO + eO_Quad(q,i) = exp(+eO(i)*(tau-1d0))*sqrt(tau) + enddo + do a=1,nV + eV_Quad(q,a) = exp(-eV(a)*(tau-1d0))*sqrt(tau) + enddo + enddo + + cO(1:nBas,1:nO) = c(1:nBas,nC+1:nC+nO) + cV(1:nBas,1:nV) = c(1:nBas,nC+nO+1:nBas) + +! Compute norm of the trial wave function + + if(TrialType == 0) then + + call NormTrial(TrialType,nBas,nO,cO,P,Norm,NormSq) + + elseif(TrialType == 1) then + + call NormTrial(TrialType,nBas,1,cTrial,P,Norm,NormSq) + + endif + +!------------------------------------------------------------------------ +! Initialize MC-MP2 calculation +!------------------------------------------------------------------------ + +! Initialize electron coordinates + + call random_number(r) + r = 2d0*r - 1d0 + +! Compute initial interelectronic distances + + call rij(nWalk,r,r12) + +! Compute initial AO values and their derivatives (if required) + + call AO_values(doDrift,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,r,gAO,dgAO) + +! Compute initial weight function + + call Density(doDrift,nBas,nWalk,P,gAO,dgAO,g,dg) + +! Compute initial weights + + w(1:nWalk) = g(1:nWalk,1)*g(1:nWalk,2)/r12(1:nWalk) + +! Compute initial quantum force + + if(doDrift) call Drift(nWalk,r,r12,g,dg,F) + +! Equilibration or Accumulation? + + AcPh = .false. + EqPh = .true. + +! Initialization + + nData = 0d0 + acceptance = 0d0 + + mean_MP2 = 0d0 + variance_MP2 = 0d0 + + if(varmin) then + + mean_de = 0d0 + mean_ede = 0d0 + mean_dede = 0d0 +! mean_dw = 0d0 + + endif + + T = 1d0 + Tp = 1d0 + +!------------------------------------------------------------------------ +! Start main Monte Carlo loop +!------------------------------------------------------------------------ + call cpu_time(start_Eq) + + do iMC=1,nEq+nMC + +! Timings + + if(iMC == nEq + 1) then + AcPh = .true. + EqPh = .false. + write(*,*) 'Time step value at the end of equilibration: dt = ',dt + write(*,*) + call cpu_time(end_Eq) + t_Eq = end_Eq - start_Eq + write(*,*) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for equilibration = ',t_Eq,' seconds' + write(*,*) + call cpu_time(start_Ac) + endif + +! Optimize time step to reach 50% acceptance + + if(EqPh .and. mod(iMC,100) == 0) call optimize_timestep(nWalk,iMC,acceptance,dt) + +! Move electrons + + call random_number(chi1) + call random_number(chi2) + +! Diffusion + + rp = r + sqrt(2d0*D*dt)*sqrt(-2d0*log(chi1))*cos(2d0*pi*chi2) + +! Drift + + if(doDrift) rp = rp + D*dt*F + +! Compute new interelectronic distances + + call rij(nWalk,rp,r12p) + +! Compute new AO values and their derivatives (if required) + + call AO_values(doDrift,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,rp,gAOp,dgAOp) + + call Density(doDrift,nBas,nWalk,P,gAOp,dgAOp,gp,dgp) + +! Compute new weights + + wp(1:nWalk) = gp(1:nWalk,1)*gp(1:nWalk,2)/r12p(1:nWalk) + +! Compute new quantum force and transition probability + + if(doDrift) then + + call Drift(nWalk,rp,r12p,gp,dgp,Fp) + call transition_probability(nWalk,dt,D,r,rp,F,Fp,T,Tp) + + endif + +! Move for walkers + + call random_number(eta) + + do iW=1,nWalk + + Accept = (wp(iW)*Tp(iW))/(w(iW)*T(iW)) > eta(iW) + + if(Accept) then + + acceptance = acceptance + 1d0 + + r(iW,1:2,1:3) = rp(iW,1:2,1:3) + gAO(iW,1:2,1:nBas) = gAOp(iW,1:2,1:nBas) + r12(iW) = r12p(iW) + w(iW) = wp(iW) + + if(doDrift) F(iW,1:2,1:3) = Fp(iW,1:2,1:3) + + endif + + enddo + +! Accumulation phase + + if(AcPh) then + + nData = nData + 1d0 + +! Calculate Green functions + + call Green_function(nBas,nO,nV,nWalk,nWP,cO,cV,eO_Quad,eV_Quad,gAO, & + o1MO,o2MO,v1MO,v2MO,o11,o12,o21,o22,v11,v12,v21,v22) + +! Compute local energy + + fd_Quad = o11*o22*v11*v22 + o12*o21*v12*v21 + fx_Quad = o11*o22*v12*v21 + o12*o21*v11*v22 + + fd = matmul(wQuad,fd_Quad) + fx = matmul(wQuad,fx_Quad) + + eloc_MP2 = 0d0 + klW = 0 + do kW=1,nWalk-1 + do lW=kW+1,nWalk + klW = klW + 1 + eloc_MP2(2) = eloc_MP2(2) + fd(klW)/(r12(kW)*r12(lW)*w(kW)*w(lW)) + eloc_MP2(3) = eloc_MP2(3) + fx(klW)/(r12(kW)*r12(lW)*w(kW)*w(lW)) + enddo + enddo + + eloc_MP2(2) = -2d0*eloc_MP2(2)/dble(2*nWP) + eloc_MP2(3) = eloc_MP2(3)/dble(2*nWP) + + fdx = -2d0*fd + fx + eloc_MP2(1) = eloc_MP2(2) + eloc_MP2(3) + +! Accumulate results + + mean_MP2 = mean_MP2 + eloc_MP2 + variance_MP2 = variance_MP2 + eloc_MP2*eloc_MP2 + +! Accumulation for variane minimization + + if(varmin) then + + psiTr = 0d0 + do iTr=1,nBas + psiTr(:,:) = psiTr(:,:) + cTrial(iTr)*gAO(:,:,iTr) + enddo + + do iW=1,nWalk + do iTr=1,nBas + dw(iW,iTr) = gAO(iW,1,iTr)/psiTr(iW,1) + gAO(iW,2,iTr)/psiTr(iW,2) + enddo + enddo + + deloc = 0d0 + edeloc = 0d0 + dwdw = 0d0 + do iTr=1,nBas + klW = 0 + do kW=1,nWalk-1 + do lW=kW+1,nWalk + klW = klW + 1 + el = fdx(klW)/(r12(kW)*r12(lW)*w(kW)*w(lW)) + del = dw(kW,iTr) + dw(lW,iTr) + deloc(iTr) = deloc(iTr) + del*el + edeloc(iTr) = edeloc(iTr) + del*el*el + dwdw(iTr) = dwdw(iTr) + del + enddo + enddo + enddo + + deloc = -2d0*deloc/dble(2*nWP) + edeloc = -2d0*edeloc/dble(2*nWP) + dwdw = 2d0*dwdw/dble(2*nWP) + mean_de(:) = mean_de(:) + deloc(:) + mean_ede(:) = mean_ede(:) + edeloc(:) + mean_dw(:) = mean_dw(:) + dwdw(:) + + do iTr=1,nBas + do jTr=1,nBas + mean_dede(iTr,jTr) = mean_dede(iTr,jTr) + deloc(iTr)*deloc(jTr) + enddo + enddo + + endif + +! Print results + + if(mod(iMC,nPrint) == 0) then + + ecMCMP2 = mean_MP2/nData + Var_EcMCMP2 = variance_MP2/nData + call CalcError(nData,EcMCMP2,Var_EcMCMP2,Err_EcMCMP2) + EcMCMP2 = Norm*EcMCMP2 + Var_EcMCMP2 = Norm*Var_EcMCMP2 + Err_EcMCMP2 = Norm*Err_EcMCMP2 + + write(*,*) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,I15)') 'Number of data points ','|',int(nData) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10I15)') 'acceptance ','|',int(100*acceptance/dble(nWalk*iMC)) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'MP2 correlation energy Total ','|',EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Statistical error Total ','|',Err_EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',Err_EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',Err_EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Variance Total ','|',Var_EcMCMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',Var_EcMCMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',Var_EcMCMP2(3) + write(*,*)'-------------------------------------------------------' + write(*,'(1X,A36,1X,A1,1X,10F15.8)') 'Dev. wrt deterministic Total ','|',EcMCMP2(1) - EcMP2(1) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Direct ','|',EcMCMP2(2) - EcMP2(2) + write(*,'(1X,A36,1X,A1,1X,10F15.8)') ' Exchange ','|',EcMCMP2(3) - EcMP2(3) + write(*,*)'-------------------------------------------------------' + + if(dump) write(13,*) int(nData),EcMCMP2(1),Err_EcMCMP2(1) + +! Compute gradient and hessian for variance minimization + + if(varmin) then + + gradient = 2d0*(mean_ede - mean_MP2(1)*mean_de/nData) + + do iTr=1,nBas + do jTr=1,nBas + hessian(iTr,jTr) = 2d0*(mean_dede(iTr,jTr) - mean_de(iTr)*mean_de(jTr)/nData) + enddo + enddo + + gradient = gradient/nData + hessian = hessian/nData + + print*,'gradient' + call matout(nBas,1,gradient) + print*,'hessian' + call matout(nBas,nBas,hessian) + + endif + + endif + + endif + +!------------------------------------------------------------------------ +! End main Monte Carlo loop +!------------------------------------------------------------------------ + enddo + +! Timing + + call cpu_time(end_Ac) + t_Ac = end_Ac - start_Ac + write(*,*) + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for accumulation = ',t_Ac,' seconds' + write(*,*) + +! Close files + + if(dump) close(unit=13) + if(varmin) close(unit=14) + +end subroutine MCMP2 diff --git a/src/MCQC/MCQC.f90 b/src/MCQC/MCQC.f90 new file mode 100644 index 0000000..6d94385 --- /dev/null +++ b/src/MCQC/MCQC.f90 @@ -0,0 +1,488 @@ +program MCQC + + implicit none + include 'parameters.h' + + logical :: doHF,doMOM + logical :: doMP2,doMP3,doMP2F12 + logical :: doCIS,doTDHF,doADC + logical :: doGF2,doGF3 + logical :: doG0W0,doevGW,doqsGW + logical :: doMCMP2,doMinMCMP2 + logical :: doeNcusp + integer :: nAt,nBas,nBasCABS,nEl,nC,nO,nV,nR,nS + double precision :: ENuc,ERHF,Norm + double precision :: EcMP2(3),EcMP3,EcMP2F12(3),EcMCMP2(3),Err_EcMCMP2(3),Var_EcMCMP2(3) + + double precision,allocatable :: ZNuc(:),rAt(:,:),cHF(:,:),eHF(:),eG0W0(:),PHF(:,:) + + integer :: nShell + integer,allocatable :: TotAngMomShell(:),KShell(:) + double precision,allocatable :: CenterShell(:,:),DShell(:,:),ExpShell(:,:) + + integer :: TrialType + double precision,allocatable :: cTrial(:),gradient(:),hessian(:,:) + + double precision,allocatable :: S(:,:),T(:,:),V(:,:),Hc(:,:),X(:,:) + double precision,allocatable :: ERI_AO_basis(:,:,:,:),ERI_MO_basis(:,:,:,:) + double precision,allocatable :: F12(:,:,:,:),Yuk(:,:,:,:) + + double precision :: start_HF ,end_HF ,t_HF + double precision :: start_MOM ,end_MOM ,t_MOM + double precision :: start_CIS ,end_CIS ,t_CIS + double precision :: start_TDHF ,end_TDHF ,t_TDHF + double precision :: start_ADC ,end_ADC ,t_ADC + double precision :: start_GF2 ,end_GF2 ,t_GF2 + double precision :: start_GF3 ,end_GF3 ,t_GF3 + double precision :: start_G0W0 ,end_G0W0 ,t_G0W0 + double precision :: start_evGW ,end_evGW ,t_evGW + double precision :: start_qsGW ,end_qsGW ,t_qsGW + double precision :: start_eNcusp ,end_eNcusp ,t_eNcusp + double precision :: start_MP2 ,end_MP2 ,t_MP2 + double precision :: start_MP3 ,end_MP3 ,t_MP3 + double precision :: start_MP2F12 ,end_MP2F12 ,t_MP2F12 + double precision :: start_MCMP2 ,end_MCMP2 ,t_MCMP2 + double precision :: start_MinMCMP2,end_MinMCMP2,t_MinMCMP2 + + integer :: maxSCF_HF,n_diis_HF + double precision :: thresh_HF + logical :: DIIS_HF,guess_type,ortho_type + + logical :: singlet_manifold,triplet_manifold + + integer :: maxSCF_GF,n_diis_GF,renormalization + double precision :: thresh_GF + logical :: DIIS_GF + + integer :: maxSCF_GW,n_diis_GW + double precision :: thresh_GW + logical :: DIIS_GW,COHSEX,SOSEX,BSE,TDA,G0W,GW0,linearize + + integer :: nMC,nEq,nWalk,nPrint,iSeed + double precision :: dt + logical :: doDrift + +! Hello World + + write(*,*) + write(*,*) '********************************' + write(*,*) '* Quack *' + write(*,*) '* __ __ __ *' + write(*,*) '* <(o )___ <(o )___ <(o )___ *' + write(*,*) '* ( ._> / ( ._> / ( ._> / *' + write(*,*) '*|----------------------------|*' + write(*,*) '********************************' + write(*,*) + +! Which calculations do you want to do? + + call read_methods(doHF,doMOM, & + doMP2,doMP3, & + doCIS,doTDHF,doADC, & + doGF2,doGF3, & + doG0W0,doevGW,doqsGW, & + doMCMP2) + +! Read options for methods + + call read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_type, & + singlet_manifold,triplet_manifold, & + maxSCF_GF,thresh_GF,DIIS_GF,n_diis_GF,renormalization, & + maxSCF_GW,thresh_GW,DIIS_GW,n_diis_GW,COHSEX,SOSEX,BSE,TDA,G0W,GW0,linearize, & + nMC,nEq,nWalk,dt,nPrint,iSeed,doDrift) + +! Weird stuff + + doeNCusp = .false. + doMinMCMP2 = .false. + doMP2F12 = .false. + +!------------------------------------------------------------------------ +! Read input information +!------------------------------------------------------------------------ + +! Read number of atoms, number of electrons of the system +! nC = number of core orbitals +! nO = number of occupied orbitals +! nV = number of virtual orbitals (see below) +! nR = number of Rydberg orbitals +! nBas = number of basis functions (see below) +! = nO + nV + + call read_molecule(nAt,nEl,nC,nO,nR) + allocate(ZNuc(nAt),rAt(nAt,3)) + +! Read geometry + + call read_geometry(nAt,ZNuc,rAt,ENuc) + + allocate(CenterShell(maxShell,3),TotAngMomShell(maxShell),KShell(maxShell), & + DShell(maxShell,maxK),ExpShell(maxShell,maxK)) + +!------------------------------------------------------------------------ +! Read basis set information +!------------------------------------------------------------------------ + + call read_basis(nAt,rAt,nBas,nC,nO,nV,nR,nS, & + nShell,TotAngMomShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell) + +!------------------------------------------------------------------------ +! Read auxiliary basis set information +!------------------------------------------------------------------------ + +! call ReadAuxBasis(nAt,rAt,nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell) + +! Compute the number of basis functions + +! call CalcNBasis(nShell,TotAngMomShell,nA) + +! Number of virtual orbitals in complete space + +! nBasCABS = nA - nBas + +!------------------------------------------------------------------------ +! Read one- and two-electron integrals +!------------------------------------------------------------------------ + +! Memory allocation for one- and two-electron integrals + + allocate(cHF(nBas,nBas),eHF(nBas),eG0W0(nBas),PHF(nBas,nBas), & + S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas), & + ERI_AO_basis(nBas,nBas,nBas,nBas),ERI_MO_basis(nBas,nBas,nBas,nBas)) + +! Read integrals + + call read_integrals(nBas,S,T,V,Hc,ERI_AO_basis) + +! Compute orthogonalization matrix + + call orthogonalization_matrix(ortho_type,nBas,S,X) + +!------------------------------------------------------------------------ +! Compute HF energy +!------------------------------------------------------------------------ + + if(doHF) then + + call cpu_time(start_HF) +! call SPHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type, & +! nBas,nEl,S,T,V,Hc,ERI_AO_basis,X,ENuc,ERHF,cHF,eHF,PHF) + call RHF(maxSCF_HF,thresh_HF,n_diis_HF,guess_type, & + nBas,nO,S,T,V,Hc,ERI_AO_basis,X,ENuc,ERHF,cHF,eHF,PHF) + call cpu_time(end_HF) + + t_HF = end_HF - start_HF + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for HF = ',t_HF,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Maximum overlap method +!------------------------------------------------------------------------ + + if(doMOM) then + + call cpu_time(start_MOM) + call MOM(maxSCF_HF,thresh_HF,n_diis_HF, & + nBas,nO,S,T,V,Hc,ERI_AO_basis,X,ENuc,ERHF,cHF,eHF,PHF) + call cpu_time(end_MOM) + + t_MOM = end_MOM - start_MOM + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MOM = ',t_MOM,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! AO to MO integral transform for post-HF methods +!------------------------------------------------------------------------ + + call AOtoMO_integral_transform(nBas,cHF,ERI_AO_basis,ERI_MO_basis) + +!------------------------------------------------------------------------ +! Compute MP2 energy +!------------------------------------------------------------------------ + + if(doMP2) then + + call cpu_time(start_MP2) +! call SPMP2(nBas,nC,nEl,nBas-nEl,nR,ERI_MO_basis,ENuc,ERHF,eHF,EcMP2) + call MP2(nBas,nC,nO,nV,nR,ERI_MO_basis,ENuc,ERHF,eHF,EcMP2) + call cpu_time(end_MP2) + + t_MP2 = end_MP2 - start_MP2 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MP2 = ',t_MP2,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute MP3 energy +!------------------------------------------------------------------------ + + if(doMP3) then + + call cpu_time(start_MP3) + call MP3(nBas,nC,nO,nV,nR,ERI_MO_basis,ERHF,EcMP2(1),eHF,EcMP3) + call cpu_time(end_MP3) + + t_MP3 = end_MP3 - start_MP3 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MP3 = ',t_MP3,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute MP2-F12 energy +!------------------------------------------------------------------------ + + if(doMP2F12) then + + call cpu_time(start_MP2F12) +! Memory allocation for one- and two-electron integrals +! allocate(F12(nBas,nBas,nBas,nBas),Yuk(nBas,nBas,nBas,nBas)) +! Read integrals +! call ReadF12Ints(nBas,S,G,F12,Yuk) +! call MP2F12(nBas,nC,nO,nV,nA,G,F12,Yuk,ERHF,EcMP2(1),c,c,EcMP2F12) + call cpu_time(end_MP2F12) + + t_MP2F12 = end_MP2F12 - start_MP2F12 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MP2-F12 = ',t_MP2F12,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute CIS excitations +!------------------------------------------------------------------------ + + if(doCIS) then + + call cpu_time(start_CIS) + call CIS(singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ERI_MO_basis,eHF) + call cpu_time(end_CIS) + + t_CIS = end_CIS - start_CIS + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for CIS = ',t_CIS,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute TDHF excitations +!------------------------------------------------------------------------ + + if(doTDHF) then + + call cpu_time(start_TDHF) + call TDHF(singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ERI_MO_basis,eHF) +! call SPTDHF(singlet_manifold,triplet_manifold,nBas,nC,nEl,nBas-nEl,nR,nEl*(nBas-nEl),ERI_MO_basis,eHF) + call cpu_time(end_TDHF) + + t_TDHF = end_TDHF - start_TDHF + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for TDHF = ',t_TDHF,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute ADC excitations +!------------------------------------------------------------------------ + + if(doADC) then + + call cpu_time(start_ADC) + call ADC(singlet_manifold,triplet_manifold,maxSCF_GF,thresh_GF,n_diis_GF,nBas,nC,nO,nV,nR,eHF,ERI_MO_basis) + call cpu_time(end_ADC) + + t_ADC = end_ADC - start_ADC + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for ADC = ',t_ADC,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute GF2 electronic binding energies +!------------------------------------------------------------------------ + + if(doGF2) then + + call cpu_time(start_GF2) +! call GF2(maxSCF_GF,thresh_GF,n_diis_GF,nBas,nC,nO,nV,nR,ERI_MO_basis,eHF) + call GF2_diag(maxSCF_GF,thresh_GF,n_diis_GF,nBas,nC,nO,nV,nR,ERI_MO_basis,eHF) + call cpu_time(end_GF2) + + t_GF2 = end_GF2 - start_GF2 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for GF2 = ',t_GF2,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute GF3 electronic binding energies +!------------------------------------------------------------------------ + + if(doGF3) then + + call cpu_time(start_GF3) + call GF3_diag(maxSCF_GF,thresh_GF,n_diis_GF,renormalization,nBas,nC,nO,nV,nR,ERI_MO_basis,eHF) + call cpu_time(end_GF3) + + t_GF3 = end_GF3 - start_GF3 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for GF3 = ',t_GF3,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Perform G0W0 calculatiom +!------------------------------------------------------------------------ + + eG0W0(:) = eHF(:) + + if(doG0W0) then + + call cpu_time(start_G0W0) + call G0W0(COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,PHF,ERI_AO_basis,ERI_MO_basis,cHF,eHF,eG0W0) + call cpu_time(end_G0W0) + + t_G0W0 = end_G0W0 - start_G0W0 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for G0W0 = ',t_G0W0,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Perform evGW calculation +!------------------------------------------------------------------------ + + if(doevGW) then + + call cpu_time(start_evGW) + call evGW(maxSCF_GW,thresh_GW,n_diis_GW, & + COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold,linearize, & + nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,ERI_AO_basis,ERI_MO_basis,PHF,cHF,eHF,eHF) + call cpu_time(end_evGW) + + t_evGW = end_evGW - start_evGW + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for evGW = ',t_evGW,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Perform qsGW calculation +!------------------------------------------------------------------------ + + if(doqsGW) then + + call cpu_time(start_qsGW) + call qsGW(maxSCF_GW,thresh_GW,n_diis_GW, & + COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,S,X,T,V,Hc,ERI_AO_basis,PHF,cHF,eHF) + call cpu_time(end_qsGW) + + t_qsGW = end_qsGW - start_qsGW + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for qsGW = ',t_qsGW,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Compute e-N cusp dressing +!------------------------------------------------------------------------ + if(doeNcusp) then + + call cpu_time(start_eNcusp) +! call eNcusp() + call cpu_time(end_eNcusp) + + t_eNcusp = end_eNcusp - start_eNcusp + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for e-N cusp dressing = ',t_eNcusp,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Information for Monte Carlo calculations +!------------------------------------------------------------------------ + + if(doMCMP2 .or. doMinMCMP2) then + +! Print simulation details + + write(*,'(A32)') '----------------------' + write(*,'(A32,1X,I16)') 'Number of Monte Carlo steps',nMC + write(*,'(A32,1X,I16)') 'Number of equilibration steps',nEq + write(*,'(A32,1X,I16)') 'Number of walkers',nWalk + write(*,'(A32,1X,F16.10)') 'Initial time step',dt + write(*,'(A32,1X,I16)') 'Frequency of ouput',nPrint + write(*,'(A32,1X,I16)') 'Seed for random number generator',iSeed + write(*,'(A32)') '----------------------' + write(*,*) + +! Initialize random number generator + + call initialize_random_generator(iSeed) + +!------------------------------------------------------------------------ +! Type of weight function +!------------------------------------------------------------------------ +! TrialType = 0 => HF density +! TrialType = 1 => Custom one-electron function +!------------------------------------------------------------------------ + + TrialType = 0 + allocate(cTrial(nBas),gradient(nBas),hessian(nBas,nBas)) + + endif +!------------------------------------------------------------------------ +! Compute MC-MP2 energy +!------------------------------------------------------------------------ + + if(doMCMP2) then + + call cpu_time(start_MCMP2) + call MCMP2(doDrift,nBas,nC,nO,nV,cHF,eHF,EcMP2, & + nMC,nEq,nWalk,dt,nPrint, & + nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + Norm,EcMCMP2,Err_EcMCMP2,Var_EcMCMP2) +! call MCMP2(.false.,doDrift,nBas,nEl,nC,nO,nV,cHF,eHF,EcMP2, & +! nMC,nEq,nWalk,dt,nPrint, & +! nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & +! TrialType,Norm,cTrial,gradient,hessian, & +! EcMCMP2,Err_EcMCMP2,Var_EcMCMP2) + call cpu_time(end_MCMP2) + + t_MCMP2 = end_MCMP2 - start_MCMP2 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MC-MP2 = ',t_MCMP2,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! Minimize MC-MP2 variance +!------------------------------------------------------------------------ + + if(doMinMCMP2) then + + call cpu_time(start_MinMCMP2) +! call MinMCMP2(nBas,nEl,nC,nO,nV,cHF,eHF,EcMP2, & +! nMC,nEq,nWalk,dt,nPrint, & +! nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & +! TrialType,Norm,cTrial,gradient,hessian) + call cpu_time(end_MinMCMP2) + + t_MinMCMP2 = end_MinMCMP2 - start_MinMCMP2 + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MC-MP2 variance minimization = ',t_MinMCMP2,' seconds' + write(*,*) + + endif + +!------------------------------------------------------------------------ +! End of MCQC +!------------------------------------------------------------------------ +end program MCQC diff --git a/src/MCQC/MOM.f90 b/src/MCQC/MOM.f90 new file mode 100644 index 0000000..fda126c --- /dev/null +++ b/src/MCQC/MOM.f90 @@ -0,0 +1,190 @@ +subroutine MOM(maxSCF,thresh,max_diis,nBas,nO,S,T,V,Hc,ERI,X,ENuc,ERHF,c,e,P) + +! Maximum overlap method + + implicit none + +! Input variables + + integer,intent(in) :: maxSCF,max_diis + double precision,intent(in) :: thresh + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),X(nBas,nBas) + +! Local variables + + integer :: iBas,jBas + integer :: nSCF,nBasSq,n_diis + double precision :: ET,EV,EJ,EK,Conv,Gap + double precision,external :: trace_matrix + double precision,allocatable :: error(:,:),error_diis(:,:),F_diis(:,:) + double precision,allocatable :: J(:,:),K(:,:),cp(:,:),F(:,:),Fp(:,:) + double precision,allocatable :: cG(:,:),ON(:) + +! Output variables + + double precision,intent(inout):: ERHF,c(nBas,nBas),e(nBas),P(nBas,nBas) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Maximum overlap method |' + write(*,*)'************************************************' + write(*,*) + +! Useful quantities + + nBasSq = nBas*nBas + +! Memory allocation + + allocate(J(nBas,nBas),K(nBas,nBas),error(nBas,nBas), & + cp(nBas,nBas),Fp(nBas,nBas),F(nBas,nBas), & + cG(nBas,nBas),ON(nBas), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Set up guess orbitals + + cG(:,:) = c(:,:) + +! Set up occupation numbers + + ON(1:nO) = 1d0 + ON(nO+1:nBas) = 0d0 + +! HOMO-LUMO transition + + ON(nO) = 0d0 + ON(nO+1) = 1d0 + + write(*,*) + write(*,*) ' --- Initial MO occupations --- ' + write(*,*) + call matout(nBas,1,ON) + write(*,*) + +! Compute density matrix + + call density_matrix(nBas,ON,c,P) + +! Initialization + + n_diis = 0 + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + Conv = 1d0 + nSCF = 0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + write(*,*) + write(*,*)'----------------------------------------------------' + write(*,*)'| MOM calculation |' + write(*,*)'----------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','HF energy','|','Conv','|','HL Gap','|' + write(*,*)'----------------------------------------------------' + + do while(Conv > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Build Fock matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI,J) + call exchange_matrix_AO_basis(nBas,P,ERI,K) + + F(:,:) = Hc(:,:) + J(:,:) + K(:,:) + +! Check convergence + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + +! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + +! Diagonalize Fock matrix + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + +! MOM overlap + + call MOM_overlap(nBas,nO,S,cG,c,ON) + +! Density matrix + + call density_matrix(nBas,ON,c,P) + +! Compute HF energy + + ERHF = trace_matrix(nBas,matmul(P,Hc)) & + + 0.5d0*trace_matrix(nBas,matmul(P,J)) & + + 0.5d0*trace_matrix(nBas,matmul(P,K)) + +! Compute HOMO-LUMO gap + + if(nBas > nO) then + + Gap = e(nO+1) - e(nO) + + else + + Gap = 0d0 + + endif + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',ERHF+ENuc,'|',Conv,'|',Gap,'|' + + enddo + write(*,*)'----------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + + write(*,*) + write(*,*) ' --- Final MO occupations --- ' + write(*,*) + call matout(nBas,1,ON) + write(*,*) + +! Compute HF energy + + ET = trace_matrix(nBas,matmul(P,T)) + EV = trace_matrix(nBas,matmul(P,V)) + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + EK = 0.5d0*trace_matrix(nBas,matmul(P,K)) + ERHF = ET + EV + EJ + EK + + call print_RHF(nBas,nO,e,c,ENuc,ET,EV,EJ,EK,ERHF) + +end subroutine MOM diff --git a/src/MCQC/MOM_overlap.f90 b/src/MCQC/MOM_overlap.f90 new file mode 100644 index 0000000..f4f4c61 --- /dev/null +++ b/src/MCQC/MOM_overlap.f90 @@ -0,0 +1,51 @@ +subroutine MOM_overlap(nBas,nO,S,cG,c,ON) + +! Compute overlap between old and new MO coefficients + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: S(nBas,nBas),cG(nBas,nBas),c(nBas,nBas) + +! Local variables + + integer :: i,j,ploc + double precision,allocatable :: Ov(:,:),pOv(:) + +! Output variables + + double precision,intent(inout):: ON(nBas) + + allocate(Ov(nBas,nBas),pOv(nBas)) + + Ov = matmul(transpose(cG),matmul(S,c)) + + pOv(:) = 0d0 + + do i=1,nBas + do j=1,nBas + pOv(j) = pOv(j) + ON(i)*Ov(i,j)**2 + enddo + enddo + + pOv(:) = sqrt(pOV(:)) + +! print*,'--- MOM overlap ---' +! call matout(nBas,1,pOv) + + ON(:) = 0d0 + + do i=1,nO + ploc = maxloc(pOv,nBas) + ON(ploc) = 1d0 + pOv(ploc) = 0d0 + enddo + +! print*,'--- Occupation numbers ---' +! call matout(nBas,1,ON) + + + +end subroutine MOM_overlap diff --git a/src/MCQC/MOtoAO_transform.f90 b/src/MCQC/MOtoAO_transform.f90 new file mode 100644 index 0000000..b4a8b4f --- /dev/null +++ b/src/MCQC/MOtoAO_transform.f90 @@ -0,0 +1,27 @@ +subroutine MOtoAO_transform(nBas,S,c,A) + +! Perform MO to AO transformation of a matrix A for a given metric S +! and coefficients c + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: S(nBas,nBas),c(nBas,nBas) + +! Local variables + + double precision,allocatable :: Sc(:,:) + +! Output variables + + double precision,intent(inout):: A(nBas,nBas) + +! Memory allocation + allocate(Sc(nBas,nBas)) + + Sc = matmul(S,c) + A = matmul(Sc,matmul(A,transpose(Sc))) + +end subroutine MOtoAO_transform diff --git a/src/MCQC/MP2.f90 b/src/MCQC/MP2.f90 new file mode 100644 index 0000000..8aecf47 --- /dev/null +++ b/src/MCQC/MP2.f90 @@ -0,0 +1,71 @@ +subroutine MP2(nBas,nC,nO,nV,nR,ERI,ENuc,EHF,e,EcMP2) + +! Perform third-order Moller-Plesset calculation + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: ENuc,EHF + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),e(nBas) + +! Local variables + + integer :: i,j,a,b + double precision :: eps,E2a,E2b + +! Output variables + + double precision,intent(out) :: EcMP2(3) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Moller-Plesset second-order calculation |' + write(*,*)'************************************************' + write(*,*) + +! Compute MP2 energy + + E2a = 0d0 + E2b = 0d0 + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps = e(i) + e(j) - e(a) - e(b) + +! Secon-order ring diagram + + E2a = E2a + ERI(i,j,a,b)*ERI(i,j,a,b)/eps + +! Second-order exchange + + E2b = E2b + ERI(i,j,a,b)*ERI(i,j,b,a)/eps + + enddo + enddo + enddo + enddo + + EcMP2(2) = 2d0*E2a + EcMP2(3) = -E2b + EcMP2(1) = EcMP2(2) + EcMP2(3) + + write(*,*) + write(*,'(A32)') '-----------------------' + write(*,'(A32)') ' MP2 calculation ' + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 correlation energy',EcMP2(1) + write(*,'(A32,1X,F16.10)') ' Direct part ',EcMP2(2) + write(*,'(A32,1X,F16.10)') ' Exchange part ',EcMP2(3) + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 electronic energy',EHF + EcMP2(1) + write(*,'(A32,1X,F16.10)') ' MP2 total energy',ENuc + EHF + EcMP2(1) + write(*,'(A32)') '-----------------------' + write(*,*) + +end subroutine MP2 diff --git a/src/MCQC/MP2F12.f90 b/src/MCQC/MP2F12.f90 new file mode 100644 index 0000000..27cf274 --- /dev/null +++ b/src/MCQC/MP2F12.f90 @@ -0,0 +1,131 @@ +subroutine MP2F12(nBas,nC,nO,nV,nA,ERI,F12,Yuk,EHF,EcMP2,c,cA,EcMP2F12) + +! Perform restricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nA + double precision,intent(in) :: EHF,EcMP2 + double precision,intent(in) :: c(nBas,nBas),cA(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),F12(nBas,nBas,nBas,nBas),Yuk(nBas,nBas,nBas,nBas) + +! Local variables + + double precision,allocatable :: ooCoo(:,:,:,:),ooFoo(:,:,:,:),ooYoo(:,:,:,:) + double precision,allocatable :: ooCoa(:,:,:,:),ooFoa(:,:,:,:) + double precision,allocatable :: ooCvv(:,:,:,:),ooFvv(:,:,:,:) + double precision,allocatable :: cO(:,:),cV(:,:) + double precision :: E2a,E2b,E3a,E3b,E4a,E4b,E4c,E4d + integer :: i,j,k,l,a,b,x + +! Output variables + + double precision,intent(out) :: EcMP2F12(3) + +! Split MOs into occupied and virtual sets + + allocate(cO(nBas,nO),cV(nBas,nV)) + cO(1:nBas,1:nO) = c(1:nBas,nC+1:nC+nO) + cV(1:nBas,1:nV) = c(1:nBas,nC+nO+1:nBas) + +! Compute the two-electron part of the MP2-F12 energy + + allocate(ooYoo(nO,nO,nO,nO)) + call AOtoMO_oooo(nBas,nO,cO,Yuk,ooYoo) + + E2a = 0d0 + E2b = 0d0 + do i=1,nO + do j=1,nO + E2a = E2a + ooYoo(i,j,i,j) + E2b = E2b + ooYoo(i,j,j,i) + enddo + enddo + + deallocate(ooYoo) + +! Compute the three-electron part of the MP2-F12 energy + + allocate(ooCoa(nO,nO,nO,nA),ooFoa(nO,nO,nO,nA)) + call AOtoMO_oooa(nBas,nO,nA,cO,cA,ERI,ooCoa) + call AOtoMO_oooa(nBas,nO,nA,cO,cA,F12,ooFoa) + + E3a = 0d0 + E3b = 0d0 + do i=1,nO + do j=1,nO + do k=1,nO + do x=1,nA + E3a = E3a + ooCoa(i,j,k,x)*ooFoa(j,i,k,x) + E3b = E3b + ooCoa(i,j,k,x)*ooFoa(i,j,k,x) + enddo + enddo + enddo + enddo + + deallocate(ooCoa,ooFoa) + +! Compute the four-electron part of the MP2-F12 energy + + allocate(ooCoo(nO,nO,nO,nO),ooFoo(nO,nO,nO,nO)) + call AOtoMO_oooo(nBas,nO,cO,ERI,ooCoo) + call AOtoMO_oooo(nBas,nO,cO,F12,ooFoo) + + E4a = 0d0 + E4b = 0d0 + do i=1,nO + do j=1,nO + do k=1,nO + do l=1,nO + E4a = E4a + ooCoo(i,j,k,l)*ooFoo(i,j,k,l) + E4b = E4b + ooCoo(i,j,k,l)*ooFoo(j,i,k,l) + enddo + enddo + enddo + enddo + + deallocate(ooCoo,ooFoo) + + allocate(ooCvv(nO,nO,nV,nV),ooFvv(nO,nO,nV,nV)) + call AOtoMO_oovv(nBas,nO,nV,cO,cV,ERI,ooCvv) + call AOtoMO_oovv(nBas,nO,nV,cO,cV,F12,ooFvv) + + E4c = 0d0 + E4d = 0d0 + do i=1,nO + do j=1,nO + do a=1,nV + do b=1,nV + E4c = E4c + ooCvv(i,j,a,b)*ooFvv(i,j,a,b) + E4d = E4d + ooCvv(i,j,a,b)*ooFvv(j,i,a,b) + enddo + enddo + enddo + enddo + + deallocate(ooCvv,ooFvv) + +! Final scaling of the various components + + EcMP2F12(1) = +0.625d0*E2a - 0.125d0*E2b + EcMP2F12(2) = -1.250d0*E3a + 0.250d0*E3b + EcMP2F12(3) = +0.625d0*E4a - 0.125d0*E4b - 0.625d0*E4c + 0.125d0*E4d + + write(*,*) + write(*,'(A32)') '-----------------------' + write(*,'(A32)') ' MP2-F12 calculation ' + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 ',EcMP2 + write(*,'(A32,1X,F16.10)') ' MP2-F12 E(2) ',EcMP2F12(1) + write(*,'(A32,1X,F16.10)') ' MP2-F12 E(3) ',EcMP2F12(2) + write(*,'(A32,1X,F16.10)') ' MP2-F12 E(4) ',EcMP2F12(3) + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' Total ',EcMP2+EcMP2F12(1)+EcMP2F12(2)+EcMP2F12(3) + write(*,'(A32)') '-----------------------' + write(*,*) + + deallocate(cO,cV) + +end subroutine MP2F12 diff --git a/src/MCQC/MP3.f90 b/src/MCQC/MP3.f90 new file mode 100644 index 0000000..c84d7bc --- /dev/null +++ b/src/MCQC/MP3.f90 @@ -0,0 +1,113 @@ +subroutine MP3(nBas,nC,nO,nV,nR,V,EHF,EcMP2,e,EcMP3) + +! Perform third-order Moller-Plesset calculation + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: EHF,EcMP2 + double precision,intent(in) :: V(nBas,nBas,nBas,nBas),e(nBas) + +! Local variables + + double precision :: eps1,eps2,E3a,E3b,E3c + + integer :: i,j,k,l,a,b,c,d + +! Output variables + + double precision,intent(out) :: EcMP3 + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Moller-Plesset third-order calculation |' + write(*,*)'************************************************' + write(*,*) + +! Compute MP3 energy + + E3a = 0d0 + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do l=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps1 = e(i) + e(j) - e(a) - e(b) + eps2 = e(k) + e(l) - e(a) - e(b) + + E3a = E3a + (V(i,j,a,b) - V(i,j,b,a))* & + (V(k,l,i,j) - V(k,l,j,i))* & + (V(a,b,k,l) - V(a,b,l,k))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + E3b = 0d0 + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + do d=nO+1,nBas-nR + + eps1 = e(i) + e(j) - e(a) - e(b) + eps2 = e(i) + e(j) - e(c) - e(d) + + E3b = E3b + (V(i,j,a,b) - V(i,j,b,a))* & + (V(a,b,c,d) - V(a,b,d,c))* & + (V(c,d,i,j) - V(c,d,j,i))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + E3c = 0d0 + do i=nC+1,nO + do j=nC+1,nO + do k=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + do c=nO+1,nBas-nR + + eps1 = e(i) + e(j) - e(a) - e(b) + eps2 = e(i) + e(k) - e(a) - e(c) + + E3c = E3c + (V(i,j,a,b) - V(i,j,b,a))* & + (V(k,b,c,j) - V(k,b,j,c))* & + (V(a,c,i,k) - V(a,c,k,i))/(eps1*eps2) + + enddo + enddo + enddo + enddo + enddo + enddo + + EcMP3 = 0.25d0*E3a + 0.25d0*E3b + E3c + + write(*,*) + write(*,'(A32)') '-----------------------' + write(*,'(A32)') ' MP3 calculation ' + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 contribution ',EcMP2 + write(*,'(A32,1X,F16.10)') ' MP3 contribution ',EcMP3 + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP3 correlation energy', EcMP2 + EcMP3 + write(*,'(A32,1X,F16.10)') ' MP3 total energy',EHF + EcMP2 + EcMP3 + write(*,'(A32)') '-----------------------' + write(*,*) + +end subroutine MP3 diff --git a/src/MCQC/Makefile b/src/MCQC/Makefile new file mode 100644 index 0000000..abf685f --- /dev/null +++ b/src/MCQC/Makefile @@ -0,0 +1,31 @@ +IDIR =../../include +BDIR =../../bin +LDIR =../../lib +ODIR = obj +SDIR =. +FC = gfortran -g -I$(IDIR) +ifeq ($(DEBUG),1) +FFLAGS = -Wall -msse4.2 -fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant +else +FFLAGS = -Wall -Wno-unused -Wno-unused-dummy-argument -O2 +endif + +LIBS = $(LDIR)/*.a $(LDIR)/slatec/src/static/libslatec.a + +SRC = $(wildcard *.f90) + +OBJ = $(patsubst %.f90,$(ODIR)/%.o,$(SRC)) + + +$(ODIR)/%.o: %.f90 + $(FC) -c -o $@ $< $(FFLAGS) 2>&1 + +$(BDIR)/MCQC: $(OBJ) + $(FC) -o $@ $^ $(FFLAGS) $(LIBS) +# $(FC) -o $(BDIR)/$@ $^ $(FFLAGS) $(LIBS) + +debug: + DEBUG=1 make clean $(BDIR)/MCQC + +clean: + rm -f $(ODIR)/*.o $(BDIR)/MCQC $(BDIR)/debug diff --git a/src/MCQC/MinMCMP2.f90 b/src/MCQC/MinMCMP2.f90 new file mode 100644 index 0000000..13c7c59 --- /dev/null +++ b/src/MCQC/MinMCMP2.f90 @@ -0,0 +1,121 @@ +subroutine MinMCMP2(nBas,nEl,nC,nO,nV,c,e,EcMP2, & + nMC,nEq,nWalk,dt,nPrint, & + nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + TrialType,Norm,cTrial,gradient,hessian) + +! Minimize the variance of MC-MP2 + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nEl,nC,nO,nV,nMC,nEq,nWalk,nPrint + double precision,intent(in) :: EcMP2(3),dt + double precision,intent(in) :: c(nBas,nBas),e(nBas) + + integer,intent(in) :: nShell + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: CenterShell(maxShell,3),DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + logical :: debug,varmin,mincvg + double precision :: thresh + double precision,allocatable :: max_gradient(:),energy_MCMP2(:),variance_MCMP2(:),error_MCMP2(:),NormTr(:) + + double precision :: EcMCMP2(3),Err_EcMCMP2(3),Var_EcMCMP2(3) + + integer :: it,nIt,i + +! Output variables + + integer,intent(in) :: TrialType + double precision,intent(inout):: Norm,cTrial(nBas),gradient(nBas),hessian(nBas,nBas) + +! Debuging mode + +! debug = .true. + debug = .false. + +! Minimization parameters + + varmin = .true. + mincvg = .false. + nIt = 10 + thresh = 1d-5 + allocate(max_gradient(nIt),energy_MCMP2(nIt),variance_MCMP2(nIt),error_MCMP2(nIt),normTr(nIt)) + + if(TrialType == 1) then + +! Use HOMO as guess + cTrial(1:nBas) = c(1:nBas,nEl/2) +! Normalization factor will be computed later + + endif + +!------------------------------------------------------------------------ +! Start MC-MP2 variance minimization +!------------------------------------------------------------------------ + it = 0 + do while (it < nIt .and. .not.(mincvg)) + + it = it + 1 + + write(*,*) '**********************************************************************' + write(*,*) ' Variance minimization of MC-MP2 energy ' + write(*,*) '**********************************************************************' + write(*,*) ' Iteration n.',it + write(*,*) '**********************************************************************' + + write(*,*) + write(*,*) ' Trial wave function coefficients at iteration n.',it + call matout(nBas,1,cTrial) + write(*,*) + + call MCMP2(varmin,nBas,nEl,nC,nO,nV,c,e,EcMP2, & + nMC,nEq,nWalk,dt,nPrint, & + nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + TrialType,Norm,cTrial,gradient,hessian, & + EcMCMP2,Err_EcMCMP2,Var_EcMCMP2) + +! Newton update of the coefficients + + call Newton(nBas,gradient,hessian,cTrial) + +! Check for convergence + + max_gradient(it) = maxval(abs(gradient)) + energy_MCMP2(it) = EcMCMP2(1) + variance_MCMP2(it) = Var_EcMCMP2(1) + error_MCMP2(it) = Err_EcMCMP2(1) + NormTr(it) = Norm + + write(*,*) + write(*,*) 'Maximum gradient at iteration n.',it,':',max_gradient(it) + write(*,*) + + if(max_gradient(it) < thresh) then + write(*,*) ' Miracle! Variance minimization of MC-MP2 has converged!' + mincvg = .true. + endif + + enddo + + write(*,*) + write(*,*) '********************************' + write(*,*) 'Summary of variance minimization' + write(*,*) '********************************' + write(*,*) + + write(*,'(A3,A20,A20,A20,A20,A20,A20)') & + 'It.','Gradient','Ec(MC-MPC2)','Variance','Error','Ec(MC-MP2)-Ec(MP2)','Norm' + write(*,'(I3,4X,F16.10,4X,F16.10,4X,F16.10,4X,F16.10,4X,F16.10,4X,F16.10)') & + (i,max_gradient(i),energy_MCMP2(i),variance_MCMP2(i),error_MCMP2(i),energy_MCMP2(i)-EcMP2(1),NormTr(i),i=1,it) + write(*,*) + +!------------------------------------------------------------------------ +! End MC-MP2 variance minimization +!------------------------------------------------------------------------ + +end subroutine MinMCMP2 diff --git a/src/MCQC/NDrift.f90 b/src/MCQC/NDrift.f90 new file mode 100644 index 0000000..13cc5f3 --- /dev/null +++ b/src/MCQC/NDrift.f90 @@ -0,0 +1,67 @@ +subroutine NDrift(nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,P,r,w,F) + +! Compute quantum force numerically + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nWalk,nBas + double precision,intent(in) :: P(nBas,nBas),r(nWalk,2,3),w(nWalk) + + integer,intent(in) :: nShell + integer,intent(in) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(in) :: CenterShell(maxShell,3),DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +! Local variables + + integer :: iW,iEl,ixyz + double precision :: delta + double precision :: wp,wm + double precision,allocatable :: rp(:,:,:),rm(:,:,:),r12p(:),r12m(:) + double precision,allocatable :: gAOp(:,:,:),dgAOp(:,:,:,:),gAOm(:,:,:),dgAOm(:,:,:,:) + double precision,allocatable :: gp(:,:),dgp(:,:,:),gm(:,:),dgm(:,:,:) + + +! Output variables + + double precision,intent(out) :: F(nWalk,2,3) + + allocate(rp(nWalk,2,3),rm(nWalk,2,3),r12p(nWalk),r12m(nWalk), & + gAOp(nWalk,2,nBas),dgAOp(nWalk,2,3,nBas),gAOm(nWalk,2,nBas),dgAOm(nWalk,2,3,nBas), & + gp(nWalk,2),dgp(nWalk,2,3),gm(nWalk,2),dgm(nWalk,2,3)) + + do iW=1,nWalk + do iEl=1,2 + do ixyz=1,3 + + delta = 1d-6 + + rp = r + rm = r + + rp(iW,iEl,ixyz) = r(iW,iEl,ixyz) + delta + rm(iW,iEl,ixyz) = r(iW,iEl,ixyz) - delta + + call AO_values(.false.,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,rp,gAOp,dgAOp) + call AO_values(.false.,nBas,nShell,nWalk,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,rm,gAOm,dgAOm) + + call Density(.false.,nBas,nWalk,P,gAOp,dgAOp,gp,dgp) + call Density(.false.,nBas,nWalk,P,gAOm,dgAOm,gm,dgm) + + call rij(nWalk,rp,r12p) + call rij(nWalk,rm,r12m) + + wp = gp(iW,1)*gp(iW,2)/r12p(iW) + wm = gm(iW,1)*gm(iW,2)/r12m(iW) + + F(iW,iEl,ixyz) = (wp - wm)/(2d0*delta*w(iw)) + enddo + enddo + enddo + +! print*,'NF',F + + +end subroutine NDrift diff --git a/src/MCQC/Newton.f90 b/src/MCQC/Newton.f90 new file mode 100644 index 0000000..f074035 --- /dev/null +++ b/src/MCQC/Newton.f90 @@ -0,0 +1,67 @@ +subroutine Newton(nWSq,gradient,hessian,cWeight) + +! Calculate the Green functions + + implicit none + +! Input variables + + integer,intent(in) :: nWSq + double precision,intent(in) :: gradient(nWSq),hessian(nWSq,nWSq) + +! Local variables + + integer :: info + integer,allocatable :: ipiv(:) + double precision,allocatable :: scr(:),eigval(:),eigvec(:,:) + +! Output variables + + double precision,intent(inout):: cWeight(nWSq) + +! Memory allocation + + allocate(ipiv(nWSq),scr(3*nWsq),eigval(nWSq),eigvec(nWSq,nWSq)) + +! Compute eigenvectors and eigenvalues + + eigvec = hessian + call dsyev('V','U',nWSq,eigvec,nWSq,eigval,scr,3*nWSq,info) + + if(info /= 0)then + write(*,*) ' Problem with dsyev!' + stop + endif + + write(*,*) + write(*,*) 'Eigenvalues of hessian' + call matout(nWSq,1,eigval) + write(*,*) +! write(*,*) 'Eigenvectors of hessian' +! call matout(nWSq,1,eigval) +! write(*,*) + +! Compute inverse of the hessian + + call dgetrf(nWSq,nWSq,hessian,nWSq,ipiv,info) + + if(info /= 0) then + write(*,*) ' Problem in dgetrf!' + stop + endif + + call dgetri(nWSq,hessian,nWSq,ipiv,scr,nWSq,info) + + if(info /= 0) then + write(*,*) ' Problem in dgetri!' + stop + endif + + print*,'inverse hessian' + call matout(nWSq,nWSq,hessian) + +! Compute new coefficients + + cWeight = cWeight - matmul(hessian,gradient) + +end subroutine Newton diff --git a/src/MCQC/NormCoeff.f90 b/src/MCQC/NormCoeff.f90 new file mode 100644 index 0000000..9e6cabf --- /dev/null +++ b/src/MCQC/NormCoeff.f90 @@ -0,0 +1,29 @@ +function NormCoeff(alpha,a) + + implicit none + +! Input variables + + double precision,intent(in) :: alpha + integer,intent(in) :: a(3) + +! local variable + double precision :: pi,dfa(3),dfac + integer :: atot + +! Output variable + double precision NormCoeff + + pi = 4d0*atan(1d0) + atot = a(1) + a(2) + a(3) + + dfa(1) = dfac(2*a(1))/(2d0**a(1)*dfac(a(1))) + dfa(2) = dfac(2*a(2))/(2d0**a(2)*dfac(a(2))) + dfa(3) = dfac(2*a(3))/(2d0**a(3)*dfac(a(3))) + + + NormCoeff = (2d0*alpha/pi)**(3d0/2d0)*(4d0*alpha)**atot + NormCoeff = NormCoeff/(dfa(1)*dfa(2)*dfa(3)) + NormCoeff = sqrt(NormCoeff) + +end function NormCoeff diff --git a/src/MCQC/RHF.f90 b/src/MCQC/RHF.f90 new file mode 100644 index 0000000..25621d0 --- /dev/null +++ b/src/MCQC/RHF.f90 @@ -0,0 +1,171 @@ +subroutine RHF(maxSCF,thresh,max_diis,guess_type,nBas,nO,S,T,V,Hc,ERI,X,ENuc,ERHF,c,e,P) + +! Perform restricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: maxSCF,max_diis,guess_type + double precision,intent(in) :: thresh + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),X(nBas,nBas) + +! Local variables + + integer :: nSCF,nBasSq,n_diis + double precision :: ET,EV,EJ,EK,Conv,Gap + double precision,external :: trace_matrix + double precision,allocatable :: error(:,:),error_diis(:,:),F_diis(:,:) + double precision,allocatable :: J(:,:),K(:,:),cp(:,:),F(:,:),Fp(:,:) + +! Output variables + + double precision,intent(out) :: ERHF,c(nBas,nBas),e(nBas),P(nBas,nBas) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Restricted Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Useful quantities + + nBasSq = nBas*nBas + +! Memory allocation + + allocate(J(nBas,nBas),K(nBas,nBas),error(nBas,nBas), & + cp(nBas,nBas),Fp(nBas,nBas),F(nBas,nBas), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Guess coefficients and eigenvalues + + if(guess_type == 1) then + + Fp = matmul(transpose(X),matmul(Hc,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + + elseif(guess_type == 2) then + + call random_number(c) + + endif + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + + +! Initialization + + n_diis = 0 + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + Conv = 1d0 + nSCF = 0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + write(*,*) + write(*,*)'----------------------------------------------------' + write(*,*)'| RHF calculation |' + write(*,*)'----------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','HF energy','|','Conv','|','HL Gap','|' + write(*,*)'----------------------------------------------------' + + do while(Conv > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Build Fock matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI,J) + call exchange_matrix_AO_basis(nBas,P,ERI,K) + + F(:,:) = Hc(:,:) + J(:,:) + K(:,:) + +! Check convergence + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + +! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + +! Diagonalize Fock matrix + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + +! Density matrix + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + +! Compute HF energy + + ERHF = trace_matrix(nBas,matmul(P,Hc)) & + + 0.5d0*trace_matrix(nBas,matmul(P,J)) & + + 0.5d0*trace_matrix(nBas,matmul(P,K)) + +! Compute HOMO-LUMO gap + + if(nBas > nO) then + + Gap = e(nO+1) - e(nO) + + else + + Gap = 0d0 + + endif + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',ERHF+ENuc,'|',Conv,'|',Gap,'|' + + enddo + write(*,*)'----------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + +! Compute HF energy + + ET = trace_matrix(nBas,matmul(P,T)) + EV = trace_matrix(nBas,matmul(P,V)) + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + EK = 0.5d0*trace_matrix(nBas,matmul(P,K)) + ERHF = ET + EV + EJ + EK + + call print_RHF(nBas,nO,e,C,ENuc,ET,EV,EJ,EK,ERHF) + +end subroutine RHF diff --git a/src/MCQC/RHF.f90.x b/src/MCQC/RHF.f90.x new file mode 100644 index 0000000..25621d0 --- /dev/null +++ b/src/MCQC/RHF.f90.x @@ -0,0 +1,171 @@ +subroutine RHF(maxSCF,thresh,max_diis,guess_type,nBas,nO,S,T,V,Hc,ERI,X,ENuc,ERHF,c,e,P) + +! Perform restricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: maxSCF,max_diis,guess_type + double precision,intent(in) :: thresh + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),X(nBas,nBas) + +! Local variables + + integer :: nSCF,nBasSq,n_diis + double precision :: ET,EV,EJ,EK,Conv,Gap + double precision,external :: trace_matrix + double precision,allocatable :: error(:,:),error_diis(:,:),F_diis(:,:) + double precision,allocatable :: J(:,:),K(:,:),cp(:,:),F(:,:),Fp(:,:) + +! Output variables + + double precision,intent(out) :: ERHF,c(nBas,nBas),e(nBas),P(nBas,nBas) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Restricted Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Useful quantities + + nBasSq = nBas*nBas + +! Memory allocation + + allocate(J(nBas,nBas),K(nBas,nBas),error(nBas,nBas), & + cp(nBas,nBas),Fp(nBas,nBas),F(nBas,nBas), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Guess coefficients and eigenvalues + + if(guess_type == 1) then + + Fp = matmul(transpose(X),matmul(Hc,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + + elseif(guess_type == 2) then + + call random_number(c) + + endif + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + + +! Initialization + + n_diis = 0 + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + Conv = 1d0 + nSCF = 0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + write(*,*) + write(*,*)'----------------------------------------------------' + write(*,*)'| RHF calculation |' + write(*,*)'----------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','HF energy','|','Conv','|','HL Gap','|' + write(*,*)'----------------------------------------------------' + + do while(Conv > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Build Fock matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI,J) + call exchange_matrix_AO_basis(nBas,P,ERI,K) + + F(:,:) = Hc(:,:) + J(:,:) + K(:,:) + +! Check convergence + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + +! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + +! Diagonalize Fock matrix + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + +! Density matrix + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + +! Compute HF energy + + ERHF = trace_matrix(nBas,matmul(P,Hc)) & + + 0.5d0*trace_matrix(nBas,matmul(P,J)) & + + 0.5d0*trace_matrix(nBas,matmul(P,K)) + +! Compute HOMO-LUMO gap + + if(nBas > nO) then + + Gap = e(nO+1) - e(nO) + + else + + Gap = 0d0 + + endif + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',ERHF+ENuc,'|',Conv,'|',Gap,'|' + + enddo + write(*,*)'----------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + +! Compute HF energy + + ET = trace_matrix(nBas,matmul(P,T)) + EV = trace_matrix(nBas,matmul(P,V)) + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + EK = 0.5d0*trace_matrix(nBas,matmul(P,K)) + ERHF = ET + EV + EJ + EK + + call print_RHF(nBas,nO,e,C,ENuc,ET,EV,EJ,EK,ERHF) + +end subroutine RHF diff --git a/src/MCQC/SPHF.f90 b/src/MCQC/SPHF.f90 new file mode 100644 index 0000000..e6cd623 --- /dev/null +++ b/src/MCQC/SPHF.f90 @@ -0,0 +1,170 @@ +subroutine SPHF(maxSCF,thresh,max_diis,guess_type,nBas,nO,S,T,V,Hc,ERI,X,ENuc,ERHF,c,e,P) + +! Perform restricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: maxSCF,max_diis,guess_type + double precision,intent(in) :: thresh + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),X(nBas,nBas) + +! Local variables + + integer :: nSCF,nBasSq,n_diis + double precision :: ET,EV,EJ,EK,Conv,Gap + double precision,external :: trace_matrix + double precision,allocatable :: error(:,:),error_diis(:,:),F_diis(:,:) + double precision,allocatable :: J(:,:),K(:,:),cp(:,:),F(:,:),Fp(:,:) + +! Output variables + + double precision,intent(out) :: ERHF,c(nBas,nBas),e(nBas),P(nBas,nBas) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Restricted Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Useful quantities + + nBasSq = nBas*nBas + +! Memory allocation + + allocate(J(nBas,nBas),K(nBas,nBas),error(nBas,nBas), & + cp(nBas,nBas),Fp(nBas,nBas),F(nBas,nBas), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Guess coefficients and eigenvalues + + if(guess_type == 1) then + + Fp = matmul(transpose(X),matmul(Hc,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + + elseif(guess_type == 2) then + + call random_number(c) + + endif + + P(:,:) = matmul(c(:,1:nO),transpose(c(:,1:nO))) + +! Initialization + + n_diis = 0 + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + Conv = 1d0 + nSCF = 0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + write(*,*) + write(*,*)'----------------------------------------------------' + write(*,*)'| SPHF calculation |' + write(*,*)'----------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','HF energy','|','Conv','|','HL Gap','|' + write(*,*)'----------------------------------------------------' + + do while(Conv > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Build Fock matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI,J) + call exchange_matrix_AO_basis(nBas,P,ERI,K) + + F(:,:) = Hc(:,:) + J(:,:) + 2d0*K(:,:) + +! Check convergence + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + +! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + +! Diagonalize Fock matrix + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + +! Density matrix + + P(:,:) = matmul(c(:,1:nO),transpose(c(:,1:nO))) + +! Compute HF energy + + ERHF = trace_matrix(nBas,matmul(P,Hc)) & + + 0.5d0*trace_matrix(nBas,matmul(P,J)) & + + trace_matrix(nBas,matmul(P,K)) + +! Compute HOMO-LUMO gap + + if(nBas > nO) then + + Gap = e(nO+1) - e(nO) + + else + + Gap = 0d0 + + endif + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',ERHF+ENuc,'|',Conv,'|',Gap,'|' + + enddo + write(*,*)'----------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + +! Compute HF energy + + ET = trace_matrix(nBas,matmul(P,T)) + EV = trace_matrix(nBas,matmul(P,V)) + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + EK = trace_matrix(nBas,matmul(P,K)) + ERHF = ET + EV + EJ + EK + + call print_RHF(nBas,nO,e,C,ENuc,ET,EV,EJ,EK,ERHF) + +end subroutine SPHF diff --git a/src/MCQC/SPMP2.f90 b/src/MCQC/SPMP2.f90 new file mode 100644 index 0000000..d91d803 --- /dev/null +++ b/src/MCQC/SPMP2.f90 @@ -0,0 +1,71 @@ +subroutine SPMP2(nBas,nC,nO,nV,nR,ERI,ENuc,EHF,e,EcMP2) + +! Perform third-order Moller-Plesset calculation + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR + double precision,intent(in) :: ENuc,EHF + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),e(nBas) + +! Local variables + + integer :: i,j,a,b + double precision :: eps,E2a,E2b + +! Output variables + + double precision,intent(out) :: EcMP2(3) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Moller-Plesset second-order calculation |' + write(*,*)'************************************************' + write(*,*) + +! Compute MP2 energy + + E2a = 0d0 + E2b = 0d0 + do i=nC+1,nO + do j=nC+1,nO + do a=nO+1,nBas-nR + do b=nO+1,nBas-nR + + eps = e(i) + e(j) - e(a) - e(b) + +! Secon-order ring diagram + + E2a = E2a + ERI(i,j,a,b)*ERI(i,j,a,b)/eps + +! Second-order exchange + + E2b = E2b + ERI(i,j,a,b)*ERI(i,j,b,a)/eps + + enddo + enddo + enddo + enddo + + EcMP2(2) = E2a + EcMP2(3) = -E2b + EcMP2(1) = EcMP2(2) + EcMP2(3) + + write(*,*) + write(*,'(A32)') '-----------------------' + write(*,'(A32)') ' MP2 calculation ' + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 correlation energy',EcMP2(1) + write(*,'(A32,1X,F16.10)') ' Direct part ',EcMP2(2) + write(*,'(A32,1X,F16.10)') ' Exchange part ',EcMP2(3) + write(*,'(A32)') '-----------------------' + write(*,'(A32,1X,F16.10)') ' MP2 electronic energy',EHF + EcMP2(1) + write(*,'(A32,1X,F16.10)') ' MP2 total energy',ENuc + EHF + EcMP2(1) + write(*,'(A32)') '-----------------------' + write(*,*) + +end subroutine SPMP2 diff --git a/src/MCQC/SPTDHF.f90 b/src/MCQC/SPTDHF.f90 new file mode 100644 index 0000000..6409607 --- /dev/null +++ b/src/MCQC/SPTDHF.f90 @@ -0,0 +1,77 @@ +subroutine SPTDHF(singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ERI,e) + +! Perform random phase approximation calculation + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),e(nBas) + +! Local variables + + logical :: dRPA,TDA,BSE + integer :: ispin + double precision,allocatable :: Omega(:,:),XpY(:,:,:) + + double precision :: rho + double precision :: EcRPA + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Time-dependent Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Switch on exchange for TDHF + + dRPA = .false. + +! Switch off Tamm-Dancoff approximation for TDHF + + TDA = .false. + +! Switch off Bethe-Salpeter equation for TDHF + + BSE = .false. + +! Memory allocation + + allocate(Omega(nS,nspin),XpY(nS,nS,nspin)) + +! Singlet manifold + + if(singlet_manifold) then + + ispin = 1 + + call SP_linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI, & + rho,EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('TDHF ',ispin,nS,Omega(:,ispin)) + + endif + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'RPA correlation energy =',EcRPA + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + + +! Triplet manifold + + if(triplet_manifold) then + + ispin = 2 + + call SP_linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI, & + rho,EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('TDHF ',ispin,nS,Omega(:,ispin)) + + endif + +end subroutine SPTDHF diff --git a/src/MCQC/SP_linear_response.f90 b/src/MCQC/SP_linear_response.f90 new file mode 100644 index 0000000..e087397 --- /dev/null +++ b/src/MCQC/SP_linear_response.f90 @@ -0,0 +1,81 @@ +subroutine SP_linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI,rho,EcRPA,Omega,XpY) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA,TDA,BSE + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas),rho(nBas,nBas,nS) + +! Local variables + + double precision :: trace_matrix + double precision,allocatable :: A(:,:),B(:,:),ApB(:,:),AmB(:,:),AmBSq(:,:),Z(:,:) + +! Output variables + + double precision,intent(out) :: EcRPA + double precision,intent(out) :: Omega(nS),XpY(nS,nS) + + +! Memory allocation + + allocate(A(nS,nS),B(nS,nS),ApB(nS,nS),AmB(nS,nS),AmBSq(nS,nS),Z(nS,nS)) + +! Build A and B matrices + + call SP_linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,e,ERI,A) + if(BSE) call Bethe_Salpeter_A_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,A) + +! Tamm-Dancoff approximation + + B = 0d0 + if(.not. TDA) then + + call SP_linear_response_B_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,ERI,B) + if(BSE) call Bethe_Salpeter_B_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,B) + + endif + +! Build A + B and A - B matrices + + AmB = A - B + ApB = A + B + +! print*,'A+B' +! call matout(nS,nS,ApB) + +! print*,'A-B' +! call matout(nS,nS,AmB) + +! Diagonalize TD-HF matrix + + call diagonalize_matrix(nS,AmB,Omega) + + if(minval(Omega) < 0d0) & + call print_warning('You may have instabilities in linear response!!') + + call ADAt(nS,AmB,sqrt(Omega),AmBSq) + Z = matmul(AmBSq,matmul(ApB,AmBSq)) + + call diagonalize_matrix(nS,Z,Omega) + + if(minval(Omega) < 0d0) & + call print_warning('You may have instabilities in linear response!!') + + Omega = sqrt(Omega) + XpY = matmul(transpose(Z),AmBSq) + call DA(nS,1d0/sqrt(Omega),XpY) + +! print*,'RPA excitations' +! call matout(nS,1,Omega) + +! Compute the RPA correlation energy + + EcRPA = 0.5d0*(sum(Omega) - trace_matrix(nS,A)) + +end subroutine SP_linear_response diff --git a/src/MCQC/SP_linear_response_A_matrix.f90 b/src/MCQC/SP_linear_response_A_matrix.f90 new file mode 100644 index 0000000..d95ebf4 --- /dev/null +++ b/src/MCQC/SP_linear_response_A_matrix.f90 @@ -0,0 +1,56 @@ +subroutine SP_linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,e,ERI,A_lr) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas) + +! Local variables + + double precision :: delta_spin,delta_dRPA + double precision :: Kronecker_delta + + integer :: i,j,a,b,ia,jb + +! Output variables + + double precision,intent(out) :: A_lr(nS,nS) + +! Singlet or triplet manifold? + + delta_spin = 0d0 + if(ispin == 1) delta_spin = +1d0 + if(ispin == 2) delta_spin = -1d0 + +! Direct RPA + + delta_dRPA = 0d0 + if(dRPA) delta_dRPA = 1d0 + +! Build A matrix + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + A_lr(ia,jb) = (e(a) - e(i))*Kronecker_delta(i,j)*Kronecker_delta(a,b) & + + 0.5d0*(1d0 + delta_spin)*ERI(i,b,a,j) & + - (1d0 - delta_dRPA)*ERI(i,b,j,a) + + enddo + enddo + enddo + enddo + +end subroutine SP_linear_response_A_matrix diff --git a/src/MCQC/SP_linear_response_B_matrix.f90 b/src/MCQC/SP_linear_response_B_matrix.f90 new file mode 100644 index 0000000..6e60338 --- /dev/null +++ b/src/MCQC/SP_linear_response_B_matrix.f90 @@ -0,0 +1,54 @@ +subroutine SP_linear_response_B_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,ERI,B_lr) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + +! Local variables + + double precision :: delta_spin,delta_dRPA + + integer :: i,j,a,b,ia,jb + +! Output variables + + double precision,intent(out) :: B_lr(nS,nS) + +! Singlet or triplet manifold? + + delta_spin = 0d0 + if(ispin == 1) delta_spin = +1d0 + if(ispin == 2) delta_spin = -1d0 + +! Direct RPA + + delta_dRPA = 0d0 + if(dRPA) delta_dRPA = 1d0 + +! Build A matrix + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + B_lr(ia,jb) = 0.5d0*(1d0 + delta_spin)*ERI(i,j,a,b) & + - (1d0 - delta_dRPA)*ERI(i,j,b,a) + + enddo + enddo + enddo + enddo + +end subroutine SP_linear_response_B_matrix diff --git a/src/MCQC/TDHF.f90 b/src/MCQC/TDHF.f90 new file mode 100644 index 0000000..1999792 --- /dev/null +++ b/src/MCQC/TDHF.f90 @@ -0,0 +1,77 @@ +subroutine TDHF(singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ERI,e) + +! Perform random phase approximation calculation + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas),e(nBas) + +! Local variables + + logical :: dRPA,TDA,BSE + integer :: ispin + double precision,allocatable :: Omega(:,:),XpY(:,:,:) + + double precision :: rho + double precision :: EcRPA + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Time-dependent Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Switch on exchange for TDHF + + dRPA = .false. + +! Switch off Tamm-Dancoff approximation for TDHF + + TDA = .false. + +! Switch off Bethe-Salpeter equation for TDHF + + BSE = .false. + +! Memory allocation + + allocate(Omega(nS,nspin),XpY(nS,nS,nspin)) + +! Singlet manifold + + if(singlet_manifold) then + + ispin = 1 + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI, & + rho,EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('TDHF ',ispin,nS,Omega(:,ispin)) + + endif + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'RPA correlation energy =',EcRPA + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + + +! Triplet manifold + + if(triplet_manifold) then + + ispin = 2 + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI, & + rho,EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('TDHF ',ispin,nS,Omega(:,ispin)) + + endif + +end subroutine TDHF diff --git a/src/MCQC/UHF.f90.x b/src/MCQC/UHF.f90.x new file mode 100644 index 0000000..72c539f --- /dev/null +++ b/src/MCQC/UHF.f90.x @@ -0,0 +1,199 @@ +subroutine UHF(nEl,nBas,S,T,V,Hc,G,X,ENuc,EHF,c,e,P,F) + +! Perform unrestricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: nEl(nspin),nBas + double precision,intent(in) :: ENuc + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: G(nBas,nBas,nBas,nBas),X(nBas,nBas) + +! Local variables + + logical :: random_guess,core_guess,DIIS + integer,parameter :: maxSCF = 64 + double precision,parameter :: thresh = 1d-6 + integer :: nO,nSCF,nBasSq,n_diis,ispin,jspin + double precision :: ET(spin),EV(nspin),EJ(nspin,nspin),EK(nspin,nspin),Conv(nspin),Gap(spin) + double precision :: trace_matrix + double precision,allocatable :: FPS_SPF(:,:,:),error_diis(:,:,:),F_diis(:,:,:) + double precision,allocatable :: J(:,:,:),K(:,:,:),cp(:,:,:),cO(:,:,:) + +! Output variables + + double precision,intent(out) :: EHF,c(nBas,nBas,nspin),e(nBas,nspin),P(nBas,nBas,nspin),F(nBas,nBas,nspin) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Unrestricted Hartree-Fock calculation |' + write(*,*)'************************************************' + write(*,*) + +! Useful quantities + + nBasSq = nBas*nBas + +! Number of occupied orbitals + +! Initialize DIIS variables + + DIIS = .false. + n_diis = 5 + if(.not.DIIS) n_diis = 1 + +! Type of guess + + random_guess = .false. + core_guess = .true. + +! Memory allocation + + allocate(J(nBas,nBas,nspin),K(nBas,nBas,nspin), & + cp(nBas,nBas,nspin),cO(nBas,nO,nspin),FPS_SPF(nBas,nBas,nspin), & + error_diis(nBasSq,n_diis,nspin),F_diis(nBasSq,n_diis,spin)) + +! Guess coefficients and eigenvalues + + if(random_guess) then + + call random_number(c) + + elseif(core_guess) then + + cp(:,:,ispin) = matmul(transpose(X(:,:)),matmul(Hc(:,:),X(:,:))) + call diagonalize_matrix(nBas,cp(:,:,ispin),e(:,:,ispin)) + c(:,:,ispin) = matmul(X,cp(:,:,ispin) + + endif + +! Occupied orbitals + + cO(1:nBas,1:nO,1:nspin) = c(1:nBas,1:nO,1:nspin) + +! Initialization + + Conv(:) = 1d0 + nSCF = 0 + F_diis(:,:,:) = 0d0 + error_diis(:,:,:) = 0d0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + write(*,*) + write(*,*)'----------------------------------------------------' + write(*,*)'| UHF calculation |' + write(*,*)'----------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','HF energy','|','Conv','|','HL Gap','|' + write(*,*)'----------------------------------------------------' + + do while(maxval(Conv) > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Density matrix + + P(:,:,ispin) = 2d0*matmul(cO(:,:,ispin),transpose(cO(:,:,ispin))) + +! Build Fock matrix + + call Coulomb_matrix_AO_basis(nBas,P(:,:,ispin),G,J(:,:,ispin)) + call exchange_matrix_AO_basis(nBas,P(:,:,ispin),G,K(:,:,ispin)) + + F(:,:,ispin) = Hc(:,:) + J(:,:,ispin) + J(:,:,mod(ispin,2)+1) + K(:,:,ispin) + +! Check convergence + + FPS_SPF(:,:,ispin) = matmul(F(:,:,ispin),matmul(P(:,:,ispin),S)) & + - matmul(matmul(S,P(:,:,ispin)),F(:,:,ispin)) + Conv(ispin) = maxval(abs(FPS_SPF(:,:,ispin))) + +! DIIS extrapolation + + call prepend(nBasSq,n_diis,error_diis(:,:,ispin),FPS_SPF(:,:,ispin)) + call prepend(nBasSq,n_diis,F_diis(:,:,ispin),F(:,:,ispin)) + call diis(nBasSq,min(n_diis,nSCF),error_diis(:,:,ispin),F_diis(:,:,ispin),F(:,:,ispin)) + +! Diagonalize Fock matrix + + cp(:,:,ispin) = matmul(transpose(X),matmul(F(:,:,ispin),X)) + call diagonalize_matrix(nBas,cp(:,:,ispin),e(:,:,ispin)) + + c(:,:,ispin) = matmul(X,cp(:,:,ispin)) + cO(1:nBas,1:nO,1:nspin) = c(1:nBas,1:nO,1:nspin) + +! Compute HF energy + +! EHF = 0.5d0*trace_matrix(nBas,matmul(P,Hc+F)) + +! Compute HOMO-LUMO gap + + if(nBas > nO) then + + Gap(:) = e(nO+1,:) - e(nO,:) + + else + + Gap(:) = 0d0 + + endif + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',EHF+ENuc,'|',maxval(Conv),'|',minval(Gap),'|' + + enddo + write(*,*)'----------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + + +! Compute HF energy + + EHF = 0d0 + do ispin=1,nspin + + ET(ispin) = trace_matrix(nBas,matmul(P(:,:,ispin),T(:,:,ispin)) + EV(ispin) = trace_matrix(nBas,matmul(P(:,:,ispin),V(:,:,ispin)) + + EHF = EHF + ET(ispin) + EV(ispin) + + do jspin=1,nspin + + EJ(ispin,jspin) = 0.5d0*trace_matrix(nBas,matmul(P(:,:,ispin),J(:,:,jspin)) + EK(ispin,jspin) = 0.5d0*trace_matrix(nBas,matmul(P(:,:,ispin,K(:,:,jspin))) + + EHF = EHF + EJ(ispin,jspin) + EK(ispin,jspin) + + enddo + + enddo + + +! call print_UHF(nBas,nO,e,C,ENuc,ET,EV,EJ,EK,EHF) + +end subroutine UHF diff --git a/src/MCQC/antisymmetrize_ERI.f90 b/src/MCQC/antisymmetrize_ERI.f90 new file mode 100644 index 0000000..034c94a --- /dev/null +++ b/src/MCQC/antisymmetrize_ERI.f90 @@ -0,0 +1,46 @@ +subroutine antisymmetrize_ERI(ispin,nBas,ERI,db_ERI) + +! Antisymmetrize ERIs + + implicit none + +! Input variables + + integer,intent(in) :: ispin,nBas + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: i,j,k,l + +! Output variables + + double precision,intent(out) :: db_ERI(nBas,nBas,nBas,nBas) + + if(ispin == 1) then + + do i=1,nBas + do j=1,nBas + do k=1,nBas + do l=1,nBas + db_ERI(i,j,k,l) = 2d0*ERI(i,j,k,l) - ERI(i,j,l,k) + enddo + enddo + enddo + enddo + + elseif(ispin == 2) then + + do i=1,nBas + do j=1,nBas + do k=1,nBas + do l=1,nBas + db_ERI(i,j,k,l) = ERI(i,j,k,l) - ERI(i,j,l,k) + enddo + enddo + enddo + enddo + + endif + +end subroutine antisymmetrize_ERI diff --git a/src/MCQC/dcgw.f90 b/src/MCQC/dcgw.f90 new file mode 100644 index 0000000..e67ff3b --- /dev/null +++ b/src/MCQC/dcgw.f90 @@ -0,0 +1,84 @@ +function SigC_dcgw(x,y) result(SigC) + +! Degeneracy-corrected GW + + implicit none + include 'parameters.h' + +! Input variables + + double precision,intent(in) :: x,y + +! Local variables + + double precision,parameter :: eta = 0.1d0 + double precision :: r + +! Output variables + + double precision :: SigC + +! Compute the divergence-free term + + r = y/x + +! Bare style + + SigC = y*r + +! DCPT style + +! SigC = -0.5d0*x*(1d0-sqrt(1d0+4d0*r*r)) + +! QDPT style + +! SigC = y*r/sqrt(1d0+4d0*r*r) + +! Infinitesimal + +! SigC = y*y*x/(x*x+eta*eta) + +end function SigC_dcgw + +function Z_dcgw(x,y) result(Z) + + +! Derivative of the degeneracy-corrected GW + + implicit none + include 'parameters.h' + +! Input variables + + double precision,intent(in) :: x,y + +! Local variables + + double precision,parameter :: eta = 1d0 + double precision :: r + +! Output variables + + double precision :: Z + +! Compute the divergence-free term + + r = y/x + +! Bare style + + Z = r*r + +! DCPT style + +! Z = 0.5d0*(1d0-1d0/sqrt(1d0+4d0*r*r)) + +! QDPT style + +! Z = r/sqrt(1d0+4d0*r*r)/(1d0+4d0*r*r) + +! Infinitesimal + +! Z = y*y*(x*x-eta*eta)/(x*x+eta*eta)**2 + +end function Z_dcgw diff --git a/src/MCQC/density.f90 b/src/MCQC/density.f90 new file mode 100644 index 0000000..90a17c1 --- /dev/null +++ b/src/MCQC/density.f90 @@ -0,0 +1,51 @@ +subroutine density(doDrift,nBas,nWalk,P,gAO,dgAO,g,dg) + +! Calculate the Green functions + + implicit none + +! Input variables + + logical,intent(in) :: doDrift + integer,intent(in) :: nBas,nWalk + double precision,intent(in) :: P(nBas,nBas),gAO(nWalk,2,nBas),dgAO(nWalk,2,3,nBas) + +! Local variables + + integer :: iW,iEl,ixyz,mu,nu + +! Output variables + + double precision,intent(out) :: g(nWalk,2),dg(nWalk,2,3) + + g = 0d0 + do iW=1,nWalk + do iEl=1,2 + do mu=1,nBas + do nu=1,nBas + g(iW,iEl) = g(iW,iEl) + gAO(iW,iEl,mu)*P(mu,nu)*gAO(iW,iEl,nu) + enddo + enddo + enddo + enddo + + if(doDrift) then + + dg = 0d0 + do iW=1,nWalk + do iEl=1,2 + do ixyz=1,3 + do mu=1,nBas + do nu=1,nBas + dg(iW,iEl,ixyz) = dg(iW,iEl,ixyz) & + + P(mu,nu)*(dgAO(iW,iEl,ixyz,mu)*gAO(iW,iEl,nu) & + + gAO(iW,iEl,mu)*dgAO(iW,iEl,ixyz,nu)) + enddo + enddo + enddo + enddo + enddo + + endif + +end subroutine density diff --git a/src/MCQC/density_matrix.f90 b/src/MCQC/density_matrix.f90 new file mode 100644 index 0000000..3556388 --- /dev/null +++ b/src/MCQC/density_matrix.f90 @@ -0,0 +1,30 @@ +subroutine density_matrix(nBas,ON,c,P) + +! Compute density matrix based on the occupation numbers + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: ON(nBas),c(nBas,nBas) + +! Local variables + + integer :: mu,nu,i + +! Output variables + + double precision,intent(out) :: P(nBas,nBas) + + P(:,:) = 0d0 + + do mu=1,nBas + do nu=1,nBas + do i=1,nBas + P(mu,nu) = P(mu,nu) + 2d0*ON(i)*c(mu,i)*c(nu,i) + enddo + enddo + enddo + +end subroutine density_matrix diff --git a/src/MCQC/drift.f90 b/src/MCQC/drift.f90 new file mode 100644 index 0000000..0a002e0 --- /dev/null +++ b/src/MCQC/drift.f90 @@ -0,0 +1,50 @@ +subroutine drift(nWalk,r,r12,g,dg,F) + +! Compute quantum force + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nWalk + double precision,intent(in) :: r(nWalk,2,3),r12(nWalk),g(nWalk,2),dg(nWalk,2,3) + +! Local variables + + logical :: smoothDrift + double precision :: rij,rijSq,w,wSq,damp + integer :: iW + +! Output variables + + double precision,intent(out) :: F(nWalk,2,3) + +! Compute + + smoothDrift = .false. + w = 0.1d0 + wSq = w*w + + do iW=1,nWalk + + rij = r12(iW) + rijSq = rij*rij + + F(iW,1,1:3) = dg(iW,1,1:3)/g(iW,1) + F(iW,2,1:3) = dg(iW,2,1:3)/g(iW,2) + + if(smoothDrift) then + damp = 1d0 + 2d0*w/sqrt(pi)*rij*exp(-wSq*rijSq)/erfc(w*rij) + else + damp = 1d0 + endif + + F(iW,1,1:3) = F(iW,1,1:3) - damp*(r(iW,2,1:3) - r(iW,1,1:3))/rijSq + F(iW,2,1:3) = F(iW,2,1:3) - damp*(r(iW,2,1:3) - r(iW,1,1:3))/rijSq + + enddo + +! print*,' F',F + +end subroutine drift diff --git a/src/MCQC/eNcusp.f90.x b/src/MCQC/eNcusp.f90.x new file mode 100644 index 0000000..01381b0 --- /dev/null +++ b/src/MCQC/eNcusp.f90.x @@ -0,0 +1,42 @@ +subroutine eNcusp(nEl,nBas,S,T,V,G,X,ENuc,EHF,c,e,P,F) + +! Perform restricted Hartree-Fock calculation + + implicit none + +! Input variables + + integer,intent(in) :: nEl,nBas + double precision,intent(in) :: ENuc,EHF + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),G(nBas,nBas,nBas,nBas),X(nBas,nBas) + double precision,intent(out) :: c(nBas,nBas),e(nBas),P(nBas,nBas),F(nBas,nBas) + +! Local variables + + integer,parameter :: maxSCF = 128 + double precision,parameter :: thresh = 1d-6 + integer :: nO,nSCF,lwork,info + double precision :: ET,EV,Conv,Gap + double precision,allocatable :: Hc(:,:),cp(:,:),cO(:,:),Fp(:,:),work(:) + + integer :: mu,nu,lambda,sigma,i + +! Output variables + +! Number of occupied orbitals + if(mod(nEl,2) /= 0) then + write(*,*) 'closed-shell system required!' + stop + endif + nO = nEl/2 + +! Memory allocation + allocate(Hc(nBas,nBas),cp(nBas,nBas),cO(nBas,nO),Fp(nBas,nBas)) + lwork = 3*nBas + allocate(work(lwork)) + +! Core Hamiltonian + Hc = T + V + + +end subroutine eNcusp diff --git a/src/MCQC/evGW.f90 b/src/MCQC/evGW.f90 new file mode 100644 index 0000000..12bfb51 --- /dev/null +++ b/src/MCQC/evGW.f90 @@ -0,0 +1,207 @@ +subroutine evGW(maxSCF,thresh,max_diis,COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold,linearize, & + nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,ERI_AO_basis,ERI_MO_basis,PHF,cHF,eHF,eG0W0) + +! Perform self-consistent eigenvalue-only GW calculation + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF,max_diis + double precision,intent(in) :: thresh,ENuc,ERHF + logical,intent(in) :: COHSEX,SOSEX,BSE,TDA,G0W,GW0 + logical,intent(in) :: singlet_manifold,triplet_manifold,linearize + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: cHF(nBas,nBas),eHF(nBas),eG0W0(nBas),Hc(nBas,nBas),PHF(nBas,nBas) + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas),ERI_MO_basis(nBas,nBas,nBas,nBas) + +! Local variables + + logical :: dRPA,linear_mixing + integer :: ispin,nSCF,n_diis + double precision :: Conv,EcRPA,lambda + double precision,allocatable :: error_diis(:,:),e_diis(:,:) + double precision,allocatable :: eGW(:),eOld(:),Z(:) + double precision,allocatable :: H(:,:),SigmaC(:) + double precision,allocatable :: Omega(:,:),XpY(:,:,:),rho(:,:,:,:),rhox(:,:,:,:) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Self-consistent evGW calculation |' + write(*,*)'************************************************' + write(*,*) + +! SOSEX correction + + if(SOSEX) write(*,*) 'SOSEX correction activated!' + write(*,*) + +! Switch off exchange for G0W0 + + dRPA = .true. + +! Linear mixing + + linear_mixing = .false. + lambda = 0.2d0 + +! Memory allocation + + allocate(eGW(nBas),eOld(nBas),Z(nBas), & + H(nBas,nBas),SigmaC(nBas), & + Omega(nS,nspin),XpY(nS,nS,nspin), & + rho(nBas,nBas,nS,nspin),rhox(nBas,nBas,nS,nspin), & + error_diis(nBas,max_diis),e_diis(nBas,max_diis)) + +! Initialization + + nSCF = 0 + ispin = 1 + n_diis = 0 + Conv = 1d0 + e_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + eGW(:) = eG0W0(:) + eOld(:) = eGW(:) + Z(:) = 1d0 + +! Compute Hartree Hamiltonian in the MO basis + + call Hartree_matrix_MO_basis(nBas,cHF,PHF,Hc,ERI_AO_basis,H) + +!------------------------------------------------------------------------ +! Main loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF <= maxSCF) + + ! Compute linear response + + if(.not. GW0 .or. nSCF == 0) then + + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,eGW,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + + endif + +! Compute correlation part of the self-energy + + call excitation_density(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + if(SOSEX) call excitation_density_SOSEX(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rhox(:,:,:,ispin)) + + ! Correlation self-energy + + if(G0W) then + + call self_energy_correlation_diag(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,eHF, & + Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),SigmaC) + call renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,eHF,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),Z) + + else + + call self_energy_correlation_diag(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,eGW, & + Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),SigmaC) + call renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,eGW,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),Z) + + endif + + ! Solve the quasi-particle equation (linearized or not) + + if(linearize) then + + eGW(:) = eHF(:) + Z(:)*SigmaC(:) + + else + + eGW(:) = eHF(:) + SigmaC(:) + + endif + + ! Convergence criteria + + Conv = maxval(abs(eGW - eOld)) + + ! Print results + + call print_excitation('RPA ',ispin,nS,Omega(:,ispin)) + call print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigmaC,Z,eGW,EcRPA) + + ! Linear mixing or DIIS extrapolation + + if(linear_mixing) then + + eGW(:) = lambda*eGW(:) + (1d0 - lambda)*eOld(:) + + else + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBas,nBas,n_diis,error_diis,e_diis,eGW-eOld,eGW) + + endif + + ! Save quasiparticles energy for next cycle + + eOld(:) = eGW(:) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main loop +!------------------------------------------------------------------------ + +! Plot stuff + + call plot_GW(nBas,nC,nO,nV,nR,nS,eHF,eGW,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin)) + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + if(BSE) stop + + endif + +! Perform BSE calculation + + if(BSE) then + + ! Singlet manifold + if(singlet_manifold) then + + ispin = 1 + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,eGW,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + ! Triplet manifold + if(triplet_manifold) then + + ispin = 2 + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,eGW,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call excitation_density(nBas,nC,nO,nR,nS,cHF,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,eGW,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + endif + +end subroutine evGW diff --git a/src/MCQC/exchange_matrix_AO_basis.f90 b/src/MCQC/exchange_matrix_AO_basis.f90 new file mode 100644 index 0000000..b60a59a --- /dev/null +++ b/src/MCQC/exchange_matrix_AO_basis.f90 @@ -0,0 +1,35 @@ +subroutine exchange_matrix_AO_basis(nBas,P,G,K) + +! Compute exchange matrix in the AO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: G(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(out) :: K(nBas,nBas) + + K = 0d0 + do nu=1,nBas + do si=1,nBas + do la=1,nBas + do mu=1,nBas + K(mu,nu) = K(mu,nu) + P(la,si)*G(mu,la,si,nu) + enddo + enddo + enddo + enddo + + K = -0.5d0*K + +end subroutine exchange_matrix_AO_basis diff --git a/src/MCQC/exchange_matrix_MO_basis.f90 b/src/MCQC/exchange_matrix_MO_basis.f90 new file mode 100644 index 0000000..5cb13b1 --- /dev/null +++ b/src/MCQC/exchange_matrix_MO_basis.f90 @@ -0,0 +1,26 @@ +subroutine exchange_matrix_MO_basis(nBas,c,P,G,K) + +! Compute exchange matrix in the MO basis + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: c(nBas,nBas),P(nBas,nBas) + double precision,intent(in) :: G(nBas,nBas,nBas,nBas) + +! Output variables + + double precision,intent(out) :: K(nBas,nBas) + +! Compute Hartree Hamiltonian in the AO basis + + call exchange_matrix_AO_basis(nBas,P,G,K) + +! Transform Coulomb matrix in the MO basis + + K = matmul(transpose(c),matmul(K,c)) + +end subroutine exchange_matrix_MO_basis diff --git a/src/MCQC/excitation_density.f90 b/src/MCQC/excitation_density.f90 new file mode 100644 index 0000000..db8f222 --- /dev/null +++ b/src/MCQC/excitation_density.f90 @@ -0,0 +1,65 @@ +subroutine excitation_density(nBas,nC,nO,nR,nS,c,G,XpY,rho) + +! Compute excitation densities + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nR,nS + double precision,intent(in) :: c(nBas,nBas),G(nBas,nBas,nBas,nBas),XpY(nS,nS) + +! Local variables + + double precision,allocatable :: scr(:,:,:) + integer :: mu,nu,la,si,ia,jb,x,y,j,b + +! Output variables + + double precision,intent(out) :: rho(nBas,nBas,nS) + +! Memory allocation + allocate(scr(nBas,nBas,nS)) + + rho(:,:,:) = 0d0 + do nu=1,nBas + do si=1,nBas + do ia=1,nS + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + rho(nu,si,ia) = rho(nu,si,ia) + c(nu,j)*XpY(ia,jb)*c(si,b) + enddo + enddo + enddo + enddo + enddo + + scr(:,:,:) = 0d0 + do mu=1,nBas + do la=1,nBas + do ia=1,nS + do nu=1,nBas + do si=1,nBas + scr(mu,la,ia) = scr(mu,la,ia) + G(mu,nu,la,si)*rho(nu,si,ia) + enddo + enddo + enddo + enddo + enddo + + rho(:,:,:) = 0d0 + do ia=1,nS + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do mu=1,nBas + do la=1,nBas + rho(x,y,ia) = rho(x,y,ia) + c(mu,x)*scr(mu,la,ia)*c(la,y) + enddo + enddo + enddo + enddo + enddo + +end subroutine excitation_density diff --git a/src/MCQC/excitation_density_SOSEX.f90 b/src/MCQC/excitation_density_SOSEX.f90 new file mode 100644 index 0000000..53c9a66 --- /dev/null +++ b/src/MCQC/excitation_density_SOSEX.f90 @@ -0,0 +1,65 @@ +subroutine excitation_density_SOSEX(nBas,nC,nO,nR,nS,c,G,XpY,rho) + +! Compute excitation densities + + implicit none + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nR,nS + double precision,intent(in) :: c(nBas,nBas),G(nBas,nBas,nBas,nBas),XpY(nS,nS) + +! Local variables + + double precision,allocatable :: scr(:,:,:) + integer :: mu,nu,la,si,ia,jb,x,y,j,b + +! Output variables + + double precision,intent(out) :: rho(nBas,nBas,nS) + +! Memory allocation + allocate(scr(nBas,nBas,nS)) + + rho(:,:,:) = 0d0 + do nu=1,nBas + do si=1,nBas + do ia=1,nS + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + rho(nu,si,ia) = rho(nu,si,ia) + c(nu,j)*XpY(ia,jb)*c(si,b) + enddo + enddo + enddo + enddo + enddo + + scr(:,:,:) = 0d0 + do mu=1,nBas + do la=1,nBas + do ia=1,nS + do nu=1,nBas + do si=1,nBas + scr(mu,la,ia) = scr(mu,la,ia) + G(mu,nu,la,si)*rho(nu,si,ia) + enddo + enddo + enddo + enddo + enddo + + rho(:,:,:) = 0d0 + do ia=1,nS + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do mu=1,nBas + do la=1,nBas + rho(x,y,ia) = rho(x,y,ia) + c(mu,x)*scr(mu,la,ia)*c(la,y) + enddo + enddo + enddo + enddo + enddo + +end subroutine excitation_density_SOSEX diff --git a/src/MCQC/form_CABS.f90.x b/src/MCQC/form_CABS.f90.x new file mode 100644 index 0000000..73a279f --- /dev/null +++ b/src/MCQC/form_CABS.f90.x @@ -0,0 +1,60 @@ +subroutine form_CABS(nBas_OBS,nBas_ABS,c_OBS,c_ABS,S_ABS) + +! Perform configuration interaction single calculation` + + implicit none + +! Input variables + + integer,intent(in) :: nBas_OBS,nBas_ABS + double precision,intent(in) :: S_ABS(nBas,nBas),c_OBS(nBas_OBS,nBas_OBS) + +! Local variables + + integer :: + double precision :: thresh = 1d-07 + integer :: i,j,a,b + +! Output variables + + double precision,intent(out) :: c_ABS(nBas_ABS,nBas_ABS) + + allocate(c(nBas_ABS,nBAs_OBS)) + + c = 0d0 + c(1:nBas_OBS,1:nBas_OBS) = c_OBS(1:nBas_OBS,1:nBAs_OBS) + + c_ABS = 0d0 + do i=1,nBas_ABS + c_ABS(i,i) = 1d0 + enddo + + v_ABS = S_ABS + + call DiagMat(nBas_ABS,v_ABS,e_ABS) + + nLD = 0 + do i=1,nBas_ABS + if(abs(e_ABS(i)) < thresh) nLD = nLD +1 + enddo + write(*,*) 'Number of linear dependencies in ABS',nLD + + call DoSVD(nBas_ABS,S_ABS,u,v,w) + +! do a SVD of S_ABS to get u, v and w + + X_ABS = 0d0 + do i=1,nBas_ABS + do j=1,nBas_ABS + do k=1,nBas_ABS + X_ABS(i,k) = X_ABS(i,k) + v_ABS(i,j)*e_ABS(j)*v_ABS(k,j) + enddo + enddo + enddo + + cp_ABS = matmul(X_ABS,c_ABS) + + S12 = matmul(transpose(c),matmul(S_ABS,cp_ABS)) + + +end subroutine form_CABS diff --git a/src/MCQC/generate_shell.f90 b/src/MCQC/generate_shell.f90 new file mode 100644 index 0000000..0a13b8f --- /dev/null +++ b/src/MCQC/generate_shell.f90 @@ -0,0 +1,30 @@ +subroutine generate_shell(atot,nShellFunction,ShellFunction) + + implicit none + +! Input variables + + integer,intent(in) :: atot,nShellFunction + +! Local variables + + integer :: ax,ay,az,ia + +! Output variables + + integer,intent(out) :: ShellFunction(nShellFunction,3) + + ia = 0 + do ax=atot,0,-1 + do az=0,atot + ay = atot - ax - az + if(ay >= 0) then + ia = ia + 1 + ShellFunction(ia,1) = ax + ShellFunction(ia,2) = ay + ShellFunction(ia,3) = az + endif + enddo + enddo + +end subroutine generate_shell diff --git a/src/MCQC/initialize_random_generator.f90 b/src/MCQC/initialize_random_generator.f90 new file mode 100644 index 0000000..189c36b --- /dev/null +++ b/src/MCQC/initialize_random_generator.f90 @@ -0,0 +1,25 @@ +subroutine initialize_random_generator(iSeed) + +! Initialize random number generator + + implicit none + +! Input variables + + integer,intent(in) :: iSeed + +! Local variables + + integer,allocatable :: Seed(:) + integer :: nSeed + + call random_seed(size = nSeed) + allocate(Seed(nSeed)) + call random_seed(get=Seed) + if(iSeed /= 0) then + Seed = 0 + Seed(1) = iSeed + endif + call random_seed(put=Seed) + +end subroutine initialize_random_generator diff --git a/src/MCQC/linear_response.f90 b/src/MCQC/linear_response.f90 new file mode 100644 index 0000000..7a21e58 --- /dev/null +++ b/src/MCQC/linear_response.f90 @@ -0,0 +1,81 @@ +subroutine linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI,rho,EcRPA,Omega,XpY) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA,TDA,BSE + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas),rho(nBas,nBas,nS) + +! Local variables + + double precision :: trace_matrix + double precision,allocatable :: A(:,:),B(:,:),ApB(:,:),AmB(:,:),AmBSq(:,:),Z(:,:) + +! Output variables + + double precision,intent(out) :: EcRPA + double precision,intent(out) :: Omega(nS),XpY(nS,nS) + + +! Memory allocation + + allocate(A(nS,nS),B(nS,nS),ApB(nS,nS),AmB(nS,nS),AmBSq(nS,nS),Z(nS,nS)) + +! Build A and B matrices + + call linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,e,ERI,A) + if(BSE) call Bethe_Salpeter_A_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,A) + +! Tamm-Dancoff approximation + + B = 0d0 + if(.not. TDA) then + + call linear_response_B_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,ERI,B) + if(BSE) call Bethe_Salpeter_B_matrix(nBas,nC,nO,nV,nR,nS,ERI,Omega,rho,B) + + endif + +! Build A + B and A - B matrices + + AmB = A - B + ApB = A + B + +! print*,'A+B' +! call matout(nS,nS,ApB) + +! print*,'A-B' +! call matout(nS,nS,AmB) + +! Diagonalize TD-HF matrix + + call diagonalize_matrix(nS,AmB,Omega) + + if(minval(Omega) < 0d0) & + call print_warning('You may have instabilities in linear response!!') + + call ADAt(nS,AmB,sqrt(Omega),AmBSq) + Z = matmul(AmBSq,matmul(ApB,AmBSq)) + + call diagonalize_matrix(nS,Z,Omega) + + if(minval(Omega) < 0d0) & + call print_warning('You may have instabilities in linear response!!') + + Omega = sqrt(Omega) + XpY = matmul(transpose(Z),AmBSq) + call DA(nS,1d0/sqrt(Omega),XpY) + +! print*,'RPA excitations' +! call matout(nS,1,Omega) + +! Compute the RPA correlation energy + + EcRPA = 0.5d0*(sum(Omega) - trace_matrix(nS,A)) + +end subroutine linear_response diff --git a/src/MCQC/linear_response_A_matrix.f90 b/src/MCQC/linear_response_A_matrix.f90 new file mode 100644 index 0000000..c61ffd9 --- /dev/null +++ b/src/MCQC/linear_response_A_matrix.f90 @@ -0,0 +1,56 @@ +subroutine linear_response_A_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,e,ERI,A_lr) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),ERI(nBas,nBas,nBas,nBas) + +! Local variables + + double precision :: delta_spin,delta_dRPA + double precision :: Kronecker_delta + + integer :: i,j,a,b,ia,jb + +! Output variables + + double precision,intent(out) :: A_lr(nS,nS) + +! Singlet or triplet manifold? + + delta_spin = 0d0 + if(ispin == 1) delta_spin = +1d0 + if(ispin == 2) delta_spin = -1d0 + +! Direct RPA + + delta_dRPA = 0d0 + if(dRPA) delta_dRPA = 1d0 + +! Build A matrix + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + A_lr(ia,jb) = (e(a) - e(i))*Kronecker_delta(i,j)*Kronecker_delta(a,b) & + + (1d0 + delta_spin)*ERI(i,b,a,j) & + - (1d0 - delta_dRPA)*ERI(i,b,j,a) + + enddo + enddo + enddo + enddo + +end subroutine linear_response_A_matrix diff --git a/src/MCQC/linear_response_B_matrix.f90 b/src/MCQC/linear_response_B_matrix.f90 new file mode 100644 index 0000000..17e5a85 --- /dev/null +++ b/src/MCQC/linear_response_B_matrix.f90 @@ -0,0 +1,54 @@ +subroutine linear_response_B_matrix(ispin,dRPA,nBas,nC,nO,nV,nR,nS,ERI,B_lr) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: dRPA + integer,intent(in) :: ispin,nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + +! Local variables + + double precision :: delta_spin,delta_dRPA + + integer :: i,j,a,b,ia,jb + +! Output variables + + double precision,intent(out) :: B_lr(nS,nS) + +! Singlet or triplet manifold? + + delta_spin = 0d0 + if(ispin == 1) delta_spin = +1d0 + if(ispin == 2) delta_spin = -1d0 + +! Direct RPA + + delta_dRPA = 0d0 + if(dRPA) delta_dRPA = 1d0 + +! Build A matrix + + ia = 0 + do i=nC+1,nO + do a=nO+1,nBas-nR + ia = ia + 1 + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + + B_lr(ia,jb) = (1d0 + delta_spin)*ERI(i,j,a,b) & + - (1d0 - delta_dRPA)*ERI(i,j,b,a) + + enddo + enddo + enddo + enddo + +end subroutine linear_response_B_matrix diff --git a/src/MCQC/natural_orbital.f90 b/src/MCQC/natural_orbital.f90 new file mode 100644 index 0000000..14717a9 --- /dev/null +++ b/src/MCQC/natural_orbital.f90 @@ -0,0 +1,57 @@ +subroutine natural_orbital(nBas,nO,cHF,c) + +! Compute natural orbitals and natural occupancies + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: cHF(nBas,nBas),c(nBas,nBas) + +! Local variables + + integer :: i,j,k + double precision,allocatable :: eNO(:),cNO(:,:),P(:,:) + +! Allocate + + allocate(eNO(nBas),cNO(nBas,nBas),P(nBas,nBas)) + +! Compute density matrix + + P = matmul(transpose(cHF),cHF) + + call matout(nBas,nBas,P) + + cNO = 0d0 + + do i=1,nBas + do j=1,nBas + do k=1,1 + cNO(i,j) = cNO(i,j) + 2d0*P(i,k)*P(j,k) + enddo + enddo + enddo + +! cNO(:,:) = matmul(c(:,1:nO),transpose(c(:,1:nO))) + +! cNO = matmul(transpose(cHF),matmul(cNO,cHF)) + + call diagonalize_matrix(nBas,cNO,eNO) + +! Print results + + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' Natural orbitals ' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,nBas,cNO) + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' Natural occupancies' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,1,eNO) + write(*,*) + +end subroutine natural_orbital diff --git a/src/MCQC/norm_trial.f90 b/src/MCQC/norm_trial.f90 new file mode 100644 index 0000000..4ca9e9c --- /dev/null +++ b/src/MCQC/norm_trial.f90 @@ -0,0 +1,53 @@ +subroutine norm_trial(nBas,nO,c,P,Norm,NormSq) + +! Initialize weight function + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nO + double precision,intent(inout):: c(nBas,nO),P(nBas,nBas) + +! Local variables + + double precision,allocatable :: S(:,:),T(:,:),V(:,:),Hc(:,:),G(:,:,:,:) + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(inout):: Norm,NormSq + +! Memory allocation for one- and two-electron integrals + + allocate(S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),G(nBas,nBas,nBas,nBas)) + +! Read integrals + + call read_integrals(nBas,S,T,V,Hc,G) + +! Compute normalization factor + + P = 2d0*matmul(c,transpose(c)) + + Norm = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + Norm = Norm + P(mu,nu)*P(la,si)*G(mu,la,nu,si) + enddo + enddo + enddo + enddo + + Norm = Norm*Norm + NormSq = Norm*Norm + + write(*,*) + write(*,*) 'Normalization of trial wave function: ',Norm + write(*,*) + +end subroutine norm_trial diff --git a/src/MCQC/obj/ADC.o b/src/MCQC/obj/ADC.o new file mode 100644 index 0000000000000000000000000000000000000000..f736d0ef141132eec02b5fe7f8ecff2527208c1f GIT binary patch literal 5328 zcmds5U2Ggz6~6Pg9($dw6Nkj52~5xy9LRdtt{b+vA>P^v>*BN_*woOb!+Lkt9T znb}Po(o(l>+N@kdqQ2y*_z?+^`cR3g6l7>5eqIU)i9R3&2?+`+5FsG~MKRx*xp&82 z+cZHuapakE&UerG?wNb<+_~O2|M{nzZH!3@!wr{;>n*w&xFC1pnj(J-`OCJT;RcTp zJ~$a&yqTG1&6=x)B&IoWWNISxg%yrea0-hxv~Y!G)EuFoH*JH8|HjH zH0Y2t_-GF1@vt0PSE6ZJvrRI@wbnO9$q>PJ91l*=Meq?(l(AWA7b5DjonnQs*7~Y^ zJ}-0L+4dmw3ix&!+ziBH6LcmegA=X@*g!H1X5k8d46@!tE5xc#2<2_Jgh z_zeK)!R4>@SVuFAf(ZXH>YybzwUeiaU1HkB=g9z#+#YXjWup& zCdV3o%S?^LWO5qu6)H2ZI%afiP%3`d5xMZXiFq@Q%Lv zN_-jd|4EH6zTn4X7sun-?BYaxIJ;Pjr~R>@ZnFzlQx{fh7l@vgMnK-b@;{&_>ObsX zU0uzLj`S7pOR?g!DT5jdG<>FIn)PU|5z6xvLVB=DIrD^hJ)R(mYH(5BK?CU#v_yFlL&ORLmNEETBU zfYS(65APvRx=#^Rsm$07HQ<@o0)3I|OI%;!dRbHBygypgx07cCdCVUd*i8EJ2^twm zj17$oEwbOxph3jAFkbfm`@k&WJ4#D{FS3Winc>1CC|<$f(7g)s=3;%k*s@e65rQcDLG=5N;x+7ASa4?apR!df*kaN%4PXEXI?(IwQX!MXT)e9EWW$`j4Cq2{$`ihqvbt~2B z%3ShvJ(oX~^xS;%*vMx_#4!hZdoVEm=*YV2TDem1DcdO=O7CY%FP1!B8a#tFW4Qr7 z2>cLmRmv6eOrpE^&aP)WfKk^xoDxe`%`E2}yI3g|kU;nxdety6c%}_)SE;R>oAdHT zL{nE?#8jJgEpHYG74;w?h%pPc?eVB*33H}%!v8+}h(je3hjN)kB2K00>F~}py)Jle z)9Z;uEI5Zjpj5vPaVMz@D(!N|I{Zc$*d#QcfzLnaX78($E{7ll!zY$k1&?$*1b4@4FHF8!4U zI=4$Zq%M5+F9xo%Z&Qk2JA8z@lqhGz zE&e3|)+KCl%m&sYY;hC?W(b>(C?vpog-ss=5@0D|e=L9qOAC7lb3>xAv)5JO+|NM@ z6gI6#5+W4#;SlQ;b|%COVUL7ZkFbw~SeLMAW$`|AVHY^&7bu)lA$UU-jvIpWnsCmA z;6+V1^C5Ui6VCG?ctsP=H$!k)6V4kUcwH6FPebsADx9B(;JhZBw?gouCY);_cu5n^ z??Uj3CY%UgG8m9$O*mp3_D3lg#Ethfhh$b~!WPpZv#+qDygNZg*j6&t_s6aA(ldX|~HS?2PsWX^4t`Hfr2JlD(=3s`1PZSv$# zZK$38iwLHX{zsq0xYNgw*BD(k{oE#(|I)% zG29^%So2Ua>%(1=-i>X;U7|&TOJd@<0KbZVealu2r-r^+xR7?SvEk>b-TDs2t|_|> z#ePZI{fuHyDZ8f>`+jBjOZu51{`|HpsZ|}Ex`-{ANk+(kw zP5Ebe`$^tD$$dJQL-rcDAud81xV~||I^670i%xE A8~^|S literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/ADC2.o b/src/MCQC/obj/ADC2.o new file mode 100644 index 0000000000000000000000000000000000000000..83b60fa1dbc4305baa31a315392d8a59cc7e68db GIT binary patch literal 20152 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/AO_values.o b/src/MCQC/obj/AO_values.o new file mode 100644 index 0000000000000000000000000000000000000000..8d94e7cbaa3904bd651c978341c0bbe79e1e3ea2 GIT binary patch literal 8852 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 DHPLuO literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/AOtoMO_integral_transform.o b/src/MCQC/obj/AOtoMO_integral_transform.o new file mode 100644 index 0000000000000000000000000000000000000000..d361c5cdcd3a62ed5c68e8068d21fc78031235bf GIT binary patch literal 7276 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/AOtoMO_oooa.o b/src/MCQC/obj/AOtoMO_oooa.o new file mode 100644 index 0000000000000000000000000000000000000000..53153346e552a90a063f4d50d851a58802f18c0b GIT binary patch literal 10568 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/AOtoMO_oovv.o b/src/MCQC/obj/AOtoMO_oovv.o new file mode 100644 index 0000000000000000000000000000000000000000..f1afc2b9c5362297551efe00a28c9596c981a39f GIT binary patch literal 9400 zcmc&)e{|E=b^ks|h%dHd37d9qM;c{OHhYb+O;}Mz$PT zGA09;#CFHGjtC?<8Qo!PcDA#%i+94w$ypd{I-3ACOS&*ps7ad~AD|g&Mj*5)CK-62 z`+i8WP0rFkmVOW4@4NTD`|i8%-p{-5t1o{2qjOj18V0i)c;I&6-cAn>Zd_l$Z4&

5xU-k8j)`a#; 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 U?1iwglFPrPsWM_K=&m&W7pVy51poj5 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/AOtoMO_transform.o b/src/MCQC/obj/AOtoMO_transform.o new file mode 100644 index 0000000000000000000000000000000000000000..d4f0bfb0c586d0b5a6abcdc9bc79257b5ddc9763 GIT binary patch literal 5872 zcmd5=e{2)i9e-y#=7NLI1h!?`7>DX?r zDNxQgMtQQ-eicY4WFjs`WXEUHhN>qrF$*Z?+ez!Af^<|8GL>U0H!>(nm)cqAR#JK* ztD60mZ#QjPW0AwXhY}4_WGC<;M+WM}d4M*R9{AKAn+%NQ`9&(s7{d5!XIp#*@F9^8 z9%*@4ca~o|m(mbXlvv$OUM<3;jP#TT$ox0WIBB(oQsZmF54+)A zk`4{MjCo5!>%>*l@6eENun8;>D;#+mY*I;@Fn!{ss&`G7;+w}YCY4In2@4M*M5HsG zQBw}S!by!6_kAo4p5fx$n^NP=eHY@TEfcNLD{^TdI3W+7+4EOPGh%?8KHm7Z?>z-`RR~B2 zPT`8!w!P^)P1~DxoTPoJc!ojOFg>ZbIk@w<3+53_$AUisDM6BtQ4IB;PqF_B?Zu~p zKSl|*b08Vd80d^=g4(ZA41IYpGJ60NjQLGr+F-zEYcJA@u2hbll;_~pQ)Rf#7B0lc% z;5W}-`~3<_i41x@_=WVJb9t&EYPLV(L2`esB}6N*hB8`$H*G!-9?dYoqWrf3_;vLW zx;+r?yPL2Qj@5#7d>O7k(JvjVgV4wRzZLQTypcG>uuQqN>$iw&G~IwLw>}bS5F6^E zbrCU?YL}bguHszgVB$lCTp_P^h0F~#l;4}})G~Q7l+7lRTE0I73n~xGAq37VqLI32 z3^}q!A*ZfLYPwo4hPuVj1`w%q4o|H4bTX9Hx(XRJAL>mQJz}_!*TcBRGT~-5lS$~| z?qo7-CKJx2JFT91?{8SHERTf}y}cPV)RoZt(z)pUb<64^)El0V%oMs*!n>L_7+Tu~ z1#8QvG(B6FYK)NZmOLa2&(iYY7G3M@)cV7_3yI{ea9)QUuX$s$`9hk*V^1XXTzm!O zj_*(Hu5_+zMZ;p^<`SBrWi{ssgqr~=CKKMKvb_W2@5yy0@(_XgZ(-GXlF<1OI&L&3 zpz{TosAr&4u?)=Iq^&Ij+`@KE)4aHpvEh4zZI+_!N$5&c$tH|!Ap?{#2zVB*JGs^? zT^hLI0|UTD36?tO8V8Lz=zxPRbI{*7=yC^r+d=PlQ2epO4?&6iPvKTcD*5L?&W0l{ z{}L+DtmAGa;YX+iL5f1LF3++0pHhs zKUl@1!zwQahiOj*u~2!Q3nD6FM4lI`Le=X7+G=>vtk^Uc-p65JB_91|`@jzUN}oIr z!Ky_N9tLHOg~4ZU5xCh62FYwL(#JEM9Wnt6Fult0t6_S;!9=FB&mY9rGW{!#Uxeuq z`Y<=?JLh7ZC5UG?Gkq1s%w$-n#c_-Sm%94x@}b_e5`&b|O>c<8t%)Ps*)Xy&fTqU~QcHpVE^6uj6jh{A8)#(}r2Ps0 ziS`%iK%S(M!mN9d!aREKfB=ah?@bRVFU>rg19+VpII=B9$7Z!XM%&7xZcxBH7lF=^ zjwRH))sE^YkE)`k`L@f(duK##ERSN-e#(xTF+Ufm>6-1bwVY*)n*MIPZ1U0(uA!2% zSDGDs4``MZ|K^b(cE+ZTzH6ts;bu~P8o+IQ8V36h?mW}>7^GTaQ^8g-rLomH1u|89 zab4s-xO3c1{~Wk;SRq^-x$P0hjH;w1gO^)a=ia@J?{EuGyLZDq<>ilgU5l&vqx^Bc znm3NR!qxmJKhA%^8y)dzs2UDm5w>Q@Myr+@wJD;;%fE_z#UAxY&Q7U9{f-55tDvB|jv<{?qKiJ|xcm zL;MEx1t4N=11M9vrarZgfAvi5*Om2SWqtTFsvFLvcs5nEyrSy5rccFm_zjlMs?3nm nRh7Ug4u5$OrF?}dQzNaTo}xF9OmjVHm8^eEqtL@E0(txk%vyV4 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/Bethe_Salpeter_A_matrix.o b/src/MCQC/obj/Bethe_Salpeter_A_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..fb927704dd2f4e61c0112c7c7029ec3cb63b5258 GIT binary patch literal 5388 zcmcgwYitzP6~1?Ny&kh>XN@hz3D9iXA+p#;_}VHU>WWrs(BWxbxYH{MtF z0j5F($#v?HSrSyL(x|HFpUOW{fvQ$YRa6<8#D+c~X@wjD!AVL(5KW0i6;vYJb7t=K z`VmvqAHCAdJ?FdUeCOPA@66oY^Z)+Gy;4G`g}@CiD_p&JbHN4eVYo!pXK25c%z=Jp z!*$>!c$G81P$;K$<(L9pDAc@qYjaWOQVbJ;hI~l5yUNT9l!J)#77E2rmYud9HyK|Y<2%auj?cJX%=L)JlDPe* z@y%n;*^e3Dn~bmjzwl*q8N*|0{rGdr=*UjsnbIb$$08W4h6~>j#K9I5L^MMDB>3Ya zG6MaR(8K;E8{oo*Hh7`$#AguH2X6i?{^$KI{^pj=O83p0VB}$?FCcdW^{a{=kdG;m z()zKW{-x40py;QA`WaOUjs&F>e{9k}41V#B(sNdkl=H#bvr5nVAYEO5c8{aP8>Yg6|rRKyHwha{6P70#Q#k z>DMs3YPFCX6odNvihdVDUWVm4y7X=7P$#TySdPk4n25?*x}#9F?{X81N2KN^>htF>{+&!WmFmq7`oo<^)1m|mcm{z;=4 z3eCaP0lZEXuo{wjhM~AXAu8Q*c?h;*K)xfQ>5$TG1r&^`rJgo0Qo7%)`OZ%N4*yR7 zE`R9vygpH>=G>=22xU}@-<&J)wE*ZCCA7;~UMjw7yZ{I}#7$VwzuQ)P&>hZK1XHL! zY%v8_!DgpO?4W4>W zoy#5F5L^X!Egnn6lHr`@&L{I(t<7zGAl%t~iPls+>vAU&;Ycdm<=&%ZvawXs4aUps z>pb;7H7p4&@wvn4bX;?{g)@6&$@*`3p7PW&Ylsku=i4+Q z3XNK>Lkn#V$I}`d(?b4GA`HR1Jkh0f#M_dEoFQZ?>kVX5>DE-2_r-iT(&^1+BHpG| z8&{d18LZOydVws6){GX8*L22`ZOa>KiRIg{kpycA%u8$6GA8Z=d?Vmi+G?bb$j~^84K{&I z%fw(116Ym_n=O^l+QR^p!XB|45pA|i2NFMGs7{+L9Eu~^N<*)=HZT;Vq)&q_Km;4A7Ad*dR7;q;$W*PUTBT&Ysanj@M7S&40lS_E0s@O9 z06K|Kib|EEBb-aY=~$R$gkSsH8*THKEL%yO6ibTLtiaoTD3c+)%!OCE@EQoPZ%Za^ zQP{e3kN_9f@cSEDnWVV526lr}+~&ePw5l{h8y3xcU^@;#?dbxs(%xvdh;zkXHI`S< zIn-%`=rXa}p8*tV^EknCt<^(Ulv~87?aS=nUn!#9N*e{dq=cAguu=d=+XNL3e5Jne zQCJ-xF!|ueU0D%DpIIi3qTNoBwA>CeosF+($2Z3b<^i8HL4{!_rDgVDCAw5R2IO84 z=1^)PmF6H$lQm{yR>4P0)5J%G(Z_Kpy)-~)mU4Y|C&h}CgRb;-f^23XSBgz2-pN-{yH(W$@jxd6-d|QfeG5v z<2L&ypr+W#w#60JQ_`}P)rQvtps8;7cEt9}aj#YrDBd?Rk^54zfr~wCh?4C^dsB)q z;65h%naMEgDcQ!wU%*3z%|ed6{*oyc?|ksfqEY`#HEgay)`MsNG*9l~W3x5rx$<5S z>_6}!Qyh#ACe1}22_qbsT4Dn%rfNz&0$(C98b0t>7U5bk?C^o9o?ZsC-Ym+`UTKCz>)vIHy3qS9{ztCxDg3&yoF|1 Sv=CXXn19gKllZE7H2)7educrY literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/Bethe_Salpeter_B_matrix.o b/src/MCQC/obj/Bethe_Salpeter_B_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..4068154b87512c12afea85593864477c7ba192cd GIT binary patch literal 5364 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 IBVe-s0OQoyng9R* literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/G0W0.o b/src/MCQC/obj/G0W0.o new file mode 100644 index 0000000000000000000000000000000000000000..1f075e5712d25bfa9693ddb86b1ad26a365c047d GIT binary patch literal 14396 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 B1(N^( literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/GF2_diag.o b/src/MCQC/obj/GF2_diag.o new file mode 100644 index 0000000000000000000000000000000000000000..03fee9dd1eb3f7d4caf4f64a3f1f9da381591ffd GIT binary patch literal 12280 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/GF3_diag.o b/src/MCQC/obj/GF3_diag.o new file mode 100644 index 0000000000000000000000000000000000000000..737c163d1a7bed7e9a43d110ee5405e12305b737 GIT binary patch literal 38316 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 YJCx{7b_HWTWx2tB+*_q|En^}5A1bwFKL7v# literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/Hartree_matrix_AO_basis.o b/src/MCQC/obj/Hartree_matrix_AO_basis.o new file mode 100644 index 0000000000000000000000000000000000000000..b71acb8c11531b64cf138033428ff7df811fee43 GIT binary patch literal 4116 zcmcInYiu0V6~1@&;j!1=T_>S(6dsFks8iU7T{l@10^WF?%p~h3Kui*nFdDDN-c@#I zH#dud+&G7J?FdUKIYEMyI+0&O%oy1MWBM>h7!jr1O;S0l=IlRirnI39S1N5 zMCiatu<&l8X=P)gj2=uhZQtO5eL}0ZqnHE;@^MOLaFfRvV6~==8YA|&HdfN}2ADK0 zxj%9Dj+#q`^PJ|EX%8VdjgtX3Pk>U*8Gxo4nHrg+H|96T`Ofg5y#LrN1YKH$;?=<$XB#SOxO`?DW99?6XEfP{dFRaR^ux_SX|E6!})ge z;3vN$pI*|bLM&<&xvK zbp6D0<#a+d$@zp1ZNvKYfT075b8P)Q8SaGkw;>(_{sV0nw79){p`c)lC=H}e?{}*b z`xEyjh7g z;M_YyQ*Q!%C$;InsZDP|#EBhBwfDl@!oq@b<>FxX=Sua~uQ7*Ib)9qAcU9d#8aq83 z2qqdeP3gPH+AF|K z)Nl?qN~=?#l7mr4fO|4Nepy6<60La6Gq5Je8X5CJp%2}S8BvkbBVfB0%HJ_r5Rnhz;XhbHm<-4#aL=-{ zEYqDo9}ev(l*(`w^u%KEP(0EdiG{*rd({D`ja)XLHTAL)woThIM#Ij79=0CLj}&rN zD4fsh>4G&8e!wVM*@77c=WX4wNOv!C6!Zd1fzZ`@G#t>8#iI_xj(JST9s-eg9TZOy6zqtjl1YO$1zHicaZsKG z<(EzuDDQ)U51_XMfd1{OXbqeV=BKQH8e^MsI-x;KsVQ%BB%1=AsKqx%$yS#8{uVr% z&p_1zmu~Y}1dfO|Y-=%JF6cIqd?^@1zFz%e_`QR_xU;pGB~r6v>If(I&EMGE-)36H ztVtw_>n63Cy#{Ovk-Vt7+RUFa)x*^urn*sex0&5cb+O*OK4E3x6cR~7Lr)tRjuNQ} zm36HdyP$3vJ^T`NJLw->y7TM;(()_P!T z>I(KX`zQvt_#ks1Zf5I`YtGlg8@O$e3f+E6n|_yf_*jDo?6M;p362Z68%JLC6OXS$f4q&bO zuy3`M9P2(4%epsn%YNQcvR6P6M#-V2VTtb*wefpJUE)y(`EF2h@6vSel%v#L#OEWk zL;Vvd?9Ad{P8I@Ido^Il&IWJiVp;ss!TYx1K7khwUOEjnxMNUmtx+|eA#u1Ir$yC6 zj{kP3DV_JXK}~UXP$;?D3l)5d@I#R|%J5!|WIzRJ7LO^R|8iX;#i>`?w8ks{?x3{0 z{iOWmZ`5&Xn|f-$eAd-cmV7W42|*N$<;51{{t#54`=4_XAl_f|Hpbg7-UgYUcMoqj dK-Mgmv~(Nq literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/Hartree_matrix_MO_basis.o b/src/MCQC/obj/Hartree_matrix_MO_basis.o new file mode 100644 index 0000000000000000000000000000000000000000..712d922348d664752118a66dec6fc4afacf14f6a GIT binary patch literal 6624 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 R(ZsrR{x5!R4 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MCMP2.o b/src/MCQC/obj/MCMP2.o new file mode 100644 index 0000000000000000000000000000000000000000..ed5dd696e35c067ecb2925a0573d0c72d6d17936 GIT binary patch literal 46364 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 F_`hFU#4`W@ literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MCQC.o b/src/MCQC/obj/MCQC.o new file mode 100644 index 0000000000000000000000000000000000000000..39c1d874d753394eb5fb0192cbd9551acff2b2c7 GIT binary patch literal 35708 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MOtoAO_transform.o b/src/MCQC/obj/MOtoAO_transform.o new file mode 100644 index 0000000000000000000000000000000000000000..22719cc82e0848901086ce9d476d6e9ffdd636c9 GIT binary patch literal 7620 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 Vl~QEMBB@Se{{ng-(c{KA{s|XmRc!zO literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MP2.o b/src/MCQC/obj/MP2.o new file mode 100644 index 0000000000000000000000000000000000000000..78e3fcf0c5b949b8eac2f528219ebac52580820c GIT binary patch literal 7868 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 X7%HlWsS*~*#&^X^5-ID24`cZ+y+b0! literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MP2F12.o b/src/MCQC/obj/MP2F12.o new file mode 100644 index 0000000000000000000000000000000000000000..a097f36a6892350904bf0052a693bbc3aef4bd89 GIT binary patch literal 15480 zcmdU0e|%Kcm49z$7+!vmmk_XNC1ud*?x0MPfryEKW+cHkIH93NOe8vl$%LdPnKYS! zKowCkuG2UaKDu4)@&VhWTRvU)gWYwlP+Joa2)jj7+#=Oh_*AS!s$#4XZ6W(T_s7g+ zGPKzCpS_>VJ3sHa_ndpqy?0)cmp^^?;$%fp%?cj)SnzR7!o!9S+UN1vP0UNQ92XZD z)CWz{u&K}|hnQ$SUntNM;y9;ktLkbKw8VZkm1AU&hOL{gC@YC&Q8p2f&FAxXhq_uj z)(D2rH{RZmu(MXk3knp4e3Z>35dmQ@*wLMsV5+?(`CRe8g#H%T`%}&5YikV!x*FTc zxK^q?Wg6$(gb@RQPM%+C$bG)1!0PZCUvpPudjNfWzREk?Us)o0W4VOAGlJ71?3I-B zbp?Bz%RXPAC2ow_8y`PyIyWTk)qH`^uMGCcP?n;!a1H*H^K0#B4iYDIe&>X}0xQ=q zyOKi#_Jpq~^W*+Du3p_0z#^vF(`NAgdpS^QW(gz#(%Nea`k6+my#ZnGqdaaPi-z5O=hf!}E;X|Mk#qp#Oq0n~`zYhPtVAF)3SrM?@CXvpsH_U*E-f~-0+W<+c4 zMz!uaY(#tQk3)s}8IYk{i8ngnMbE9oKL2wgT4~ovT*u62+g(ShV8H)NkM21c8Ph#4 zlMR{-DYY=AHw^!<>xiN6`G{0upnznZkm)-Hh^}$n_X zuL*i$3tu$)Fj*tkIf|8G9^RjGc4o6avzHXGl!GIBuH~>1GgNQ+=!l+YITU`!y?H?O zswchb@yZ2WdrA1k*v)ERExdU=a%`iY1~dlVG*`L$`JmZsP&ru3xWV$yUe(;(T$C7Z zNQ_rAZoGbs_p+hBQMsVfo*Tw84p;Uy*h`G)8AR=el%LSI_v_F0s{`r>dSoju07m2(3!tG_?Kh$jq>>>#~;DB z+c)>CBYNFcUUfgnT04fUyTVW}mLnDN>~=iB3;)8s`G8uj{-#+^|Get`9i zE6>z-?pH^Q^27R0wg&sFBFBuF4#^y5`ZHxUd9CMGMR$;^{{{&&7N8+J~S+ zMRfiIOdQl0bAF_e|BG@{=Mdqy}%v21=D=5 zs{GZ^BzN@i*>4z|;Umt0$CyvFV|5zpV?0m`xD$G02`by@M&EXpBT4zh za;%+XDLGaTp0}^fZgb&`IYlXEP>5FN=NS}R!7|7!GiWkp(9e-Q z^cfAGaN~TdR$p_Me-O%cM+eUSNaUkCwgjp3ezkg`s{AF&o?tr* zOo!IEOpmN!d4mARq(R-~L5ydu*m}n&5CWNt)p#1=%X)+z(R>vmAG2s;x6WnVQM^6+ zmR=MUrNk8dcTM7xY*+s;39{ja2=~Ie-9H-hbq-kJ@OcYe>Qev(`|q*-(YW}%&%jc zOY#oe!**C?IaNDPcwPv!o%YZ^doi)kp7%!WcCjUMZB{dPvW=Gelvxe+^(3nVs2 zY}unIlq97xBX%=3Xrv)r%B_r5s1yZ<`zNwcN)r1aX+-)rwp8OdVka36>*Vt~P5od4 zHdFavC!S+L{hXm481*ygF2~)f?k#)_tyi&c;Mj=TKBP?kG-;Ow)!{@j}ns)qSq zdqK5&v9f$vk9?h~0|n$j0b!@2>Tyu@l<=K0;)Wb~<)w4V$uc#1((}S5VDt?bk|t~n zvF-MAoC@KF&-GX`I=r##ARxV3djXye;wFuJ@;tBPaw}|6v2@ZtotmSpSFXkG#Wk53 zuherVkuBWN=_^i%6u`q>3!$j*XX%g&PW@4Gq6SeZBz2Y&*hlNdM6e$gphLp|1jr8R zi?HRw4d`3|23IjrI_c_9HS3N8BYMLjh>n6;fnCgjOH;#Pd|sqLgK6;Z2JvG6S57g1 zFJJ|x>W%JVE{K_jF)IVO0TFq`+~4;(;-W7P7~@^ONqRl>H#WKMuQK^eI>&pGOycq` zZqCt@-1lV1aY3Q&aGyp!U@!HF9p_bq8 zW*X%KxLCXJ-E#P@k+Cs0A8vt-tM^v0ix|EPi|@wRxy2Xc_;+Jj;@H6JC;+aH5$#Qw zEj8mX?sFXJwLb}j+@N!oJ50Owz4T=^Z=rp-^MkQ5QgyfCO=)AOHP~TW7Yw&G*#bTO zK%mLi9%v7Ct+%zcwztwjqIfz&fi;0HTX1cltGO+>&bF>4&|&j8w)w+t=-#o$7HSFD z8ry^6j*uq+`GZ}7xi;q-oAb*6&8;2uo3HLxzq38q z6mAQ2J3AXgEw6dRf_mqI)Z}gWzJS+3 za7HuhauSRm;I%VsGzY26dtj`?ZHpMJ%LOp9=(|=hxSnZbqw0T2j2P^Qw*bwN;S#0g3Z9Zkq6DUwJ^ zi6oK|B8jAQNFpg27@5mL%TQ#Z`Xwzt>*g%8cBS^r&DnYCR5h2*3cHe(btAY4eUW-o zwpqI&YeCjORA{77VO8-w#dcrU>mv`S(jmWCQMhpdvg zF~J1Za}W3Z@c0> zLyE+AiR3}gGwZE#BE4dAoSWVneo>Evre;#U7RN_L;L-Ep4RL!(^8=Unn)qxIER)iu zNIa?M;H7(_PFOQ3J&MHN5@}^pHY%xp5ie7uxg3Fbmud-5*T+4T{ov`)#F;%n6^?dP zKvh{O(bwXv8m^Ogep`sX8&_E_(Zg|8twa-smM2VbjJ+BJ`k{r>s^UwH0a&wBLI75( zp=!bSs|{`XTN%1WWF7r^2(?K{&7<0*HIghF&z9sIk>`_@ZKu|gzGM`q3M9iw6-dT1 zIyuqerX-^=RUjFaVin>&B;(dpfn;n<6-dVSQw5SSoGOqExpMKrC8J6dd0dd1A#s7+ z4xUWyAsJ7l3ib(x%&@pA$yh8>FD{UbrKtkR_-d*^GVV(iNXE8Qfn>(jYha^oZ@g8Y1h6~bU3>T!y7%oVYFP$T7JlGEg{!Q&mohWjiCFs?p<=#ywP&Z=1?T;3IT{cedKjZCG+&82bMcS=+ai+Os4%}3(4>m@3Og;uKVJB9Y@c(3IWeJIYVm1trWm!}#! zBC_*k0j=y9-lR(UxZr0Jf7^4kANEMzkA-8IN<&;Gd9TyEQM3#tE|Po3qvB9W5@m`l zeyV`U79~$^AW7Z$5Q(Q#3_4Fh>5Qar5d36kBu`E_d1%S|qX?;$9DQ_?n(9e%pTul9 zMsJ0v{XsxECrMurd_JegS%4+4K-|JJmD>n2mNPZ1Ng_GRFT@ihVNvof zBSG9E0d7f25J@jflOU2OC(IXvJ0p3P_~P=#NcAMSPa?D&yHPB1rGRoFB)v4A1XO`M z2_!Ep7Mmv^mr36GxD1IP`bpjfA!8Bd-6TsM^+}@C6iOa#f;VCZt`sotjiBWPD7geB z@2YqzB^Fomi7i&m2|3k+5LL(UXDRdDFn3u^MO3t5K@@pTF^ZL4{P7BV*#nP-@0tLCPq zAdj1yw5jG9Bj%>lpdPfEYNlGXW|Md7pjK?vc34gJsai`pThzRW z|KlSc1{Q7GRD7%9)P7-_lV{G->P%N%VKvQTwx5FjHTl|iO<&40-J7@4|MZ7%#nro+ z`iRLf&1#y9@gG&E0&4qAbMj5|^G(-YVJgb=n0nRe{xhbl^WVB-(aueaXqbTMnmltp zT$;fQ`_#nW3#7T^BytXmM?x<@=bw! zQ!D!cbF0b(*G~KGMf3Li>&zu4yK2rq?J@uK{;mDyvg77fQ;lj4jhr-hY9m@bd>b@} z9&9jYFEw`-nX|Qp=Fq-|y{1g8mZCg}biPtioErdt9K+-D~@@oKT{#Oe5X}rZE`L6(}|Eqwwgcc40QvYp29u@LlKlRRJaikKZR@Ypml2!@HRkfHHAw6u>lu;5fBAj_#Fff zuYH|s1uO-mym$q{B1l0aJEI5+!H3~Aun#-zw@DIm$efn+531p#eHMxa)LNQt`%BIR=G!6g220cQ&MIRT-|c@D&(|1lYF(H|4z{B1)VSGhXtJ} z=$(S5nx+2F3VKx7KPu?=1$|o37l=m8G$ai*EA`LZ!;qPBs+XE8?-67w)F8r%#vNHW8L3eYY%ja*w|L^(nf24mxhYs6`Vrkab z6vRL5;XgeCc(${@xlw$L!BDV0=nDqduJt8R!QeQm5fr};_>{KA<@l80b3H!u@o~}P gIzs4CN(epX5kil-gv?c{4E|rHE+Xl}9wo~E0VYGGApigX literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MP3.o b/src/MCQC/obj/MP3.o new file mode 100644 index 0000000000000000000000000000000000000000..5d2db8529bf7686214b7d63231cac45cdac66869 GIT binary patch literal 10848 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/MinMCMP2.o b/src/MCQC/obj/MinMCMP2.o new file mode 100644 index 0000000000000000000000000000000000000000..5745bf0fa80291dd301953114d259179291fe486 GIT binary patch literal 12160 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/Newton.o b/src/MCQC/obj/Newton.o new file mode 100644 index 0000000000000000000000000000000000000000..b6a36d60a233abeef5d77ec0e00823c869b3aab9 GIT binary patch literal 7900 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 VRGxr3!ET@B|L(@2QKRqt{{fhP95w&| literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/RHF.o b/src/MCQC/obj/RHF.o new file mode 100644 index 0000000000000000000000000000000000000000..8ebbd2cc09c67b3c082584ac5b8bbb7071c7dd25 GIT binary patch literal 40384 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 F{{`&ezJUM$ literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/SPHF.o b/src/MCQC/obj/SPHF.o new file mode 100644 index 0000000000000000000000000000000000000000..ce63129fc696d9cbcdace262bab8a9beba774132 GIT binary patch literal 40780 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 Y8!#^`am>?Kz(cgNlZ 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 T#P0^B-sFFWRRN5C<;s5o#Dxi! literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/SP_linear_response_A_matrix.o b/src/MCQC/obj/SP_linear_response_A_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..7d4256f7793054a08d841d303bfcfd514e112ab8 GIT binary patch literal 5612 zcmcgweQZAvW+6>%6{j) zdu{STKcs3`dH0<2yXXAwxgUP_=3Tx0@n_Y7Ai4xpc-(kip(=m}*82x23Kr{1eWC@&QLDv|c`vHf@D+vA5`JDVxW^ab@nfYB~eBDeIYMkhW;A7B? z{2V^LyW2AM&*p1k@qcDXd@!FW6)`7YI+L_LX6E}JWu^w~p7iT@v zDU-I}EWRPe_kG5vV&73&^96jlyk+~%oIn0MwHr}gV0_$$oVFe`&-7cebN8{uWKM)f zk%tHJO-KzA`&a11Lxq-{9*V7E65=bB$g`1WB3+T~UE8#m{&p6jT5^F_I;ztCjF;Y2 zZ`ksjdJ8gEd{;{fTJdu8xOVJAP0_Av$9}67cd7lrG$r;ytoRX`;kYt3wdvT+xT4*N zDPzAQFC{ji74a8UWvzH!`{Y`D*$r*kH3Hg7)x)<$<>)vjX84xWtNi2Ulv0;h1B1RP z#lIFE3$TaOK*@u)ySCnVY&=h`kF(ai+E@~g_luE|P&}uO0EPGg#HuUkp`e`H0&?y6 z8TAaX;c*e*5Djw@CZ)WC+Q^@bJ<&&HtrS)Jqs6$oNV_!YqBPr^$D^g~>QHp`c6Cv- zcv^i8?#jtOV)nJ-QS}G~A3v&|hKwh#P(&x$DM%6o2&7Tg~I>Ml0np(9)2)XR1Tl6@B{_rZTGfX{j;8{#~jc3k#plDP`w%^3&h| z)OOI4ytngqW?J&1GqzHkmUJSHc6$OTjc}~^&*2F%R=fjV`wbT>-o}*K=_+HtnNoJd z)xaiY?4x+`3VL%~l(Cy}ahyib1`L^L;-$FwK8CO}{%gz}b)<}4Merp~JEiQ3tBsoY zjwb%n_WKV;vg;Dmy6U)VNNuOZQcm3b?C#yj@Fg+2I<6L?#Swc1%84<++OV@AVgw0K zU)vL#sU72@#TmXLu1>23wyl&CH~x#Zm)<^$rstlI?20@e*&Rt-p0*_ef7u8pnq6LQ ztaG#*zi{N_I(j|aMG*zD;IFNgU$b8XfDz-a#8iSEV=(Rsnj;&-0z3T((&c^oAz;c#1^t*N;w90>My#yU_N>C`~V z)bmDg&>YMeJwf}R2<8qBbZ64JKyY9{PiAt3;C{o(r7~s^&TE^)P0g*uF_0fLjkU>) zWwZo>eSzR+h~AW$w^C*QTFi2d3LcNi zSzM#C$77)BU+BU$>W5*aU_OY=B`)-L?=>B|n}Gy0$)c{`D!{BZ2=UDtM=TIb8A1gXY` z8iLX7cOI!}S4=x=N$iKCq?oM+c7`B%$aE>@a>uM&Fj5 zkR$?H6af1KshW(1zJ5KQ!3A2HXLrBx!e4t9uUOrVtth24eJT8y%3IN%K$`kGsxDyu zu#2mvZCGsN1tQHpt)T681#Y%-l`HRaK&B^%8ET`=#p?i<~nB4F2MX;MKB`!ZlT>gGx<+EE7UbwGMh1;5g+xcH-uHZ^sVUD=M zTp>0VVl9$zaF!4M-*Y8v5rs~!K3Rsg%?$e$1Ne-(gwb~n&2&09+i853(+1|$!=xx| z;c5e0I#Jlk`{7FtXl8F+Ul-AyuZt+hh`!o5_#)GhM+FPAm#HI6VzysD%#BlJzinJy z#(pgDJ9~H~GuAQ*K8LtczriSYoG8p%@FsXWFC_XnGk}24yNwX_bJHT|JeYRZq2WzC zHgM0OOUKLuhmM(PemGvJJXWUX?>ZZvcE55Er#@x-({2;RJHGj-MH)38jP?uecks*N z8_9ryk9E1GewZjV{QWG5@&eaGQcnEo6R&>~{E@s=((A%f;sH4*FOFlHpNn2u7CFGJ#QaSyYXLgITvkgoV7$I&(U{g`rq z44{JTAqlG8Br#>ap8+KNCrq|7`52Ra_)$BpG)emB-iJQ2Y@2j2n}36BW_E$KuOb^A z@o#|O5EQCdSps>FiH|{_vtbfKVxN^UjpRPV!Z%F1#R=(-<#<|z^_ueuvKbbV_#Y~s BP-p-E literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/SP_linear_response_B_matrix.o b/src/MCQC/obj/SP_linear_response_B_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..c60de1c529386b376db09830db36b0795e4c87ed GIT binary patch literal 5480 zcmcIodu&tJ89(P<$GM3UUjv;KSShaRj%3A;q$x`Zj2H~N?o6AOq=1^%_2VWn*w^m0 zO#?zuHBe>+k4Eh#v`HviH>sM?h`LEbd#C}_4aOcRj5S-?lt0i!r#?{Dtr=*|zVF_1 z?8FJQm9`_D`#sM0{m$<^?mfr;{f+lNt|o+v1RhW=P``!`CsZg)p-O1qqP!uS4X?5o zZUZL4TF3Ij;hZ{OiAHsG_k6rYmOpO7ka50{%m%R_UNRjsA}aY!GrXO~ViGb^Uj|~@f_RyHRD%`C zR^mnNW>yPJu3hq}@p5}I^YLD0cwq*!_EX|T^oZ7{X6LQPKNy~m;eDIojo)&=nCp>D zXt@36;oZaDv+pvz3k+}K6Y#P*-N>k%KmMLFIFbUKiZW+CaGvp9GWNQ?wiJp%=%0jq zTw34f2x$We`SEmvq!NQxt z!X>3}ws}lB^medtMv;{X<(E#ZJrAHqiBbQMuh>u9|0y5+ z00yNDgD6#h--i`6U3b?MJgl^A(Zyo9n7gzljW#GQ0O6+&a z;At8xoC`sKLaz-0!luHN0C0adShxxF|D?z#ZvgO>5S<9oF@>JRNl=ucWkM+gT$4&+ zJk)efIXx+&c}^+d5Ko7iCKNiY6xUwHodedxusK0{T-PA% z3Wc^Sm@p{?+Nb41|NeMp=7}f$J^m;CPx-@Vp>Jc8yz|HZ%*+_P&ByiiOulZ)$@Tbp z0rm_fbih$pExpJNjeTZ7>B-MO3%*!($5Fvl8on-?inC}jmBu4g7R0doUa*=<+hDcj zc}T0Z`%Fh8OJNYEaF{|eLTrS;_H^%K$c%Ds$m>q1lSmp0=S3LG|C?AVd@yhd;Pyek z@^H6vb6U^Ar?$oCYjd`Fnms$Y^Rr59?|+lh(3octbc90RjV_-gY1Hc4vV%beqn4 z1A00WO%HgV$wy+lyjeZw-Lmn~jr{sSNNJ5=)&$9-tC3{mu7nm}*VaVD4%jS$r3%KT z_Nlt*Zv}rh_$@S>nMWhaXb^h4R(@X2?fpF5Mye9oOhSWf?4c2ARb0(bl4o zENeez*fD1P+_2Kj`p~d;Giw#>3ah3wOB^OvtHx2pVaaM$^#n9tflkC>hqWpiPGay~ zu%9|1wHg>KMnf%; z-|^D=`b>fdHHNFf9q77wcTI;~Gq?)09|8rt)~do5Ac7T5(XQQZnpMnfF-;4a7Q5DL znxfg7iVS4?VdoP;Ku3!m9J`26jm91I{gGT6ZjwT+(fva|`+I!(>NOp(=Y(XsF9B~& zY0t?NXA>vcfsY@;qTs3Fc!fswBk%D7SYAjVFeHu%;1;73#0x53Bv8k;-Ty7MCn1>8r$Ix3FA7f6#P|H#PkN22#{!< zWx}$3Id=kteU=H$GNm=P;1W!6+zn`6 zP!^d!91ttU;6NA1vl7=~?u-IH2iJiJ_cd^xUA-~a$@Q9YTqD={tq$URTtC7(17920 zi)EjW>qpDJMy?N+eNL{wRQ5G+{TpSUgX`Zc`y{UO?;CPq^yi7u(zxV1c}W*`agv<)yqmbNsW7ESq1E z3^!Q0!52gz`w7?iBpQL-D6ho+*`S7g5Vk#*^Gs4wJ|oN)@;BCGXCxqmt526){MQ4^ zA!HfTj2jo|lyq{{%bFw^6Tk3JEpQ-7xtAxQ6p2hbRECbKtR2Enn4`iE|_#a9Nw&?9H zMc5TCZaD+bv^iHUyk*QexZt{lcc04R5YNClad5z4Syh7PA8o@u=bC4F%;#|9{nud8c$_o3K)r+@eFuiRuXf`2gm(02Ac$ z3!sC#{3jsMKFlQhLN9lkwiPAJ*;6QCp6ss~!y(omFxkrFDkdEe2dWjn11RqSiThxb zjis5{{Qtof%*MM1mX%QL&=LQC4lv+^#uiq>x7ih8lH7Pd)E2TyG5`E)1`E3+{{=Pe BKs5jW literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/TDHF.o b/src/MCQC/obj/TDHF.o new file mode 100644 index 0000000000000000000000000000000000000000..0d80ef38314d89c573b21d68457de72548744d40 GIT binary patch literal 7848 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 JI_PEOzX2?j>1Y4| literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/antisymmetrize_ERI.o b/src/MCQC/obj/antisymmetrize_ERI.o new file mode 100644 index 0000000000000000000000000000000000000000..8e881e7df84a4d65761e28887ec0eb870c6bcae5 GIT binary patch literal 4520 zcmdT|U2IfE6rQf9(O3`!3=lN|Vu-2WUyNcPT8SF!Id^9EcDF^4_~N8@ z=9_QM`R1IN>D=2M{p05gRfJHPKn0Hl9xqlZJW#HN=Up7UNI6i;1_savis*wT!N-au zlyEqwjprC<{od|@Ub8RI*BAs8)Z>zju#hJhV0Ab=s73R`;UPVe)PM?yyZU|W*A-2E z;5z3yv$m2DOhc_>c>^h@KL=GH>b3(28gGw9(E+&?WS;Io=Rv#w7{Eg?2JlF*FysIISg-|tj!eu_ z`%|C6bQ7~u&bo24Z~pZ(r6$$T_>iB2Db4=j@xRV7hbmItxsDpsRg<{u|%KUciTg^o#EH zz4?8qwUv$OwA5=ML_nb?>8L;M3DEs(=> zX%16!a(KneVdtD2j8!6JF|?4$EG2Z@QCp=vk1Gb{Bx{PbxYsRsplpukBnBFH$qcBI z76zJkR#;HO=6Sl30q;bW#Scu4&BKUh?!qNl1KWdMieX~4yz_4z-ZSRBj0wOF3g(T4 zKDr(=ry_UEdnr8AxF}FW-h@Z_e^2~JSY>u6DD=*I`qXu4JqK6nN{`2@dR?t9kLn!i z33NiOCF03=Dw5Nj`BXlu4LXer)0urF8BHg$sxz64#M0Su=fj$wji*yiFz#sexLVs# zBbm#mw2oL>*H)^|VbysrG(+)JPLHRu@t8B29?U1StTPkIji~N?R(HdDERt|{YKcTd zcMr#6ZX+0XA|7QuqaOF(627I)8OdZ4nsYFskHu51t6Vp`Jlq;)h$Zra8d0Q3Di?=P zlNwC8!g;PiLa(arf4IBsS{K>M?hy^S(}Yoior;LSS2M6!AJ@ zy=u`VR!ar!u{Nyf&7<+uU`JaEsikj%8-~6Jt5a|_7~m%XW&~iLVM?ijw}n_0i>^fy zOcDAvL(vdunGNf#smp)<8XuFIo<2ZU8pM8Ha{duuw*k$e1E9|Bi!I8gmE?lL@;4pUE`~+;4KKzz>*Qqre+Y&LQw7lT!q)H#QKqii~*$ zUTkt6fg4P&S>Q&KQw3gPa*YBnH93dC*P5In@Ntv#3d|0e5uZokFHO563LZ~5OOVNUg9k!JtFNW4+*Gpx8+yl zwc?7rR$Y--=M{Oq%Du#?p=5K0uY%Y-ptw=7d5a^laFlF(jC+YK1gdDx!Kd@QdUwq8 z>Mi%W5eRlC;GdqWz+r(m6FS{lVu%-g`Q3~catQ~wE8f;6*DXrnz5x%V^cafdjG;Nz zGk_)HgqqSnZHu6$m>4{?JX-N$HoU9ZBxw4wT>qq;bjkISo65D%%eDbI_qseL`KVlT z>p^8=cYnv}{?ljW+MGP{x;!d%Q@P<*W%;+jD^46}%t=<5SVb|oud#*lpb8cAZCi|B vNF|ehX`ZDj+H3k`P&dC-G25ziB|GAq+50~ literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/dcgw.o b/src/MCQC/obj/dcgw.o new file mode 100644 index 0000000000000000000000000000000000000000..62de5c8d3911fbfc23a2876ccbfd294d834e64f9 GIT binary patch literal 2976 zcmdT`U5^u07(QqEHM?Ef#RbF&I!2TwIBj=XVF6()3&;{b7Q!lfvy*8%?M`TC>dchw z5>2=;Xbdq%y^&ww4=_e!G!TA(+<4D5iG~oaBoUwYoHH$3O3+K+{`I!0b zuRs3IFvb%M9a<7?mO29s^c>ocSNNH~c1 zmBQPr2H*Mjc+qTjTx%VPR(JuR;xDF3iX2}R$K~^An^ULcs%gi6~9~juwz#*6vLoed}sd5 zyf`DGKJlYXil!$6$8JtuaJ|}***z?=2Ro@HQ&@!4Z~|$cf&D1#Nq)(q85!Rz1&dL* zAy65MakVwwNAXi##0j_#ORdLp#L@xdhsaKpzN8#4L&>yTk#BdHmOTi!{=&kaOShK4 zp3Agdri}>GcJuhT2QQ73buVnY9@F?41ZuiB;~-(CrAbZb-ae_OlsYZdB&kW=o04im zc*PCXG?J(FmfgL;vSR=+H?};YqbsuPM%%t)w1{UGZ5T5;CTO z$DfQ6yW%4;1Z6iy%NLCPIo`*aPn1OwS5uy>|$PHa^-dC&F`7ScM82k<&opiEaGXMDFzc#IyVg zxP}i1$E^!j@g%}OOEK78L-8^=Xr+t}AUOjZv|^w`T<#kfDgLVB9gz)7w-n#0_*TWK s@DS7V?I6AlJcs&r!HMY0n};JN5=l2=gB3q~R&Nh1cH)%$7oB4N0I?*Ol>h($ literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/density.o b/src/MCQC/obj/density.o new file mode 100644 index 0000000000000000000000000000000000000000..ef03763226232db39741cb6e62a24a7a5d467c3d GIT binary patch literal 5072 zcmcIoU2s#!6~23~EH21M0yB(5IzegG8D|n%GIhZ&5G*Xh-p*C(2Gc+wXkuVWAA`w{0m^w4@S&Lb9$WBD!Oi*vs3bH4MO@5q1POQn-+Ms@zg z=Ze#@IuET>a?Xyfr#anuLLUt~TlAdIIZa3YKyz1g0OzTV&gb?z3lzE{&DU0@UxxW~bT6zvIs`KTp4Rite?nH8_iZFp z@j)cua6->-IzQ@zp!3al(G32_voi$NIj3S!r}NuO*>OVid(WyA9B1^r>DTD!&)v~; zH@s&syAa;-kqg7RJ_@<<=Pu3J?0)IUoY!Vwspl^0x!)A3csY2zx&Cj-t1js8+i#9(X!`MEjzC28^g}ineSpO zv!m+B`?lAcz>0f0`78V)LPMLLcN&|`T|!HdWs+QCDTI@mr1{RNd3p_XZK2_JuiFrdSCYL^9Ig(&tP@_Wy9T436sK<+u*VaP*|iyBr<5PU7{XA3$!6) zsPz1PF=0Bb_P1mc0@nJ&ih(%tCPQfWL5&GHte!W_hR~8-V!8lHUS{7SjZKXnhpW3oYll7(i}pq1!F0rxiDy!gu!~(puGE3Pu0$;5aP{>CLy6R&>(xjy z6-~rl;JmrX)7aFE9DV6bJhC~INJiEUF1*A-BK%>+Qz% z#nQs-1ZA0U7KsQ+yas^vKF1$IMwM_PoQ!s-!57sAs39fZ6-JIdB|- zeozWvEuzvBOn^EM>TOiRhW;7O*yKXYkmh1xdUCbM8U(r zddm{NWgA!xY{49j#3W+F5Y5qnvNU+$ppg4ATv`$rQUgq^P#6*}rFH|&Qg{ha2T;Jq z-w4$2F#t6NmksbnV3K2ro+uoDLvJ)5-rW2YKs8V+k)BAh4AqhuV8D$o$4(Q%4iF@Z zy3oG`C{$B2A}B#O=3_G1{Ldi6RwR;{YDN~r1yjth%Vihls4#E_K<nvL>iu$tU>X?4xDXfZdJ9pT4NMM0ZtA;`7V0^uyfmoJM`vRIyl7;qnCsYR

A&%?*N;3GmWuGmJ1pG|Uk;SsGA<3@fk(7;c3%{tE&9>V?e905OM<#ZNZC8iZWS zIRNtr`7$IL8(=L$zEZ(FLcUtT8iahkf;ohIqk`27`I8D}7xGL6Q-v%(^%#p0)#CnX z4#`qR67ny3!c5Z9!fR&1_9I^$m%lReZOm~oCnH2uT)tos<-Tul!Pqy0};#& zivz4o;nEXOJlJGuP!ckJ$zg+;Cm*;YKn;(@z2K0g17$vOvWheynS~+}rASBH%2^XJ zGtb5326B)aV5VdiN@d-l^12l^aI9t%$vnpmMA{+5LB4-j;LvL#PH~_Nd>GmLWwM>s zE}JSgC@_37VkkE;1C+uymVzN3yS_MggMfOQ?f49l8vgtpHC9q3k# x#Uh!#e01=!o{x6J&+O(Se(_o%@#23caD%UY=tP76zu22pK-xx)Kdze4^e^FEWzhft literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/density_matrix.o b/src/MCQC/obj/density_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..c820c4945b09fab0c33349860c94d192936a04ec GIT binary patch literal 3048 zcma)8Uu+ab7@yg@Ubnq+cThB-BrJ(Uo3OW6II&f$l(w)dry^1<64>nB?UhUSc8}d# zC~DB8qPdt$c=W*s6ZOHw=!*|N7%dWm{}N*q0{Q^zgM>sw`hsE*zi)Tuu6M=IFPZuN z|K{77*>Cr|>wo;)O$dz;m|#R<4B;ff09p&^*&77@; za;Wc}nA+RYx%3+o5RXBImMD3d#~|1BqM7%n^^$8;%s?N1c685~KK0z3o)c8IwG#_KEFB?k?<-d^8HhF51* zTn0R(7XgSpcSn8U^BVcQYaUsOx0WTn7s8OkA`@EdmUxy^2qHS``<&tBSeKKzoG=v_9@l}loyTS{tbq~K zo@i|j2BH0Z$Vd5G;Ol@R9Di3ZhmST;urHS;pH>UqpJB9mVqUACR+HLa$9GH&ewAxP zPpQ|=tBrLx(3@+l{sQ@~Ml@9_mD0)eub@iQGa;Ls7jwh&{?*aBQ&gkpCx$QhKTe$Z z`S?qtjhUNj{Tr?RL#{DN)lf2z%$7F8J9+!gA- zwg15Bpup8I-vpwB&ZhdhMgCrA18-~MeJzR`n@GJXgu-}XJTC(5!zwUgPp}`aas>-bHvUY9>k+u z1Ao-9L0gAsP$Q87$a_G313Zx`C=Mu}fYPOaKrgjPu`;0v#EDgWF4uDXaG!6*EFm!3-lEf z)3Ed)?OjLJsuJ77C+kFx00@+DQK2Lnm*bW5g&{{ z6n|}-h}LZ}+7BDlMMA6AFF;sykqTX{D@(NgY#(}J*=8X8dc-Lvi*Z=92YXxZJtQ7~ z1Qvx>N2%72-o6cxtbnirPAVSS5}}BdG772&Ss+KnmK-|4mVylk=oiMpwuZ~UwrnXb z^Sgq0%)Ny1ek~AxiH{pzV1hsnbJG&uiV43eivxJ4k(iN^-CUe$n)WlP$x=*`7++r2 z28aIBJtz&3WgT8Or@EeNlC=S9Wq*=B=lh?lVKULw?{CRF6U z9O$3~6X=P90X~U6!}z_7uV)109;|7i!w EfA6ZP!vFvP literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/drift.o b/src/MCQC/obj/drift.o new file mode 100644 index 0000000000000000000000000000000000000000..da346a441a4b9d02490bb64a8a0384015c709676 GIT binary patch literal 3976 zcmcInZERat89wLw>!x;W=YtVM7~T{htLl%0P(s^~xJkF`%H2ju=%%H$9Q!8mYG1q8 z_L7zgRb+*w;4+xl7YO(T(uDZKBnJE#=`?NHAEpUVg@+Vm*H9YS<=h$(w z!v63|=bZQRIq&(r=l=HkwHrRhxQn4eaife<6+r=g1m!t0-h`grBMkRZ3`ohqWK{g5 z1Z6TcbGasXAx|HYV2<3LUqX66DT5yI3cOz6kqP5mlqRQ9`4z1B zGAVZE_p-!$UCwQUCJQtGJUQ+i`HAsn=jLqlq1|{tMm|LEiiX{g>mo&J-WRV}&N(hS z^ZTL9XH(AOhFZuL;QQiL>T?!Wq`DLDi4GCiFXP|tYynB`W_Y!;mECwhmv|W&><@l0 zysVwI7R>6d_2`!Km5?wGO1!C??iaBh#ezlKZx`NSiDyf^rzKwcf8bSXB4X$KsdFXa zoPDf#*|yE!FqC~L&hiCYn}M82KaD(yuc7TlOUrvN3K7Mq(gx~SKUkGKk^E9}COJLx zMI+~Xo??uPze%mWWQ2^DjK(3BTD_9mc?YYzq!(l*)f*p8>x*yr5pRMIp7nQZ|ZxjacHjsPVo)L&$k|$b$f{o zaKK-I_%d}7Xm)Y+p2nelfOR^dFl0gjvu@vi4Kr4d&B_aUYUM?gf1wb61-fgxaWFlw z8M+wS+S+>HWO6onGI=VQd4VQ?)*RX`&iHaT;L{&b_ChX3CZqGUjS#O@GhK<9VeJrlXJY}asw3?~w!k_wmBS$ zE<~dDpqVdNHM?L{3%O{ioUa$nYP6EAEk@$?svXC@oh`;E&0;ZY#}{(BxRXr0SeO%% zQ!kJ1&+H$GW-FDV8O>+yrGho|+1O`d3F(aaVyWV)8O3-h(u{O1xZK2t@8=%8GU zPub56j#uqm{Mh6dCdH*fv(sD+@S5(n&1`Y-bivAxjo!grd$IPK+k;V< z3#KjfBhZgS@8(X2jEh#?;_ZlgG4~#8DO)@ZKZ@!_@!Al`qSctk9vX&p64EG4o&^XM z2y~Zt^CVp&$7SZ72mcK5XPGabEmar~Q+oPQ==k>9S6E`ai#pq`?XU|E%8&~%kyt$= z6~BjKPqkDo*B0fNLazXo`2i$4dHN}$Uyl2innC*c-k;s|*K-e#2QFZDbp}ePgDg-J z&6k~~lRg=tN~u=P)|uu%Ksnu-`uEJM_dhlssuY;k;i&qeQ`7I=)-e&bs+EGpG=3b8 zTG$#fG4o9GlIRLspBAD=io-&5ljsgxLqc>3Ybm>2UBuR6nnsG@Fchbm<|Cmuw3w}x z@dVNKINcxp^;`Lm?LRodx;V`!O=ve&*CF%}qdBz;`@_?=6|hBmDS{TviEz%DK)IxJ zZ#7XQ{xiz*deb8DMdT~W{^m|QZmwc^p@3u4+=^If{t3Ouf7tKRKdL`_IMBtrc^EG# zZGidxpNAGx_eqxO!5qc-c)+C}@E`PleL^R{2``7<<6%OZ>d_GB-6rCr>l2Vl5xOzDkCcp^7MsrAGOShoFlnUcSo6Z&2~-@c~^z z@!!E{h@cx){9`R$Lh;{i=>`@5L`xS@{8KGmpW?sQ(uEbTE-dt`QWlA9tGgwyvHCV` zJA1k5bEe&}O?tfPqaJ}R<4+{}3)ym(Q|wn|+CKIbc8=XX+OHJfZZ}M*r*solAt*s~?QI-^Z-*N1+p`GFrnDB!)+f=)$HK@L`&KACq>wztam7TJb{ hpLa~QwDE(O1@+GeHx{BwQO23{3_D_oU(O-M{sY%IP#pjO literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/evGW.o b/src/MCQC/obj/evGW.o new file mode 100644 index 0000000000000000000000000000000000000000..ba9953bc7c33018607e72473a32c213fc01cf3f9 GIT binary patch literal 19656 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 F|1Xbbd>jA( literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/exchange_matrix_MO_basis.o b/src/MCQC/obj/exchange_matrix_MO_basis.o new file mode 100644 index 0000000000000000000000000000000000000000..6a9d731023f72dca1507f603ba5004f978996821 GIT binary patch literal 6516 zcmdT}Yj7LY6~4QYowemivXd6KO&Y-n>QH1!j!A4tz$P}Vs2psFNdgTUSzcLc^l_fhk_er`DR$5A!;^KtSzf@F}KRRiD}4$k0$$-?@rOs7U{es`UYux%Uxs`DlJtHY)M!f5LC*;dKcA}5 z&b@VS>J83z-`G9ay|J%!bWkmQs+OkI(z7>&OQ*x7C)L~k*#i1-)ZcgK2O(GJ&ES#u zh&<-{@c1XH>*7C$N`DW1Hsxx0@)Oq3YA_9mzNsV;RgP}sLtXytF>&@dqUJ3?tK3?)cXwTJrU~sbT{28 z*Z%vdSLMQtdgpBS;}jZph2H87esFF1lE0AICw(lgx1rpA%;=8AADZ}+)EhjG0D8o!Mb^c(7(s_ME&w4UD^=vGe8S{+A z^|U7%Nk$9FNFMtPPd=`DBB@Lvo%dv7o|K--WOsS;8BZjMcT^;=6ES1mrj^K~J!6?d za@eC6qq;sU;**I~!rTRY^rEpDSc)84CL|^m-3^PB1JrG_qo$~w#eT+43#8M1k8G!v z&)K}+W+I-l-BenBT4T49EAW$AJFTnEj)_HfTAG|EW&28`*E>7xbQNd76fK;=6wRh^ zn?f-{9Cq5uQJ%?sE_qZQ7H#SuHR;ytsfUv2BlT|?j+1m@q+f{cBO_g$(+ZR zN=2fXT+xRKn8Wn(A$VOd&>Czfj#R#o*4ITdS-s8U8}azAgNP;4v;)p1qP|pSxRBIy zzR^fN?(r9LSwGFmq<_7hOh&T)k!aL!6yr}OhD^&i7duvKtJ{5%(b1&t8;)eh66xTY z)=OIhJQ`PsCJVzlQ)EozIPFZdR0J0-YJJyfLy=q}*Ba{#F#lia<#AAf&%`RdENm`kGhOVh?p_t}jZ zVkqB+!ksjY3~ZZl{>XCDv@)Dt;cOL3hfuDv!fD8j@UU>+NX|y1iY9!jOO4Wn$`Z#_ z4x92F<QIv*sJM%|<)voS^J^wOdR%q?_$W*ZGyv(U}SX2f}fEP&{!szE91qyw@!U96S!NOXEK4@Vcp>MLVW}$DfFt^Ze zvM@#H5sn!J3PZO7JA@vyuz=9x7S$lio3}0bWzm*6U^_2Xs~oD8S2igJl*3a>{($UnQl^w?cd%F5aKM&mrMoJ_(5}k}reX zj(3!gKDY65^bJA+TD}Srcf{v`M0_ntq})Ohl+Hs4BK$!vcXL_b@(DP}|0tJ1E?08t z1`qlBx%?TV6S?BP-^Fe5e}P|+jRN+V{bBpaMhC=i(raP6Kqwmhf;h)C^tm=I)N}1k zRd#EY-Ckwm$Ig+M`5mTZa+;paX0mg!EWY6rDP1^XSzTw?Hq)0o)2b(m_@dAjx+45z d11{@==Js35cCh67HrA_}KiUUj(P6BI{{ck1*e3u0 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/excitation_density.o b/src/MCQC/obj/excitation_density.o new file mode 100644 index 0000000000000000000000000000000000000000..3e0cd1124ec19bfd4c35f44845e81f801ffe3170 GIT binary patch literal 8048 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 TWOQ=*M{$c0TTj1cOl$l%+x!In literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/generate_shell.o b/src/MCQC/obj/generate_shell.o new file mode 100644 index 0000000000000000000000000000000000000000..159655e0fee2726b8349b6434a79649f85318c40 GIT binary patch literal 2860 zcma)8&2Jk;6rb_h&Zc%9rvVX^h-?KFjnwr=YSOeMkk67dDJ>MCnrL$E?nOhgR{sqWz8J`{U z)(NJMhnUhdW2s689!;yS?*<3YbFBnCzAu3fiC~>eJj9f!FK^~7bZA;hWfnq>glv?TxsUJ%+KgkkA{4Kn_n*vw)>)^_6D63g_8-INxHiK#@`>+?1);mj`NSA>-FftZqZ1lCzDNy> zAoSk_7ur#{xZR-fI~Csw=7?5D3jTx2+%-hLK9hN7{G+z>TYEEYleeaKy1UNpoambR z>(?2&H?g%_J~y#_GkL$QXPAs{|CHPv@BO{4=Y2NC*1d9f(e2dcc6hV$1Fif?M^5j)``bw654!%{+wc5{iBCYg4?+noN5d`h$Nc`L7;CK) z?~EVgk?03LKR#rU&Whw;W*#pfBOeOgxP**Ua1MeG_w6=L1|s;#;|P%qY}1v0F}#|uAMiXd`2x=*;2u9)D_)b zQsO1Yj>CJP7vf_^p`hFG#Y`s7iisEUX>Y{(@<6}VpHlUem4cyWb$cyuCQrp)h$T20 zX2=vuS%b*FMZ+{~C|+}xfHRgmognc!2TFyREGIs0TPta+9A7QzndP`+XX59_UK{gn zEpAhFTfz3xdNM*A92#aYc`)rBoUo+3mJ4{aF(#R;oLtGwxUgqD@(D!zje%A?s8tfs z%Y=q7{~JIB^mRT8fG41D@X>J`<#j%qhEecY$fqqWE$sbl^#@?{jYY#gzMMC+L#bYJ zh!usX5O({J6GlTKt#Unhpck0h=`pz@G#ZlRF8Qm`a63Ihqi}P5G5T^?lFx)*41G8( zqjxw+JAfrXJnvM84`BWWhVTFcQgzW_icEE+!tlc#f+}Qu5?Y@lq0mb(8-YS;YiOzi zSwlww7zZQFjKcsF0*Op~WK9;f_$dNkRM_4thu^?jr?8z`ZdBOfB$1DYo79PFUa2W2 z95sw!6cIvtxG6A{yeUk43s5L|i~Wp)xyl^O#jUCu;8v~*nXSgSAs{uDON|gQcMUSv z2ssK4xFaC=|KTKTbi=2Cp?+vJ5MJHJyNCCz&WBeF1S{||>-W5Q>lmCYFg)f``cLFA z^c2q?8f_?yJpe2Tzbj9uE42?w)}Zv1tVkP!a>vc-p~|!|4ff|!IOmgqk0^izz94Fl z1qC`7M;6#5B=`o`&vV_wb=1QJaWlXbJOVlb|7~u7Mgbpb!%m1+zmpo7nDqV^CdvP< CDS{pV literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/initialize_random_generator.o b/src/MCQC/obj/initialize_random_generator.o new file mode 100644 index 0000000000000000000000000000000000000000..c4db988b6433705aaa656ddf579ead3875b5f20a GIT binary patch literal 3536 zcmbVPU2GIp6uz^&T?Tg9T|nddQyr2bG`3bDNbg0?=BN|XO{VC zx7eg=so2zw5;ft$zegU8@qy?|gBpDEhr}3743C;%LPCN>BK4e^JG3^*uxuy2V|}WNJXK?YhW&3V}8SIw2z02 zh4~Eu9=hO}Yc34w=cnm;!_yn{n`3yl{5)~-fkpt2ZB0{t-t(%Nj7diqKkrv;QrUwc z+2u^AvpeDyjjTJOdHtS(^+&qxF>?7n@ybp{haIt+@!Dbik-9uaeq6zXI=f?jfM<`F z7vmjecw5>0pj&ixFp%zur<$r>pw^;#`GDbdGKgM=H*wc`@%E#r=~#Y?@V;eu6AZ7! z@J`?M)Ugl?Lf8OJHah;RU-13Um7aJD^?QcUK2(fJ?A@2i6c^@<++guq3X|OGUv*qeUTl5cC%8s-}FK`e9og2`UpBZfH zxZpa$Bw$I))ot#PF#Vex-*Z!*ngE#i^kwu+&tJd{<@n%D4{&-;27pBT^m#PTjI_ye zb)+pJ-H_%nL?4cpV9c+m^|*6ENX`Sf0J9F6zF|Kv&%#)F_8?53g>XZlCgm+ZOm@gq z7dg58;t)3{SEFa7xqLpKia&80PzkvddL5ZOHOIkN=h}`L`%Flhhc$qJzkB&18f0y^ zc%?daUjt7Nt2f_S-fsm2Egk1=|qRBD}wA%;YHFrPh4t&K^*B$!QWd1lf{_>U8aOmvvo*D-ouUf76gi`$6sS&3)i%sjehYgM z`n?F6p$lV%Q_Kmpl7&=+5-l0#IAE4E_m+47a>Iq>2v$WJjS~WYZT)kai{iUB+ie8aUO$q1(N{ss_6R*GDb*>6`F*nNf)(@r@4KlXOpt2TU5*CA{BG0Ii~5-=G4YiCmRhB zvPCCH2_Lvu5u^`UkT--itn{F1lru&pebQ00C(@RgO}{ws(tvlw;GWdh9OMAs0*^rp z)ZB1F({sH&?Ig%85sYw4c@>0rX<>{juty=yeKR-?mCs>Fi|!d>Xb7JDaI(eIS6+AZ zPbb4+thhj^F~9D1!s86M=D1bdI(|)LM?U%M9%c_IG``gt$}P>h-clsCIB;9y6Y+&!Qlu5ScX;1bKGtizI?6wOsoT^O93** z`!dAxZ3$nF*KJ8(ev(ZHlCf*VSJpEl049BTL*16}<@UOb_ho;bT|gFa5o@hw;t*f< zK?7uzG=rh7nNnczUNrm^Isk2{D#6*C8fNslGa4%mH?pDnV0V!^YBT+{bj=Ng>sh?M z;*Q679Cs_W5_-I@2sCb~EbFJ|^4d2D7mN$RllfrujrTqY2l`fr`Ja!xbM`R5_J|V> zY+N0_{_-#3kHf>kiXHwk@CZbLI4?j4iHf^`15oRBH!x{+uP)Ff(4or24&d-D+WI(f zs9!M-9BN$r3^0)62Pl-E_&C!A;5ZdI+_A49hdVxY4vc8Wvm1Fg+PUp?ml5jEl|m^CLMhX{Zf;@xk-nQ zv_jrH#}(7jZLLHVYMO?rsP;miVR>c(e+VcgO3A%uiLyjtDhubc+Z4|oMe8QTfv2H$ Qk)5*l2SWl4n|s6l2YxO)y#N3J literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/linear_response.o b/src/MCQC/obj/linear_response.o new file mode 100644 index 0000000000000000000000000000000000000000..787989a0dbe75c1fca47f11eda4159508b5c0308 GIT binary patch literal 14284 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/linear_response_B_matrix.o b/src/MCQC/obj/linear_response_B_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..48f37c79240a6db2f3e9693b940f9f8363f8163d GIT binary patch literal 5408 zcmcIoeQZFdx##@uxgYP{YybXVf4^5t2sIISKs7`CE@* z0DiwVSRw;cWqv&@8O}G)_>#bfL{>ru4JOWK|V=F1#SR`Z=?e11mLwEC0r1yX_dfR?UWkH0WJH=`M4eB<}sFKqsz zaom1Yd=h)l#u(qrjPKlk;Y(*ydPL>?@%NO`>F*iWnOw3SZD4GKs_%8%ijpfjp?!kw zvs)l>%&>n+4^%9;HL>#V3)((y@f`4c)6?ha?c1*uyz&kuv`Q^x{F_RC zs&!HsdE1wNRgsigW#qal`K~MZetEoGy70Q1pHc42bdOwBCFP1wx^N8~z;C)xt2V!( zG|vprQ|VL-3}$##TMjcZjvO6YgW@GDd;Zkj;{ zh0gEF-|#}tANcaWRp>1E{2AP@?kPU{20Ey8R-u=10u-gV>86sOR-3OV`ItNh@Ul*k zzoInHqUnlCCwCRSGF1T=*Xyki2yOlHtv$u{Mvnj{lmbjr-Yeh8-?}rc7VFX*-} zre1l%+j%$pk}?d*QH36pClwP+6ef95+3J<2r4emmVF9u^Py6MY;C6#T+YJnu6TO}D z(#Xg678ag-%G2+8%Ja0x4;>ntt zh`NiFU|v}0xAtLXl;?(dt%o{?Nkidz5ytZWPHZEbUpNJD>!4rzMxSGMB9(zpY@6HN z;pk{-ZE-uCksejrBG-o!RO>1GN{sDESj}8SBv9!ZEG!zIW(mCf5EtQTY z;!beh*6MC)ZAXrwOg64<3nfxoo5MNaa6Sei5{+k4(Rex({X5P?4 zD3%RtL=o*E&it^pTE^ zFtiCagC(9~$TUVQmN;iIjfobEmWo2-o6w1A%xIwtzoblv7^gq(3dJst4O+H2rF{w$DK^};V*4auQQB9JA5wHp!>zu@~v-}DpDZEr|MiBPAT8lB$W zyARauu*LOU1*(CgV2ihFu=qr+GhDu@0`+mHnEy&M$G`=jQrp)*0A3xLz#V++06Xwl#5mtZZ{| z{kgKOk?TJw+w5HbVc8~fogY1z3roLBe7`iVEUAvmR{3)SzeWorvrJruyH!d4D?=d9 zRJC!#3rrD6Y8h_hI?jC;%ZXB4Zkf2;V%H`5hEm+oCHBR@cw6uqKGtaAfG>zZjuWo) zNz@%VD6hov#iY7^3bs9#%S=*IJ|m14@>kYmV~Y$fTs>Ga@gEB;hLCkk({JIRQ_{m# z{-ckQ{Uvv%6qw|xQ!-HL!e^=MqE)(VWd@!UC40GgjWtp7Bq!k01ExwM^?yZlfDwJV z?)mHS^HS1%T;=Nq3q5{;kK%g@mVrm{RF+wpjX+~?;$J3*V2j@OI)okK%9h>nKwEOt!Yjs- zQwwfcc=4$`3-JJ4;s>W2mQ5vk{>9eKrJn@`DnE<5e-}I{y=!ZLC&iZxDy+ zCE-7dAr1aKOScRHgi^;Q7ovY`S|@Z4YTE;6=7ebM>#OX6zr529Nb71nGK$HmFr zhs4tdgoh;2X|jtMlXhOf?tcUn(EEm$fez&;lk5|`!C_zvN^pG|CCrcQr+Ui7@&c2s zOg1xV2R~3P`1+y5-zK=w6D;M28Rq}@IS|7n^Z(Z%298{K@B;rEF1>m4Td$wQy4uJt N#rW5*6;Lb0{0Dz0EL#8o literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/natural_orbital.o b/src/MCQC/obj/natural_orbital.o new file mode 100644 index 0000000000000000000000000000000000000000..4245ce8ed4b518119f4e5bf99239b0052b2d080d GIT binary patch literal 7348 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 B!H56= literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/norm_trial.o b/src/MCQC/obj/norm_trial.o new file mode 100644 index 0000000000000000000000000000000000000000..3f94ee78ffa237e120283c008646efae5d4de01f GIT binary patch literal 7656 zcmcgxeQ;b=6~FK8CV6SneVepm6ic_dt-*1VY#K2E3fVT1xACQhn$lE0w%g6yWMx0X zel($0tTa*9vQS_gb;c2OoY4^wM;%2FO>3c45E(=$%pe`DBc&FwBCSA)zw_?BZ?l_L z@gMK(d*__r`MBqvd++XjZ-4j3@we+3Q(O!;Ty9*4=;p(P_8wd#B%h`I>s?%NO4vvl zF&SNpg<;LO6ek7Jg+rTfF@B6AR=0Sj79dh;i3D zj2F#D(_>a{!F;?e;&q64uZwu@_nmFM@cBq4(zN^*#A_4#_E8aU74{jm#{Uuzo6feY zuAkiZwi36$i+EB7t*BoofEHZzox?m>{GyQ&;Y*Q+4(eXU*bz`#K0~;u(bl1hd}%G# zRx1!o6~ zFAvTfhko9iJ;LMTxXaq*_QB&_bY!?6eqU|y>OTBsZ=__DVg|_I^y$jJ+efmQS(GGojDWSWs z@@wJZE8&yRn8i8s{1@!BFZS!V9L4wHVDSZ`_;T=|iM*X0KWBW+IC(m(-+R(Lf6nYV zrGI^|*>lJ!!s+X?`cG$-y^iT}qqOv&cG^7;>vwXcK2tzsW9G?U*~8QO-qowY3W0D&&4+eO77;k-P-i!(*!c(04KX|u)COBLbf`Yrd+DnK3@Iuuig`o;BE4pL&>{iQ+0DD|}|hRf|Y_Ws3XDyNK+`+&Vb zLZ$vWvo!i^4TzoWKa(U|mNhEvlZjL! z&(fJ}DuUBnG}#vK;lF6>0Y#IE?dS`x=)hL{CZpRdU%Zfx5qzN!zYFMwzDX6POnDpY zv^}&#&~E0$xyy5;8yDiw(;S0ov!s~FiXztRO=s+P|$XTNS`+yP1 zU7y;TN#=ZkR4N+FuZ zNh>fK%}yrL!H>3mq^(0(qlZ|sFlsSPty*&J8*@k#y<~Fjec8;!*34AgqOHoHU*i|8Nd|7 zFPq9;Cy;3%we3(TzjV0Qz}1a0MX$%A_%OoMjU&3=0_l&Cv}BYiO_YX~DhRGFExAWw z#RDqX0_D(k$X#Cv+svG?lbkJd{ zcp{b0L<>x9pb5~<3%|VaiOqLhx_BbN)Os6g3G@xWxuU+;lg>>f(o9u84MWwF?y|64 zm|9Ds%adNs#Tp@Ya?wqq+mjA*(Z#i?=u~bT>z}DA0i7NI*D|$^gr$qeqxlS;v(!a) z_X7{SG`j49i+Y)EPd6vzbk0CCzmcny{sLa|D_xN1&O4 z&}{by2Ggpn)Rr`?ZE$JlYCl=q*rYToUd*fNN1-nPiUO=+;UySpn{sKROS`b)qJ}T_ zYGl`2s{pU5VH^!FQQ=tI1?#RxV(YppG+J52QfWZX%?brr)L@f_28_Cq9vBvX(D8d8 z9x*)gM5uK|sc#4`Ay4lL^wkcgX$9O6jTB<(5upN6Q`w{@c@)5Iz`T-2t`cjJJO(Z? zpXBB8hHtCn>1l@=unx(e!y&@DC0{2xbFsK>P4e;!%ubM}u<%ZGrlzt2le~0vv)jJ<8CgDVHt+sb!K*Ak53OX& zHrFx9&x`)ecM?78c+!^wHI?O<9OTo^z;o<~;AIbFceW<8QQ4FeU;1I(JKsrW*PqGr zdka0+i6pKQOIBf5%k*WJfT}b7xBxZ@s<4fcm0m7(+n&!<`)$XrqqbAfS~hftcE?Ud z%3l(AJ>ioKx+w{L+fi+nDhbKl8`y29wo9c1gCN#o9iiW6j9lPySY;h9oP;@Xl7%w?v@t3M#Uc;twie zDarz(3{RY`qFf=fp#wWL$KwnY1frcgf zZjqV7HgLD{{bz!GP*71EDekX?r8uuRht5_Uu8_s~Yq>aFafae>#Tkmj73HKk_gew{ zzA{HCK354#abD^#o-K8*kf}dkPMs^xkUCeKA$6`0sW@bf*f7(ADs1yjf<0J<9CN{# zLUpBMGF)x4MW{v{lcDW`E%&uxt1UwqzG}iS&fqI%-lGC_aan}{9q+0iMd+ws@hn1z z^$H_Ahfw>l6H1;)Y`Ef4ha>!cz_zEIuPASN7UQlUGCd+G^Rko=^AmW9owD+Hz-k-k z{`F!zz~0re$2C53qpL*?D6a8~T`eQ7@d4ax)wbqZb!D?QqK&8@Y<@(IH*1~h2hOS0 z25QyTX6?p9n=dM;Tb5W_ueRxd@Yr2z!nfY4&AA%1flq0rE42&5R~}Sxa$LF8l~k`$ zYPF|pPiRkTC$zgCbrl{V@kX@~i6bE#H0i}wfLdTi^gF>KORGkiQLz^JU<6P#il0B~W~p-GCd}MM24Lvyd+VMS+&x ziDdA=6G(&Nf3v_d$d%|`LGKdu%YynqVOmQRDPKbrL-O2-V1$1~(Ay!9Oh30oKOpG2 zf_mXc_*y{^gL>dA|3iCH$Rh|&?QvYB|E!RILo&u7|08>vWazetGaP-7>F7Wgkb>;rMPc{X literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/optimize_timestep.o b/src/MCQC/obj/optimize_timestep.o new file mode 100644 index 0000000000000000000000000000000000000000..735761eaa73edb8a7a1f95fd947108e5eb8c74ad GIT binary patch literal 2792 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/print_G0W0.o b/src/MCQC/obj/print_G0W0.o new file mode 100644 index 0000000000000000000000000000000000000000..4984798aac3e7b542f4a2df2e6a3175064d40ec8 GIT binary patch literal 7832 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/print_GF2.o b/src/MCQC/obj/print_GF2.o new file mode 100644 index 0000000000000000000000000000000000000000..3d41fc4a642f0e5dd7a4eaa62e2cdb49859039d6 GIT binary patch literal 7272 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/print_RHF.o b/src/MCQC/obj/print_RHF.o new file mode 100644 index 0000000000000000000000000000000000000000..1850caaa95e5c5e9f65c535cc4b4c59742cf0e73 GIT binary patch literal 8844 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/print_evGW.o b/src/MCQC/obj/print_evGW.o new file mode 100644 index 0000000000000000000000000000000000000000..eba0a36ab8586901a92451ad23bd55b49d4a92a2 GIT binary patch literal 8916 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 TSnv}ixhPOpPmD4@o!kBc7CZ6) literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/print_excitation.o b/src/MCQC/obj/print_excitation.o new file mode 100644 index 0000000000000000000000000000000000000000..f85b16b4c2e80c9696909cb9c84fb3966ef08105 GIT binary patch literal 6180 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

8FGbqsdtCMY_77F>t3wC#OlkciV0G(# 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 K6)U_H(*FY;)CH~p literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_F12_integrals.o b/src/MCQC/obj/read_F12_integrals.o new file mode 100644 index 0000000000000000000000000000000000000000..99be097d9d1863ca92f7a644e36c460df54e2e5b GIT binary patch literal 8068 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_auxiliary_basis.o b/src/MCQC/obj/read_auxiliary_basis.o new file mode 100644 index 0000000000000000000000000000000000000000..b7a86f4b10c7b7c010bafac264037bb127586415 GIT binary patch literal 13104 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_geometry.o b/src/MCQC/obj/read_geometry.o new file mode 100644 index 0000000000000000000000000000000000000000..89163254408cd25311e64cd51d5d879790ccf744 GIT binary patch literal 7120 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_integrals.o b/src/MCQC/obj/read_integrals.o new file mode 100644 index 0000000000000000000000000000000000000000..48ec87f41f617ff448c03cffbeb9a07e9385557d GIT binary patch literal 7176 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_methods.o b/src/MCQC/obj/read_methods.o new file mode 100644 index 0000000000000000000000000000000000000000..05973072b7d54e7b5d564d2e350e1276c96fdf68 GIT binary patch literal 5460 zcmcgwZERat89u((alEGU+@^r(C|GbeGHEw^9^rGahr9Q)cawS665 zyGcI)H&jqFG8)8>@q?{GOdz3-3J@w2ACmxuNl1K1s8xT^Ngx<(gCWo~F~NA=^Kot8 zByIV_QSN=;_c`x*&U4Sl&GG%^zh3%JKVv?f;fBkP>oVPf|yy;Lnqz{{t2 zw#fPyZ&EFV)p|qd%h^?@Bhbs&*C!gN=lQpX&qD{kyfxb_W(xIe#X@B!GkGX^V2_&? zk$mSQ65hlZ&B617Vjkf3NX%rcIhPETUVRrmd>16&%itrT0mkNF+@kcAss)=sufCap zNd1OXu^$AyY!mYW-=j}FZ+3RJZXI3A$K-f5CC#g9AZ5G}U)j#_46nYXD z7ngizBwrNsLHibEU47+Jm6qQczGo!gpQsY$qU0O84j(oh&-ad>+V{K?wc@IAyyDg4imB$}#3tk&T}0b8U1or#+LNlwQ$I~%*FNx2^1nb}&cY?=9NeW6qxdH3*L!*Q97 z9&+Vo-eN&*&02~bbRZP{*iLM+Zr5h*#n^l^n>!M7>bcklChni$>y;0UJ2{9nUpE#0 zqjrb1qDAR$@X$mJi~JU6DXj0<}>IoL9iRB=DL5awSIsX~EgZyR7so z@aOGpJ||Q36&3(cEGSleB`5&Js;`7O5MPM9Z6btNM~e$C5+!8b=|YAGspKlIUVSAV z=*w1}1*<;7d~bS^#I2k^AtCfHp{EoC1rqw!i9kt#7O+4A5z<-(Uj+?*l)!!dAFyCSmb7yl8A8sC;@OPyrTJzC5E67E!)BM+1v0 z{|%xkR?04|62!(D*x{t zETa5>bg;1U)hb87^r~F9BqXY_CR08?4g=TNr`BylpsLYW!}Y&|Z9qk1pA^nI_fETc zx80Xzp2j}Gl&`e=*~-}y{Cv6&8Kbiy6^+$h|C<5=c9JQ-i|w(E**e-5U2SR(F`+D= zf-bt&jnEx)>AG5;S=;h${830hod-rRoZYW4{#N;u%lM&4_Bm;P1xxL|2TOcU$@pOz&%jcCO4@|1f2*v2ql}-% zXj1!c!&3fNrKS0$cnOyJ$-z?I12P_z@c=C4(LW-xFThg%uVE?wSsAxwdsfotKFrK4 z*a>M2p)_0DN!q6BLoF4lDxoHoQYlf9ODagIP|`Lbsnnu2Qlk7w(h#6 zkC4GB(KVmjsj8`snk)cRwRdZOZ&4PtcWUh#@e$?ZB1zgwDz7w7Ad0Fc3{y{Khgea` zCwLaJ{m*rxrH$@#5%DB)S)&+WCEq2EYd$3js$Dyy zJMMJceLlN-LTHdE;_F&sKL=FHLR3|4*dc?lGQQ_3_)aii5BP`(;SK|wBH~MBlQ~jW z#@9dBc72z}yWMZgyTQkgx*|S%yzzknUE5#HcN^#5dX}K-XteoC?lbbGa|z3(GQMv! z-)U|&b&Y%@`GG8+h*8Pc$KwlfKzBElL}piKj1PR~*hn?s81t=Untj*E7uVz2AO9P=IdAADGJR*TB~iFMC((gfCRMJdZ) zJB-b^tm);S=eUv+=_e5fVLdjW7@X*FZ^uQ2_7u9PEe)gC8p1V}=+4+w4f%E#{uRBi zyKp7i*Ztx+WFn3Bb{Brv7n@R0m+p-n`XGj|VpF?=;aH(7I1)PvFBdt+3UBp5(@1LA z%wTh@&>Qr{3h7|yxvt=5+8kr33{#lrjs(9%jZogB8yY)~l>HvG3JZ%s$Aj`&^q8hK z*i*O&4$G6}D?*Mf`7`e=bDe+v(!|_o z!5h4I2F8bBEWC2&@5@}TSU#^`UVpx@z>2P6@@5#jPf1vUv`eB#8apMg$4+5SVK5l( zDLfk-w{)9uM_P^q9|O`uu!pdiw8+WST2!1Al_jF5a4I+sqeV!av_TL|^{5N)X)E(3 zOvqK`;JbfCR1~pjWevxPlY*u`LhulMTxYbV%|MG*^dWHOz9Ki?S4C!Mfr+TgGDB0X zEXSBC&6T?*S620v$VJG+7sO! z-4lHvs{XoR**LX{oh0Dx%nI3RMEe09iLJ)d0dkyW$C~I0HcvGE?U~D0ubxBz_3)#{ zpP?pa-kwtoVcL2?cJ|;TLbovTM&x4Ts#O&vb}V2Zw&hj;VldMyNVJ*We_q$(gK8$1 z))M)&)|OmvpBz%zk-Qla>O?wcXoHF|tfkYkF=m)rM%J}``IN2=61OC6%V!2OUCt%t zL{8Ua4RofCld_!6nX-?Q){HZwL8+W zsu)Pz%w>$C=r9#k<)Ie!JH`evm?1f*52Va^+Q9hewR#l=FZ9vI`Z>NQ@vNv!+Th&9 z?+Gs*Q2dQgxV^Lj{LPPhyfj_?@|4%sv`p4`>E-MXAFcKJsM7i9954M8@{iYe--Po# zf2Wsv@rP|_u{mWMnz;uXd=>=`KjJv$dT<9t>JqV1oS($?HVpzr#3?b&|2xokFfvM! zB>7x-ZR?Zo%;_eMwC&+=r`*{VX$#9ra(nj{+_iKnlgeUlDEVxjW}$UpRgAIBKrU^_ zN+uIeo> z8Ht<2awu=;A^eVrr$bvX&*OS%D3J(R!GzMO0b8=}qn#aU#~LL*GLqJm!MJ`Pm5r=x zTiX_9Z}gBz=La>(=dNB|p*{nVqNAJ<>e6!~1G&-AzI;5fH)QCE(A`_UxW(FttlT(H z36k4Y#)X4rnXFn3=vLb34W!wFNI{T z(1k^PVNus2>WhjxS=1L7bU%e<+)`c=_4%AyxAYZh zDH97a(#=*5J6xtD>W46AsJNv^BvBWfUg;a(eW+GQ#U389o6K+*tZr$a(}QRSw#Odg zXseqRTk1~BT~2HVXBg+fY7*8IxkeqXk|>_6jzUIDx7C_Ho3!I9TgsMYMVSvR-m29F zk5wYF#QPi& zu7TrhH`u-xh|dwq{Xp{T1!4yaYy}d}5+Lz5uzenocs@dqWdA*o?7w088J2&{a)IST zK;l0Lr1lxM-_G`RK#HRoNPbN~eESH{d4u}-Ba%n`yb2`y%Ru6p29kY}?MGPtGRp%% z^4|j_|7~oS+1?DKerti`M<0vvc`)!#B$;^60;%6qK(hY=NIWOl{vg|Rmit-W4kZ6C z0LgzN+x=|+52i2m`vH*r{tCo$2wVVCzdr?1zfZIMhd|6IRkZLB54sqg{9`IvIF z@!+raUdEM-pJGHGmVGVbM(AnmVv|`-GIA}xJ>SA|EuAJ&mb2W#a)9OSEH7pG>nz{I z@)ImCVEHF3)3MfW%)GAn_2z?%j;NvpXF5~BPrrr^uG~f19YMsN2NrR=;u?Z z{BDK(YK44Ph5SN=OuukS`F2&vWGl7P^DLF|k#s0&pI22nv>HiGS9y0XwHc$fSr^^HBv?N({|mMba}odm literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/read_options.o b/src/MCQC/obj/read_options.o new file mode 100644 index 0000000000000000000000000000000000000000..643ff9fd3f8bbf5d67fc784ac996cb5007b53a3d GIT binary patch literal 8732 zcmcgyYj7LY6~5BS@&*UTkU$N=WT8rN3$o?J1QnWx<3Qx#rfF~>(*he=TFIKolF>@o zc|c7tA*y3YrmqacFowQT$|FBuCe4JIblRyyONU1v$Xw%DJNL1A zZCd^69q*oVzI)EO=bro6yDPu`&-XrRWXz*6+;I7DwKw2q;6k|q*I@!LP|mc9iU`@D zC>cH(UCjidm}cG@%L`t}1GjD+D9MWZIT@jlKOW1~jIAcX$Hs}MVwy2KpG#$u5-`n5 zf6C7#vi`D*m8GEGN)hqJvKhM+V70&B$+(o8Pbj9!j}lEYoyuFeXgVyAYJaoRpG+SM z!yk=-D%B}B&A2sKNScXUbl8HDX|B7gXY*}Jo$0z@4@+c|^k*1iTme^f*)**o#~CWC z<2zF2Z%+Dahd*-E#MlssQ&fDZOd?BQb$nar3Ds}Oj!nyn5jMm)qqZtO(ckFcV9vU~ z*5AKm{u9D2Tena$CF1HYosDsg>i7m_Jf~&9pRLp1NMSI85wWZN-TW~T$j4l}we_M?U%@;8q=~RZMUyZ-h z(qAKOA}B_ipxcc9?hlKYD^}-E?IXeqW7lCHs45ltTZT$nOT78!iyT!_B7DdYdr{;X z#(oJI^OtSHMa3^KvZZAymnOLSOV3?>#q&LP_7%_dZ0Rfhs%IcFbs1Ur6<^yDnFh6FMDGmg-MUEj}4>cPpp6M_80{zAQfKFAYPY2p()&)X0Q7xFQG~s6^ z0-Jab89NJ+MJBoa8Ll0f7xVU-9x8o~Ovsae$)v zbpeA~TMIyVE}l`eTn#}*ic+^%=^mps-Cz6&o!~b8#dF7WK#n|>540Y0x_OQ(Nuzg_ zQe?6_z_AjL59pPM^gq5k&^oYSq7UQNGr5I5@>W5o9#R8+$H#G(P4TSs7vrL9v~pCJ z6y=pps{3m+CMNjH5A8!?#OnKMJTHlgpT4YrvA* zecVPT_5g1IIIlRwC7L-@H|^A^?kVczWe}>|xu}_ZiN{kphyahkQ^gFa&P4=D)Od|0 z#ZU>BXG!%S-#p14IU&*``k>Nt81_i`h0{||Jt(DzqKy=JdX9oEjr$2Msq~zzsC%PA zI$a^XQz4zLkY+2SIY&~dR@6!Ps0!FgIrXtJNA;$hI#gj;u_?t z8l%$fiD13d41V*_|4UljWTJpBq>EI~dB3cN~!d@vN) zCP6+X3cOl^d}tK7M1p*TIH)F^m=$Wm(V@@$sWQicRnJ@P($sW`?y~ zCzf3cm*|N`)4P@X=(qjtM?NhqGZi2k9&Qzk2JSFrU}NF@(HGWe}j(>E6t(3exFWE_~AxhBQdi+-*zw; zHHUrFN^?k%cHz?yq*b;ci0*5FCj3#HR6IL3Q=}dhE5%7i!FQ+=C@M}S-Tc1;oyOUM zQpA|mXffek`=Wml-9tDAfb=L;EYWh|SsmKnjM5&RrTB9);xOgj|| z4rk+qv}FfJqWK}CvtZ{s@g5OPclKK8bTrqQjKw;6FrDetppf`|EWE;8(H)GAjHIn# zJenI#Wx8(axUnN7wb4Q>U5Hyu_ts3g&Mh_qMLSu$b6qYwGMF9fysr?AZSS;mvChx- ze!iE_SDqSYkRW+I<*snLEEi3#PPcNC?Z~k<938V`33Dg`69P74N@@9_oMjIQ@Iio2 z5g1RUYymw6=+^{g%o0e(*J8-DWWlm+lip^e%M76yzoBe7dYn)jZ}Mp?Zw^N@sYEs% zhXpyGkBvgZARvD=b+=KSj5?{J9_I!kY7SD=#|Y#Ba)=y%K#+{uG44Qxma{V1+;B9V z+8L$wFGC-qD%IGi1fL;LrYK1uHTGKqMPmd}W35=)PGib=fWTOG$hO9$+5tlBYzcUc zfI*wmM{abSceQ*xD#djqCPS)`aW0OAWbJVh>18dNOYKx1<_OFT$Dl)_)Q!zU%UJhG zafFMb(e!o+JV!u04~aTcp+fHuRJ<(D6n_mpojLZPU|jC>je?4o-N(OI5dV}M zUN3uqov4Z70a9@-s$DP3IWZh`V%Y8CYqzT(0!zNe9R8cwJgFe5%wHWC2YI#2t>kS- zjW-`VcxYFRJAt~m;!r7)gRI6>V*u;0)ZHv;vvn_JZML{s(#m%)WtOdOmaX+z8g7_Y3Lt1ZwvY~OIT1zLygX;)jI zb=bb+Y74Xu+q15=K##lGY74Xu+e5Cl zK&VwSh)83 z3KcqORv*;pfLd`Kao51TK>oqy~B>Zyp6 zeo zFZlQP_j+$w=)LyxNA&f{)318hFY@R8r*OT!PhY%4+j%ni{HasG_j(rn$)E7QtOEcZ!$OKh+=inhU-8Mf&a10XeC?Hu!(@WpX@rGI{EhaDBu>ZNBXdEYb$` z_qG1_z0_$oiSq~kf}3%}AvL%G6sOYQ&7e442A4`o$4`9Q3Vw)jCj4DV-;|WzOYl=* z@EK6@^MsVUKrv)(cjBFg@QtA4|1*+)N>X~4BHSx^uoBDCtT`gP_z-D=5XOOMDJ< zll;+dU*!KaDenbE({1!C99Be-RwGIqeIJ5pn<1#5C{lheQ4Ce{R#f88Pd`TyT`Fmt zr1Y7I@NP+82W>_}YMuRzWF$!auKo(i7>ilVA1Xh}KUzRcjN#%#Qnh}Wlo%%bF z7ob5^l3>b2c1xA~l`45xl}xtf_LP@$d1IA~A4HQ0@omba4^(!-%9*ht{QMfjzX7<` z$~~;S&d%erqm?O#9A~t>l~+JFmd4kDDvWQQ@hpC&EsF@cgfo6uUp7sa?(N349M>{- PYef7zKo=ysLX7acvk4b?%mVhTe6k5!4MkZ5v28L#@3O`$&QdvEfR@k zvgvqoSUMt+<#=w1vrYCJNQBm?nywTnBauWrYp0`$PT{D;>y&s>u(k?3x%?t(Br<3Z zFB5pZzK|YB=FGQVt=;;Iw?J!5^o0UrF}qKmSQAgj}*bsS()FJ3cSk_?*#A& zsD`l-0#!}r7f%kQ$XA))3@Q$ecdZxbO^YDnEubaY~xba~qzl1S{g)lGoobnwZ!2G1|JCNV!|!n-b7$0?3wP4)V`R({bc)NZoQ(L{)xHLR|=+=4ZA z$Tz|}(7&SZ6bGlF+DFTJ=V>HLHWl<4fvHdZsz#Q(@Qj86b#$GhMNO^CPy1e_++Li+ zO~yiKlNEbAOeG9Y?Z>S7SADNgF0rhyW2zHX`D<9Lr%>yl{%$Lu_3fj}SpJmnBzl5{ zgIZX-M0;h0@^4Y8W@tQ+J1z6Ivr}1G=A`d+I1BeJHP2hxT&NKIzClIqzrRq+tDax% zDLiIepVt=1?anVWe~dXi`7^ZBG!zx-2v5B%uo2Qk6O3Dqpl_^8BtiopH>dv!!RF1A zxMHU;>hV48vwX1QkgsWow-(hO?E2ZECquD?YXQ@}#b*^B)}Za*jI?`w29o?4vm9BU zo4V^mg^vFSqu_;&7lzdMYo^9;tn)_ zLQ0#q5#zXyl&T&gy40iF|L%GfA^9ZV}9{@XoU6XuzbNWR&TQ>&^gM3Y4N7zT@ z*}u5hzJx;Tzp_YKxZ!dS%~-MPRP>Pf+7EcO!`cr~=Kl<%lvL&!s_T&1^bS85+S?e9 zbK7-x)dF7#Ow4LQ?FW0h7INQ^bJV-7i8D9_vc^VN!sj&$du53|8WkElh=e>{I2>l- zDoTuc&;hZgP{U)h=H!=gcjT3$L*k~w%X$;DX_36RV_|rS`1wVCPKe6QAB$pViLK={ z?iJh6Pq3?T_>3$hahE9Gj}>(Ajj7}>QaF^B48F}O?A5OAHun!+SmeZThYGz!VcJme znAqpO(K>zEK}9xi?q;ZOg9R2sIvt?vdr-nv3@6m;x(MpNi4Us&C{g%Q?(c}gO+?`v z1%=IH&!Uu|ajC@p!LFAD8wxusn0!t$nHTz}RA@olov`+uXK`R_Vj&t~2L7uhM z^yNd}irCkmTr=zMs1{#2Z|2@pUrXXEj|NIje%l;A{rKNxS1FLX1P#A}X3?%TR8O_F1N$vGCQBOA#@)5m#*9X2j7v-1qfLk=G0-a!g>VaDaCAI0smEgNnTIG-P31~?(j)0* zS_GQPlS!EW??ktt8sY)b(C&Mn&$~C3&f-ycds|zlx3i_arOoRf+85f5t4({6jAm_r zE}6^NgMR*?>(4wrI*>|ay#CSAXe^Z(_djK)GuTc)g70o`YiaKwjL~c^Y2O`7rS0ur z|FGBpAjD8SNpF&wc+5YV8q6i^jDIYe9r3p2GU--gMWS`Lok&E}t;4ZcD^I315g!m1 zzm9j_6}hX!9~~P@*#5z2`d~cSzN6(cEp0LyGsF_PL7N$R+D@j@qtQhC8BVsyP&AfJ zrCWx&+E{B}1}S64RHikUPK^zu##^7vMPpC2X40|Np54E(TRp7fwc5bm$)+1sSb;rk zr<}jg4kg(Hzrj4xkXmr$g`e%|H6muDY=})7NpA#~IX(ro+=@7l6(eca(jwaJ} za%?x@c!KHGWNfS(iDpyyDMDY*r@#Mu|2nw!uASXD26`ej9LKR1#{i&~Im4sevM+h+o`SuR3p1$~KDPGZMLYkX3XMy&6R? zZEqvnNOR)160Kg_W;E8^TjMZpGTykiwq9${+}LH^$7*WsffvR56&6CIvqjrg>o9(; zW@pWBcN-Mf?b6_{s$#+$YSb~%Rc7M#ySigpuTe6=sSW^l)Y7Q+LItsEGy<)q_wo%j z$g%FWBES~lnPnzo+?p0@qyhD}0IL;BgQl&k5x&M-0J4!HAXTG^Q`6Z&L+L0gZ}7R5 zE`O(@IFHgPDQfU}mEIs+1e97lg`a30`Tj}#9pP_X1b-)u8xvsq4E?qjyF{L-l(mL7knZvG1 zIN@E1Bs^~v@yeczDuPQfPco%n0$Zr*>@cgGk$h{lUfH3uG*kMWrTkB>nm@d2;i-Id zHojI!F=w4UUDVr4bDmgrPIxN;PtyrUOH0~n>|wg;Q`;!_)4`5Ezhd!MMGQ`dP^#Fz zmyDM>m8r^C&5oaVjyja%A0()ZSEeQ(8;bD~z9=qA?H{F-^Bj>H05nTi%yaV*^21?FWlhANU&X zs?^R)sj=9lij9Cv#FVazW+M_Cd-cZQk0k0H5{f&O@%Kgi&y`?=ra+FCgDGQ^Bnnoo zI8!I*;rPmk7MIjNDAnI7xl|VSmZzqS9~M*VQyl!dECHXQXvkgFSieiEca~h0t5OR% zS1f=3I=PnHifigu>9-Vf?NjNOjz*u#bh?;n|GQHCpyX0{{*6o?B~y8-GX+;=p2ws^ zaq5%O>np$HxLG;wtd#OZDU<)Ci7x3@=E>5DdVbl#E;~`8Lpjvhz!?-Ba=xPYqP&HC zOG+$Usfylw`<0<~4bFwbFUu`d9E0;j@c^hj;gKzJHxyOioIkvvcq8vWtL#fN5*5^; zznq>$l54z`(1Jd{ESMhJD&K(Uv1!>W5Iy8C3&L|By`@w>3ljVtMfkGUEcjH7DW<&r z0*1~4xN6$Z>o(x3VK#bO)7Dr8f8j&O82;}WweiPerey>s+B$iDFxIj8RmafKjAOI@ ztmYVMacu5)>9;qyjDBO%rQZtW&y4f`rMEWf|Ex9cG!9Pc-8ZD}=`nVE*Lc`C=V;VF zr|F;FXtW#C+x7Mv?pp{LJN){sZsQLf4PVv!Ht9PWj~ek;^m`f~`SrrCtKT(VFg|d& z^&OhN4TJP;b$aKgzIS2QRlj~ajj8{t<4L2%VP4el*yQ+&=k(8Lj&Z$R(`&I>N*k3z zHT_Oev90f7$FYz8Z%X;cQVv5Re(Pn70aN^MOZn$gdLhy8B8f^IAPMf(eVZ4PxxOi7 ztCY7%=|&t>*8@`C4_OBQ^*``u$p(=6AGe!qB&hy3y%n|z0M$q>GuaIl_DvNw{$Lv( t62DnQQkjUIPN&igf7seKi{N#i{>F@~PUr|r?B34ySmNK^c35q|{vV-1i?jd$ literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/rij.o b/src/MCQC/obj/rij.o new file mode 100644 index 0000000000000000000000000000000000000000..55f16c04ebfd25311cfa7bf18717048fada480ae GIT binary patch literal 2868 zcmb7G+iw(A7(Zurx}CDi&X#RV)ka2x2@T9%ngT_s(hD%FZMj%tjmS8=J1r}-vt?!% z3QtB*Q*{jwBtGba{sTT4(if90CK`M|K!ZN1B*rHt+82w)%lDl*XUlGj;+LH7c7EqK z-?`1q7r+1fS34mzL_k54p$(wYpn=>EZ2>#)B1gkP#}tkM5ixKQY!OU?m}bSEs|0=! zPwttTT#1GEHFuDYQwABCyeu$iO|xLsEeFW#9*8DqYo0@(Af6H zR=^0tJRVr|HLzVlNDg2g1jmThM9O;aO$|*hAn@=rMqV{uy=eESe<2hE)(vTV-4Jl|QDVigr5;K!TSyJO;?Vz8lFR4ey!suOx zc6mvix&&=;N$r#+<7{0qb}m*g8uXgFku0ePA$19`ox{t<&TG|M&%ZEq#J1fhdvrG`j1E7L?fkMw5!Y5Gi zj4{adK>Hpa4kGx;|9t?GgZv3q1beH{eG`YZy=AWgSEDbT9?%AonPghirw?RDK-*5S zRCKM1tykTuZx?iS@OA%mDOYxUO)r(KeA%DVPuiYeEW0{@2Q%qprXM*>VjQ_KYs z({lsc&F%fVH9PCrdcpEe72V8^xu-1WIG`|i40HJ&Z9IAi{ye;6hy#p!?uWW3J+y*OT&)DAP<3+bH*xyS!=uH6N zz;&q3K#QOwF&!d`(mZ6K7gDlkTTVa$aTFQY=yTve1)cO!B@r2pgp>!BkA|b2bOVjU z8I_Xs$!JJLrqo7)Y&IbQOztPyM1K_Bwg^Q)I0C%w@H!#NCK8D} z0mK9fryY@O0{hoJ3?owDM3}RlkSL{Dh#Ml_H4-_c2w!}5AQuf;9H#43z<#>#v6P%9?N z6aNCa4 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/self_energy_correlation.o b/src/MCQC/obj/self_energy_correlation.o new file mode 100644 index 0000000000000000000000000000000000000000..ac88ff5077d743f60e5b20f89816ef6230b1688b GIT binary patch literal 9252 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 Rua+t`;~!T_z?IOH{{w*_H>&^u literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/self_energy_correlation_diag.o b/src/MCQC/obj/self_energy_correlation_diag.o new file mode 100644 index 0000000000000000000000000000000000000000..bdbc6cfc9ba3859f16215de203b88020a4a13592 GIT binary patch literal 7908 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 D$|vof literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/self_energy_exchange.o b/src/MCQC/obj/self_energy_exchange.o new file mode 100644 index 0000000000000000000000000000000000000000..7e109c567bd1fe11baed696e459e04c9050b4c33 GIT binary patch literal 6496 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 RhIW!+o&RCb4-yuf{0EXxnJNGP literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/utils.o b/src/MCQC/obj/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..acf3a22e184fe35868edd4973008b3404274c049 GIT binary patch literal 13420 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 literal 0 HcmV?d00001 diff --git a/src/MCQC/obj/wrap_lapack.o b/src/MCQC/obj/wrap_lapack.o new file mode 100644 index 0000000000000000000000000000000000000000..ac714a87ea9b73a2dbfd08ae351a9fd2ed45461e GIT binary patch literal 17616 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 QBa9k?^rJ(Fl#pTk4{wg$bpQYW literal 0 HcmV?d00001 diff --git a/src/MCQC/optimize_timestep.f90 b/src/MCQC/optimize_timestep.f90 new file mode 100644 index 0000000..916854a --- /dev/null +++ b/src/MCQC/optimize_timestep.f90 @@ -0,0 +1,28 @@ +subroutine optimize_timestep(nWalk,iMC,Acc,dt) + +! Optimize dt to get 50% of accepted moves + + implicit none + +! Input variables + + integer,intent(in) :: nWalk,iMC + double precision,intent(inout):: Acc,dt + +! Local variables + + double precision :: TotAcc,Current_Acc,Target_Acc,delta + + TotAcc = Acc/dble(nWalk) + Current_Acc = 100d0*TotAcc/dble(iMC) + + Target_Acc = 50.0d0 + + delta = dt*abs(Target_Acc - Current_Acc)/100.d0 + if(Current_Acc > Target_Acc + 0.5d0)then + dt = dt + delta + elseif(Current_Acc < Target_Acc - 0.5d0)then + dt = dt - delta + endif + +end subroutine optimize_timestep diff --git a/src/MCQC/orthogonalization_matrix.f90 b/src/MCQC/orthogonalization_matrix.f90 new file mode 100644 index 0000000..15ea4ac --- /dev/null +++ b/src/MCQC/orthogonalization_matrix.f90 @@ -0,0 +1,120 @@ +subroutine orthogonalization_matrix(ortho_type,nBas,S,X) + +! Compute the orthogonalization matrix X + + implicit none + +! Input variables + + integer,intent(in) :: nBas,ortho_type + double precision,intent(in) :: S(nBas,nBas) + +! Local variables + + logical :: debug + double precision,allocatable :: UVec(:,:),Uval(:) + double precision,parameter :: thresh = 1d-6 + + integer :: i + +! Output variables + + double precision,intent(out) :: X(nBas,nBas) + + debug = .false. + +! Type of orthogonalization ortho_type +! +! 1 = Lowdin +! 2 = Canonical +! 3 = SVD +! + + allocate(Uvec(nBas,nBas),Uval(nBas)) + + if(ortho_type == 1) then + + write(*,*) + write(*,*) ' Lowdin orthogonalization' + write(*,*) + + Uvec = S + call diagonalize_matrix(nBas,Uvec,Uval) + + do i=1,nBas + + if(Uval(i) > thresh) then + + Uval(i) = 1d0/sqrt(Uval(i)) + + else + + write(*,*) 'Eigenvalue',i,'too small for Lowdin orthogonalization' + + endif + + enddo + + call ADAt(nBas,Uvec,Uval,X) + + elseif(ortho_type == 2) then + + write(*,*) + write(*,*) 'Canonical orthogonalization' + write(*,*) + + Uvec = S + call diagonalize_matrix(nBas,Uvec,Uval) + + do i=1,nBas + + if(Uval(i) > thresh) then + + Uval(i) = 1d0/sqrt(Uval(i)) + + else + + write(*,*) ' Eigenvalue',i,'too small for canonical orthogonalization' + + endif + + enddo + + call AD(nBas,Uvec,Uval) + X = Uvec + + elseif(ortho_type == 3) then + + write(*,*) + write(*,*) ' SVD-based orthogonalization NYI' + write(*,*) + +! Uvec = S +! call diagonalize_matrix(nBas,Uvec,Uval) + +! do i=1,nBas +! if(Uval(i) > thresh) then +! Uval(i) = 1d0/sqrt(Uval(i)) +! else +! write(*,*) 'Eigenvalue',i,'too small for canonical orthogonalization' +! endif +! enddo +! +! call AD(nBas,Uvec,Uval) +! X = Uvec + + endif + +! Print results + + if(debug) then + + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Orthogonalization matrix' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,X) + write(*,*) + + endif + +end subroutine orthogonalization_matrix diff --git a/src/MCQC/overlap.f90 b/src/MCQC/overlap.f90 new file mode 100644 index 0000000..bb38800 --- /dev/null +++ b/src/MCQC/overlap.f90 @@ -0,0 +1,40 @@ +subroutine overlap(nBas,bra,ket) + +! Compute the overlap between two sets of coefficients + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: bra(nBas,nBas),ket(nBas,nBas) + +! Local variables + + double precision,allocatable :: s(:),Ov(:,:) + +! Allocate + + allocate(s(nBas),Ov(nBas,nBas)) + +! Compute overlap + + Ov = matmul(transpose(bra),ket) + + call diagonalize_matrix(nBas,Ov,s) + +! Print results + + write(*,'(A50)') '---------------------------------------' + write(*,'(A50)') ' Overlap ' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,nBas,Ov) + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A50)') ' Eigenvalues of overlap matrix' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,1,s) + write(*,*) + +end subroutine overlap diff --git a/src/MCQC/plot_GW.f90 b/src/MCQC/plot_GW.f90 new file mode 100644 index 0000000..11c7f0c --- /dev/null +++ b/src/MCQC/plot_GW.f90 @@ -0,0 +1,113 @@ +subroutine plot_GW(nBas,nC,nO,nV,nR,nS,eHF,eGW,Omega,rho,rhox) + +! Dump several GW quantities for external plotting + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: eHF(nBas),eGW(nBas),Omega(nS),rho(nBas,nBas,nS),rhox(nBas,nBas,nS) + +! Local variables + + integer :: i,j,a,b,x,jb,g + integer :: nGrid + double precision :: eps,eta,wmin,wmax,dw + double precision,allocatable :: w(:),SigC(:,:),Z(:,:),S(:,:) + +! Infinitesimal + + eta = 1d-3 + +! Construct grid + + nGrid = 1000 + allocate(w(nGrid),SigC(nBas,nGrid),Z(nBas,nGrid),S(nBas,nGrid)) + +! Initialize + + SigC(:,:) = 0d0 + Z(:,:) = 0d0 + +! Minimum and maximum frequency values + + wmin = -5d0 + wmax = +5d0 + dw = (wmax - wmin)/dble(ngrid) + + do g=1,nGrid + w(g) = wmin + dble(g)*dw + enddo + +! Occupied part of the self-energy and renormalization factor + + do g=1,nGrid + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = w(g) - eHF(i) + Omega(jb) + SigC(x,g) = SigC(x,g) + 2d0*rho(x,i,jb)**2*eps/(eps**2 + eta**2) + Z(x,g) = Z(x,g) + 2d0*rho(x,i,jb)**2/eps**2 + enddo + enddo + enddo + enddo + enddo + +! Virtual part of the self-energy and renormalization factor + + do g=1,nGrid + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = w(g) - eHF(a) - Omega(jb) + SigC(x,g) = SigC(x,g) + 2d0*rho(x,a,jb)**2*eps/(eps**2 + eta**2) + Z(x,g) = Z(x,g) + 2d0*rho(x,a,jb)**2/eps**2 + enddo + enddo + enddo + enddo + enddo + + Z(:,:) = 1d0/(1d0 + Z(:,:)) + +! Compute spectral function + + do g=1,nGrid + do x=nC+1,nBas-nR + S(x,g) = eta/((w(g) - eHF(x) - SigC(x,g))**2 + eta**2) + enddo + enddo + + S(:,:) = S(:,:)/pi + +! Dump quantities in files as a function of w + + open(unit=8 ,file='plot/grid.dat') + open(unit=9 ,file='plot/SigC.dat') + open(unit=10 ,file='plot/Z.dat') + open(unit=11 ,file='plot/A.dat') + + do g=1,nGrid + write(8 ,*) w(g)*HaToeV,(SigC(x,g)*HaToeV,x=1,nBas) + write(9 ,*) w(g)*HaToeV,((w(g)-eHF(x))*HaToeV,x=1,nBas) + write(10,*) w(g)*HaToeV,(Z(x,g),x=1,nBas) + write(11,*) w(g)*HaToeV,(S(x,g),x=1,nBas) + enddo + +! Closing files + + close(unit=8) + close(unit=9) + close(unit=10) + close(unit=11) + +end subroutine plot_GW diff --git a/src/MCQC/print_G0W0.f90 b/src/MCQC/print_G0W0.f90 new file mode 100644 index 0000000..e3f96a5 --- /dev/null +++ b/src/MCQC/print_G0W0.f90 @@ -0,0 +1,47 @@ +subroutine print_G0W0(nBas,nO,e,ENuc,EHF,SigmaC,Z,eGW,EcRPA) + +! Print one-electron energies and other stuff for G0W0 + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc,EHF,EcRPA + double precision,intent(in) :: e(nBas),SigmaC(nBas),Z(nBas),eGW(nBas) + + integer :: x,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGW(LUMO)-eGW(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------------------------------------------' + write(*,*)' One-shot G0W0 calculation' + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','Sigma_c (eV)','|','Z','|','e_QP (eV)','|' + write(*,*)'-------------------------------------------------------------------------------' + + do x=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',x,'|',e(x)*HaToeV,'|',SigmaC(x)*HaToeV,'|',Z(x),'|',eGW(x)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'G0W0 HOMO energy (eV):',eGW(HOMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'G0W0 LUMO energy (eV):',eGW(LUMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'G0W0 HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'G0W0 total energy =',ENuc + EHF + EcRPA + write(*,'(2X,A27,F15.6)') 'RPA correlation energy =',EcRPA + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + +end subroutine print_G0W0 + + diff --git a/src/MCQC/print_GF2.f90 b/src/MCQC/print_GF2.f90 new file mode 100644 index 0000000..98a3933 --- /dev/null +++ b/src/MCQC/print_GF2.f90 @@ -0,0 +1,44 @@ +subroutine print_GF2(nBas,nO,nSCF,Conv,eHF,eGF2) + +! Print one-electron energies and other stuff for GF2 + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO,nSCF + double precision,intent(in) :: Conv,eHF(nBas),eGF2(nBas) + + integer :: x,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGF2(LUMO)-eGF2(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------' + write(*,*)' Frequency-dependent diagonal GF2 calculation' + write(*,*)'-------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','e_GF2 (eV)','|' + write(*,*)'-------------------------------------------' + + do x=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',x,'|',eHF(x)*HaToeV,'|',eGF2(x)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------' + write(*,'(2X,A10,I3)') 'Iteration ',nSCF + write(*,'(2X,A14,F15.5)')'Convergence = ',Conv + write(*,*)'-------------------------------------------' + write(*,'(2X,A27,F15.6)') 'GF2 HOMO energy (eV):',eGF2(HOMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'GF2 LUMO energy (eV):',eGF2(LUMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'GF2 HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,*)'-------------------------------------------' + write(*,*) + +end subroutine print_GF2 diff --git a/src/MCQC/print_GF3.f90 b/src/MCQC/print_GF3.f90 new file mode 100644 index 0000000..cf0634b --- /dev/null +++ b/src/MCQC/print_GF3.f90 @@ -0,0 +1,44 @@ +subroutine print_GF3(nBas,nO,nSCF,Conv,eHF,Z,eGF3) + +! Print one-electron energies and other stuff for GF3 + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO,nSCF + double precision,intent(in) :: Conv,eHF(nBas),eGF3(nBas),Z(nBas) + + integer :: x,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGF3(LUMO)-eGF3(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------------------------' + write(*,*)' Frequency-dependent diagonal GF3 calculation' + write(*,*)'-------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','Z','|','e_GF3 (eV)','|' + write(*,*)'-------------------------------------------------------------' + + do x=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',x,'|',eHF(x)*HaToeV,'|',Z(x),'|',eGF3(x)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------' + write(*,'(2X,A10,I3)') 'Iteration ',nSCF + write(*,'(2X,A14,F15.5)')'Convergence = ',Conv + write(*,*)'-------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'GF3 HOMO energy (eV):',eGF3(HOMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'GF3 LUMO energy (eV):',eGF3(LUMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'GF3 HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,*)'-------------------------------------------------------------' + write(*,*) + +end subroutine print_GF3 diff --git a/src/MCQC/print_RHF.f90 b/src/MCQC/print_RHF.f90 new file mode 100644 index 0000000..eef7055 --- /dev/null +++ b/src/MCQC/print_RHF.f90 @@ -0,0 +1,60 @@ +subroutine print_RHF(nBas,nO,eHF,cHF,ENuc,ET,EV,EJ,EK,ERHF) + +! Print one-electron energies and other stuff for G0W0 + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: eHF(nBas),cHF(nBas,nBas),ENuc,ET,EV,EJ,EK,ERHF + + integer :: HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eHF(LUMO)-eHF(HOMO) + +! Dump results + + + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' Summary ' + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' One-electron energy ',ET + EV + write(*,'(A32,1X,F16.10)') ' Kinetic energy ',ET + write(*,'(A32,1X,F16.10)') ' Potential energy ',EV + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Two-electron energy ',EJ + EK + write(*,'(A32,1X,F16.10)') ' Coulomb energy ',EJ + write(*,'(A32,1X,F16.10)') ' Exchange energy ',EK + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Electronic energy ',ERHF + write(*,'(A32,1X,F16.10)') ' Nuclear repulsion ',ENuc + write(*,'(A32,1X,F16.10)') ' Hartree-Fock energy ',ERHF + ENuc + write(*,'(A50)') '---------------------------------------' + write(*,'(A36,F13.6)') ' HF HOMO energy (eV):',eHF(HOMO)*HaToeV + write(*,'(A36,F13.6)') ' HF LUMO energy (eV):',eHF(LUMO)*HaToeV + write(*,'(A36,F13.6)') ' HF HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,'(A50)') '---------------------------------------' + write(*,*) + +! Print results + + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') 'MO coefficients' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,nBas,cHF) + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') 'MO energies' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,1,eHF) + write(*,*) + +end subroutine print_RHF + + diff --git a/src/MCQC/print_evGW.f90 b/src/MCQC/print_evGW.f90 new file mode 100644 index 0000000..a3b143c --- /dev/null +++ b/src/MCQC/print_evGW.f90 @@ -0,0 +1,52 @@ +subroutine print_evGW(nBas,nO,nSCF,Conv,e,ENuc,EHF,SigmaC,Z,eGW,EcRPA) + +! Print one-electron energies and other stuff for evGW + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO,nSCF + double precision,intent(in) :: ENuc,EHF,EcRPA + double precision,intent(in) :: Conv,e(nBas),SigmaC(nBas),Z(nBas),eGW(nBas) + + integer :: x,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGW(LUMO)-eGW(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------------------------------------------' + if(nSCF < 10) then + write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' + else + write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' + endif + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','Sigma_c (eV)','|','Z','|','e_QP (eV)','|' + write(*,*)'-------------------------------------------------------------------------------' + + do x=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',x,'|',e(x)*HaToeV,'|',SigmaC(x)*HaToeV,'|',Z(x),'|',eGW(x)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A10,I3)') 'Iteration ',nSCF + write(*,'(2X,A14,F15.5)')'Convergence = ',Conv + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'evGW HOMO energy (eV):',eGW(HOMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'evGW LUMO energy (eV):',eGW(LUMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'evGW HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A27,F15.6)') 'evGW total energy =',ENuc + EHF + EcRPA + write(*,'(2X,A27,F15.6)') 'RPA correlation energy =',EcRPA + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + +end subroutine print_evGW diff --git a/src/MCQC/print_excitation.f90 b/src/MCQC/print_excitation.f90 new file mode 100644 index 0000000..dbf90ef --- /dev/null +++ b/src/MCQC/print_excitation.f90 @@ -0,0 +1,36 @@ +subroutine print_excitation(method,ispin,nS,Omega) + +! Print excitation energies for a given spin manifold + + implicit none + include 'parameters.h' + + character*5,intent(in) :: method + integer,intent(in) :: ispin,nS + double precision,intent(in) :: Omega(nS) + + character*7 :: spin_manifold + integer :: ia + + if(ispin == 1) spin_manifold = 'singlet' + if(ispin == 2) spin_manifold = 'triplet' + + write(*,*) + write(*,*)'-------------------------------------------------------------' + write(*,'(1X,A1,1X,A4,A14,A7,A9,A25)')'|',method,' calculation: ',spin_manifold,' manifold',' |' + write(*,*)'-------------------------------------------------------------' + write(*,'(1X,A1,1X,A5,1X,A1,1X,A23,1X,A1,1X,A23,1X,A1,1X)') & + '|','State','|',' Excitation energy (au) ','|',' Excitation energy (eV) ','|' + write(*,*)'-------------------------------------------------------------' + + do ia=1,nS + write(*,'(1X,A1,1X,I5,1X,A1,1X,F23.6,1X,A1,1X,F23.6,1X,A1,1X)') & + '|',ia,'|',Omega(ia),'|',Omega(ia)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------' + write(*,*) + +end subroutine print_excitation + + diff --git a/src/MCQC/print_qsGW.f90 b/src/MCQC/print_qsGW.f90 new file mode 100644 index 0000000..bf7eb87 --- /dev/null +++ b/src/MCQC/print_qsGW.f90 @@ -0,0 +1,110 @@ +subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,ENuc,P,T,V,Hc,J,K,F,SigmaC,Z,EcRPA) + + +! Print one-electron energies and other stuff for qsGW + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nO,nSCF + double precision,intent(in) :: ENuc,EcRPA,Conv,thresh + double precision,intent(in) :: eHF(nBas),eGW(nBas),c(nBas),P(nBas,nBas) + double precision,intent(in) :: T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas) + double precision,intent(in) :: J(nBas,nBas),K(nBas,nBas),F(nBas,nBas) + double precision,intent(in) :: Z(nBas),SigmaC(nBas,nBas) + +! Local variables + + integer :: x,HOMO,LUMO + double precision :: Gap,ET,EV,EJ,Ex,Ec,EqsGW + double precision,external :: trace_matrix + + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGW(LUMO)-eGW(HOMO) + + ET = trace_matrix(nBas,matmul(P,T)) + EV = trace_matrix(nBas,matmul(P,V)) + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + Ex = 0.5d0*trace_matrix(nBas,matmul(P,K)) + EqsGW = ET + EV + EJ + Ex + Ec = 0d0 + +! Dump results + + write(*,*)'-------------------------------------------------------------------------------' + if(nSCF < 10) then + write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' + else + write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' + endif + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','e_QP-e_HF (eV)','|','Z','|','e_QP (eV)','|' + write(*,*)'-------------------------------------------------------------------------------' + + do x=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',x,'|',eHF(x)*HaToeV,'|',(eGW(x)-eHF(x))*HaToeV,'|',Z(x),'|',eGW(x)*HaToeV,'|' + enddo + + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A10,I3)') 'Iteration ',nSCF + write(*,'(2X,A19,F15.5)')'max(|FPS - SPF|) = ',Conv + write(*,*)'-------------------------------------------' + write(*,'(2X,A27,F15.6)') 'qsGW HOMO energy (eV):',eGW(HOMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'qsGW LUMO energy (eV):',eGW(LUMO)*HaToeV + write(*,'(2X,A27,F15.6)') 'qsGW HOMO-LUMO gap (eV):',Gap*HaToeV + write(*,*)'-------------------------------------------' + write(*,'(2X,A27,F15.6)') 'qsGW total energy =',EqsGW + ENuc + write(*,'(2X,A27,F15.6)') 'qsGW exchange energy =',Ex + write(*,'(2X,A27,F15.6)') 'qsGW correlation energy =',Ec + write(*,'(2X,A27,F15.6)') 'RPA correlation energy =',EcRPA + write(*,*)'-------------------------------------------' + write(*,*) + +! Dump results for final iteration + + if(Conv < thresh) then + + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' Summary ' + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' One-electron energy ',ET + EV + write(*,'(A32,1X,F16.10)') ' Kinetic energy ',ET + write(*,'(A32,1X,F16.10)') ' Potential energy ',EV + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Two-electron energy ',EJ + Ex + write(*,'(A32,1X,F16.10)') ' Coulomb energy ',EJ + write(*,'(A32,1X,F16.10)') ' Exchange energy ',Ex + write(*,'(A32,1X,F16.10)') ' Correlation energy ',Ec + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Electronic energy ',EqsGW + write(*,'(A32,1X,F16.10)') ' Nuclear repulsion ',ENuc + write(*,'(A32,1X,F16.10)') ' qsGW energy ',ENuc + EqsGW + write(*,'(A32,1X,F16.10)') ' RPA corr. energy ',EcRPA + write(*,'(A50)') '---------------------------------------' + write(*,*) + + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' qsGW MO coefficients' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,nBas,c) + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' qsGW MO energies' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,1,eGW) + write(*,*) + + endif + + +end subroutine print_qsGW diff --git a/src/MCQC/qsGW.f90 b/src/MCQC/qsGW.f90 new file mode 100644 index 0000000..364ad66 --- /dev/null +++ b/src/MCQC/qsGW.f90 @@ -0,0 +1,222 @@ +subroutine qsGW(maxSCF,thresh,max_diis,COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,S,X,T,V,Hc,ERI_AO_basis,PHF,cHF,eHF) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF,max_diis + double precision,intent(in) :: thresh + logical,intent(in) :: COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ENuc + double precision,intent(in) :: PHF(nBas,nBas),cHF(nBas,nBas),eHF(nBas) + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBAs),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas) + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas) + +! Local variables + + logical :: dRPA + integer :: nSCF,nBasSq,ispin,n_diis + double precision :: EcRPA,Conv + double precision,external :: trace_matrix + double precision,allocatable :: error_diis(:,:),F_diis(:,:) + double precision,allocatable :: Omega(:,:),XpY(:,:,:),rho(:,:,:,:),rhox(:,:,:,:) + double precision,allocatable :: c(:,:),cp(:,:),e(:),P(:,:) + double precision,allocatable :: F(:,:),Fp(:,:),J(:,:),K(:,:) + double precision,allocatable :: SigC(:,:),SigCp(:,:),SigCm(:,:),Z(:) + double precision,allocatable :: error(:,:),ERI_MO_basis(:,:,:,:) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Self-consistent qsGW calculation |' + write(*,*)'************************************************' + write(*,*) + +! Stuff + + nBasSq = nBas*nBas + +! SOSEX correction + + if(SOSEX) write(*,*) 'SOSEX correction activated!' + write(*,*) + +! Switch off exchange for G0W0 + + dRPA = .true. + +! Memory allocation + + allocate(e(nBas),c(nBas,nBas),cp(nBas,nBas),P(nBas,nBas),F(nBas,nBas),Fp(nBas,nBas), & + J(nBas,nBas),K(nBas,nBas),SigC(nBas,nBas),SigCp(nBas,nBas),SigCm(nBas,nBas),Z(nBas), & + ERI_MO_basis(nBas,nBas,nBas,nBas),error(nBas,nBas), & + Omega(nS,nspin),XpY(nS,nS,nspin),rho(nBas,nBas,nS,nspin),rhox(nBas,nBas,nS,nspin), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Initialization + + nSCF = 0 + n_diis = 0 + ispin = 1 + Conv = 1d0 + P(:,:) = PHF(:,:) + e(:) = eHF(:) + c(:,:) = cHF(:,:) + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + +!------------------------------------------------------------------------ +! Main loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF <= maxSCF) + + ! Buid Coulomb matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI_AO_basis,J) + + ! Compute exchange part of the self-energy + + call exchange_matrix_AO_basis(nBas,P,ERI_AO_basis,K) + + ! AO to MO transformation of two-electron integrals + + call AOtoMO_integral_transform(nBas,c,ERI_AO_basis,ERI_MO_basis) + + ! Compute linear response + + if(.not. GW0 .or. nSCF == 0) then + + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + + endif + + ! Compute correlation part of the self-energy + + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + if(SOSEX) call excitation_density_SOSEX(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rhox(:,:,:,ispin)) + + if(G0W) then + + call self_energy_correlation(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,eHF, & + Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),SigC) + call renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,eHF,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),Z) + + else + + call self_energy_correlation(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,e, & + Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),SigC) + call renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,e,Omega(:,ispin),rho(:,:,:,ispin),rhox(:,:,:,ispin),Z) + + endif + + ! Make correlation self-energy Hermitian and transform it back to AO basis + + SigCp = 0.5d0*(SigC + transpose(SigC)) + SigCm = 0.5d0*(SigC - transpose(SigC)) + + call MOtoAO_transform(nBas,S,c,SigCp) + + ! Solve the quasi-particle equation + + F(:,:) = Hc(:,:) + J(:,:) + K(:,:) + SigCp(:,:) + + ! Compute commutator and convergence criteria + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + + ! Diagonalize Hamiltonian in AO basis + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + + ! Compute new density matrix in the AO basis + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + + ! Print results + + call print_excitation('RPA ',ispin,nS,Omega(:,ispin)) + call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,e,c,ENuc,P,T,V,Hc,J,K,F,SigCp,Z,EcRPA) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main loop +!------------------------------------------------------------------------ + +! Compute second-order correction of the Hermitization error + + call qsGW_PT(nBas,nC,nO,nV,nR,nS,e,SigCm) + +! Compute the overlap between HF and GW orbitals + +! call overlap(nBas,cHF,c) + +! Compute natural orbitals and occupancies + +! call natural_orbital(nBas,nO,cHF,c) + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + if(BSE) stop + + endif + +! Perform BSE calculation + + if(BSE) then + + ! Singlet manifold + if(singlet_manifold) then + + ispin = 1 + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + ! Triplet manifold + if(triplet_manifold) then + + ispin = 2 + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + endif + +end subroutine qsGW diff --git a/src/MCQC/qsGW_AO_basis.f90.x b/src/MCQC/qsGW_AO_basis.f90.x new file mode 100644 index 0000000..dc19569 --- /dev/null +++ b/src/MCQC/qsGW_AO_basis.f90.x @@ -0,0 +1,197 @@ +subroutine qsGW(maxSCF,thresh,max_diis,COHSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,S,X,T,V,Hc,ERI_AO_basis,PHF,cHF,eHF) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF,max_diis + double precision,intent(in) :: thresh + logical,intent(in) :: COHSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ENuc + double precision,intent(in) :: PHF(nBas,nBas),cHF(nBas,nBas),eHF(nBas) + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBAs),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas) + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas) + +! Local variables + + logical :: dRPA + integer :: nSCF,nBasSq,ispin,n_diis + double precision :: EcRPA,Conv + double precision,external :: trace_matrix + double precision,allocatable :: error_diis(:,:),F_diis(:,:) + double precision,allocatable :: Omega(:,:),XpY(:,:,:),rho(:,:,:,:) + double precision,allocatable :: c(:,:),cp(:,:),e(:),P(:,:) + double precision,allocatable :: F(:,:),Fp(:,:),J(:,:),K(:,:),SigmaC(:,:) + double precision,allocatable :: error(:,:),ERI_MO_basis(:,:,:,:) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Self-consistent qsGW calculation |' + write(*,*)'************************************************' + write(*,*) + +! Stuff + + nBasSq = nBas*nBas + +! Switch off exchange for G0W0 + + dRPA = .true. + +! Memory allocation + + allocate(e(nBas),c(nBas,nBas),cp(nBas,nBas),P(nBas,nBas),F(nBas,nBas),Fp(nBas,nBas), & + J(nBas,nBas),K(nBas,nBas),SigmaC(nBas,nBas), & + ERI_MO_basis(nBas,nBas,nBas,nBas),error(nBas,nBas), & + Omega(nS,nspin),XpY(nS,nS,nspin),rho(nBas,nBas,nS,nspin), & + error_diis(nBasSq,max_diis),F_diis(nBasSq,max_diis)) + +! Initialization + + nSCF = 0 + n_diis = 0 + ispin = 1 + Conv = 1d0 + P(:,:) = PHF(:,:) + e(:) = eHF(:) + c(:,:) = cHF(:,:) + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + +!------------------------------------------------------------------------ +! Main loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF <= maxSCF) + + ! Buid Coulomb matrix + + call Coulomb_matrix_AO_basis(nBas,P,ERI_AO_basis,J) + + ! Compute exchange part of the self-energy + + call exchange_matrix_AO_basis(nBas,P,ERI_AO_basis,K) + + ! AO to MO transformation of two-electron integrals + + call AOtoMO_integral_transform(nBas,c,ERI_AO_basis,ERI_MO_basis) + + ! Compute linear response + + if(.not. GW0 .or. nSCF == 0) then + + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + + endif + + ! Compute correlation part of the self-energy + + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + if(G0W) then + + call self_energy_correlation(COHSEX,nBas,nC,nO,nV,nR,nS,eHF,Omega(:,ispin),rho(:,:,:,ispin),SigmaC) + + else + + call self_energy_correlation(COHSEX,nBas,nC,nO,nV,nR,nS,e,Omega(:,ispin),rho(:,:,:,ispin),SigmaC) + + endif + + ! Make correlation self-energy Hermitian and transform it back to AO basis + + SigmaC = 0.5d0*(SigmaC + transpose(SigmaC)) + + call MOtoAO_transform(nBas,S,c,SigmaC) + + ! Solve the quasi-particle equation + + F(:,:) = Hc(:,:) + J(:,:) + K(:,:) + SigmaC(:,:) + + ! Compute commutator and convergence criteria + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nBasSq,nBasSq,n_diis,error_diis,F_diis,error,F) + + ! Diagonalize Hamiltonian in AO basis + + Fp = matmul(transpose(X),matmul(F,X)) + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + c = matmul(X,cp) + + ! Compute new density matrix in the AO basis + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + + ! Print results + + call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,e,c,ENuc,P,T,V,Hc,J,K,F,EcRPA) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + if(BSE) stop + + endif + +! Perform BSE calculation + + if(BSE) then + + ! Singlet manifold + if(singlet_manifold) then + + ispin = 1 + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + ! Triplet manifold + if(triplet_manifold) then + + ispin = 2 + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + endif + +end subroutine qsGW diff --git a/src/MCQC/qsGW_MO_basis.f90.x b/src/MCQC/qsGW_MO_basis.f90.x new file mode 100644 index 0000000..0bdace6 --- /dev/null +++ b/src/MCQC/qsGW_MO_basis.f90.x @@ -0,0 +1,203 @@ +subroutine qsGW(maxSCF,thresh,max_diis,COHSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold, & + nBas,nC,nO,nV,nR,nS,ENuc,S,X,T,V,Hc,ERI_AO_basis,PHF,cHF,eHF) + +! Compute linear response + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: maxSCF,max_diis + double precision,intent(in) :: thresh + logical,intent(in) :: COHSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: ENuc + double precision,intent(in) :: PHF(nBas,nBas),cHF(nBas,nBas),eHF(nBas) + double precision,intent(in) :: S(nBas,nBas),T(nBas,nBAs),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas) + double precision,intent(in) :: ERI_AO_basis(nBas,nBas,nBas,nBas) + +! Local variables + + logical :: dRPA + integer :: nSCF,nBasSq,ispin,i,a,ia,n_diis + double precision :: EcRPA,Conv + double precision,external :: trace_matrix + double precision,allocatable :: error_diis(:,:),F_diis(:,:) + double precision,allocatable :: Omega(:,:),XpY(:,:,:),rho(:,:,:,:) + double precision,allocatable :: c(:,:),e(:),P(:,:) + double precision,allocatable :: F(:,:),R(:,:),H(:,:),SigX(:,:),SigC(:,:) + double precision,allocatable :: error(:),ERI_MO_basis(:,:,:,:) + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Self-consistent qsGW calculation |' + write(*,*)'************************************************' + write(*,*) + +! Stuff + + nBasSq = nBas*nBas + +! Switch off exchange for G0W0 + + dRPA = .true. + +! Memory allocation + + allocate(e(nBas),c(nBas,nBas),P(nBas,nBas),F(nBas,nBas),R(nBas,nBas), & + H(nBas,nBas),SigX(nBas,nBas),SigC(nBas,nBas), & + ERI_MO_basis(nBas,nBas,nBas,nBas),error(nO*nV), & + Omega(nS,nspin),XpY(nS,nS,nspin),rho(nBas,nBas,nS,nspin), & + error_diis(nO*nV,max_diis),F_diis(nBasSq,max_diis)) + +! Initialization + + nSCF = 0 + ispin = 1 + n_diis = 0 + Conv = 1d0 + P(:,:) = PHF(:,:) + e(:) = eHF(:) + c(:,:) = cHF(:,:) + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + +!------------------------------------------------------------------------ +! Main loop +!------------------------------------------------------------------------ + + do while(Conv > thresh .and. nSCF <= maxSCF) + + ! Buid Hartree Hamiltonian + + call Hartree_matrix_MO_basis(nBas,c,P,Hc,ERI_AO_basis,H) + + ! Compute exchange part of the self-energy + + call exchange_matrix_MO_basis(nBas,c,P,ERI_AO_basis,SigX) + + ! AO to MO transformation of two-electron integrals + + call AOtoMO_integral_transform(nBas,c,ERI_AO_basis,ERI_MO_basis) + + ! Compute linear response + + if(.not. GW0 .or. nSCF == 0) then + + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + + endif + + ! Compute correlation part of the self-energy + + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + if(G0W) then + + call self_energy_correlation(COHSEX,nBas,nC,nO,nV,nR,nS,eHF,Omega(:,ispin),rho(:,:,:,ispin),SigC) + + else + + call self_energy_correlation(COHSEX,nBas,nC,nO,nV,nR,nS,e,Omega(:,ispin),rho(:,:,:,ispin),SigC) + + endif + + ! Make correlation self-energy Hermitian and transform it back to AO basis + + SigC = 0.5d0*(SigC + transpose(SigC)) + + ! Solve the quasi-particle equationgg + + F(:,:) = H(:,:) + SigX(:,:) + SigC(:,:) + + call matout(nBas,nBas,F) + + ! Compute commutator and convergence criteria + + ia = 0 + do i=1,nO + do a=nO+1,nBas + ia = ia + 1 + error(ia) = F(i,a) + enddo + enddo + + Conv = maxval(abs(error)) + + ! DIIS extrapolation + + n_diis = min(n_diis+1,max_diis) + call DIIS_extrapolation(nO*nV,nBasSq,n_diis,error_diis,F_diis,error,F) + + ! Diagonalize Hamiltonian in MO basis + + R(:,:) = F(:,:) + call diagonalize_matrix(nBas,R,e) + c = matmul(c,R) + + ! Compute new density matrix in the AO basis + + P(:,:) = 2d0*matmul(c(:,1:nO),transpose(c(:,1:nO))) + + ! Print results + + call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,e,c,ENuc,P,T,V,Hc,H,SigX,F,EcRPA) + + ! Increment + + nSCF = nSCF + 1 + + enddo +!------------------------------------------------------------------------ +! End main loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF+1) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + if(BSE) stop + + endif + +! Perform BSE calculation + + if(BSE) then + + ! Singlet manifold + if(singlet_manifold) then + + ispin = 1 + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + ! Triplet manifold + if(triplet_manifold) then + + ispin = 2 + call linear_response(ispin,dRPA,TDA,.false.,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call excitation_density(nBas,nC,nO,nR,nS,c,ERI_AO_basis,XpY(:,:,ispin),rho(:,:,:,ispin)) + + call linear_response(ispin,dRPA,TDA,BSE,nBas,nC,nO,nV,nR,nS,e,ERI_MO_basis, & + rho(:,:,:,ispin),EcRPA,Omega(:,ispin),XpY(:,:,ispin)) + call print_excitation('BSE ',ispin,nS,Omega(:,ispin)) + + endif + + endif + +end subroutine qsGW diff --git a/src/MCQC/qsGW_PT.f90 b/src/MCQC/qsGW_PT.f90 new file mode 100644 index 0000000..6b23129 --- /dev/null +++ b/src/MCQC/qsGW_PT.f90 @@ -0,0 +1,120 @@ +subroutine qsGW_PT(nBas,nC,nO,nV,nR,nS,e0,SigCm) + +! Compute the 1st-, 2nd-, 3rd- and 4th-order correction on the qsGW quasiparticle energies + + implicit none + + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e0(nBas),SigCm(nBas,nBas) + +! Local variables + + integer :: x,y,z,t + double precision :: eps + double precision,allocatable :: e1(:),e2(:),e3(:),e4(:) + double precision,parameter :: threshold = 1d-15 + +! Allocation + + allocate(e1(nBas),e2(nBas),e3(nBas),e4(nBas)) + +! Initalization + + e1(:) = 0d0 + e2(:) = 0d0 + e3(:) = 0d0 + e4(:) = 0d0 + +! Print zeroth-order qsGW QP energies + + write(*,*) + write(*,'(A50)') '-----------------------------------------------' + write(*,'(A50)') ' 0th-order values of qsGW QP energies (eV) ' + write(*,'(A50)') '-----------------------------------------------' + call matout(nBas,1,e0(:)*HaToeV) + +! Compute 1st-order correction of qsGW QP energies + + do x=nC+1,nBas-nR + + e1(x) = SigCm(x,x) + + end do + + write(*,*) + write(*,'(A50)') '-----------------------------------------------' + write(*,'(A50)') ' 1st-order correction of qsGW QP energies (eV) ' + write(*,'(A50)') '-----------------------------------------------' + call matout(nBas,1,e1(:)*HaToeV) + +! Compute 2nd-order correction of qsGW QP energies + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + + eps = e0(x) - e0(y) + if(abs(eps) > threshold) e2(x) = e2(x) + SigCm(x,y)**2/eps + + end do + end do + + write(*,*) + write(*,'(A50)') '-----------------------------------------------' + write(*,'(A50)') ' 2nd-order correction of qsGW QP energies (eV) ' + write(*,'(A50)') '-----------------------------------------------' + call matout(nBas,1,e2(:)*HaToeV) + +! Compute 3nd-order correction of qsGW QP energies + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do z=nC+1,nBas-nR + + eps = (e0(x) - e0(y))*(e0(x) - e0(z)) + if(abs(eps) > threshold) e3(x) = e3(x) + SigCm(x,y)*SigCm(y,z)*SigCm(z,x)/eps + + end do + end do + end do + + write(*,*) + write(*,'(A50)') '-----------------------------------------------' + write(*,'(A50)') ' 3rd-order correction of qsGW QP energies (eV) ' + write(*,'(A50)') '-----------------------------------------------' + call matout(nBas,1,e3(:)*HaToeV) + +! Compute 4nd-order correction of qsGW QP energies + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do z=nC+1,nBas-nR + do t=nC+1,nBas-nR + + eps = (e0(x) - e0(y))*(e0(x) - e0(z))*(e0(x) - e0(t)) + if(abs(eps) > threshold) e4(x) = e4(x) + SigCm(x,y)*SigCm(y,z)*SigCm(z,t)*SigCm(t,x)/eps + + end do + end do + end do + end do + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + + eps = (e0(x) - e0(y))**2 + if(abs(eps) > threshold) e4(x) = e4(x) - e2(x)*SigCm(x,y)**2/eps + + end do + end do + + write(*,*) + write(*,'(A50)') '-----------------------------------------------' + write(*,'(A50)') ' 4th-order correction of qsGW QP energies (eV) ' + write(*,'(A50)') '-----------------------------------------------' + call matout(nBas,1,e4(:)*HaToeV) + +end subroutine qsGW_PT diff --git a/src/MCQC/read_F12_integrals.f90 b/src/MCQC/read_F12_integrals.f90 new file mode 100644 index 0000000..3ef6461 --- /dev/null +++ b/src/MCQC/read_F12_integrals.f90 @@ -0,0 +1,151 @@ +subroutine read_F12_integrals(nBas,S,C,F,Y) + +! Read one- and two-electron integrals from files + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: S(nBas,nBas) + +! Local variables + + logical :: debug + integer :: mu,nu,la,si + double precision :: ERI,F12,Yuk,ExpS + +! Output variables + + double precision,intent(out) :: C(nBas,nBas,nBas,nBas),F(nBas,nBas,nBas,nBas),Y(nBas,nBas,nBas,nBas) + + debug = .false. + +! Open file with integrals + + open(unit=21,file='int/ERI.dat') + open(unit=22,file='int/F12.dat') + open(unit=23,file='int/Yuk.dat') + +! Read electron repulsion integrals + + C = 0d0 + do + read(21,*,end=21) mu,nu,la,si,ERI +! <12|34> + C(mu,nu,la,si) = ERI +! <32|14> + C(la,nu,mu,si) = ERI +! <14|32> + C(mu,si,la,nu) = ERI +! <34|12> + C(la,si,mu,nu) = ERI +! <41|23> + C(si,mu,nu,la) = ERI +! <23|41> + C(nu,la,si,mu) = ERI +! <21|43> + C(nu,mu,si,la) = ERI +! <43|21> + C(si,la,nu,mu) = ERI + enddo + 21 close(unit=21) + +! Read F12 integrals + + F = 0d0 + do + read(22,*,end=22) mu,nu,la,si,F12 +! <12|34> + F(mu,nu,la,si) = F12 +! <32|14> + F(la,nu,mu,si) = F12 +! <14|32> + F(mu,si,la,nu) = F12 +! <34|12> + F(la,si,mu,nu) = F12 +! <41|23> + F(si,mu,nu,la) = F12 +! <23|41> + F(nu,la,si,mu) = F12 +! <21|43> + F(nu,mu,si,la) = F12 +! <43|21> + F(si,la,nu,mu) = F12 + enddo + 22 close(unit=22) +! Read electron repulsion integrals + + Y = 0d0 + do + read(23,*,end=23) mu,nu,la,si,Yuk +! <12|34> + Y(mu,nu,la,si) = Yuk +! <32|14> + Y(la,nu,mu,si) = Yuk +! <14|32> + Y(mu,si,la,nu) = Yuk +! <34|12> + Y(la,si,mu,nu) = Yuk +! <41|23> + Y(si,mu,nu,la) = Yuk +! <23|41> + Y(nu,la,si,mu) = Yuk +! <21|43> + Y(nu,mu,si,la) = Yuk +! <43|21> + Y(si,la,nu,mu) = Yuk + enddo + 23 close(unit=23) + + +! Print results + if(debug) then + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Electron repulsion integrals' + write(*,'(A28)') '----------------------' + do la=1,nBas + do si=1,nBas + call matout(nBas,nBas,C(1,1,la,si)) + enddo + enddo + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'F12 integrals' + write(*,'(A28)') '----------------------' + do la=1,nBas + do si=1,nBas + call matout(nBas,nBas,F(1,1,la,si)) + enddo + enddo + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Yukawa integrals' + write(*,'(A28)') '----------------------' + do la=1,nBas + do si=1,nBas + call matout(nBas,nBas,Y(1,1,la,si)) + enddo + enddo + write(*,*) + endif + +! Read exponent of Slater geminal + open(unit=4,file='input/geminal') + read(4,*) ExpS + close(unit=4) + +! Transform two-electron integrals + + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + F(mu,nu,la,si) = (S(mu,la)*S(nu,si) - F(mu,nu,la,si))/ExpS + Y(mu,nu,la,si) = (C(mu,nu,la,si) - Y(mu,nu,la,si))/ExpS + enddo + enddo + enddo + enddo + +end subroutine read_F12_integrals diff --git a/src/MCQC/read_MOs.f90 b/src/MCQC/read_MOs.f90 new file mode 100644 index 0000000..d775fb9 --- /dev/null +++ b/src/MCQC/read_MOs.f90 @@ -0,0 +1,58 @@ +subroutine read_MOs(nBas,C,e,EJ) + +! Read normalization factor and MOs (coefficients and eigenvalues) + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + +! Local variables + + integer :: i,j + +! Output variables + + double precision,intent(out) :: EJ + double precision,intent(out) :: C(nBas,nBas),e(nBas) + +!------------------------------------------------------------------------ +! Primary basis set information +!------------------------------------------------------------------------ + +! Open file with basis set specification + + open(unit=3,file='input/MOs') + +! Read MO information + + read(3,*) EJ + + do i=1,nBas + read(3,*) (C(i,j),j=1,nBas) + enddo + + do i=1,nBas + read(3,*) e(i) + enddo + +! Print results + + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'MO coefficients' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,C) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'MO energies' + write(*,'(A28)') '----------------------' + call matout(nBas,1,e) + write(*,*) + +! Close file + + close(unit=3) + +end subroutine read_MOs diff --git a/src/MCQC/read_auxiliary_basis.f90 b/src/MCQC/read_auxiliary_basis.f90 new file mode 100644 index 0000000..cf4f6ed --- /dev/null +++ b/src/MCQC/read_auxiliary_basis.f90 @@ -0,0 +1,176 @@ +subroutine read_auxiliary_basis(NAtoms,XYZAtoms,nShell,CenterShell, & + TotAngMomShell,KShell,DShell,ExpShell) + +! Read auxiliary basis set information + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: NAtoms + double precision,intent(in) :: XYZAtoms(NAtoms,3) + +! Local variables + + integer :: nShAt,iAt + integer :: i,j,k + character :: shelltype + +! Output variables + + integer,intent(out) :: nShell + double precision,intent(out) :: CenterShell(maxShell,3) + integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +!------------------------------------------------------------------------ +! Primary basis set information +!------------------------------------------------------------------------ + +! Open file with basis set specification + + open(unit=2,file='input/basis') + +! Read basis information + + write(*,'(A28)') 'Gaussian basis set' + write(*,'(A28)') '------------------' + + nShell = 0 + do i=1,NAtoms + read(2,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = XYZAtoms(iAt,k) + enddo + +! Shell type and contraction degree + + read(2,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(2,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells in OBS',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=2) + +!------------------------------------------------------------------------ +! Auxiliary basis set information +!------------------------------------------------------------------------ + +! Open file with auxilairy basis specification + + open(unit=3,file='input/auxbasis') + +! Read basis information + + write(*,'(A28)') 'Auxiliary basis set' + write(*,'(A28)') '-------------------' + + do i=1,NAtoms + read(3,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = XYZAtoms(iAt,k) + enddo + +! Shell type and contraction degree + + read(3,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(3,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells in ABS',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=3) + +end subroutine read_auxiliary_basis diff --git a/src/MCQC/read_basis.f90 b/src/MCQC/read_basis.f90 new file mode 100644 index 0000000..cc82700 --- /dev/null +++ b/src/MCQC/read_basis.f90 @@ -0,0 +1,128 @@ +subroutine read_basis(nAt,rAt,nBas,nC,nO,nV,nR,nS, & + nShell,atot,CenterShell,TotAngMomShell,KShell,DShell,ExpShell) + +! Read basis set information + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nAt,nC,nO,nR,atot(maxShell) + double precision,intent(in) :: rAt(nAt,3) + +! Local variables + + integer :: nShAt,iAt,iShell + integer :: i,j,k + character :: shelltype + +! Output variables + + integer,intent(out) :: nShell,nBas,nV,nS + double precision,intent(out) :: CenterShell(maxShell,3) + integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +!------------------------------------------------------------------------ +! Primary basis set information +!------------------------------------------------------------------------ + +! Open file with basis set specification + + open(unit=2,file='input/basis') + +! Read basis information + + write(*,'(A28)') 'Gaussian basis set' + write(*,'(A28)') '------------------' + + nShell = 0 + do i=1,nAt + read(2,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = rAt(iAt,k) + enddo + +! Shell type and contraction degree + + read(2,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(2,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells in OBS',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=2) + +! Calculate number of basis functions + + nBas = 0 + do iShell=1,nShell + nBas = nBas + (atot(iShell)*atot(iShell) + 3*atot(iShell) + 2)/2 + enddo + + write(*,'(A28)') '------------------' + write(*,'(A28,1X,I16)') 'Number of basis functions',NBas + write(*,'(A28)') '------------------' + write(*,*) + +! Number of virtual orbitals + + nV = nBas - nO + + if(nR > nV) then + write(*,*) 'Number of Rydberg orbitals greater than number of virtual orbitals!' + stop + endif + +! Number of single excitation + + nS = (nO - nC)*(nV - nR) + + +end subroutine read_basis diff --git a/src/MCQC/read_geometry.f90 b/src/MCQC/read_geometry.f90 new file mode 100644 index 0000000..8f0fc56 --- /dev/null +++ b/src/MCQC/read_geometry.f90 @@ -0,0 +1,58 @@ +subroutine read_geometry(nAt,ZNuc,rA,ENuc) + +! Read molecular geometry + + implicit none + +! Ouput variables + integer,intent(in) :: nAt + +! Local variables + integer :: i,j + double precision :: RAB + +! Ouput variables + double precision,intent(out) :: ZNuc(NAt),rA(nAt,3),ENuc + + +! Open file with geometry specification + open(unit=1,file='input/molecule') + +! Read number of atoms + read(1,*) + read(1,*) + read(1,*) + + do i=1,nAt + read(1,*) ZNuc(i),rA(i,1),rA(i,2),rA(i,3) + enddo + +! Compute nuclear repulsion energy + ENuc = 0 + + do i=1,nAt-1 + do j=i+1,nAt + RAB = (rA(i,1)-rA(j,1))**2 + (rA(i,2)-rA(j,2))**2 + (rA(i,3)-rA(j,3))**2 + ENuc = ENuc + ZNuc(i)*ZNuc(j)/sqrt(RAB) + enddo + enddo + +! Close file with geometry specification + close(unit=1) + +! Print geometry + write(*,'(A28)') '------------------' + write(*,'(A28)') 'Molecular geometry' + write(*,'(A28)') '------------------' + do i=1,NAt + write(*,'(A28,1X,I16)') 'Atom n. ',i + write(*,'(A28,1X,F16.10)') 'Z = ',ZNuc(i) + write(*,'(A28,1X,F16.10,F16.10,F16.10)') 'Atom coordinates:',(rA(i,j),j=1,3) + enddo + write(*,*) + write(*,'(A28)') '------------------' + write(*,'(A28,1X,F16.10)') 'Nuclear repulsion energy = ',ENuc + write(*,'(A28)') '------------------' + write(*,*) + +end subroutine read_geometry diff --git a/src/MCQC/read_integrals.f90 b/src/MCQC/read_integrals.f90 new file mode 100644 index 0000000..0226865 --- /dev/null +++ b/src/MCQC/read_integrals.f90 @@ -0,0 +1,120 @@ +subroutine read_integrals(nBas,S,T,V,Hc,G) + +! Read one- and two-electron integrals from files + + implicit none + +! Input variables + + integer,intent(in) :: nBas + +! Local variables + + logical :: debug + integer :: mu,nu,la,si + double precision :: Ov,Kin,Nuc,ERI + double precision :: scale + +! Output variables + + double precision,intent(out) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),G(nBas,nBas,nBas,nBas) + +! Open file with integrals + + debug = .false. + + scale = 1d0 + + open(unit=8 ,file='int/Ov.dat') + open(unit=9 ,file='int/Kin.dat') + open(unit=10,file='int/Nuc.dat') + open(unit=11,file='int/ERI.dat') + +! Read overlap integrals + + S = 0d0 + do + read(8,*,end=8) mu,nu,Ov + S(mu,nu) = Ov + enddo + 8 close(unit=8) + +! Read kinetic integrals + + T = 0d0 + do + read(9,*,end=9) mu,nu,Kin + T(mu,nu) = Kin/scale**2 + enddo + 9 close(unit=9) + +! Read nuclear integrals + + V = 0d0 + do + read(10,*,end=10) mu,nu,Nuc + V(mu,nu) = Nuc + enddo + 10 close(unit=10) + +! Define core Hamiltonian + + Hc = T + V + +! Read nuclear integrals + + G = 0d0 + do + read(11,*,end=11) mu,la,nu,si,ERI +! read(11,*,end=11) ERI,mu,nu,la,si + + ERI = ERI/scale +! <12|34> + G(mu,nu,la,si) = ERI +! <32|14> + G(la,nu,mu,si) = ERI +! <14|32> + G(mu,si,la,nu) = ERI +! <34|12> + G(la,si,mu,nu) = ERI +! <41|23> + G(si,mu,nu,la) = ERI +! <23|41> + G(nu,la,si,mu) = ERI +! <21|43> + G(nu,mu,si,la) = ERI +! <43|21> + G(si,la,nu,mu) = ERI + enddo + 11 close(unit=11) + + +! Print results + if(debug) then + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Overlap integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,S) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Kinetic integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,T) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Nuclear integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,V) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Electron repulsion integrals' + write(*,'(A28)') '----------------------' + do la=1,nBas + do si=1,nBas + call matout(nBas,nBas,G(1,1,la,si)) + enddo + enddo + write(*,*) + endif + +end subroutine read_integrals diff --git a/src/MCQC/read_methods.f90 b/src/MCQC/read_methods.f90 new file mode 100644 index 0000000..6db5635 --- /dev/null +++ b/src/MCQC/read_methods.f90 @@ -0,0 +1,97 @@ +subroutine read_methods(doHF,doMOM, & + doMP2,doMP3, & + doCIS,doTDHF,doADC, & + doGF2,doGF3, & + doG0W0,doevGW,doqsGW, & + doMCMP2) + +! Read desired methods + + implicit none + +! Input variables + + logical,intent(out) :: doHF,doMOM + logical,intent(out) :: doMP2,doMP3 + logical,intent(out) :: doCIS,doTDHF,doADC + logical,intent(out) :: doGF2,doGF3 + logical,intent(out) :: doG0W0,doevGW,doqsGW + logical,intent(out) :: doMCMP2 + +! Local variables + + character(len=1) :: answer1,answer2,answer3 + +! Open file with method specification + + open(unit=1,file='input/methods') + +! Set all the booleans to false + + doHF = .false. + doMOM = .false. + + doMP2 = .false. + doMP3 = .false. + + doCIS = .false. + doTDHF = .false. + doADC = .false. + + doGF2 = .false. + doGF3 = .false. + + doG0W0 = .false. + doevGW = .false. + doqsGW = .false. + + doMCMP2 = .false. + +! Read mean-field methods + + read(1,*) + read(1,*) answer1,answer2 + if(answer1 == 'T') doHF = .true. + if(answer2 == 'T') doMOM = .true. + +! Read MPn methods + + read(1,*) + read(1,*) answer1,answer2 + if(answer1 == 'T') doMP2 = .true. + if(answer2 == 'T') doMP3 = .true. + +! Read excited state methods + + read(1,*) + read(1,*) answer1,answer2,answer3 + if(answer1 == 'T') doCIS = .true. + if(answer2 == 'T') doTDHF = .true. + if(answer3 == 'T') doADC = .true. + +! Read Green function methods + + read(1,*) + read(1,*) answer1,answer2 + if(answer1 == 'T') doGF2 = .true. + if(answer2 == 'T') doGF3 = .true. + +! Read GW methods + + read(1,*) + read(1,*) answer1,answer2,answer3 + if(answer1 == 'T') doG0W0 = .true. + if(answer2 == 'T') doevGW = .true. + if(answer3 == 'T') doqsGW = .true. + +! Read stochastic methods + + read(1,*) + read(1,*) answer1 + if(answer1 == 'T') doMCMP2 = .true. + +! Close file with geometry specification + + close(unit=1) + +end subroutine read_methods diff --git a/src/MCQC/read_molecule.f90 b/src/MCQC/read_molecule.f90 new file mode 100644 index 0000000..b7f14b9 --- /dev/null +++ b/src/MCQC/read_molecule.f90 @@ -0,0 +1,67 @@ +subroutine read_molecule(nAt,nEl,nC,nO,nR) + +! Read number of atoms nAt, +! number of electrons nEl, +! number of core electrons nC, +! number of Rydberg orbitals nR + + implicit none + +! Input variables + integer,intent(out) :: nAt,nEl,nC,nO,nR + +! Open file with geometry specification + + open(unit=1,file='input/molecule') + +! Read number of atoms and number of electrons + + read(1,*) + read(1,*) nAt,nEl,nC,nR + +! Number of occupied orbitals + + if(mod(nEl,2) /= 0) then + write(*,*) 'closed-shell system required!' +! stop + endif + nO = nEl/2 + +! Number of core orbitals + + if(mod(nC,2) /= 0) then + write(*,*) 'Number of core electrons not even!' + stop + endif + nC = nC/2 + + if(nC > nO) then + write(*,*) 'Number of core electrons greater than number of electrons!' + stop + endif + +! Print results + + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of atoms',nAt + write(*,'(A28)') '----------------------' + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of electrons',nEl + write(*,'(A28)') '----------------------' + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of core electrons',2*nC + write(*,'(A28)') '----------------------' + write(*,*) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of Rydberg orbitals',nR + write(*,'(A28)') '----------------------' + write(*,*) + +! Close file with geometry specification + + close(unit=1) + +end subroutine read_molecule diff --git a/src/MCQC/read_options.f90 b/src/MCQC/read_options.f90 new file mode 100644 index 0000000..0096914 --- /dev/null +++ b/src/MCQC/read_options.f90 @@ -0,0 +1,151 @@ +subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_type, & + singlet_manifold,triplet_manifold, & + maxSCF_GF,thresh_GF,DIIS_GF,n_diis_GF,renormalization, & + maxSCF_GW,thresh_GW,DIIS_GW,n_diis_GW,COHSEX,SOSEX,BSE,TDA,G0W,GW0,linearize, & + nMC,nEq,nWalk,dt,nPrint,iSeed,doDrift) + +! Read desired methods + + implicit none + +! Input variables + + integer,intent(out) :: maxSCF_HF + double precision,intent(out) :: thresh_HF + logical,intent(out) :: DIIS_HF + integer,intent(out) :: n_diis_HF + integer,intent(out) :: guess_type + integer,intent(out) :: ortho_type + + logical,intent(out) :: singlet_manifold + logical,intent(out) :: triplet_manifold + + integer,intent(out) :: maxSCF_GF + double precision,intent(out) :: thresh_GF + logical,intent(out) :: DIIS_GF + integer,intent(out) :: n_diis_GF + integer,intent(out) :: renormalization + + integer,intent(out) :: maxSCF_GW + double precision,intent(out) :: thresh_GW + logical,intent(out) :: DIIS_GW + integer,intent(out) :: n_diis_GW + logical,intent(out) :: COHSEX + logical,intent(out) :: SOSEX + logical,intent(out) :: BSE + logical,intent(out) :: TDA + logical,intent(out) :: G0W + logical,intent(out) :: GW0 + logical,intent(out) :: linearize + + integer,intent(out) :: nMC + integer,intent(out) :: nEq + integer,intent(out) :: nWalk + double precision,intent(out) :: dt + integer,intent(out) :: nPrint + integer,intent(out) :: iSeed + logical,intent(out) :: doDrift + +! Local variables + + character(len=1) :: answer1,answer2,answer3,answer4,answer5,answer6,answer7,answer8 + +! Open file with method specification + + open(unit=1,file='input/options') + +! Read HF options + + maxSCF_HF = 64 + thresh_HF = 1d-6 + DIIS_HF = .false. + n_diis_HF = 5 + guess_type = 1 + ortho_type = 1 + + read(1,*) + read(1,*) maxSCF_HF,thresh_HF,answer1,n_diis_HF,guess_type,ortho_type + + if(answer1 == 'T') DIIS_HF = .true. + + if(.not.DIIS_HF) n_diis_HF = 1 + +! Read MPn options + + read(1,*) + read(1,*) + +! Read excited state options + + singlet_manifold = .false. + triplet_manifold = .false. + + read(1,*) + read(1,*) answer1,answer2 + + if(answer1 == 'T') singlet_manifold = .true. + if(answer2 == 'T') triplet_manifold = .true. + +! Read Green function options + + maxSCF_GF = 64 + thresh_GF = 1d-5 + DIIS_GF = .false. + n_diis_GF = 5 + renormalization = 0 + + read(1,*) + read(1,*) maxSCF_GF,thresh_GW,answer1,n_diis_GF,renormalization + + if(answer1 == 'T') DIIS_GF = .true. + if(.not.DIIS_GF) n_diis_GF = 1 + +! Read GW options + + maxSCF_GW = 64 + thresh_GW = 1d-5 + DIIS_GW = .false. + n_diis_GW = 5 + COHSEX = .false. + SOSEX = .false. + BSE = .false. + TDA = .false. + G0W = .false. + GW0 = .false. + linearize = .false. + + read(1,*) + read(1,*) maxSCF_GW,thresh_GW,answer1,n_diis_GW,answer2, & + answer3,answer4,answer5,answer6,answer7,answer8 + + if(answer1 == 'T') DIIS_GW = .true. + if(answer2 == 'T') COHSEX = .true. + if(answer3 == 'T') SOSEX = .true. + if(answer4 == 'T') BSE = .true. + if(answer5 == 'T') TDA = .true. + if(answer6 == 'T') G0W = .true. + if(answer7 == 'T') GW0 = .true. + if(answer8 == 'T') linearize = .true. + if(.not.DIIS_GW) n_diis_GW = 1 + +! Read options for MC-MP2: Monte Carlo steps, number of equilibration steps, number of walkers, +! Monte Carlo time step, frequency of output results, and seed for random number generator + + nMC = 100000 + nEq = 10000 + nWalk = 10 + dt = 0.3d0 + nPrint = 1000 + iSeed = 0 + doDrift = .false. + + read(1,*) + read(1,*) nMC,nEq,nWalk,dt,nPrint,iSeed,answer1 + + if(answer1 == 'T') doDrift = .true. + +! Close file with options + + close(unit=1) + +end subroutine read_options diff --git a/src/MCQC/renormalization_factor.f90 b/src/MCQC/renormalization_factor.f90 new file mode 100644 index 0000000..b4fff31 --- /dev/null +++ b/src/MCQC/renormalization_factor.f90 @@ -0,0 +1,112 @@ +subroutine renormalization_factor(SOSEX,nBas,nC,nO,nV,nR,nS,e,Omega,rho,rhox,Z) + +! Compute renormalization factor for GW + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: SOSEX + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),Omega(nS),rho(nBas,nBas,nS),rhox(nBas,nBas,nS) + +! Local variables + + integer :: i,j,a,b,x,jb + double precision :: eps + double precision,allocatable :: SigC(:),dSigC(:),d2SigC(:) + double precision,external :: Z_dcgw + +! Output variables + + double precision,intent(out) :: Z(nBas) + +! Allocate + + allocate(SigC(nBas),dSigC(nBas),d2SigC(nBas)) + + SigC(:) = 0d0 + dSigC(:) = 0d0 + d2SigC(:) = 0d0 + +! Occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) +! Z(x) = Z(x) + 2d0*Z_dcgw(eps,rho(x,i,jb)) +! SigC(x) = SigC(x) + 2d0*rho(x,i,jb)**2/eps + dSigC(x) = dSigC(x) - 2d0*rho(x,i,jb)**2/eps**2 +! d2SigC(x) = d2SigC(x) + 4d0*rho(x,i,jb)**2/eps**3 + enddo + enddo + enddo + enddo + +! Virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) +! Z(x) = Z(x) + 2d0*Z_dcgw(eps,rho(x,a,jb)) +! SigC(x) = SigC(x) + 2d0*rho(x,a,jb)**2/eps + dSigC(x) = dSigC(x) - 2d0*rho(x,a,jb)**2/eps**2 +! d2SigC(x) = d2SigC(x) + 4d0*rho(x,a,jb)**2/eps**3 + enddo + enddo + enddo + enddo + + ! SOSEX correction + + if(SOSEX) then + + ! Occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) + dSigC(x) = dSigC(x) - (rho(x,i,jb)/eps)*(rhox(x,i,jb)/eps) + enddo + enddo + enddo + enddo + + ! Virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) + dSigC(x) = dSigC(x) - (rho(x,a,jb)/eps)*(rhox(x,a,jb)/eps) + enddo + enddo + enddo + enddo + + endif + +! Compute renormalization factor from derivative of SigC + + Z(:) = 1d0/(1d0-dSigC(:)) + +! Z(:) = 1d0 - dSigC(:) + sqrt( (1d0 - dSigC(:))**2 - 2d0*SigC(:)*d2SigC(:) ) +! Z(:) = Z(:)/(SigC(:)*d2SigC(:)) + +end subroutine renormalization_factor diff --git a/src/MCQC/rij.f90 b/src/MCQC/rij.f90 new file mode 100644 index 0000000..ff9b6f8 --- /dev/null +++ b/src/MCQC/rij.f90 @@ -0,0 +1,24 @@ +subroutine rij(nWalk,r,r12) + +! Compute the interelectronic distances + + implicit none + +! Input variables + + integer,intent(in) :: nWalk + double precision,intent(in) :: r(nWalk,1:2,1:3) + +! Output variables + + double precision,intent(out) :: r12(nWalk) + +! Compute + + r12(1:nWalk) = (r(1:nWalk,1,1)-r(1:nWalk,2,1))**2 & + + (r(1:nWalk,1,2)-r(1:nWalk,2,2))**2 & + + (r(1:nWalk,1,3)-r(1:nWalk,2,3))**2 + + r12 = sqrt(r12) + +end subroutine rij diff --git a/src/MCQC/self_energy_correlation.f90 b/src/MCQC/self_energy_correlation.f90 new file mode 100644 index 0000000..07f6436 --- /dev/null +++ b/src/MCQC/self_energy_correlation.f90 @@ -0,0 +1,143 @@ +subroutine self_energy_correlation(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,e,Omega,rho,rhox,SigC) + +! Compute correlation part of the self-energy + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: COHSEX,SOSEX + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),Omega(nS),rho(nBas,nBas,nS),rhox(nBas,nBas,nS) + +! Local variables + + integer :: i,j,a,b,x,y,jb + double precision :: eps,eta + +! Output variables + + double precision,intent(out) :: SigC(nBas,nBas) + +! Initialize + + SigC = 0d0 + +! Infinitesimal + + eta = 0.001d0 + +! COHSEX static approximation + + if(COHSEX) then + + ! COHSEX: occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + SigC(x,y) = SigC(x,y) + 4d0*rho(x,i,jb)*rho(y,i,jb)/Omega(jb) + enddo + enddo + enddo + enddo + enddo + + ! COHSEX: virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + SigC(x,y) = SigC(x,y) - 2d0*rho(x,a,jb)*rho(y,a,jb)/Omega(jb) + enddo + enddo + enddo + enddo + enddo + + else + + ! Occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) + SigC(x,y) = SigC(x,y) + 2d0*rho(x,i,jb)*rho(y,i,jb)*eps/(eps**2 + eta**2) + enddo + enddo + enddo + enddo + enddo + + ! Virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) + SigC(x,y) = SigC(x,y) + 2d0*rho(x,a,jb)*rho(y,a,jb)*eps/(eps**2 + eta**2) + enddo + enddo + enddo + enddo + enddo + + if(SOSEX) then + + ! SOSEX: occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) + SigC(x,y) = SigC(x,y) - rho(x,i,jb)*rhox(y,i,jb)/eps + enddo + enddo + enddo + enddo + enddo + + ! SOSEX: virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do y=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) + SigC(x,y) = SigC(x,y) - rho(x,a,jb)*rhox(y,a,jb)/eps + enddo + enddo + enddo + enddo + enddo + + endif + + endif + +end subroutine self_energy_correlation diff --git a/src/MCQC/self_energy_correlation_diag.f90 b/src/MCQC/self_energy_correlation_diag.f90 new file mode 100644 index 0000000..9116561 --- /dev/null +++ b/src/MCQC/self_energy_correlation_diag.f90 @@ -0,0 +1,137 @@ +subroutine self_energy_correlation_diag(COHSEX,SOSEX,nBas,nC,nO,nV,nR,nS,e,Omega,rho,rhox,SigC) + +! Compute diagonal of the correlation part of the self-energy + + implicit none + include 'parameters.h' + +! Input variables + + logical,intent(in) :: COHSEX,SOSEX + integer,intent(in) :: nBas,nC,nO,nV,nR,nS + double precision,intent(in) :: e(nBas),Omega(nS),rho(nBas,nBas,nS),rhox(nBas,nBas,nS) + +! Local variables + + integer :: i,j,a,b,x,jb + double precision :: eps,eta + double precision,external :: SigC_dcgw + +! Output variables + + double precision,intent(out) :: SigC(nBas) + +! Initialize + + SigC = 0d0 + +! Infinitesimal + + eta = 0d0 +! eta = 0.001d0 + +! COHSEX static approximation + + if(COHSEX) then + + ! COHSEX: occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + SigC(x) = SigC(x) + 4d0*rho(x,i,jb)**2/Omega(jb) + enddo + enddo + enddo + enddo + + ! COHSEX: virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + SigC(x) = SigC(x) - 2d0*rho(x,a,jb)**2/Omega(jb) + enddo + enddo + enddo + enddo + + else + + ! Occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) +! SigC(x) = SigC(x) + 4d0*rho(x,i,jb)**2/(eps + eps*sqrt(1d0 + rho(x,i,jb)**2/eps**2)) + SigC(x) = SigC(x) + 2d0*rho(x,i,jb)**2*eps/(eps**2 + eta**2) +! SigC(x) = SigC(x) + 2d0*SigC_dcgw(eps,rho(x,i,jb)) + enddo + enddo + enddo + enddo + + ! Virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) +! SigC(x) = SigC(x) + 4d0*rho(x,a,jb)**2/(eps + eps*sqrt(1d0 + 4d0*rho(x,a,jb)**2/eps**2)) + SigC(x) = SigC(x) + 2d0*rho(x,a,jb)**2*eps/(eps**2 + eta**2) +! SigC(x) = SigC(x) + 2d0*SigC_dcgw(eps,rho(x,a,jb)) + enddo + enddo + enddo + enddo + + if(SOSEX) then + + ! SOSEX: occupied part of the correlation self-energy + + do x=nC+1,nBas-nR + do i=nC+1,nO + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(i) + Omega(jb) + SigC(x) = SigC(x) - rho(x,i,jb)*rhox(x,i,jb)/eps + enddo + enddo + enddo + enddo + + ! SOSEX: virtual part of the correlation self-energy + + do x=nC+1,nBas-nR + do a=nO+1,nBas-nR + jb = 0 + do j=nC+1,nO + do b=nO+1,nBas-nR + jb = jb + 1 + eps = e(x) - e(a) - Omega(jb) + SigC(x) = SigC(x) - rho(x,a,jb)*rhox(x,a,jb)/eps + enddo + enddo + enddo + enddo + + endif + + endif + +end subroutine self_energy_correlation_diag diff --git a/src/MCQC/self_energy_exchange.f90 b/src/MCQC/self_energy_exchange.f90 new file mode 100644 index 0000000..26db034 --- /dev/null +++ b/src/MCQC/self_energy_exchange.f90 @@ -0,0 +1,25 @@ +subroutine self_energy_exchange(nBas,c,P,G,SigmaX) + +! Compute exchange part of the self-energy + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: c(nBas,nBas),P(nBas,nBas),G(nBas,nBas,nBas,nBas) + +! Output variables + + double precision,intent(out) :: SigmaX(nBas,nBas) + +! Compute exchange part of the self-energy in the AO basis + + call exchange_matrix_AO_basis(nBas,P,G,SigmaX) + +! Compute exchange part of the self-energy in the MO basis + + SigmaX = matmul(transpose(c),matmul(SigmaX,c)) + +end subroutine self_energy_exchange diff --git a/src/MCQC/transition_probability.f90 b/src/MCQC/transition_probability.f90 new file mode 100644 index 0000000..76da1d5 --- /dev/null +++ b/src/MCQC/transition_probability.f90 @@ -0,0 +1,41 @@ +subroutine transition_probability(nWalk,dt,D,r,rp,F,Fp,T,Tp) + +! Compute transition probability + + implicit none + +! Input variables + + integer,intent(in) :: nWalk + double precision,intent(in) :: dt,D + double precision,intent(in) :: r(nWalk,1:2,1:3), F(nWalk,1:2,1:3) + double precision,intent(in) :: rp(nWalk,1:2,1:3),Fp(nWalk,1:2,1:3) + +! Local variables + + integer :: iW,iEl,ixyz + +! Output variables + + double precision,intent(out) :: T(nWalk),Tp(nWalk) + +! Initialize + + T = 0d0 + Tp = 0d0 + +! Compute + + do iW=1,nWalk + do iEl=1,2 + do ixyz=1,3 + T(iW) = T(iW) + (rp(iW,iEl,ixyz) - r(iW,iEl,ixyz) - D*dt*F(iW,iEl,ixyz))**2 + Tp(iW) = Tp(iW) + (r(iW,iEl,ixyz) - rp(iW,iEl,ixyz) - D*dt*Fp(iW,iEl,ixyz))**2 + enddo + enddo + enddo + + T(:) = exp(-0.25d0*T(:)/(D*dt)) + Tp(:) = exp(-0.25d0*Tp(:)/(D*dt)) + +end subroutine transition_probability diff --git a/src/MCQC/utils.f90 b/src/MCQC/utils.f90 new file mode 100644 index 0000000..8669f34 --- /dev/null +++ b/src/MCQC/utils.f90 @@ -0,0 +1,339 @@ +!------------------------------------------------------------------------ +function Kronecker_delta(i,j) result(delta) + +! Kronecker Delta + + implicit none + +! Input variables + + integer,intent(in) :: i,j + +! Output variables + + double precision :: delta + + if(i == j) then + delta = 1d0 + else + delta = 0d0 + endif + +end function Kronecker_delta + +!------------------------------------------------------------------------ +subroutine matout(m,n,A) + +! Print the MxN array A + + implicit none + + integer,parameter :: ncol = 5 + double precision,parameter :: small = 1d-10 + integer,intent(in) :: m,n + double precision,intent(in) :: A(m,n) + double precision :: B(ncol) + integer :: ilower,iupper,num,i,j + + do ilower=1,n,ncol + iupper = min(ilower + ncol - 1,n) + num = iupper - ilower + 1 + write(*,'(3X,10(9X,I6))') (j,j=ilower,iupper) + do i=1,m + do j=ilower,iupper + B(j-ilower+1) = A(i,j) + enddo + do j=1,num + if(abs(B(j)) < small) B(j) = 0d0 + enddo + write(*,'(I7,10F15.8)') i,(B(j),j=1,num) + enddo + enddo + +end subroutine matout + +!------------------------------------------------------------------------ +subroutine trace_vector(n,v,Tr) + +! Calculate the trace of the vector v of length n +!!! Please use the intrinsic fortran sum() !!! + + implicit none + +! Input variables + + integer,intent(in) :: n + double precision,intent(in) :: v(n) + +! Local variables + + integer :: i + +! Output variables + + double precision,intent(out) :: Tr + + Tr = 0d0 + do i=1,n + Tr = Tr + v(i) + enddo + +end subroutine trace_vector + +!------------------------------------------------------------------------ +function trace_matrix(n,A) result(Tr) + +! Calculate the trace of the square matrix A + + implicit none + +! Input variables + + integer,intent(in) :: n + double precision,intent(in) :: A(n,n) + +! Local variables + + integer :: i + +! Output variables + + double precision :: Tr + + Tr = 0d0 + do i=1,n + Tr = Tr + A(i,i) + enddo + +end function trace_matrix + +!------------------------------------------------------------------------ +subroutine compute_error(nData,Mean,Var,Error) + +! Calculate the statistical error + + implicit none + +! Input variables + + double precision,intent(in) :: nData,Mean(3) + +! Output variables + + double precision,intent(out) :: Error(3) + double precision,intent(inout):: Var(3) + + Error = sqrt((Var-Mean**2/nData)/nData/(nData-1d0)) + +end subroutine compute_error + +!------------------------------------------------------------------------ +subroutine identity_matrix(N,A) + +! Set the matrix A to the identity matrix + + implicit none + +! Input variables + + integer,intent(in) :: N + +! Local viaruabkes + + integer :: i + +! Output variables + + double precision,intent(out) :: A(N,N) + + A = 0d0 + + do i=1,N + A(i,i) = 1d0 + enddo + +end subroutine identity_matrix + +!------------------------------------------------------------------------ +subroutine prepend(N,M,A,b) + +! Prepend the vector b of size N into the matrix A of size NxM + + implicit none + +! Input variables + + integer,intent(in) :: N,M + double precision,intent(in) :: b(N) + +! Local viaruabkes + + integer :: i,j + +! Output variables + + double precision,intent(out) :: A(N,M) + + +! print*,'b in append' +! call matout(N,1,b) + + do i=1,N + do j=M-1,1,-1 + A(i,j+1) = A(i,j) + enddo + A(i,1) = b(i) + enddo + +end subroutine prepend + +!------------------------------------------------------------------------ +subroutine append(N,M,A,b) + +! Append the vector b of size N into the matrix A of size NxM + + implicit none + +! Input variables + + integer,intent(in) :: N,M + double precision,intent(in) :: b(N) + +! Local viaruabkes + + integer :: i,j + +! Output variables + + double precision,intent(out) :: A(N,M) + + do i=1,N + do j=2,M + A(i,j-1) = A(i,j) + enddo + A(i,M) = b(i) + enddo + +end subroutine append + +!------------------------------------------------------------------------ +subroutine AtDA(N,A,D,B) + +! Perform B = At.D.A where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),D(N) + +! Local viaruabkes + + integer :: i,j,k + +! Output variables + + double precision,intent(out) :: B(N,N) + + B = 0d0 + + do i=1,N + do j=1,N + do k=1,N + B(i,k) = B(i,k) + A(j,i)*D(j)*A(j,k) + enddo + enddo + enddo + +end subroutine AtDA + +!------------------------------------------------------------------------ +subroutine ADAt(N,A,D,B) + +! Perform B = A.D.At where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),D(N) + +! Local viaruabkes + + integer :: i,j,k + +! Output variables + + double precision,intent(out) :: B(N,N) + + B = 0d0 + + do i=1,N + do j=1,N + do k=1,N + B(i,k) = B(i,k) + A(i,j)*D(j)*A(k,j) + enddo + enddo + enddo + +end subroutine ADAt +!------------------------------------------------------------------------ +subroutine DA(N,D,A) + +! Perform A <- D.A where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + + integer,intent(in) :: N + integer :: i,j,k + double precision,intent(in) :: D(N) + double precision,intent(inout):: A(N,N) + + do i=1,N + do j=1,N + A(i,j) = D(i)*A(i,j) + enddo + enddo + +end subroutine DA + +!------------------------------------------------------------------------ +subroutine AD(N,A,D) + +! Perform A <- A.D where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + + integer,intent(in) :: N + integer :: i,j,k + double precision,intent(in) :: D(N) + double precision,intent(inout):: A(N,N) + + do i=1,N + do j=1,N + A(i,j) = A(i,j)*D(j) + enddo + enddo + +end subroutine AD + +!------------------------------------------------------------------------ +subroutine print_warning(message) + +! Print warning + + implicit none + + character(len=*),intent(in) :: message + + write(*,*) message + +end subroutine print_warning + + diff --git a/src/MCQC/wrap_lapack.f90 b/src/MCQC/wrap_lapack.f90 new file mode 100644 index 0000000..6c29ab7 --- /dev/null +++ b/src/MCQC/wrap_lapack.f90 @@ -0,0 +1,207 @@ +!subroutine eigenvalues_non_symmetric_matrix(N,A,e) +! +!! Diagonalize a square matrix +! +! implicit none +! +!! Input variables +! +! integer,intent(in) :: N +! double precision,intent(inout):: A(N,N) +! double precision,intent(out) :: e(N) +! +!! Local variables +! +! integer :: lwork,info +! double precision,allocatable :: work(:) +! +!! Memory allocation +! +! allocate(eRe(N),eIm(N),work(3*N)) +! lwork = size(work) +! +! call DGEEV('N','N',N,A,N, eRe, eIm, 0d0,1, VR,LDVR, WORK, LWORK, INFO ) +! +! if(info /= 0) then +! print*,'Problem in diagonalize_matrix (dseev)!!' +! stop +! endif +! +!end subroutine eigenvalues_non_symmetric_matrix + +subroutine diagonalize_matrix(N,A,e) + +! Diagonalize a square matrix + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(inout):: A(N,N) + double precision,intent(out) :: e(N) + +! Local variables + + integer :: lwork,info + double precision,allocatable :: work(:) + +! Memory allocation + + allocate(work(3*N)) + lwork = size(work) + + call dsyev('V','U',N,A,N,e,work,lwork,info) + + if(info /= 0) then + print*,'Problem in diagonalize_matrix (dsyev)!!' + endif + +end subroutine diagonalize_matrix + +subroutine svd(N,A,U,D,Vt) + + ! Compute A = U.D.Vt + ! Dimension of A is NxN + + implicit none + + integer, intent(in) :: N + double precision,intent(in) :: A(N,N) + double precision,intent(out) :: U(N,N) + double precision,intent(out) :: Vt(N,N) + double precision,intent(out) :: D(N) + double precision,allocatable :: work(:) + integer :: info,lwork + + double precision,allocatable :: scr(:,:) + + allocate (scr(N,N)) + + scr(:,:) = A(:,:) + + ! Find optimal size for temporary arrays + + allocate(work(1)) + + lwork = -1 + call dgesvd('A','A',N,N,scr,N,D,U,N,Vt,N,work,lwork,info) + lwork = int(work(1)) + + deallocate(work) + + allocate(work(lwork)) + + call dgesvd('A','A',N,N,scr,N,D,U,N,Vt,N,work,lwork,info) + + deallocate(work,scr) + + if (info /= 0) then + print *, info, ': SVD failed' + stop + endif + +end + +subroutine inverse_matrix(N,A,B) + +! Returns the inverse of the square matrix A in B + + implicit none + + integer,intent(in) :: N + double precision, intent(in) :: A(N,N) + double precision, intent(out) :: B(N,N) + + integer :: info,lwork + integer, allocatable :: ipiv(:) + double precision,allocatable :: work(:) + + allocate (ipiv(N),work(N*N)) + lwork = size(work) + + B(1:N,1:N) = A(1:N,1:N) + + call dgetrf(N,N,B,N,ipiv,info) + + if (info /= 0) then + + print*,info + stop 'error in inverse (dgetrf)!!' + + endif + + call dgetri(N,B,N,ipiv,work,lwork,info) + + if (info /= 0) then + + print *, info + stop 'error in inverse (dgetri)!!' + + endif + + deallocate(ipiv,work) + +end subroutine inverse_matrix + +subroutine linear_solve(N,A,b,x,rcond) + +! Solve the linear system A.x = b where A is a NxN matrix +! and x and x are vectors of size N + + implicit none + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),b(N),rcond + double precision,intent(out) :: x(N) + + integer :: info,lwork + double precision :: ferr,berr + integer,allocatable :: ipiv(:),iwork(:) + double precision,allocatable :: AF(:,:),work(:) + + lwork = 3*N + allocate(AF(N,N),ipiv(N),work(lwork),iwork(N)) + + call dsysvx('N','U',N,1,A,N,AF,N,ipiv,b,N,x,N,rcond,ferr,berr,work,lwork,iwork,info) + +! if (info /= 0) then + +! print *, info +! stop 'error in linear_solve (dsysvx)!!' + +! endif + +end subroutine linear_solve + +subroutine easy_linear_solve(N,A,b,x) + +! Solve the linear system A.x = b where A is a NxN matrix +! and x and x are vectors of size N + + implicit none + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),b(N) + double precision,intent(out) :: x(N) + + integer :: info,lwork + integer,allocatable :: ipiv(:) + double precision,allocatable :: work(:) + + allocate(ipiv(N),work(N*N)) + lwork = size(work) + + x = b + + call dsysv('U',N,1,A,N,ipiv,x,N,work,lwork,info) + + if (info /= 0) then + + print *, info + stop 'error in linear_solve (dsysv)!!' + + endif + +end subroutine easy_linear_solve + diff --git a/src/xcDFT/AO_values_grid.f90 b/src/xcDFT/AO_values_grid.f90 new file mode 100644 index 0000000..75416e7 --- /dev/null +++ b/src/xcDFT/AO_values_grid.f90 @@ -0,0 +1,101 @@ +subroutine AO_values_grid(nBas,nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + nGrid,root,AO,dAO) + +! Compute values of the AOs and their derivatives with respect to the cartesian coordinates + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nBas,nShell + double precision,intent(in) :: CenterShell(maxShell,3) + integer,intent(in) :: TotAngMomShell(maxShell) + integer,intent(in) :: KShell(maxShell) + double precision,intent(in) :: DShell(maxShell,maxK) + double precision,intent(in) :: ExpShell(maxShell,maxK) + double precision,intent(in) :: root(3,nGrid) + integer,intent(in) :: nGrid + +! Local variables + + integer :: atot,nShellFunction,a(3) + integer,allocatable :: ShellFunction(:,:) + double precision :: rASq,xA,yA,zA,NormCoeff,prim + + integer :: iSh,iShF,iK,iG,iBas + +! Output variables + + double precision,intent(out) :: AO(nBas,nGrid) + double precision,intent(out) :: dAO(3,nBas,nGrid) + +! Initialization + + iBas = 0 + AO(:,:) = 0d0 + dAO(:,:,:) = 0d0 + +!------------------------------------------------------------------------ +! Loops over shells +!------------------------------------------------------------------------ + do iSh=1,nShell + + atot = TotAngMomShell(iSh) + nShellFunction = (atot*atot + 3*atot + 2)/2 + allocate(ShellFunction(1:nShellFunction,1:3)) + call generate_shell(atot,nShellFunction,ShellFunction) + + do iShF=1,nShellFunction + + iBas = iBas + 1 + a(:) = ShellFunction(iShF,:) + + do iG=1,nGrid + + xA = root(1,iG) - CenterShell(iSh,1) + yA = root(2,iG) - CenterShell(iSh,2) + zA = root(3,iG) - CenterShell(iSh,3) + +! Calculate distance for exponential + + rASq = xA**2 + yA**2 + zA**2 + +!------------------------------------------------------------------------ +! Loops over contraction degrees +!------------------------------------------------------------------------- + do iK=1,KShell(iSh) + +! Calculate the exponential part + + prim = DShell(iSh,iK)*NormCoeff(ExpShell(iSh,iK),a)*exp(-ExpShell(iSh,iK)*rASq) + AO(iBas,iG) = AO(iBas,iG) + prim + + prim = -2d0*ExpShell(iSh,iK)*prim + dAO(:,iBas,iG) = dAO(:,iBas,iG) + prim + + enddo + + dAO(1,iBas,iG) = xA**(a(1)+1)*yA**a(2)*zA**a(3)*dAO(1,iBas,iG) + if(a(1) > 0) dAO(1,iBas,iG) = dAO(1,iBas,iG) + dble(a(1))*xA**(a(1)-1)*yA**a(2)*zA**a(3)*AO(iBas,iG) + + dAO(2,iBas,iG) = xA**a(1)*yA**(a(2)+1)*zA**a(3)*dAO(2,iBas,iG) + if(a(2) > 0) dAO(2,iBas,iG) = dAO(2,iBas,iG) + dble(a(2))*xA**a(1)*yA**(a(2)-1)*zA**a(3)*AO(iBas,iG) + + dAO(3,iBas,iG) = xA**a(1)*yA**a(2)*zA**(a(3)+1)*dAO(3,iBas,iG) + if(a(3) > 0) dAO(3,iBas,iG) = dAO(3,iBas,iG) + dble(a(3))*xA**a(1)*yA**a(2)*zA**(a(3)-1)*AO(iBas,iG) + +! Calculate polynmial part + + AO(iBas,iG) = xA**a(1)*yA**a(2)*zA**a(3)*AO(iBas,iG) + + enddo + + enddo + deallocate(ShellFunction) + enddo +!------------------------------------------------------------------------ +! End loops over shells +!------------------------------------------------------------------------ + +end subroutine AO_values_grid diff --git a/src/xcDFT/DIIS_extrapolation.f90 b/src/xcDFT/DIIS_extrapolation.f90 new file mode 100644 index 0000000..9ba503e --- /dev/null +++ b/src/xcDFT/DIIS_extrapolation.f90 @@ -0,0 +1,52 @@ +subroutine DIIS_extrapolation(n,n_diis,error,e,error_in,e_inout) + +! Perform DIIS extrapolation + + implicit none + + include 'parameters.h' + +! Input variables + + integer,intent(in) :: n,n_diis + double precision,intent(in) :: error(n,n_diis),e(n,n_diis),error_in(n) + +! Local variables + + double precision,allocatable :: A(:,:),b(:),w(:) + +! Output variables + + double precision,intent(inout):: e_inout(n) + +! Memory allocaiton + + allocate(A(n_diis+1,n_diis+1),b(n_diis+1),w(n_diis+1)) + +! Update DIIS "history" + + call prepend(n,n_diis,error,error_in) + call prepend(n,n_diis,e,e_inout) + +! Build A matrix + + A(1:n_diis,1:n_diis) = matmul(transpose(error),error) + + A(1:n_diis,n_diis+1) = -1d0 + A(n_diis+1,1:n_diis) = -1d0 + A(n_diis+1,n_diis+1) = +0d0 + +! Build x matrix + + b(1:n_diis) = +0d0 + b(n_diis+1) = -1d0 + +! Solve linear system + + call linear_solve(n_diis+1,A,b,w) + +! Extrapolate + + e_inout(:) = matmul(w(1:n_diis),transpose(e(:,1:n_diis))) + +end subroutine DIIS_extrapolation diff --git a/src/xcDFT/Makefile b/src/xcDFT/Makefile new file mode 100644 index 0000000..cbacf0f --- /dev/null +++ b/src/xcDFT/Makefile @@ -0,0 +1,34 @@ +IDIR =../../include +BDIR =../../bin +ODIR = obj +SDIR =. +FC = gfortran -I$(IDIR) +ifeq ($(DEBUG),1) +FFLAGS = -Wall -g -msse4.2 -fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant +else +FFLAGS = -Wall -Wno-unused -Wno-unused-dummy-argument -O2 +endif + +LIBS = ~/Dropbox/quack/lib/*.a +#LIBS = -lblas -llapack + +SRCF90 = $(wildcard *.f90) + +SRC = $(wildcard *.f) + +OBJ = $(patsubst %.f90,$(ODIR)/%.o,$(SRCF90)) $(patsubst %.f,$(ODIR)/%.o,$(SRC)) + +$(ODIR)/%.o: %.f90 + $(FC) -c -o $@ $< $(FFLAGS) + +$(ODIR)/%.o: %.f + $(FC) -c -o $@ $< $(FFLAGS) + +$(BDIR)/xcDFT: $(OBJ) + $(FC) -o $@ $^ $(FFLAGS) $(LIBS) + +debug: + DEBUG=1 make clean $(BDIR)/xcDFT + +clean: + rm -f $(ODIR)/*.o $(BDIR)/xcDFT $(BDIR)/debug diff --git a/src/xcDFT/NormCoeff.f90 b/src/xcDFT/NormCoeff.f90 new file mode 100644 index 0000000..ff0fac9 --- /dev/null +++ b/src/xcDFT/NormCoeff.f90 @@ -0,0 +1,31 @@ +function NormCoeff(alpha,a) + +! Compute normalization coefficients for cartesian gaussians + + implicit none + +! Input variables + + double precision,intent(in) :: alpha + integer,intent(in) :: a(3) + +! local variable + double precision :: pi,dfa(3),dfac + integer :: atot + +! Output variable + double precision NormCoeff + + pi = 4d0*atan(1d0) + atot = a(1) + a(2) + a(3) + + dfa(1) = dfac(2*a(1))/(2d0**a(1)*dfac(a(1))) + dfa(2) = dfac(2*a(2))/(2d0**a(2)*dfac(a(2))) + dfa(3) = dfac(2*a(3))/(2d0**a(3)*dfac(a(3))) + + + NormCoeff = (2d0*alpha/pi)**(3d0/2d0)*(4d0*alpha)**atot + NormCoeff = NormCoeff/(dfa(1)*dfa(2)*dfa(3)) + NormCoeff = sqrt(NormCoeff) + +end function NormCoeff diff --git a/src/xcDFT/RKS.f90 b/src/xcDFT/RKS.f90 new file mode 100644 index 0000000..571f21e --- /dev/null +++ b/src/xcDFT/RKS.f90 @@ -0,0 +1,221 @@ +subroutine RKS(rung,nGrid,weight,nBas,AO,dAO,nO,S,T,V,Hc,ERI,X,ENuc,EKS) + +! Perform a restricted Kohn-Sham calculation + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: rung + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + integer,intent(in) :: nBas + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: dAO(3,nBas,nGrid) + + integer,intent(in) :: nO + double precision,intent(in) :: S(nBas,nBas) + double precision,intent(in) :: T(nBas,nBas) + double precision,intent(in) :: V(nBas,nBas) + double precision,intent(in) :: Hc(nBas,nBas) + double precision,intent(in) :: X(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + double precision,intent(in) :: ENuc + +! Local variables + + integer,parameter :: maxSCF = 64 + double precision,parameter :: thresh = 1d-5 + integer,parameter :: n_diis = 1 + integer :: nSCF + double precision :: Conv + double precision :: ET,EV,EJ + double precision :: Ex + double precision :: Ec + double precision,allocatable :: e(:) + double precision,allocatable :: c(:,:),cp(:,:) + double precision,allocatable :: P(:,:),Pa(:,:) + double precision,allocatable :: J(:,:) + double precision,allocatable :: F(:,:),Fp(:,:) + double precision,allocatable :: Fx(:,:),FxHF(:,:) + double precision,allocatable :: Fc(:,:) + double precision,allocatable :: error(:,:) + double precision,allocatable :: error_diis(:,:),F_diis(:,:) + double precision,external :: trace_matrix + double precision,external :: exchange_energy + double precision,external :: electron_number + + double precision,allocatable :: rhoa(:) + double precision,allocatable :: drhoa(:,:) + double precision :: nEl + +! Output variables + + double precision,intent(out) :: EKS + +! Hello world + + write(*,*) + write(*,*)'************************************************' + write(*,*)'| Restricted Kohn-Sham calculation |' + write(*,*)'************************************************' + write(*,*) + +!------------------------------------------------------------------------ +! Rung of Jacob's ladder +!------------------------------------------------------------------------ + + call select_rung(rung) + +! Memory allocation + + allocate(e(nBas),c(nBas,nBas),cp(nBas,nBas),P(nBas,nBas),Pa(nBas,nBas), & + J(nBas,nBas),F(nBas,nBas),Fp(nBas,nBas),Fx(nBas,nBas),FxHF(nBas,nBas), & + Fc(nBas,nBas),error(nBas,nBas),rhoa(nGrid),drhoa(3,nGrid), & + error_diis(nBas*nBas,n_diis),F_diis(nBas*nBas,n_diis)) + +! Guess coefficients and eigenvalues + + F(:,:) = Hc(:,:) + +! Initialization + + nSCF = 0 + Conv = 1d0 + nEl = 0d0 + + Ex = 0d0 + Ec = 0d0 + + Fx(:,:) = 0d0 + FxHF(:,:) = 0d0 + Fc(:,:) = 0d0 + + F_diis(:,:) = 0d0 + error_diis(:,:) = 0d0 + +!------------------------------------------------------------------------ +! Main SCF loop +!------------------------------------------------------------------------ + + write(*,*) + write(*,*)'------------------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A16,1X,A1,1X,A16,1X,A1,1X,A16,1X,A1,1X,A10,1X,A1,1X,A10,1X,A1,1X)') & + '|','#','|','EKS','|','ExKS','|','EcKS','|','Conv','|','nEl','|' + write(*,*)'------------------------------------------------------------------------------------------' + + do while(Conv > thresh .and. nSCF < maxSCF) + +! Increment + + nSCF = nSCF + 1 + +! Transform Fock matrix in orthogonal basis + + Fp = matmul(transpose(X),matmul(F,X)) + +! Diagonalize Fock matrix to get eigenvectors and eigenvalues + + cp(:,:) = Fp(:,:) + call diagonalize_matrix(nBas,cp,e) + +! Back-transform eigenvectors in non-orthogonal basis + + c = matmul(X,cp) + +! Compute density matrix + + Pa(:,:) = matmul(c(:,1:nO),transpose(c(:,1:nO))) + P(:,:) = 2d0*Pa(:,:) + +! Compute one-electron density and its gradient if necessary + + call density(nGrid,nBas,Pa,AO,rhoa) + if(rung > 1) call gradient_density(nGrid,nBas,Pa,AO,dAO,drhoa) + +! Build Coulomb repulsion + + call hartree_coulomb(nBas,P,ERI,J) + +! Compute exchange potential + + call exchange_potential(rung,nGrid,weight,nBas,Pa,ERI,AO,dAO,rhoa,drhoa,Fx,FxHF) + +! Compute correlation potential + +! call correlation_potential(rung,nGrid,weight,nBas,Pa,ERI,AO,dAO,rhoa,drhoa,Fc) + +! Build Fock operator + + F(:,:) = Hc(:,:) + J(:,:) + Fx(:,:) + Fc(:,:) + +! Check convergence + + error = matmul(F,matmul(P,S)) - matmul(matmul(S,P),F) + Conv = maxval(abs(error)) + +! DIIS extrapolation + + call DIIS_extrapolation(nBas*nBas,min(n_diis,nSCF),error_diis,F_diis,error,F) + +!------------------------------------------------------------------------ +! Compute KS energy +!------------------------------------------------------------------------ + +! Kinetic energy + + ET = trace_matrix(nBas,matmul(P,T)) + +! Potential energy + + EV = trace_matrix(nBas,matmul(P,V)) + +! Coulomb energy + + EJ = 0.5d0*trace_matrix(nBas,matmul(P,J)) + +! Exchange energy + + Ex = exchange_energy(rung,nGrid,weight,nBas,Pa,FxHF,rhoa,drhoa) + +! Correlation energy + +! call correlation_energy(rung,nGrid,weight,nBas,Pa,rhoa,drhoa,Ec) + + EKS = ET + EV + EJ + Ex + Ec + +! Check the grid accuracy by computing the number of electrons + + nEl = electron_number(nGrid,weight,rhoa) + +! Dump results + + write(*,'(1X,A1,1X,I3,1X,A1,1X,F16.10,1X,A1,1X,F16.10,1X,A1,1X,F16.10,1X,A1,1X,F10.6,1X,A1,1X,F10.6,1X,A1,1X)') & + '|',nSCF,'|',EKS+ENuc,'|',Ex,'|',Ec,'|',Conv,'|',nEl,'|' + + enddo + write(*,*)'------------------------------------------------------------------------------------------' +!------------------------------------------------------------------------ +! End of SCF loop +!------------------------------------------------------------------------ + +! Did it actually converge? + + if(nSCF == maxSCF) then + + write(*,*) + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*)' Convergence failed ' + write(*,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + write(*,*) + + stop + + endif + +! Compute final KS energy + + call print_RKS(nBas,nO,e,C,ENuc,ET,EV,EJ,Ex,Ec,EKS) + +end subroutine RKS diff --git a/src/xcDFT/density.f90 b/src/xcDFT/density.f90 new file mode 100644 index 0000000..e6bfd22 --- /dev/null +++ b/src/xcDFT/density.f90 @@ -0,0 +1,38 @@ +subroutine density(nGrid,nBas,P,AO,rho) + +! Calculate one-electron density + + implicit none + include 'parameters.h' + +! Input variables + + double precision,parameter :: thresh = 1d-15 + + integer,intent(in) :: nGrid + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: AO(nBas,nGrid) + +! Local variables + + integer :: iG,mu,nu + +! Output variables + + double precision,intent(out) :: rho(nGrid) + + rho(:) = 0d0 + do iG=1,nGrid + do mu=1,nBas + do nu=1,nBas + rho(iG) = rho(iG) + AO(mu,iG)*P(mu,nu)*AO(nu,iG) + enddo + enddo + enddo + +! do iG=1,nGrid +! rho(iG) = max(rho(iG),thresh) +! enddo + +end subroutine density diff --git a/src/xcDFT/dft_grid.f b/src/xcDFT/dft_grid.f new file mode 100644 index 0000000..66eb029 --- /dev/null +++ b/src/xcDFT/dft_grid.f @@ -0,0 +1,3017 @@ +c----------------------------------------------------------------------- + + SUBROUTINE EulMac(Pts,Wts,N,R) +c ****************************************************************** +c * * +c * EulMac constructs an Euler-Maclaurin quadrature formula for * +c * * +c * inf * +c * Integral [r**2 g(r)] dr * +c * 0 * +c * * +c * OUTPUT: * +c * Pts - Quadrature points * +c * Wts - Quadrature weights * +c * * +c * INPUT: * +c * N - Number of points desired * +c * R - Length scaling factor * +c * * +c ****************************************************************** + IMPLICIT REAL*8 (a-h,o-z) + REAL*8 Pts(N),Wts(N) + T = R**3 * FLOAT(N+1) + DO i = 1,N + U = FLOAT(i) + V = FLOAT(N-i+1) + Pts(i) = R * (U/V)**2 + Wts(i) = 2 * T * U**5 / V**7 + END DO + RETURN + END + +c----------------------------------------------------------------------- + + SUBROUTINE Lebdev(Pts,Wts,N) +c ****************************************************************** +c * * +c * Lebdev returns a Lebedev formula for quadrature on the * +c * surface of the unit sphere having the desired number * +c * of points. * +c * * +c * OUTPUT: * +c * Pts - Cartesian coordinates of quadrature points * +c * Wts - Quadrature weights * +c * * +c * INPUT: * +c * N - Number of quadrature points desired * +c * * +c * N Description * +c * --- ----------- * +c * 1 Debugging formula * +c * 4 2nd-degree, Tetrahedral formula * +c * 6 3rd-degree, Octahedral formula * +c * 18 5th-degree, Abramowitz & Stegun, p. 894 * +c * 26 7th-degree, Abramowitz & Stegun, p. 894 * +c * 38 9th-degree, Ref. 1 * +c * 50 11th-degree, Ref. 1 * +c * 86 15th-degree, Ref. 1 * +c * 110 17th-degree, Ref. 1 * +c * 146 19th-degree, Ref. 2 * +c * 194 23rd-degree, Ref. 2 * +c * 302 29th-degree, Ref. 3 * +c * * +c * Refs: 1) Zh. Vychisl. Mat. Mat. Fiz. 15, 48 (1975). * +c * 2) Zh. Vychisl. Mat. Mat. Fiz. 16, 293 (1976). * +c * 3) Sibirsk. Mat. Zh. 18, 132 (1977). * +c * * +c ****************************************************************** + IMPLICIT REAL*8 (a-h,o-z) + PARAMETER (NLeb=31,MaxB=30,MaxC=10,MaxD=90) + REAL*8 Pts(3,*),Wts(*),A(3,NLeb),B(MaxB,NLeb),C(MaxC,NLeb), + $ D(MaxD,NLeb),T(MaxB,NLeb),V(MaxC,NLeb),S(2,MaxD,NLeb), + $ mk,lk,r(3),Guess(3) + INTEGER SetTyp(6,NLeb),Pmt(3,6) + SAVE SetTyp,Pmt,Guess + SAVE A,B,C,D,T,V,S + DATA SetTyp / 1,0,0,0,0,0, + $ 1,1,0,0,0,0, + $ 1,1,1,0,0,0, + $ 1,0,1,0,1,0, + $ 1,1,1,1,0,0, + $ 1,1,1,1,1,0, + $ 1,0,1,2,1,0, + $ 1,0,1,3,1,0, + $ 1,1,1,3,0,1, + $ 1,1,1,3,1,1, + $ 1,1,1,4,1,1, + $ 1,0,1,5,2,1, + $ 1,1,1,5,1,2, + $ 1,0,1,6,2,2, + $ 1,0,1,6,2,3, + $ 1,1,1,7,2,4, + $ 1,0,1,9,3,6, + $ 1,1,1,10,3,9, + $ 1,0,1,12,4,12, + $ 1,1,1,13,4,16, + $ 1,0,1,15,5,20, + $ 1,1,1,16,5,25, + $ 1,0,1,18,6,30, + $ 1,1,1,19,6,36, + $ 1,0,1,21,7,42, + $ 1,1,1,22,7,49, + $ 1,0,1,24,8,56, + $ 1,1,1,25,8,64, + $ 1,0,1,27,9,72, + $ 1,1,1,28,9,81, + $ 1,0,1,30,10,90 / + DATA Pmt / 1,2,3, 2,3,1, 3,1,2, 2,1,3, 1,3,2, 3,2,1 / + DATA Guess / 0.15D0,0.5D0,0.85D0 / + + DATA A(1,1) + $ / 0.1666666666666666666666666666666667D+00 / + DATA (A(j,2),j=1,2) + $ / 0.3333333333333333333333333333333333D-01, + $ 0.6666666666666666666666666666666667D-01 / + DATA (A(j,3),j=1,3) + $ / 0.4761904761904761904761904761904762D-01, + $ 0.3809523809523809523809523809523810D-01, + $ 0.3214285714285714285714285714285714D-01 / + DATA (A(j,4),j=1,3) + $ / 0.9523809523809523809523809523809525D-02, 0D0, + $ 0.3214285714285714285714285714285714D-01 / + DATA (A(j,5),j=1,3) + $ / 0.1269841269841269841269841269841270D-01, + $ 0.2257495590828924162257495590828924D-01, + $ 0.2109375D-01 / + DATA (A(j,6),j=1,3) + $ / 5.130671797338D-04, + $ 1.660406956574D-02, + $ -2.958603896104D-02 / + DATA (A(j,7),j=1,3) + $ / 0.1154401154401154401154401154401154D-01, 0D0, + $ 0.1194390908585628232369892597364696D-01 / + DATA (A(j,8),j=1,3) + $ / 0.3828270494937161603828270494937183D-02, 0D0, + $ 0.9793737512487512487512487512487502D-02 / + DATA (A(j,9),j=1,3) + $ / 0.5996313688621380929073236765544457D-03, + $ 0.7372999718620756423057432684105612D-02, + $ 0.7210515360144487777633059968342821D-02 / + DATA (A(j,10),j=1,3) + $ / 5.544842902037D-03, + $ 6.071332770671D-03, + $ 6.383674773515D-03 / + DATA (A(j,11),j=1,3) + $ / 0.1782340447244611157367271048698676D-02, + $ 0.5716905949977101892992128388320993D-02, + $ 0.5573383178848737968367849584466468D-02 / + DATA (A(j,12),j=1,3) + $ / -5.522639919727D-02, + $ 0.000000000000D+00, + $ 4.450274607445D-03 / + DATA (A(j,13),j=1,3) + $ / -1.313769127327D-03, + $ -2.522728704859D-03, + $ 4.186853881701D-03 / + DATA (A(j,14),j=1,3) + $ / 0.8545911725128148134231210325881270D-03, 0D0, + $ 0.3599119285025571458863978589612291D-02 / + DATA (A(j,15),j=1,3) + $ / 3.006796749454D-03, + $ 0.000000000000D+00, + $ 3.050627745651D-03 / + DATA (A(j,16),j=1,3) + $ / 5.265897968224D-04, + $ 2.548219972003D-03, + $ 2.512317418927D-03 / + DATA (A(j,17),j=1,3) + $ / 3.095121295306D-04, + $ 0.000000000000D+00, + $ 1.852379698597D-03 / + DATA (A(j,18),j=1,3) + $ / 2.192942088181D-04, + $ 1.436433617319D-03, + $ 1.421940344336D-03 / + DATA (A(j,19),j=1,3) + $ / 1.438294190527D-04, + $ 0.000000000000D+00, + $ 1.125772288287D-03 / + DATA (A(j,20),j=1,3) + $ / 1.105189233268D-04, + $ 9.205232738091D-04, + $ 9.133159786444D-04 / + DATA (A(j,21),j=1,3) + $ / 7.777160743261D-05, + $ 0.000000000000D+00, + $ 7.557646413005D-04 / + DATA (A(j,22),j=1,3) + $ / 6.309049437421D-05, + $ 6.398287705572D-04, + $ 6.357185073531D-04 / + DATA (A(j,23),j=1,3) + $ / 4.656031899197D-05, + $ 0.000000000000D+00, + $ 5.421549195296D-04 / + DATA (A(j,24),j=1,3) + $ / 3.922616270665D-05, + $ 4.703831750854D-04, + $ 4.678202801282D-04 / + DATA (A(j,25),j=1,3) + $ / 2.998675149888D-05, + $ 0.000000000000D+00, + $ 4.077860529495D-04 / + DATA (A(j,26),j=1,3) + $ / 2.599095953755D-05, + $ 3.603134089688D-04, + $ 3.586067974412D-04 / + DATA (A(j,27),j=1,3) + $ / 2.040382730826D-05, + $ 0.000000000000D+00, + $ 3.178149703890D-04 / + DATA (A(j,28),j=1,3) + $ / 1.807395252197D-05, + $ 2.848008782239D-04, + $ 2.836065837531D-04 / + DATA (A(j,29),j=1,3) + $ / 1.449063022538D-05, + $ 0.000000000000D+00, + $ 2.546377329828D-04 / + DATA (A(j,30),j=1,3) + $ / 9.687521879421D-05, + $ 2.307897895368D-04, + $ 2.297310852499D-04 / + DATA (A(j,31),j=1,3) + $ / 9.080510764308D-05, + $ 0.000000000000D+00, + $ 2.084824361988D-04 / + DATA B(1,5) + $ / 0.2017333553791887125220458553791887D-01 / + DATA B(1,6) + $ / 2.657620708216D-02 / + DATA (B(j,7),j=1,2) + $ / 0.1111055571060340251094684821601397D-01, + $ 0.1187650129453714201378828059940252D-01 / + DATA (B(j,8),j=1,3) + $ / 0.8211737283191110975989934052273075D-02, + $ 0.9595471336070962849453181172902595D-02, + $ 0.9942814891178103281400658285264506D-02 / + DATA (B(j,9),j=1,3) + $ / 0.7574394159054033722687485747138069D-02, + $ 0.6753829486314477440735417324864531D-02, + $ 0.7116355493117555387600892849539733D-02 / + DATA (B(j,10),j=1,3) + $ / 5.183387587748D-03, + $ 6.317929009814D-03, + $ 6.201670006589D-03 / + DATA (B(j,11),j=1,4) + $ / 0.5518771467273613691727684601193794D-02, + $ 0.5158237711805383103249161547187927D-02, + $ 0.5608704082587996843749366738551845D-02, + $ 0.4106777028169394090728611285645817D-02 / + DATA (B(j,12),j=1,5) + $ / 4.496841067921D-03, + $ 5.049153450479D-03, + $ 3.976408018052D-03, + $ 4.401400650381D-03, + $ 1.724544350544D-02 / + DATA (B(j,13),j=1,5) + $ / 5.315167977811D-03, + $ 4.047142377086D-03, + $ 4.112482394407D-03, + $ 3.595584899759D-03, + $ 4.256131351428D-03 / + DATA (B(j,14),j=1,6) + $ / 0.3650045807677255428654332201126546D-02, + $ 0.3604822601419881711314809131043636D-02, + $ 0.3576729661743367075562081375609260D-02, + $ 0.3449788424305883310013027710484181D-02, + $ 0.3108953122413675254845876980830533D-02, + $ 0.2352101413689164378792171183376706D-02 / + DATA (B(j,15),j=1,6) + $ / 1.621104600289D-03, + $ 3.005701484902D-03, + $ 2.990992529654D-03, + $ 2.982170644108D-03, + $ 2.721564237311D-03, + $ 3.033513795811D-03 / + DATA (B(j,16),j=1,7) + $ / 2.530403801186D-03, + $ 2.014279020919D-03, + $ 2.501725168403D-03, + $ 2.513267174598D-03, + $ 2.302694782227D-03, + $ 1.462495621595D-03, + $ 2.445373437313D-03 / + DATA (B(j,17),j=1,9) + $ / 1.871790639278D-03, + $ 1.858812585438D-03, + $ 1.852028828296D-03, + $ 1.846715956151D-03, + $ 1.818471778163D-03, + $ 1.749564657281D-03, + $ 1.617210647254D-03, + $ 1.384737234852D-03, + $ 9.764331165051D-04 / + DATA (B(j,18),j=1,10) + $ / 6.798123511051D-04, + $ 9.913184235295D-04, + $ 1.180207833239D-03, + $ 1.296599602081D-03, + $ 1.365871427428D-03, + $ 1.402988604775D-03, + $ 1.418645563596D-03, + $ 1.421376741852D-03, + $ 1.423996475491D-03, + $ 1.431554042179D-03 / + DATA (B(j,19),j=1,12) + $ / 4.948029341949D-04, + $ 7.357990109125D-04, + $ 8.889132771304D-04, + $ 9.888347838921D-04, + $ 1.053299681709D-03, + $ 1.092778807015D-03, + $ 1.114389394063D-03, + $ 1.123724788052D-03, + $ 1.125239325244D-03, + $ 1.126153271816D-03, + $ 1.130286931124D-03, + $ 1.134986534364D-03 / + DATA (B(j,20),j=1,13) + $ / 3.690421898018D-04, + $ 5.603990928681D-04, + $ 6.865297629283D-04, + $ 7.720338551146D-04, + $ 8.301545958895D-04, + $ 8.686692550180D-04, + $ 8.927076285847D-04, + $ 9.060820238568D-04, + $ 9.119777254941D-04, + $ 9.128720138604D-04, + $ 9.130714935692D-04, + $ 9.152873784554D-04, + $ 9.187436274322D-04 / + DATA (B(j,21),j=1,15) + $ / 2.841633806091D-04, + $ 4.374419127054D-04, + $ 5.417174740872D-04, + $ 6.148000891359D-04, + $ 6.664394485801D-04, + $ 7.025039356923D-04, + $ 7.268511789250D-04, + $ 7.422637534209D-04, + $ 7.509545035841D-04, + $ 7.548535057718D-04, + $ 7.554088969774D-04, + $ 7.553147174443D-04, + $ 7.564767653292D-04, + $ 7.587991808519D-04, + $ 7.608261832033D-04 / + DATA (B(j,22),j=1,16) + $ / 2.221207162188D-04, + $ 3.475784022287D-04, + $ 4.350742443590D-04, + $ 4.978569136522D-04, + $ 5.435036221998D-04, + $ 5.765913388220D-04, + $ 6.001200359226D-04, + $ 6.162178172718D-04, + $ 6.265218152438D-04, + $ 6.323987160974D-04, + $ 6.350767851541D-04, + $ 6.354362775297D-04, + $ 6.352302462706D-04, + $ 6.358117881418D-04, + $ 6.373101590310D-04, + $ 6.390428961369D-04 / + DATA (B(j,23),j=1,18) + $ / 1.778522133347D-04, + $ 2.811325405683D-04, + $ 3.548896312631D-04, + $ 4.090310897173D-04, + $ 4.493286134170D-04, + $ 4.793728447963D-04, + $ 5.015415319164D-04, + $ 5.175127372678D-04, + $ 5.285522262081D-04, + $ 5.356832703714D-04, + $ 5.397914736175D-04, + $ 5.416899441600D-04, + $ 5.419308476890D-04, + $ 5.416936902031D-04, + $ 5.419544338703D-04, + $ 5.428983656631D-04, + $ 5.442286500098D-04, + $ 5.452250345057D-04 / + DATA (B(j,24),j=1,19) + $ / 1.437832228980D-04, + $ 2.303572493578D-04, + $ 2.933110752447D-04, + $ 3.402905998360D-04, + $ 3.759138466870D-04, + $ 4.030638447900D-04, + $ 4.236591432242D-04, + $ 4.390522656947D-04, + $ 4.502523466626D-04, + $ 4.580577727784D-04, + $ 4.631391616616D-04, + $ 4.660928953699D-04, + $ 4.674751807937D-04, + $ 4.676414903933D-04, + $ 4.674086492348D-04, + $ 4.674928539483D-04, + $ 4.680748979686D-04, + $ 4.690449806389D-04, + $ 4.699877075861D-04 / + DATA (B(j,25),j=1,21) + $ / 1.185349192521D-04, + $ 1.913408643426D-04, + $ 2.452886577210D-04, + $ 2.862408183289D-04, + $ 3.178032258257D-04, + $ 3.422945667634D-04, + $ 3.612790520236D-04, + $ 3.758638229819D-04, + $ 3.868711798860D-04, + $ 3.949429933190D-04, + $ 4.006068107541D-04, + $ 4.043192149673D-04, + $ 4.064947495808D-04, + $ 4.075245619813D-04, + $ 4.076423540894D-04, + $ 4.074280862252D-04, + $ 4.074163756012D-04, + $ 4.077647795071D-04, + $ 4.084517552783D-04, + $ 4.092468459224D-04, + $ 4.097872687241D-04 / + DATA (B(j,26),j=1,22) + $ / 9.831528474386D-05, + $ 1.605023107954D-04, + $ 2.072200131464D-04, + $ 2.431297618814D-04, + $ 2.711819064497D-04, + $ 2.932762038321D-04, + $ 3.107032514197D-04, + $ 3.243808058921D-04, + $ 3.349899091374D-04, + $ 3.430580688505D-04, + $ 3.490124109290D-04, + $ 3.532148948562D-04, + $ 3.559862669063D-04, + $ 3.576224317551D-04, + $ 3.584050533086D-04, + $ 3.584903581373D-04, + $ 3.582991879041D-04, + $ 3.582371187963D-04, + $ 3.584353631122D-04, + $ 3.589120166518D-04, + $ 3.595445704532D-04, + $ 3.600943557111D-04 / + DATA (B(j,27),j=1,24) + $ / 8.288115128076D-05, + $ 1.360883192523D-04, + $ 1.766854454543D-04, + $ 2.083153161230D-04, + $ 2.333279544657D-04, + $ 2.532809539930D-04, + $ 2.692472184211D-04, + $ 2.819949946812D-04, + $ 2.920953593973D-04, + $ 2.999889782948D-04, + $ 3.060292120497D-04, + $ 3.105109167522D-04, + $ 3.136902387550D-04, + $ 3.157984652455D-04, + $ 3.170516518425D-04, + $ 3.176568425634D-04, + $ 3.177198411207D-04, + $ 3.175519492395D-04, + $ 3.174654952635D-04, + $ 3.175676415468D-04, + $ 3.178923417835D-04, + $ 3.183788287532D-04, + $ 3.188755151919D-04, + $ 3.191916889314D-04 / + DATA (B(j,28),j=1,25) + $ / 7.013149266674D-05, + $ 1.162798021957D-04, + $ 1.518728583972D-04, + $ 1.798796108217D-04, + $ 2.022593385973D-04, + $ 2.203093105575D-04, + $ 2.349294234300D-04, + $ 2.467682058747D-04, + $ 2.563092683572D-04, + $ 2.639253896763D-04, + $ 2.699137479265D-04, + $ 2.745196420167D-04, + $ 2.779529197398D-04, + $ 2.803996086684D-04, + $ 2.820302356716D-04, + $ 2.830056747491D-04, + $ 2.834808950777D-04, + $ 2.835282339079D-04, + $ 2.833819267066D-04, + $ 2.832858336907D-04, + $ 2.833268235451D-04, + $ 2.835432677029D-04, + $ 2.839091722743D-04, + $ 2.843308178876D-04, + $ 2.846703550534D-04 / + DATA (B(j,29),j=1,27) + $ / 6.018432961087D-05, + $ 1.002286583264D-04, + $ 1.315222931028D-04, + $ 1.564213746877D-04, + $ 1.765118841508D-04, + $ 1.928737099311D-04, + $ 2.062658534263D-04, + $ 2.172395445954D-04, + $ 2.262076188876D-04, + $ 2.334885699462D-04, + $ 2.393355273179D-04, + $ 2.439559200469D-04, + $ 2.475251866060D-04, + $ 2.501965558159D-04, + $ 2.521081407926D-04, + $ 2.533881002388D-04, + $ 2.541582900848D-04, + $ 2.545365737526D-04, + $ 2.545726993067D-04, + $ 2.544456197466D-04, + $ 2.543481596881D-04, + $ 2.543506451429D-04, + $ 2.544905675494D-04, + $ 2.547611407344D-04, + $ 2.551060375449D-04, + $ 2.554291933816D-04, + $ 2.556255710686D-04 / + DATA (B(j,30),j=1,28) + $ / 7.386265944002D-05, + $ 8.257977698542D-05, + $ 9.706044762058D-05, + $ 1.302393847117D-04, + $ 1.541957004601D-04, + $ 1.704459770092D-04, + $ 1.827374890943D-04, + $ 1.926360817436D-04, + $ 2.008010239495D-04, + $ 2.075635983209D-04, + $ 2.131306638691D-04, + $ 2.176562329937D-04, + $ 2.212682262991D-04, + $ 2.240799515669D-04, + $ 2.261959816188D-04, + $ 2.277156368809D-04, + $ 2.287351772128D-04, + $ 2.293490814084D-04, + $ 2.296505312376D-04, + $ 2.296793832319D-04, + $ 2.295785443843D-04, + $ 2.295017931529D-04, + $ 2.295059638185D-04, + $ 2.296232343237D-04, + $ 2.298530178741D-04, + $ 2.301579790281D-04, + $ 2.304690404997D-04, + $ 2.307027995907D-04 / + DATA (B(j,31),j=1,30) + $ / 5.011105657240D-05, + $ 5.942520409684D-05, + $ 9.564394826110D-05, + $ 1.185530657126D-04, + $ 1.364510114230D-04, + $ 1.505828825605D-04, + $ 1.619298749867D-04, + $ 1.712450504268D-04, + $ 1.789891098165D-04, + $ 1.854474955630D-04, + $ 1.908148636674D-04, + $ 1.952377405282D-04, + $ 1.988349254282D-04, + $ 2.017079807160D-04, + $ 2.039473082709D-04, + $ 2.056360279289D-04, + $ 2.068525823067D-04, + $ 2.076724877534D-04, + $ 2.081694278238D-04, + $ 2.084157631219D-04, + $ 2.084381531129D-04, + $ 2.083476277129D-04, + $ 2.082686194460D-04, + $ 2.082475686112D-04, + $ 2.083139860290D-04, + $ 2.084745561831D-04, + $ 2.087091313376D-04, + $ 2.089718413298D-04, + $ 2.092003303480D-04, + $ 2.093336148263D-04 / + DATA C(1,4) + $ / 0.2857142857142857142857142857142857D-01 / + DATA C(1,6) + $ / 1.652217099372D-02 / + DATA C(1,7) + $ / 0.1181230374690447536447922630736498D-01 / + DATA C(1,8) + $ / 0.9694996361663028329694996361663027D-02 / + DATA C(1,10) + $ / 5.477143385137D-03 / + DATA C(1,11) + $ / 0.5051846064614808475989311960063897D-02 / + DATA (C(j,12),j=1,2) + $ / 4.231083095357D-03, + $ 5.198069864064D-03 / + DATA C(1,13) + $ / 4.229582700647D-03 / + DATA (C(j,14),j=1,2) + $ / 0.3600820932216460272799206341770999D-02, + $ 0.2982344963171803851951110469245206D-02 / + DATA (C(j,15),j=1,2) + $ / 3.007949555219D-03, + $ 2.881964603055D-03 / + DATA (C(j,16),j=1,2) + $ / 2.417442375639D-03, + $ 1.910951282180D-03 / + DATA (C(j,17),j=1,3) + $ / 1.857161196774D-03, + $ 1.705153996396D-03, + $ 1.300321685886D-03 / + DATA (C(j,18),j=1,3) + $ / 9.254401499865D-04, + $ 1.250239995054D-03, + $ 1.394365843329D-03 / + DATA (C(j,19),j=1,4) + $ / 6.823367927110D-04, + $ 9.454158160447D-04, + $ 1.074429975386D-03, + $ 1.129300086569D-03 / + DATA (C(j,20),j=1,4) + $ / 5.176977312966D-04, + $ 7.331143682101D-04, + $ 8.463232836380D-04, + $ 9.031122694254D-04 / + DATA (C(j,21),j=1,5) + $ / 4.021680447875D-04, + $ 5.804871793946D-04, + $ 6.792151955945D-04, + $ 7.336741211286D-04, + $ 7.581866300990D-04 / + DATA (C(j,22),j=1,5) + $ / 3.186913449947D-04, + $ 4.678028558592D-04, + $ 5.538829697599D-04, + $ 6.044475907190D-04, + $ 6.313575103509D-04 / + DATA (C(j,23),j=1,6) + $ / 2.568002497729D-04, + $ 3.827211700292D-04, + $ 4.579491561918D-04, + $ 5.042003969084D-04, + $ 5.312708889976D-04, + $ 5.438401790747D-04 / + DATA (C(j,24),j=1,6) + $ / 2.099942281069D-04, + $ 3.172269150713D-04, + $ 3.832051358547D-04, + $ 4.252193818147D-04, + $ 4.513807963755D-04, + $ 4.657797469114D-04 / + DATA (C(j,25),j=1,7) + $ / 1.738986811745D-04, + $ 2.659616045280D-04, + $ 3.240596008172D-04, + $ 3.621195964433D-04, + $ 3.868838330761D-04, + $ 4.018911532693D-04, + $ 4.089929432983D-04 / + DATA (C(j,26),j=1,7) + $ / 1.456447096742D-04, + $ 2.252370188284D-04, + $ 2.766135443475D-04, + $ 3.110729491501D-04, + $ 3.342506712303D-04, + $ 3.491981834027D-04, + $ 3.576003604349D-04 / + DATA (C(j,27),j=1,8) + $ / 1.231779611745D-04, + $ 1.924661373840D-04, + $ 2.380881867403D-04, + $ 2.693100663038D-04, + $ 2.908673382834D-04, + $ 3.053914619382D-04, + $ 3.143916684148D-04, + $ 3.187042244055D-04 / + DATA (C(j,28),j=1,8) + $ / 1.051193406972D-04, + $ 1.657871838797D-04, + $ 2.064648113714D-04, + $ 2.347942745820D-04, + $ 2.547775326598D-04, + $ 2.686876684847D-04, + $ 2.778665755516D-04, + $ 2.830996616783D-04 / + DATA (C(j,29),j=1,9) + $ / 9.041339695118D-05, + $ 1.438426330079D-04, + $ 1.802523089821D-04, + $ 2.060052290565D-04, + $ 2.245002248967D-04, + $ 2.377059847731D-04, + $ 2.468118955883D-04, + $ 2.525410872967D-04, + $ 2.553101409933D-04 / + DATA (C(j,30),j=1,9) + $ / 9.312274696671D-05, + $ 1.199919385877D-04, + $ 1.598039138878D-04, + $ 1.822253763575D-04, + $ 1.988579593655D-04, + $ 2.112620102533D-04, + $ 2.201594887699D-04, + $ 2.261622590895D-04, + $ 2.296458453436D-04 / + DATA (C(j,31),j=1,10) + $ / 7.591708117365D-05, + $ 1.083383968169D-04, + $ 1.403019395293D-04, + $ 1.615970179286D-04, + $ 1.771144187505D-04, + $ 1.887760022988D-04, + $ 1.973474670768D-04, + $ 2.033787661235D-04, + $ 2.072343626517D-04, + $ 2.091177834227D-04 / + DATA D(1,9) + $ / 0.6991087353303262394171485080575989D-02 / + DATA D(1,10) + $ / 5.968383987681D-03 / + DATA D(1,11) + $ / 0.5530248916233093701297682691433032D-02 / + DATA D(1,12) + $ / 4.695720972569D-03 / + DATA (D(j,13),j=1,2) + $ / 4.080914225781D-03, + $ 4.071467593831D-03 / + DATA (D(j,14),j=1,2) + $ / 0.3571540554273387081232979203123946D-02, + $ 0.3392312205006170181978826539456957D-02 / + DATA (D(j,15),j=1,3) + $ / 2.958357626536D-03, + $ 3.036020026407D-03, + $ 2.832187403926D-03 / + DATA (D(j,16),j=1,4) + $ / 2.416930044325D-03, + $ 2.512236854563D-03, + $ 2.496644054553D-03, + $ 2.236607760438D-03 / + DATA (D(j,17),j=1,6) + $ / 1.842866472905D-03, + $ 1.802658934377D-03, + $ 1.849830560444D-03, + $ 1.713904507107D-03, + $ 1.555213603397D-03, + $ 1.802239128009D-03 / + DATA (D(j,18),j=1,9) + $ / 1.127089094672D-03, + $ 1.345753760911D-03, + $ 1.424957283317D-03, + $ 1.261523341238D-03, + $ 1.392547106053D-03, + $ 1.418761677878D-03, + $ 1.338366684480D-03, + $ 1.393700862676D-03, + $ 1.415914757467D-03 / + DATA (D(j,19),j=1,12) + $ / 8.436884500902D-04, + $ 1.075255720449D-03, + $ 1.108577236864D-03, + $ 9.566475323783D-04, + $ 1.080663250717D-03, + $ 1.126797131196D-03, + $ 1.022568715358D-03, + $ 1.108960267713D-03, + $ 1.122790653436D-03, + $ 1.032401847117D-03, + $ 1.107249382284D-03, + $ 1.121780048520D-03 / + DATA (D(j,20),j=1,16) + $ / 6.485778453163D-04, + $ 7.435030910982D-04, + $ 7.998527891839D-04, + $ 8.101731497468D-04, + $ 8.483389574594D-04, + $ 8.556299257312D-04, + $ 8.803208679738D-04, + $ 8.811048182426D-04, + $ 8.850282341265D-04, + $ 9.021342299041D-04, + $ 9.010091677105D-04, + $ 9.022692938427D-04, + $ 9.158016174693D-04, + $ 9.131578003189D-04, + $ 9.107813579483D-04, + $ 9.105760258970D-04 / + DATA (D(j,21),j=1,20) + $ / 7.538257859801D-04, + $ 7.483517247053D-04, + $ 7.371763661112D-04, + $ 7.183448895757D-04, + $ 6.895815529822D-04, + $ 6.480105801793D-04, + $ 5.897558896595D-04, + $ 5.095708849247D-04, + $ 7.536906428910D-04, + $ 7.472505965575D-04, + $ 7.343017132280D-04, + $ 7.130871582177D-04, + $ 6.817022032113D-04, + $ 6.380941145604D-04, + $ 7.550381377920D-04, + $ 7.478646640145D-04, + $ 7.335918720601D-04, + $ 7.110120527658D-04, + $ 7.571363978690D-04, + $ 7.489908329079D-04 / + DATA (D(j,22),j=1,25) + $ / 4.078626431856D-04, + $ 4.759933057813D-04, + $ 5.268151186413D-04, + $ 5.643048560507D-04, + $ 5.914501076613D-04, + $ 6.104561257874D-04, + $ 6.230252860708D-04, + $ 6.305618761761D-04, + $ 6.343092767598D-04, + $ 5.176268945738D-04, + $ 5.564840313314D-04, + $ 5.856426671039D-04, + $ 6.066386925777D-04, + $ 6.208824962234D-04, + $ 6.296314297823D-04, + $ 6.340423756792D-04, + $ 5.829627677107D-04, + $ 6.048693376081D-04, + $ 6.202362317732D-04, + $ 6.299005328404D-04, + $ 6.347722390609D-04, + $ 6.203778981239D-04, + $ 6.308414671240D-04, + $ 6.362706466959D-04, + $ 6.375414170333D-04 / + DATA (D(j,23),j=1,30) + $ / 3.316041873197D-04, + $ 3.899113567154D-04, + $ 4.343343327201D-04, + $ 4.679415262319D-04, + $ 4.930847981631D-04, + $ 5.115031867540D-04, + $ 5.245217148457D-04, + $ 5.332041499895D-04, + $ 5.384583126022D-04, + $ 5.411067210799D-04, + $ 4.259797391469D-04, + $ 4.604931368460D-04, + $ 4.871814878255D-04, + $ 5.072242910075D-04, + $ 5.217069845235D-04, + $ 5.315785966280D-04, + $ 5.376833708759D-04, + $ 5.408032092070D-04, + $ 4.842744917905D-04, + $ 5.048926076188D-04, + $ 5.202607980478D-04, + $ 5.309932388326D-04, + $ 5.377419770895D-04, + $ 5.411696331678D-04, + $ 5.197996293282D-04, + $ 5.311120836623D-04, + $ 5.384309319957D-04, + $ 5.421859504052D-04, + $ 5.390948355046D-04, + $ 5.433312705028D-04 / + DATA (D(j,24),j=1,36) + $ / 2.733362800523D-04, + $ 3.235485368464D-04, + $ 3.624908726013D-04, + $ 3.925540070713D-04, + $ 4.156129781116D-04, + $ 4.330644984623D-04, + $ 4.459677725921D-04, + $ 4.551593004457D-04, + $ 4.613341462750D-04, + $ 4.651019618270D-04, + $ 4.670249536101D-04, + $ 3.549555576442D-04, + $ 3.856108245249D-04, + $ 4.098622845757D-04, + $ 4.286328604269D-04, + $ 4.427802198994D-04, + $ 4.530473511489D-04, + $ 4.600805475703D-04, + $ 4.644599059958D-04, + $ 4.667274455713D-04, + $ 4.069360518020D-04, + $ 4.260442819919D-04, + $ 4.408678508029D-04, + $ 4.518748115549D-04, + $ 4.595564875375D-04, + $ 4.643988774316D-04, + $ 4.668827491647D-04, + $ 4.400541823742D-04, + $ 4.514512890194D-04, + $ 4.596198627348D-04, + $ 4.648659016802D-04, + $ 4.675502017158D-04, + $ 4.598494476456D-04, + $ 4.654916955152D-04, + $ 4.684709779505D-04, + $ 4.691445539107D-04 / + DATA (D(j,25),j=1,42) + $ / 2.279907527706D-04, + $ 2.715205490579D-04, + $ 3.057917896704D-04, + $ 3.326913052453D-04, + $ 3.537334711890D-04, + $ 3.700567500783D-04, + $ 3.825245372589D-04, + $ 3.918125171518D-04, + $ 3.984720419938D-04, + $ 4.029746003338D-04, + $ 4.057428632157D-04, + $ 4.071719274115D-04, + $ 2.990236950664D-04, + $ 3.262951734213D-04, + $ 3.482634608242D-04, + $ 3.656596681701D-04, + $ 3.791740467794D-04, + $ 3.894034450157D-04, + $ 3.968600245508D-04, + $ 4.019931351420D-04, + $ 4.052108801279D-04, + $ 4.068978613941D-04, + $ 3.454275351320D-04, + $ 3.629963537008D-04, + $ 3.770187233890D-04, + $ 3.878608613694D-04, + $ 3.959065270221D-04, + $ 4.015286975464D-04, + $ 4.050866785615D-04, + $ 4.069320185052D-04, + $ 3.760120964063D-04, + $ 3.870969564418D-04, + $ 3.955287790534D-04, + $ 4.015361911303D-04, + $ 4.053836986720D-04, + $ 4.073578673299D-04, + $ 3.954628379231D-04, + $ 4.017645508848D-04, + $ 4.059030348651D-04, + $ 4.080565809485D-04, + $ 4.063018753665D-04, + $ 4.087191292800D-04 / + DATA (D(j,26),j=1,49) + $ / 1.921921305789D-04, + $ 2.301458216496D-04, + $ 2.604248549523D-04, + $ 2.845275425871D-04, + $ 3.036870897975D-04, + $ 3.188414832298D-04, + $ 3.307046414722D-04, + $ 3.398330969031D-04, + $ 3.466757899705D-04, + $ 3.516095923230D-04, + $ 3.549645184048D-04, + $ 3.570415969441D-04, + $ 3.581251798496D-04, + $ 2.543491329913D-04, + $ 2.786711051331D-04, + $ 2.985552361084D-04, + $ 3.145867929154D-04, + $ 3.273290662068D-04, + $ 3.372705511944D-04, + $ 3.448274437852D-04, + $ 3.503592783049D-04, + $ 3.541854792663D-04, + $ 3.565995517909D-04, + $ 3.578802078303D-04, + $ 2.958644592861D-04, + $ 3.119548129117D-04, + $ 3.250745225006D-04, + $ 3.355153415935D-04, + $ 3.435847568549D-04, + $ 3.495786831622D-04, + $ 3.537767805535D-04, + $ 3.564459815421D-04, + $ 3.578464061225D-04, + $ 3.239748762836D-04, + $ 3.345491784174D-04, + $ 3.429126177302D-04, + $ 3.492420343097D-04, + $ 3.537399050235D-04, + $ 3.566209152659D-04, + $ 3.581084321920D-04, + $ 3.426522117592D-04, + $ 3.491848770121D-04, + $ 3.539318235231D-04, + $ 3.570231438459D-04, + $ 3.586207335052D-04, + $ 3.541196205164D-04, + $ 3.574296911574D-04, + $ 3.591993279819D-04, + $ 3.595855034662D-04 / + DATA (D(j,27),j=1,56) + $ / 1.635219535870D-04, + $ 1.968109917696D-04, + $ 2.236754342250D-04, + $ 2.453186687017D-04, + $ 2.627551791581D-04, + $ 2.767654860152D-04, + $ 2.879467027766D-04, + $ 2.967639918919D-04, + $ 3.035900684660D-04, + $ 3.087338237298D-04, + $ 3.124608838860D-04, + $ 3.150084294227D-04, + $ 3.165958398598D-04, + $ 3.174320440957D-04, + $ 2.182188909813D-04, + $ 2.399727933921D-04, + $ 2.579796133515D-04, + $ 2.727114052624D-04, + $ 2.846327656281D-04, + $ 2.941491102051D-04, + $ 3.016049492136D-04, + $ 3.072949726176D-04, + $ 3.114768142886D-04, + $ 3.143823673666D-04, + $ 3.162269764662D-04, + $ 3.172164663760D-04, + $ 2.554575398967D-04, + $ 2.701704069136D-04, + $ 2.823693413469D-04, + $ 2.922898463214D-04, + $ 3.001829062162D-04, + $ 3.062890864543D-04, + $ 3.108328279265D-04, + $ 3.140243146201D-04, + $ 3.160638030977D-04, + $ 3.171462882206D-04, + $ 2.812388416032D-04, + $ 2.912137500288D-04, + $ 2.993241256502D-04, + $ 3.057101738984D-04, + $ 3.105319326251D-04, + $ 3.139565514428D-04, + $ 3.161543006806D-04, + $ 3.172985960613D-04, + $ 2.989400336901D-04, + $ 3.054555883948D-04, + $ 3.104764960808D-04, + $ 3.141015825978D-04, + $ 3.164520621160D-04, + $ 3.176652305912D-04, + $ 3.105097161024D-04, + $ 3.143014117891D-04, + $ 3.168172866287D-04, + $ 3.181401865571D-04, + $ 3.170663659156D-04, + $ 3.185447944626D-04 / + DATA (D(j,28),j=1,64) + $ / 1.403063340168D-04, + $ 1.696504125939D-04, + $ 1.935787242745D-04, + $ 2.130614510522D-04, + $ 2.289381265931D-04, + $ 2.418630292816D-04, + $ 2.523400495631D-04, + $ 2.607623973450D-04, + $ 2.674441032689D-04, + $ 2.726432360343D-04, + $ 2.765787685925D-04, + $ 2.794428690642D-04, + $ 2.814099002063D-04, + $ 2.826429531579D-04, + $ 2.832983542551D-04, + $ 1.886695565285D-04, + $ 2.081867882748D-04, + $ 2.245148680601D-04, + $ 2.380370491512D-04, + $ 2.491398041852D-04, + $ 2.581632405881D-04, + $ 2.653965506227D-04, + $ 2.710857216747D-04, + $ 2.754434093904D-04, + $ 2.786579932519D-04, + $ 2.809011080679D-04, + $ 2.823336184561D-04, + $ 2.831101175806D-04, + $ 2.221679970355D-04, + $ 2.356185734271D-04, + $ 2.469228344806D-04, + $ 2.562726348642D-04, + $ 2.638756726753D-04, + $ 2.699311157391D-04, + $ 2.746233268404D-04, + $ 2.781225674455D-04, + $ 2.805881254046D-04, + $ 2.821719877005D-04, + $ 2.830222502333D-04, + $ 2.457995956745D-04, + $ 2.551474407504D-04, + $ 2.629065335195D-04, + $ 2.691900449925D-04, + $ 2.741275485754D-04, + $ 2.778530970123D-04, + $ 2.805010567647D-04, + $ 2.822055834031D-04, + $ 2.831016901243D-04, + $ 2.624474901132D-04, + $ 2.688034163039D-04, + $ 2.738932751288D-04, + $ 2.777944791243D-04, + $ 2.806011661661D-04, + $ 2.824181456597D-04, + $ 2.833585216578D-04, + $ 2.738165236963D-04, + $ 2.778365208203D-04, + $ 2.807852940419D-04, + $ 2.827245949675D-04, + $ 2.837342344830D-04, + $ 2.809233907611D-04, + $ 2.829930809743D-04, + $ 2.841097874111D-04, + $ 2.843455206009D-04 / + DATA (D(j,29),j=1,72) + $ / 1.212879733669D-04, + $ 1.472872881271D-04, + $ 1.686846601011D-04, + $ 1.862698414660D-04, + $ 2.007430956992D-04, + $ 2.126568125395D-04, + $ 2.224394603372D-04, + $ 2.304264522673D-04, + $ 2.368854288424D-04, + $ 2.420352089462D-04, + $ 2.460597113081D-04, + $ 2.491181912258D-04, + $ 2.513528194206D-04, + $ 2.528943096693D-04, + $ 2.538660368488D-04, + $ 2.543868648299D-04, + $ 1.642595537825D-04, + $ 1.818246659849D-04, + $ 1.966565649492D-04, + $ 2.090677905658D-04, + $ 2.193820409511D-04, + $ 2.278870827662D-04, + $ 2.348283192282D-04, + $ 2.404139755581D-04, + $ 2.448227407761D-04, + $ 2.482110455593D-04, + $ 2.507192397774D-04, + $ 2.524765968535D-04, + $ 2.536052388539D-04, + $ 2.542230588033D-04, + $ 1.944817013048D-04, + $ 2.067862362747D-04, + $ 2.172440734649D-04, + $ 2.260125991723D-04, + $ 2.332655008690D-04, + $ 2.391699681532D-04, + $ 2.438801528274D-04, + $ 2.475370504261D-04, + $ 2.502707235641D-04, + $ 2.522031701054D-04, + $ 2.534511269979D-04, + $ 2.541284914955D-04, + $ 2.161509250688D-04, + $ 2.248778513438D-04, + $ 2.322388803405D-04, + $ 2.383265471001D-04, + $ 2.432476675020D-04, + $ 2.471122223751D-04, + $ 2.500291752487D-04, + $ 2.521055942765D-04, + $ 2.534472785576D-04, + $ 2.541599713080D-04, + $ 2.317380975863D-04, + $ 2.378550733720D-04, + $ 2.428884456739D-04, + $ 2.469002655757D-04, + $ 2.499657574266D-04, + $ 2.521676168486D-04, + $ 2.535935662645D-04, + $ 2.543356743363D-04, + $ 2.427353285202D-04, + $ 2.468258039744D-04, + $ 2.500060956440D-04, + $ 2.523238365421D-04, + $ 2.538399260253D-04, + $ 2.546255927268D-04, + $ 2.500583360048D-04, + $ 2.524777638260D-04, + $ 2.540951193861D-04, + $ 2.549524085027D-04, + $ 2.542569507009D-04, + $ 2.552114127580D-04 / + DATA (D(j,30),j=1,81) + $ / 1.006006990267D-04, + $ 1.227676689636D-04, + $ 1.467864280270D-04, + $ 1.644178912101D-04, + $ 1.777664890719D-04, + $ 1.884825664517D-04, + $ 1.973269246454D-04, + $ 2.046767775855D-04, + $ 2.107600125918D-04, + $ 2.157416362267D-04, + $ 2.197557816921D-04, + $ 2.229192611835D-04, + $ 2.253385110213D-04, + $ 2.271137107549D-04, + $ 2.283414092918D-04, + $ 2.291161673130D-04, + $ 2.295313908577D-04, + $ 1.438204721359D-04, + $ 1.607738025495D-04, + $ 1.741483853528D-04, + $ 1.851918467519D-04, + $ 1.944628638071D-04, + $ 2.022495446275D-04, + $ 2.087462382439D-04, + $ 2.141074754818D-04, + $ 2.184640913748D-04, + $ 2.219309165220D-04, + $ 2.246123118341D-04, + $ 2.266062766915D-04, + $ 2.280072952231D-04, + $ 2.289082025203D-04, + $ 2.294012695120D-04, + $ 1.722434488737D-04, + $ 1.830237421455D-04, + $ 1.923855349998D-04, + $ 2.004067861936D-04, + $ 2.071817297354D-04, + $ 2.128250834102D-04, + $ 2.174513719440D-04, + $ 2.211661839150D-04, + $ 2.240665257813D-04, + $ 2.262439516633D-04, + $ 2.277874557232D-04, + $ 2.287854314455D-04, + $ 2.293268499616D-04, + $ 1.912628201530D-04, + $ 1.992499672239D-04, + $ 2.061275533454D-04, + $ 2.119318215969D-04, + $ 2.167416581883D-04, + $ 2.206430730517D-04, + $ 2.237186938700D-04, + $ 2.260480075033D-04, + $ 2.277098884559D-04, + $ 2.287845715110D-04, + $ 2.293547268236D-04, + $ 2.056073839853D-04, + $ 2.114235865832D-04, + $ 2.163175629771D-04, + $ 2.203392158112D-04, + $ 2.235473176848D-04, + $ 2.260024141501D-04, + $ 2.277675929329D-04, + $ 2.289102112285D-04, + $ 2.295027954625D-04, + $ 2.161281589880D-04, + $ 2.201980477395D-04, + $ 2.234952066593D-04, + $ 2.260540098521D-04, + $ 2.279157981900D-04, + $ 2.291296918566D-04, + $ 2.297533752537D-04, + $ 2.234927356466D-04, + $ 2.261288012985D-04, + $ 2.280818160924D-04, + $ 2.293773295180D-04, + $ 2.300528767339D-04, + $ 2.281893855066D-04, + $ 2.295720444841D-04, + $ 2.303227649027D-04, + $ 2.304831913227D-04 / + DATA (D(j,31),j=1,90) + $ / 9.316684484676D-05, + $ 1.116193688683D-04, + $ 1.298623551559D-04, + $ 1.450236832456D-04, + $ 1.572719958150D-04, + $ 1.673234785867D-04, + $ 1.756860118725D-04, + $ 1.826776290439D-04, + $ 1.885116347993D-04, + $ 1.933457860171D-04, + $ 1.973060671902D-04, + $ 2.004987099616D-04, + $ 2.030170909281D-04, + $ 2.049461460119D-04, + $ 2.063653565200D-04, + $ 2.073507927381D-04, + $ 2.079764593256D-04, + $ 2.083150534969D-04, + $ 1.262715121591D-04, + $ 1.414386128546D-04, + $ 1.538740401314D-04, + $ 1.642434942331D-04, + $ 1.729790609237D-04, + $ 1.803505190261D-04, + $ 1.865475350080D-04, + $ 1.917182669679D-04, + $ 1.959851709034D-04, + $ 1.994529548118D-04, + $ 2.022138911147D-04, + $ 2.043518024209D-04, + $ 2.059450313018D-04, + $ 2.070685715318D-04, + $ 2.077955310694D-04, + $ 2.081980387825D-04, + $ 1.521318610378D-04, + $ 1.622772720186D-04, + $ 1.710498139421D-04, + $ 1.785911149449D-04, + $ 1.850125313688D-04, + $ 1.904229703933D-04, + $ 1.949259956122D-04, + $ 1.986161545364D-04, + $ 2.015790585641D-04, + $ 2.038934198707D-04, + $ 2.056334060538D-04, + $ 2.068705959462D-04, + $ 2.076753906106D-04, + $ 2.081179391735D-04, + $ 1.700345216229D-04, + $ 1.774906779990D-04, + $ 1.839659377003D-04, + $ 1.894987462975D-04, + $ 1.941548809453D-04, + $ 1.980078427252D-04, + $ 2.011296284744D-04, + $ 2.035888456967D-04, + $ 2.054516325352D-04, + $ 2.067831033093D-04, + $ 2.076485320285D-04, + $ 2.081141439525D-04, + $ 1.834383015469D-04, + $ 1.889540591778D-04, + $ 1.936677023597D-04, + $ 1.976176495067D-04, + $ 2.008536004561D-04, + $ 2.034280351712D-04, + $ 2.053944466028D-04, + $ 2.068077642882D-04, + $ 2.077250949662D-04, + $ 2.082062440705D-04, + $ 1.934374486547D-04, + $ 1.974107010484D-04, + $ 2.007129290389D-04, + $ 2.033736947471D-04, + $ 2.054287125902D-04, + $ 2.069184936819D-04, + $ 2.078883689809D-04, + $ 2.083886366116D-04, + $ 2.006593275471D-04, + $ 2.033728426135D-04, + $ 2.055008781378D-04, + $ 2.070651783519D-04, + $ 2.080953335094D-04, + $ 2.086284998989D-04, + $ 2.055549387645D-04, + $ 2.071871850268D-04, + $ 2.082856600432D-04, + $ 2.088705858819D-04, + $ 2.083995867536D-04, + $ 2.090509712890D-04 / + DATA T(1,5) + $ / 0.8181818181818181818181818181818182D+00 / + DATA T(1,6) + $ / 5.384615384615D-01 / + DATA (T(j,7),j=1,2) + $ / 0.7267874717859796704165651796807734D+00, + $ 0.3574502702964873455463383113455231D-01 / + DATA (T(j,8),j=1,3) + $ / 0.9314644031018293303224605304347612D+00, + $ 0.6868596818254220443790837922198527D+00, + $ 0.4663755190139312657722805586200992D-01 / + DATA (T(j,9),j=1,3) + $ / 0.9504078675707184426846816938057038D+00, + $ 0.6513939748997038757216963384831041D+00, + $ 0.8485503877651973792968123939638137D-01 / + DATA (T(j,10),j=1,3) + $ / 8.698222012652D-01, + $ 9.047678687586D-02, + $ 6.269402078753D-01 / + DATA (T(j,11),j=1,4) + $ / 0.6044957060804405750447234008859784D+00, + $ 0.8326728518658924875446408288494448D+00, + $ 0.9871975115337203051106504992126892D-01, + $ 0.9662345478896000071306665444955087D+00 / + DATA (T(j,12),j=1,5) + $ / 5.964306905285D-01, + $ 8.729497118674D-01, + $ 2.505958825460D-02, + $ 1.321218431685D-01, + $ 9.967380323911D-01 / + DATA (T(j,13),j=1,5) + $ / 8.944445076768D-03, + $ 9.794958119190D-01, + $ 5.680244067058D-01, + $ 7.851702770073D-01, + $ 1.234223195584D-01 / + DATA (T(j,14),j=1,6) + $ / 0.1670263452397559527894216050589478D-01, + $ 0.1376663615296993115240758106286862D+00, + $ 0.5527209402223704445129158599195226D+00, + $ 0.7528054592119942363108765505527784D+00, + $ 0.9014635004999312167764818860483434D+00, + $ 0.9814976282327591629905429780488349D+00 / + DATA (T(j,15),j=1,6) + $ / 5.945454002988D-04, + $ 5.402203703739D-01, + $ 9.256923187369D-01, + $ 3.940277055740D-02, + $ 7.396031168627D-01, + $ 1.553935521769D-01 / + DATA (T(j,16),j=1,7) + $ / 4.521867205820D-02, + $ 9.369991395852D-01, + $ 5.169847287690D-01, + $ 1.662296171180D-01, + $ 8.362605039899D-01, + $ 9.885448198023D-01, + $ 6.915326150206D-01 / + DATA (T(j,17),j=1,9) + $ / 8.499071157004D-03, + $ 7.309241451287D-02, + $ 1.878129101389D-01, + $ 4.910765962311D-01, + $ 6.445470516095D-01, + $ 7.798280397298D-01, + $ 8.862606172978D-01, + $ 9.574242528006D-01, + $ 9.925701118262D-01 / + DATA (T(j,18),j=1,10) + $ / 9.948240702572D-01, + $ 9.698305546361D-01, + $ 9.178342725293D-01, + $ 8.378069504767D-01, + $ 7.325681115488D-01, + $ 6.078094018620D-01, + $ 4.714805969587D-01, + $ 2.045860732578D-01, + $ 9.766956607994D-02, + $ 2.564988139436D-02 / + DATA (T(j,19),j=1,12) + $ / 9.963140927997D-01, + $ 9.778900314101D-01, + $ 9.387482592540D-01, + $ 8.772246746062D-01, + $ 7.943585455913D-01, + $ 6.932173043199D-01, + $ 5.784863558578D-01, + $ 4.561664690726D-01, + $ 2.179572378274D-01, + $ 1.187585706869D-01, + $ 4.492456248653D-02, + $ 5.130054883064D-03 / + DATA (T(j,20),j=1,13) + $ / 9.972432661185D-01, + $ 9.832918591320D-01, + $ 9.531160121935D-01, + $ 9.048709833904D-01, + $ 8.387022528272D-01, + $ 7.562335791706D-01, + $ 6.602760541723D-01, + $ 5.546219829385D-01, + $ 4.438787406634D-01, + $ 2.288483219154D-01, + $ 1.367748697861D-01, + $ 6.379865467742D-02, + $ 1.646761018263D-02 / + DATA (T(j,21),j=1,15) + $ / 9.979143363622D-01, + $ 9.870821836647D-01, + $ 9.633179740561D-01, + $ 9.248083829058D-01, + $ 8.712377374379D-01, + $ 8.034039688176D-01, + $ 7.230000705325D-01, + $ 6.324652733202D-01, + $ 5.348679212522D-01, + $ 4.338074285872D-01, + $ 2.378818655932D-01, + $ 1.522209580433D-01, + $ 8.135995958492D-02, + $ 3.030214670670D-02, + $ 3.428730539433D-03 / + DATA (T(j,22),j=1,16) + $ / 9.983630237732D-01, + $ 9.897967765640D-01, + $ 9.707567294011D-01, + $ 9.395403165681D-01, + $ 8.956079044098D-01, + $ 8.392773092892D-01, + $ 7.715552422867D-01, + $ 6.940259701211D-01, + $ 6.087661259570D-01, + $ 5.182736014735D-01, + $ 4.254066807507D-01, + $ 2.454906841822D-01, + $ 1.655487699575D-01, + $ 9.735443800302D-02, + $ 4.479239363750D-02, + $ 1.145055801973D-02 / + DATA (T(j,23),j=1,18) + $ / 9.987088311582D-01, + $ 9.918097335390D-01, + $ 9.763133912218D-01, + $ 9.506598648348D-01, + $ 9.142055993122D-01, + $ 8.669840470267D-01, + $ 8.095706458671D-01, + $ 7.429956925500D-01, + $ 6.686799248593D-01, + $ 5.883818288042D-01, + $ 5.041522063181D-01, + $ 4.182948169149D-01, + $ 2.519844086135D-01, + $ 1.771329459727D-01, + $ 1.117955803473D-01, + $ 5.903799592608D-02, + $ 2.178402115775D-02, + $ 2.451992741952D-03 / + DATA (T(j,24),j=1,19) + $ / 9.989511574237D-01, + $ 9.933204314931D-01, + $ 9.805438375683D-01, + $ 9.592074206194D-01, + $ 9.286352335000D-01, + $ 8.886937286268D-01, + $ 8.396828658238D-01, + $ 7.822665416652D-01, + $ 7.174223164050D-01, + $ 6.464012407924D-01, + $ 5.706935220112D-01, + $ 4.919983454862D-01, + $ 4.121975439374D-01, + $ 2.575898262997D-01, + $ 1.872756753374D-01, + $ 1.247993889749D-01, + $ 7.261765804749D-02, + $ 3.312137636649D-02, + $ 8.417236823685D-03 / + DATA (T(j,25),j=1,21) + $ / 9.991466902796D-01, + $ 9.944855716680D-01, + $ 9.838234632028D-01, + $ 9.658860301760D-01, + $ 9.399993362096D-01, + $ 9.059324566313D-01, + $ 8.638072400724D-01, + $ 8.140411316291D-01, + $ 7.573067651943D-01, + $ 6.945004533758D-01, + $ 6.267156986940D-01, + $ 5.552199298894D-01, + $ 4.814338171375D-01, + $ 4.069131375459D-01, + $ 2.624764638322D-01, + $ 1.962187240256D-01, + $ 1.365132316146D-01, + $ 8.535636714473D-02, + $ 4.471687997947D-02, + $ 1.640096644131D-02, + $ 1.840045732112D-03 / + DATA (T(j,26),j=1,22) + $ / 9.992885189311D-01, + $ 9.953915828809D-01, + $ 9.864042520502D-01, + $ 9.711803952656D-01, + $ 9.490701367673D-01, + $ 9.197889831582D-01, + $ 8.833431744669D-01, + $ 8.399822331704D-01, + $ 7.901657878871D-01, + $ 7.345382177116D-01, + $ 6.739077428303D-01, + $ 6.092282380884D-01, + $ 5.415829837787D-01, + $ 4.721701147608D-01, + $ 4.022898149774D-01, + $ 2.667735478837D-01, + $ 2.041557967831D-01, + $ 1.470855543505D-01, + $ 9.720572111608D-02, + $ 5.615089573608D-02, + $ 2.546158767116D-02, + $ 6.445772776470D-03 / + DATA (T(j,27),j=1,24) + $ / 9.994073420632D-01, + $ 9.961123635856D-01, + $ 9.884641646671D-01, + $ 9.754318546307D-01, + $ 9.563979477620D-01, + $ 9.310509351946D-01, + $ 8.993221205576D-01, + $ 8.613454952223D-01, + $ 8.174299827256D-01, + $ 7.680385836004D-01, + $ 7.137714962065D-01, + $ 6.553516400609D-01, + $ 5.936117744635D-01, + $ 5.294828626297D-01, + $ 4.639836046032D-01, + $ 3.982111946111D-01, + $ 2.705812594860D-01, + $ 2.112428880825D-01, + $ 1.566537859453D-01, + $ 1.081813807457D-01, + $ 6.719449812399D-02, + $ 3.500727310883D-02, + $ 1.278754655613D-02, + $ 1.431532615062D-03 / + DATA (T(j,28),j=1,25) + $ / 9.994957296951D-01, + $ 9.966883326993D-01, + $ 9.901273792384D-01, + $ 9.788850620034D-01, + $ 9.623820738475D-01, + $ 9.402970090556D-01, + $ 9.125132210219D-01, + $ 8.790847449096D-01, + $ 8.402127700885D-01, + $ 7.962281729465D-01, + $ 7.475776139174D-01, + $ 6.948117962164D-01, + $ 6.385751144432D-01, + $ 5.795963018215D-01, + $ 5.186799213004D-01, + $ 4.566986870675D-01, + $ 3.945866619032D-01, + $ 2.739783714988D-01, + $ 2.176064094230D-01, + $ 1.653403045802D-01, + $ 1.183298694951D-01, + $ 7.773098966363D-02, + $ 4.466798054937D-02, + $ 2.017192474359D-02, + $ 5.093170320417D-03 / + DATA (T(j,29),j=1,27) + $ / 9.995719869698D-01, + $ 9.971576600497D-01, + $ 9.914856530125D-01, + $ 9.817192019176D-01, + $ 9.673171465902D-01, + $ 9.479584191551D-01, + $ 9.234964401467D-01, + $ 8.939297875880D-01, + $ 8.593820093211D-01, + $ 8.200867705184D-01, + $ 7.763761965513D-01, + $ 7.286711767696D-01, + $ 6.774729173835D-01, + $ 6.233553492065D-01, + $ 5.669581965619D-01, + $ 5.089806415522D-01, + $ 4.501755926475D-01, + $ 3.913445897309D-01, + $ 2.770276760350D-01, + $ 2.233495933818D-01, + $ 1.732520657435D-01, + $ 1.277108517503D-01, + $ 8.770980631329D-02, + $ 5.421499904934D-02, + $ 2.813244088150D-02, + $ 1.024671752643D-02, + $ 1.145352939215D-03 / + DATA (T(j,30),j=1,28) + $ / 9.989088743731D-01, + $ 9.962102993790D-01, + $ 9.917073393298D-01, + $ 9.837857998144D-01, + $ 9.713578655261D-01, + $ 9.542943302118D-01, + $ 9.325833410688D-01, + $ 9.062484628251D-01, + $ 8.753788404822D-01, + $ 8.401387270275D-01, + $ 8.007691896507D-01, + $ 7.575863866917D-01, + $ 7.109771117958D-01, + $ 6.613927586878D-01, + $ 6.093429313239D-01, + $ 5.553894658468D-01, + $ 5.001411954546D-01, + $ 4.442495352346D-01, + $ 3.884048318656D-01, + $ 2.797945214663D-01, + $ 2.285783449909D-01, + $ 1.805015075513D-01, + $ 1.364013229385D-01, + $ 9.712474739578D-02, + $ 6.350928432754D-02, + $ 3.635223834954D-02, + $ 1.636637023025D-02, + $ 4.124219647904D-03 / + DATA (T(j,31),j=1,30) + $ / 9.989389971209D-01, + $ 9.971766766769D-01, + $ 9.932210680541D-01, + $ 9.858774895456D-01, + $ 9.747806632069D-01, + $ 9.596648815557D-01, + $ 9.403911068227D-01, + $ 9.169172562840D-01, + $ 8.892819476318D-01, + $ 8.575967401872D-01, + $ 8.220412264133D-01, + $ 7.828591148688D-01, + $ 7.403541401852D-01, + $ 6.948854820542D-01, + $ 6.468629521677D-01, + $ 5.967423110144D-01, + $ 5.450209571873D-01, + $ 4.922340999168D-01, + $ 4.389514398161D-01, + $ 3.857743293940D-01, + $ 2.822860252999D-01, + $ 2.333147039100D-01, + $ 1.871234394479D-01, + $ 1.444334326043D-01, + $ 1.059750740154D-01, + $ 7.247445615933D-02, + $ 4.463176524570D-02, + $ 2.308962476585D-02, + $ 8.391804478010D-03, + $ 9.369553857840D-04 / + DATA V(1,4) + $ / 0.1666666666666666666666666666666667D+00 / + DATA V(1,6) + $ / 9.230769230769D-02 / + DATA V(1,7) + $ / 0.1204416503145642398318048555452501D+00 / + DATA V(1,8) + $ / 0.1764705882352941176470588235294118D+00 / + DATA V(1,10) + $ / 6.365787851418D-02 / + DATA V(1,11) + $ / 0.1052631578947368421052631578947368D+00 / + DATA (V(j,12),j=1,2) + $ / 2.241341590046D-01, + $ 1.099238120099D-01 / + DATA V(1,13) + $ / 2.000000000000D-01 / + DATA (V(j,14),j=1,2) + $ / 0.2200933352980389748216629900695196D+00, + $ 0.6502727546573595539690409835852654D-01 / + DATA (V(j,15),j=1,2) + $ / 3.596678808994D-02, + $ 1.235753913415D-01 / + DATA (V(j,16),j=1,2) + $ / 1.729411966868D-01, + $ 4.225960886354D-02 / + DATA (V(j,17),j=1,3) + $ / 2.341637248281D-01, + $ 1.324832577106D-01, + $ 2.886374289129D-02 / + DATA (V(j,18),j=1,3) + $ / 2.049596194512D-02, + $ 1.017279217943D-01, + $ 2.036494032906D-01 / + DATA (V(j,19),j=1,4) + $ / 1.506003684306D-02, + $ 7.900261587096D-02, + $ 1.719853162752D-01, + $ 2.402517778395D-01 / + DATA (V(j,20),j=1,4) + $ / 1.136778532904D-02, + $ 6.222580539453D-02, + $ 1.438013602306D-01, + $ 2.193546368679D-01 / + DATA (V(j,21),j=1,5) + $ / 8.792305136058D-03, + $ 4.971678820596D-02, + $ 1.201226934566D-01, + $ 1.951924693303D-01, + $ 2.434103199047D-01 / + DATA (V(j,22),j=1,5) + $ / 6.931793227193D-03, + $ 4.026427008452D-02, + $ 1.006819324273D-01, + $ 1.715283250278D-01, + $ 2.283217882342D-01 / + DATA (V(j,23),j=1,6) + $ / 5.562298027336D-03, + $ 3.301750717439D-02, + $ 8.484487674046D-02, + $ 1.499289480598D-01, + $ 2.096284259050D-01, + $ 2.452528151503D-01 / + DATA (V(j,24),j=1,6) + $ / 4.527512122481D-03, + $ 2.738571398249D-02, + $ 7.194952348015D-02, + $ 1.308804820581D-01, + $ 1.901173218958D-01, + $ 2.338875244150D-01 / + DATA (V(j,25),j=1,7) + $ / 3.735731627098D-03, + $ 2.295065371381D-02, + $ 6.141474850635D-02, + $ 1.143710170433D-01, + $ 1.712602015573D-01, + $ 2.191192968469D-01, + $ 2.464193318434D-01 / + DATA (V(j,26),j=1,7) + $ / 3.116273598316D-03, + $ 1.941497033326D-02, + $ 5.276331953232D-02, + $ 1.001818528622D-01, + $ 1.537591183728D-01, + $ 2.029938620347D-01, + $ 2.375671797837D-01 / + DATA (V(j,27),j=1,8) + $ / 2.627354807340D-03, + $ 1.656404962657D-02, + $ 4.561529461067D-02, + $ 8.802772716296D-02, + $ 1.378848650427D-01, + $ 1.867467953993D-01, + $ 2.256575483187D-01, + $ 2.472038245618D-01 / + DATA (V(j,28),j=1,8) + $ / 2.234379876148D-03, + $ 1.424164112360D-02, + $ 3.967132880296D-02, + $ 7.762064909155D-02, + $ 1.236763051633D-01, + $ 1.710839672061D-01, + $ 2.122104053470D-01, + $ 2.401218883665D-01 / + DATA (V(j,29),j=1,9) + $ / 1.916700390235D-03, + $ 1.233154590152D-02, + $ 3.469648744997D-02, + $ 6.869692636008D-02, + $ 1.110548585874D-01, + $ 1.563770127604D-01, + $ 1.982285434988D-01, + $ 2.303388051827D-01, + $ 2.477564007390D-01 / + DATA (V(j,30),j=1,9) + $ / 2.107454820561D-03, + $ 1.088942170828D-02, + $ 3.046535458878D-02, + $ 6.119972584598D-02, + $ 1.000546103726D-01, + $ 1.428810642988D-01, + $ 1.843759068265D-01, + $ 2.190027552378D-01, + $ 2.419625136213D-01 / + DATA (V(j,31),j=1,10) + $ / 1.472668018817D-03, + $ 9.580098341667D-03, + $ 2.697810682946D-02, + $ 5.452463307450D-02, + $ 9.015147652015D-02, + $ 1.304525252537D-01, + $ 1.709907279210D-01, + $ 2.069300631045D-01, + $ 2.337963076105D-01, + $ 2.481595158077D-01 / + DATA (S(i,1,9),i=1,2) + $ / 1.403553811713D-01, + $ 4.493328323270D-01 / + DATA (S(i,1,10),i=1,2) + $ / 4.990453161796D-01, + $ 1.446630744325D-01 / + DATA (S(i,1,11),i=1,2) + $ / 1.590417105384D-01, + $ 8.360360154825D-01 / + DATA (S(i,1,12),i=1,2) + $ / 2.272181808998D-01, + $ 4.864661535887D-01 / + DATA ((S(i,j,13),i=1,2),j=1,2) + $ / 3.233484542693D-01, + $ 1.153112011010D-01, + $ 2.314790158713D-01, + $ 5.244939240922D-01 / + DATA ((S(i,j,14),i=1,2),j=1,2) + $ / 2.510034751770D-01, + $ 8.000727494074D-01, + $ 1.233548532583D-01, + $ 4.127724083169D-01 / + DATA ((S(i,j,15),i=1,2),j=1,3) + $ / 2.899558825500D-01, + $ 7.934537856582D-01, + $ 9.684121455104D-02, + $ 8.280801506687D-01, + $ 1.833434647042D-01, + $ 9.074658265305D-01 / + DATA ((S(i,j,16),i=1,2),j=1,4) + $ / 2.054823696403D-01, + $ 8.689460322872D-01, + $ 5.905157048925D-01, + $ 7.999278543857D-01, + $ 5.550152361077D-01, + $ 7.717462626916D-01, + $ 9.371809858554D-01, + $ 3.344363145343D-01 / + DATA ((S(i,j,17),i=1,2),j=1,6) + $ / 5.610263808622D-01, + $ 3.518280927734D-01, + $ 4.742392842552D-01, + $ 2.634716655938D-01, + $ 5.984126497885D-01, + $ 1.816640840360D-01, + $ 3.791035407696D-01, + $ 1.720795225657D-01, + $ 2.778673190586D-01, + $ 8.213021581933D-02, + $ 5.033564271075D-01, + $ 8.999205842075D-02 / + DATA ((S(i,j,18),i=1,2),j=1,9) + $ / 6.944024393349D-02, + $ 2.355187894242D-01, + $ 2.269004109529D-01, + $ 4.102182474046D-01, + $ 8.025574607775D-02, + $ 6.214302417482D-01, + $ 1.467999527897D-01, + $ 3.245284345717D-01, + $ 1.571507769825D-01, + $ 5.224482189697D-01, + $ 2.365702993157D-01, + $ 6.017546634090D-01, + $ 7.714815866766D-02, + $ 4.346575516141D-01, + $ 3.062936666211D-01, + $ 4.908826589038D-01, + $ 3.822477379525D-01, + $ 5.648768149100D-01 / + DATA ((S(i,j,19),i=1,2),j=1,12) + $ / 5.974048614181D-02, + $ 2.029128752778D-01, + $ 1.375760408474D-01, + $ 4.602621942484D-01, + $ 3.391016526336D-01, + $ 5.030673999662D-01, + $ 1.271675191440D-01, + $ 2.817606422442D-01, + $ 2.693120740414D-01, + $ 4.331561291720D-01, + $ 1.419786452602D-01, + $ 6.256167358581D-01, + $ 6.709284600738D-02, + $ 3.798395216859D-01, + $ 7.057738183256D-02, + $ 5.517505421424D-01, + $ 2.783888477882D-01, + $ 6.029619156159D-01, + $ 1.979578938917D-01, + $ 3.589606329589D-01, + $ 2.087307061103D-01, + $ 5.348666438135D-01, + $ 4.055122137873D-01, + $ 5.674997546074D-01 / + DATA ((S(i,j,20),i=1,2),j=1,16) + $ / 9.827986018264D-01, + $ 1.771774022615D-01, + $ 9.624249230326D-01, + $ 2.475716463426D-01, + $ 9.402007994129D-01, + $ 3.354616289066D-01, + $ 9.320822040143D-01, + $ 3.173615246612D-01, + $ 9.043674199393D-01, + $ 4.090268427085D-01, + $ 8.912407560075D-01, + $ 3.854291150669D-01, + $ 8.676435628463D-01, + $ 4.932221184851D-01, + $ 8.581979986042D-01, + $ 4.785320675922D-01, + $ 8.396753624050D-01, + $ 4.507422593157D-01, + $ 8.165288564022D-01, + $ 5.632123020762D-01, + $ 8.015469370784D-01, + $ 5.434303569694D-01, + $ 7.773563069070D-01, + $ 5.123518486420D-01, + $ 7.661621213900D-01, + $ 6.394279634749D-01, + $ 7.553584143534D-01, + $ 6.269805509024D-01, + $ 7.344305757560D-01, + $ 6.031161693096D-01, + $ 7.043837184022D-01, + $ 5.693702498468D-01 / + DATA ((S(i,j,21),i=1,2),j=1,20) + $ / 5.707522908892D-01, + $ 4.387028039890D-01, + $ 5.196463388403D-01, + $ 3.858908414763D-01, + $ 4.646337531215D-01, + $ 3.301937372344D-01, + $ 4.063901697558D-01, + $ 2.725423573564D-01, + $ 3.456329466643D-01, + $ 2.139510237495D-01, + $ 2.831395121050D-01, + $ 1.555922309787D-01, + $ 2.197682022925D-01, + $ 9.892878979686D-02, + $ 1.564696098650D-01, + $ 4.598642910676D-02, + $ 6.027356673721D-01, + $ 3.376625140173D-01, + $ 5.496032320255D-01, + $ 2.822301309728D-01, + $ 4.921707755235D-01, + $ 2.248632342593D-01, + $ 4.309422998598D-01, + $ 1.666224723456D-01, + $ 3.664108182314D-01, + $ 1.086964901822D-01, + $ 2.990189057758D-01, + $ 5.251989784120D-02, + $ 6.268724013145D-01, + $ 2.297523657550D-01, + $ 5.707324144835D-01, + $ 1.723080607094D-01, + $ 5.096360901960D-01, + $ 1.140238465391D-01, + $ 4.438729938312D-01, + $ 5.611522095883D-02, + $ 6.419978471082D-01, + $ 1.164174423141D-01, + $ 5.817218061803D-01, + $ 5.797589531445D-02 / + DATA ((S(i,j,22),i=1,2),j=1,25) + $ / 1.394983311832D-01, + $ 4.097581162050D-02, + $ 1.967999180485D-01, + $ 8.851987391293D-02, + $ 2.546183732549D-01, + $ 1.397680182970D-01, + $ 3.121281074714D-01, + $ 1.929452542227D-01, + $ 3.685981078502D-01, + $ 2.467898337062D-01, + $ 4.233760321548D-01, + $ 3.003104124785D-01, + $ 4.758671236059D-01, + $ 3.526684328175D-01, + $ 5.255178579796D-01, + $ 4.031134861146D-01, + $ 5.718025633735D-01, + $ 4.509426448342D-01, + $ 2.686927772723D-01, + $ 4.711322502423D-02, + $ 3.306006819905D-01, + $ 9.784487303943D-02, + $ 3.904906850595D-01, + $ 1.505395810025D-01, + $ 4.479957951904D-01, + $ 2.039728156296D-01, + $ 5.027076848920D-01, + $ 2.571529941121D-01, + $ 5.542087392260D-01, + $ 3.092191375816D-01, + $ 6.020850887375D-01, + $ 3.593807506130D-01, + $ 4.019851409180D-01, + $ 5.063389934379D-02, + $ 4.635614567450D-01, + $ 1.032422269161D-01, + $ 5.215860931592D-01, + $ 1.566322094006D-01, + $ 5.758202499099D-01, + $ 2.098082827491D-01, + $ 6.259893683877D-01, + $ 2.618824114553D-01, + $ 5.313795124812D-01, + $ 5.263245019339D-02, + $ 5.893317955932D-01, + $ 1.061059730982D-01, + $ 6.426246321216D-01, + $ 1.594171564034D-01, + $ 6.511904367376D-01, + $ 5.354789536566D-02 / + DATA ((S(i,j,23),i=1,2),j=1,30) + $ / 1.253901572367D-01, + $ 3.681917226440D-02, + $ 1.775721510384D-01, + $ 7.982487607213D-02, + $ 2.305693358216D-01, + $ 1.264640966592D-01, + $ 2.836502845992D-01, + $ 1.751585683419D-01, + $ 3.361794746233D-01, + $ 2.247995907633D-01, + $ 3.875979172265D-01, + $ 2.745299257422D-01, + $ 4.374019316999D-01, + $ 3.236373482441D-01, + $ 4.851275843340D-01, + $ 3.714967859437D-01, + $ 5.303391803807D-01, + $ 4.175353646322D-01, + $ 5.726197380596D-01, + $ 4.612084406355D-01, + $ 2.431520732565D-01, + $ 4.258040133044D-02, + $ 3.002096800896D-01, + $ 8.869424306723D-02, + $ 3.558554457457D-01, + $ 1.368811706511D-01, + $ 4.097782537049D-01, + $ 1.860739985015D-01, + $ 4.616337666067D-01, + $ 2.354235077396D-01, + $ 5.110707008418D-01, + $ 2.842074921347D-01, + $ 5.577415286164D-01, + $ 3.317784414984D-01, + $ 6.013060431367D-01, + $ 3.775299002041D-01, + $ 3.661596767262D-01, + $ 4.599367887165D-02, + $ 4.237633153507D-01, + $ 9.404893773654D-02, + $ 4.786328454658D-01, + $ 1.431377109092D-01, + $ 5.305702076790D-01, + $ 1.924186388844D-01, + $ 5.793436224232D-01, + $ 2.411590944775D-01, + $ 6.247069017095D-01, + $ 2.886871491584D-01, + $ 4.874315552535D-01, + $ 4.804978774953D-02, + $ 5.427337322059D-01, + $ 9.716857199367D-02, + $ 5.943493747247D-01, + $ 1.465205839795D-01, + $ 6.421314033565D-01, + $ 1.953579449804D-01, + $ 6.020628374714D-01, + $ 4.916375015738D-02, + $ 6.529222529857D-01, + $ 9.861621540127D-02 / + DATA ((S(i,j,24),i=1,2),j=1,36) + $ / 1.135081039844D-01, + $ 3.331954884663D-02, + $ 1.612866626099D-01, + $ 7.247167465437D-02, + $ 2.100786550168D-01, + $ 1.151539110850D-01, + $ 2.592282009460D-01, + $ 1.599491097144D-01, + $ 3.081740561320D-01, + $ 2.058699956028D-01, + $ 3.564289781578D-01, + $ 2.521624953503D-01, + $ 4.035587288241D-01, + $ 2.982090785798D-01, + $ 4.491671196374D-01, + $ 3.434762087236D-01, + $ 4.928854782917D-01, + $ 3.874831357203D-01, + $ 5.343646791959D-01, + $ 4.297814821747D-01, + $ 5.732683216531D-01, + $ 4.699402260944D-01, + $ 2.214131583219D-01, + $ 3.873602040644D-02, + $ 2.741796504750D-01, + $ 8.089496256902D-02, + $ 3.259797439149D-01, + $ 1.251732177621D-01, + $ 3.765441148827D-01, + $ 1.706260286403D-01, + $ 4.255773574531D-01, + $ 2.165115147300D-01, + $ 4.727795117058D-01, + $ 2.622089812225D-01, + $ 5.178546895819D-01, + $ 3.071721431296D-01, + $ 5.605141192097D-01, + $ 3.508998998801D-01, + $ 6.004763319353D-01, + $ 3.929160876167D-01, + $ 3.352842634947D-01, + $ 4.202563457288D-02, + $ 3.891971629815D-01, + $ 8.614309758871D-02, + $ 4.409875565542D-01, + $ 1.314500879380D-01, + $ 4.904893058592D-01, + $ 1.772189657384D-01, + $ 5.375056138770D-01, + $ 2.228277110050D-01, + $ 5.818255708670D-01, + $ 2.677179935014D-01, + $ 6.232334858145D-01, + $ 3.113675035544D-01, + $ 4.489485354492D-01, + $ 4.409162378368D-02, + $ 5.015136875933D-01, + $ 8.939009917748D-02, + $ 5.511300550513D-01, + $ 1.351806029383D-01, + $ 5.976720409858D-01, + $ 1.808370355053D-01, + $ 6.409956378989D-01, + $ 2.257852192302D-01, + $ 5.581222330828D-01, + $ 4.532173421637D-02, + $ 6.074705984162D-01, + $ 9.117488031840D-02, + $ 6.532272537379D-01, + $ 1.369294213140D-01, + $ 6.594761494500D-01, + $ 4.589901487276D-02 / + DATA ((S(i,j,25),i=1,2),j=1,42) + $ / 1.033958573552D-01, + $ 3.034544009064D-02, + $ 1.473521412414D-01, + $ 6.618803044247D-02, + $ 1.924552158706D-01, + $ 1.054431128988D-01, + $ 2.381094362890D-01, + $ 1.468263551239D-01, + $ 2.838121707937D-01, + $ 1.894486108188D-01, + $ 3.291323133373D-01, + $ 2.326374238762D-01, + $ 3.736896978741D-01, + $ 2.758485808486D-01, + $ 4.171406040760D-01, + $ 3.186179331997D-01, + $ 4.591677985257D-01, + $ 3.605329796304D-01, + $ 4.994733831718D-01, + $ 4.012147253587D-01, + $ 5.377731830445D-01, + $ 4.403050025571D-01, + $ 5.737917830001D-01, + $ 4.774565904277D-01, + $ 2.027323586271D-01, + $ 3.544122504976D-02, + $ 2.516942375187D-01, + $ 7.418304388646D-02, + $ 3.000227995257D-01, + $ 1.150502745727D-01, + $ 3.474806691046D-01, + $ 1.571963371209D-01, + $ 3.938103180359D-01, + $ 1.999631877247D-01, + $ 4.387519590456D-01, + $ 2.428073457847D-01, + $ 4.820503960078D-01, + $ 2.852575132906D-01, + $ 5.234573778475D-01, + $ 3.268884208675D-01, + $ 5.627318647235D-01, + $ 3.673033321676D-01, + $ 5.996390607157D-01, + $ 4.061211551830D-01, + $ 3.084780753792D-01, + $ 3.860125523100D-02, + $ 3.589988275920D-01, + $ 7.928938987105D-02, + $ 4.078628415882D-01, + $ 1.212614643030D-01, + $ 4.549287258890D-01, + $ 1.638770827383D-01, + $ 5.000278512957D-01, + $ 2.065965798260D-01, + $ 5.429785044928D-01, + $ 2.489436378852D-01, + $ 5.835939850492D-01, + $ 2.904811368947D-01, + $ 6.216870353445D-01, + $ 3.307941957667D-01, + $ 4.151104662709D-01, + $ 4.064829146053D-02, + $ 4.649804275009D-01, + $ 8.258424547295D-02, + $ 5.124695757010D-01, + $ 1.251841962027D-01, + $ 5.574711100606D-01, + $ 1.679107505976D-01, + $ 5.998597333287D-01, + $ 2.102805057359D-01, + $ 6.395007148517D-01, + $ 2.518418087774D-01, + $ 5.188456224746D-01, + $ 4.194321676078D-02, + $ 5.664190707943D-01, + $ 8.457661551921D-02, + $ 6.110464353283D-01, + $ 1.273652932519D-01, + $ 6.526430302052D-01, + $ 1.698173239076D-01, + $ 6.167551880378D-01, + $ 4.266398851549D-02, + $ 6.607195418355D-01, + $ 8.551925814238D-02 / + DATA ((S(i,j,26),i=1,2),j=1,49) + $ / 9.469870086838D-02, + $ 2.778748387309D-02, + $ 1.353170300568D-01, + $ 6.076569878628D-02, + $ 1.771679481726D-01, + $ 9.703072762711D-02, + $ 2.197066664232D-01, + $ 1.354112458525D-01, + $ 2.624783557375D-01, + $ 1.750996479744D-01, + $ 3.050969521214D-01, + $ 2.154896907450D-01, + $ 3.472252637196D-01, + $ 2.560954625740D-01, + $ 3.885610219026D-01, + $ 2.965070050624D-01, + $ 4.288273776063D-01, + $ 3.363641488734D-01, + $ 4.677662471303D-01, + $ 3.753400029837D-01, + $ 5.051333589553D-01, + $ 4.131297522144D-01, + $ 5.406942145810D-01, + $ 4.494423776082D-01, + $ 5.742204122576D-01, + $ 4.839938958842D-01, + $ 1.865407027225D-01, + $ 3.259144851071D-02, + $ 2.321186453689D-01, + $ 6.835679505297D-02, + $ 2.773159142524D-01, + $ 1.062284864452D-01, + $ 3.219200192237D-01, + $ 1.454404409323D-01, + $ 3.657032593944D-01, + $ 1.854018282583D-01, + $ 4.084376778364D-01, + $ 2.256297412015D-01, + $ 4.499004945751D-01, + $ 2.657104425001D-01, + $ 4.898758141326D-01, + $ 3.052755487632D-01, + $ 5.281547442266D-01, + $ 3.439863920645D-01, + $ 5.645346989814D-01, + $ 3.815229456122D-01, + $ 5.988181252160D-01, + $ 4.175752420967D-01, + $ 2.850425424472D-01, + $ 3.562149509863D-02, + $ 3.324619433028D-01, + $ 7.330318886871D-02, + $ 3.785848333076D-01, + $ 1.123226296008D-01, + $ 4.232891028562D-01, + $ 1.521084193338D-01, + $ 4.664287050830D-01, + $ 1.921844459224D-01, + $ 5.078458493736D-01, + $ 2.321360989678D-01, + $ 5.473779816204D-01, + $ 2.715886486361D-01, + $ 5.848617133811D-01, + $ 3.101924707571D-01, + $ 6.201348281585D-01, + $ 3.476121052891D-01, + $ 3.852191185388D-01, + $ 3.763224880035D-02, + $ 4.325025061073D-01, + $ 7.659581935637D-02, + $ 4.778486229734D-01, + $ 1.163381306084D-01, + $ 5.211663693009D-01, + $ 1.563890598753D-01, + $ 5.623469504854D-01, + $ 1.963320810149D-01, + $ 6.012718188659D-01, + $ 2.357847407259D-01, + $ 6.378179206390D-01, + $ 2.743846121244D-01, + $ 4.836936460215D-01, + $ 3.895902610739D-02, + $ 5.293792562684D-01, + $ 7.871246819313D-02, + $ 5.726281253100D-01, + $ 1.187963808203D-01, + $ 6.133658776169D-01, + $ 1.587914708062D-01, + $ 6.515085491865D-01, + $ 1.983058575228D-01, + $ 5.778692716065D-01, + $ 3.977209689792D-02, + $ 6.207904288086D-01, + $ 7.990157592981D-02, + $ 6.608688171047D-01, + $ 1.199671308754D-01, + $ 6.656263089489D-01, + $ 4.015955957806D-02 / + DATA ((S(i,j,27),i=1,2),j=1,56) + $ / 8.715738780836D-02, 2.557175233368D-02, + $ 1.248383123134D-01, 5.604823383377D-02, + $ 1.638062693383D-01, 8.968568601901D-02, + $ 2.035586203373D-01, 1.254086651976D-01, + $ 2.436798975294D-01, 1.624780150162D-01, + $ 2.838207507774D-01, 2.003422342683D-01, + $ 3.236787502218D-01, 2.385628026255D-01, + $ 3.629849554841D-01, 2.767731148784D-01, + $ 4.014948081992D-01, 3.146542308245D-01, + $ 4.389818379260D-01, 3.519196415895D-01, + $ 4.752331143674D-01, 3.883050984024D-01, + $ 5.100457318374D-01, 4.235613423909D-01, + $ 5.432238388955D-01, 4.574484717196D-01, + $ 5.745758685072D-01, 4.897311639256D-01, + $ 1.723981437593D-01, 3.010630597881D-02, + $ 2.149553257845D-01, 6.326031554205D-02, + $ 2.573256081247D-01, 9.848566980259D-02, + $ 2.993163751238D-01, 1.350835952384D-01, + $ 3.407238005148D-01, 1.725184055442D-01, + $ 3.813454978483D-01, 2.103559279731D-01, + $ 4.209848104423D-01, 2.482278774555D-01, + $ 4.594519699996D-01, 2.858099509983D-01, + $ 4.965640166186D-01, 3.228075659915D-01, + $ 5.321441655572D-01, 3.589459907204D-01, + $ 5.660208438582D-01, 3.939630088864D-01, + $ 5.980264315964D-01, 4.276029922949D-01, + $ 2.644215852351D-01, 3.300939429073D-02, + $ 3.090113743443D-01, 6.803887650079D-02, + $ 3.525871079198D-01, 1.044326136207D-01, + $ 3.950418005354D-01, 1.416751597518D-01, + $ 4.362475663430D-01, 1.793408610505D-01, + $ 4.760661812146D-01, 2.170630750176D-01, + $ 5.143551042512D-01, 2.545145157816D-01, + $ 5.509709026936D-01, 2.913940101707D-01, + $ 5.857711030329D-01, 3.274169910911D-01, + $ 6.186149917404D-01, 3.623081329317D-01, + $ 3.586894569557D-01, 3.497354386450D-02, + $ 4.035266610019D-01, 7.129736739757D-02, + $ 4.467775312333D-01, 1.084758620193D-01, + $ 4.883638346609D-01, 1.460915689242D-01, + $ 5.281908348435D-01, 1.837790832370D-01, + $ 5.661542687149D-01, 2.212075390874D-01, + $ 6.021450102031D-01, 2.580682841161D-01, + $ 6.360520783610D-01, 2.940656362094D-01, + $ 4.521611065087D-01, 3.631055365867D-02, + $ 4.959365651561D-01, 7.348318468484D-02, + $ 5.376815804038D-01, 1.111087643813D-01, + $ 5.773314480244D-01, 1.488226085145D-01, + $ 6.148113245575D-01, 1.862892274135D-01, + $ 6.500407462842D-01, 2.231909701714D-01, + $ 5.425151448707D-01, 3.718201306119D-02, + $ 5.841860556908D-01, 7.483616335067D-02, + $ 6.234632186851D-01, 1.125990834266D-01, + $ 6.602934551849D-01, 1.501303813158D-01, + $ 6.278573968375D-01, 3.767559930246D-02, + $ 6.665611711265D-01, 7.548443301360D-02 / + DATA ((S(i,j,28),i=1,2),j=1,64) + $ / 8.056516651369D-02, 2.363454684003D-02, + $ 1.156476077139D-01, 5.191291632546D-02, + $ 1.520473382760D-01, 8.322715736995D-02, + $ 1.892986699746D-01, 1.165855667994D-01, + $ 2.270194446778D-01, 1.513077167410D-01, + $ 2.648908185093D-01, 1.868882025808D-01, + $ 3.026389259574D-01, 2.229277629776D-01, + $ 3.400220296151D-01, 2.590951840746D-01, + $ 3.768217953336D-01, 2.951047291751D-01, + $ 4.128372900922D-01, 3.307019714170D-01, + $ 4.478807131816D-01, 3.656544101088D-01, + $ 4.817742034089D-01, 3.997448951940D-01, + $ 5.143472814653D-01, 4.327667110812D-01, + $ 5.454346213906D-01, 4.645196123532D-01, + $ 5.748739313170D-01, 4.948063555703D-01, + $ 1.599598738286D-01, 2.792357590049D-02, + $ 1.998097412501D-01, 5.877141038139D-02, + $ 2.396228952566D-01, 9.164573914691D-02, + $ 2.792228341098D-01, 1.259049641963D-01, + $ 3.184251107547D-01, 1.610594823401D-01, + $ 3.570481164426D-01, 1.967151653461D-01, + $ 3.949164710492D-01, 2.325404606175D-01, + $ 4.318617293971D-01, 2.682461141151D-01, + $ 4.677221009932D-01, 3.035720116012D-01, + $ 5.023417939271D-01, 3.382781859197D-01, + $ 5.355701836636D-01, 3.721383065626D-01, + $ 5.672608451329D-01, 4.049346360466D-01, + $ 5.972704202540D-01, 4.364538098634D-01, + $ 2.461687022334D-01, 3.070423166833D-02, + $ 2.881774566287D-01, 6.338034669282D-02, + $ 3.293963604117D-01, 9.742862487068D-02, + $ 3.697303822241D-01, 1.323799532282D-01, + $ 4.090663023135D-01, 1.678497018129D-01, + $ 4.472819355412D-01, 2.035095105326D-01, + $ 4.842513377231D-01, 2.390692566672D-01, + $ 5.198477629963D-01, 2.742649818076D-01, + $ 5.539453011883D-01, 3.088503806580D-01, + $ 5.864196762401D-01, 3.425904245907D-01, + $ 6.171484466668D-01, 3.752562294789D-01, + $ 3.350337830566D-01, 3.261589934635D-02, + $ 3.775773224758D-01, 6.658438928082D-02, + $ 4.188155229849D-01, 1.014565797158D-01, + $ 4.586805892009D-01, 1.368573320844D-01, + $ 4.970895714224D-01, 1.724614851952D-01, + $ 5.339505133961D-01, 2.079779381416D-01, + $ 5.691665792531D-01, 2.431385788322D-01, + $ 6.026387682680D-01, 2.776901883050D-01, + $ 6.342676150163D-01, 3.113881356387D-01, + $ 4.237951119537D-01, 3.394877848664D-02, + $ 4.656918683235D-01, 6.880219556291D-02, + $ 5.058857069186D-01, 1.041946859722D-01, + $ 5.443204666714D-01, 1.398039738736D-01, + $ 5.809298813760D-01, 1.753373381196D-01, + $ 6.156416039447D-01, 2.105215793514D-01, + $ 6.483801351067D-01, 2.450953312157D-01, + $ 5.103616577252D-01, 3.485560643801D-02, + $ 5.506738792581D-01, 7.026308631512D-02, + $ 5.889573040995D-01, 1.059035061296D-01, + $ 6.251641589517D-01, 1.414823925236D-01, + $ 6.592414921570D-01, 1.767207908215D-01, + $ 5.930314017533D-01, 3.542189339562D-02, + $ 6.309812253390D-01, 7.109574040370D-02, + $ 6.666296011353D-01, 1.067259792283D-01, + $ 6.703715271050D-01, 3.569455268821D-02 / + DATA ((S(i,j,29),i=1,2),j=1,72) + $ / 7.476563943166D-02, 2.193168509461D-02, + $ 1.075341482001D-01, 4.826419281534D-02, + $ 1.416344885203D-01, 7.751191883576D-02, + $ 1.766325315389D-01, 1.087558139248D-01, + $ 2.121744174482D-01, 1.413661374253D-01, + $ 2.479669443408D-01, 1.748768214259D-01, + $ 2.837600452294D-01, 2.089216406612D-01, + $ 3.193344933194D-01, 2.431987685546D-01, + $ 3.544935442439D-01, 2.774497054378D-01, + $ 3.890571932288D-01, 3.114460356157D-01, + $ 4.228581214259D-01, 3.449806851913D-01, + $ 4.557387211304D-01, 3.778618641248D-01, + $ 4.875487950542D-01, 4.099086391699D-01, + $ 5.181436529963D-01, 4.409474925854D-01, + $ 5.473824095601D-01, 4.708094517711D-01, + $ 5.751263398976D-01, 4.993275140355D-01, + $ 1.489515746840D-01, 2.599381993267D-02, + $ 1.863656444352D-01, 5.479286532462D-02, + $ 2.238602880356D-01, 8.556763251425D-02, + $ 2.612723375728D-01, 1.177257802267D-01, + $ 2.984332990206D-01, 1.508168456193D-01, + $ 3.351786584663D-01, 1.844801892178D-01, + $ 3.713505522209D-01, 2.184145236088D-01, + $ 4.067981098955D-01, 2.523590641486D-01, + $ 4.413769993688D-01, 2.860812976901D-01, + $ 4.749487182516D-01, 3.193686757809D-01, + $ 5.073798105075D-01, 3.520226949548D-01, + $ 5.385410448879D-01, 3.838544395668D-01, + $ 5.683065353671D-01, 4.146810037641D-01, + $ 5.965527620664D-01, 4.443224094681D-01, + $ 2.299227700856D-01, 2.865757664058D-02, + $ 2.695752998553D-01, 5.923421684486D-02, + $ 3.086178716611D-01, 9.117817776058D-02, + $ 3.469649871659D-01, 1.240593814083D-01, + $ 3.845153566320D-01, 1.575272058259D-01, + $ 4.211600033403D-01, 1.912845163525D-01, + $ 4.567867834330D-01, 2.250710177858D-01, + $ 4.912829319232D-01, 2.586521303441D-01, + $ 5.245364793304D-01, 2.918112242865D-01, + $ 5.564369788916D-01, 3.243439239068D-01, + $ 5.868757697775D-01, 3.560536787835D-01, + $ 6.157458853520D-01, 3.867480821243D-01, + $ 3.138461110672D-01, 3.051374637507D-02, + $ 3.542495872051D-01, 6.237111233731D-02, + $ 3.935751553120D-01, 9.516223952402D-02, + $ 4.317634668111D-01, 1.285467341509D-01, + $ 4.687413842251D-01, 1.622318931656D-01, + $ 5.044274237060D-01, 1.959581153836D-01, + $ 5.387354077926D-01, 2.294888081184D-01, + $ 5.715768898356D-01, 2.626031152714D-01, + $ 6.028627200136D-01, 2.950904075287D-01, + $ 6.325039812653D-01, 3.267458451113D-01, + $ 3.981986708423D-01, 3.183291458750D-02, + $ 4.382791182133D-01, 6.459548193881D-02, + $ 4.769233057218D-01, 9.795757037088D-02, + $ 5.140823911194D-01, 1.316307235127D-01, + $ 5.496977833863D-01, 1.653556486359D-01, + $ 5.837047306513D-01, 1.988931724127D-01, + $ 6.160349566927D-01, 2.320174581439D-01, + $ 6.466185353209D-01, 2.645106562169D-01, + $ 4.810835158795D-01, 3.275917807744D-02, + $ 5.199925041324D-01, 6.612546183967D-02, + $ 5.571717692207D-01, 9.981498331474D-02, + $ 5.925789250836D-01, 1.335687001410D-01, + $ 6.261658523860D-01, 1.671444402896D-01, + $ 6.578811126669D-01, 2.003106382156D-01, + $ 5.609624612998D-01, 3.337500940231D-02, + $ 5.979959659985D-01, 6.708750335902D-02, + $ 6.330523711054D-01, 1.008792126425D-01, + $ 6.660960998104D-01, 1.345050343172D-01, + $ 6.365384364586D-01, 3.372799460737D-02, + $ 6.710994302899D-01, 6.755249309678D-02 / + DATA ((S(i,j,30),i=1,2),j=1,81) + $ / 7.345133894143D-02, 2.177844081486D-02, + $ 1.009859834045D-01, 4.590362185775D-02, + $ 1.324289619749D-01, 7.255063095691D-02, + $ 1.654272109607D-01, 1.017825451961D-01, + $ 1.990767186776D-01, 1.325652320980D-01, + $ 2.330125945523D-01, 1.642765374497D-01, + $ 2.670080611108D-01, 1.965360374338D-01, + $ 3.008753376294D-01, 2.290726770542D-01, + $ 3.344475596168D-01, 2.616645495371D-01, + $ 3.675709724071D-01, 2.941150728843D-01, + $ 4.001000887588D-01, 3.262440400919D-01, + $ 4.318956350436D-01, 3.578835350612D-01, + $ 4.628239056796D-01, 3.888751854044D-01, + $ 4.927563229774D-01, 4.190678003223D-01, + $ 5.215687136708D-01, 4.483151836884D-01, + $ 5.491402346985D-01, 4.764740676088D-01, + $ 5.753520160126D-01, 5.034021310998D-01, + $ 1.388326356418D-01, 2.435436510373D-02, + $ 1.743686900537D-01, 5.118897057343D-02, + $ 2.099737037950D-01, 8.014695048540D-02, + $ 2.454492590909D-01, 1.105117874156D-01, + $ 2.807219257864D-01, 1.417950531571D-01, + $ 3.156842271976D-01, 1.736604945720D-01, + $ 3.502090945178D-01, 2.058466324694D-01, + $ 3.841684849520D-01, 2.381284261196D-01, + $ 4.174372367906D-01, 2.703031270423D-01, + $ 4.498926465012D-01, 3.021845683091D-01, + $ 4.814146229808D-01, 3.335993355166D-01, + $ 5.118863625735D-01, 3.643833735518D-01, + $ 5.411947455119D-01, 3.943789541958D-01, + $ 5.692301500357D-01, 4.234320144404D-01, + $ 5.958857204140D-01, 4.513897947419D-01, + $ 2.156270284786D-01, 2.681225755444D-02, + $ 2.532385054910D-01, 5.557495747806D-02, + $ 2.902564617772D-01, 8.569368062950D-02, + $ 3.266979823143D-01, 1.167367450324D-01, + $ 3.625039627494D-01, 1.483861994003D-01, + $ 3.975838937549D-01, 1.803821503011D-01, + $ 4.318396099010D-01, 2.124962965666D-01, + $ 4.651706555733D-01, 2.445221837806D-01, + $ 4.974752649621D-01, 2.762701224323D-01, + $ 5.286517579628D-01, 3.075627775211D-01, + $ 5.586001195732D-01, 3.382311089827D-01, + $ 5.872229902021D-01, 3.681108834741D-01, + $ 6.144258616235D-01, 3.970397446873D-01, + $ 2.951676508065D-01, 2.867499538750D-02, + $ 3.335085485473D-01, 5.867879341904D-02, + $ 3.709561760636D-01, 8.961099205022D-02, + $ 4.074722861667D-01, 1.211627927626D-01, + $ 4.429923648839D-01, 1.530748903555D-01, + $ 4.774428052722D-01, 1.851176436722D-01, + $ 5.107446539536D-01, 2.170829107658D-01, + $ 5.428151370543D-01, 2.487786689026D-01, + $ 5.735699292557D-01, 2.800239952795D-01, + $ 6.029253794563D-01, 3.106445702878D-01, + $ 6.307998987073D-01, 3.404689500841D-01, + $ 3.752652273693D-01, 2.997145098184D-02, + $ 4.135383879344D-01, 6.086725898678D-02, + $ 4.506113885154D-01, 9.238849548436D-02, + $ 4.864401554606D-01, 1.242786603852D-01, + $ 5.209708076612D-01, 1.563086731483D-01, + $ 5.541422135830D-01, 1.882696509389D-01, + $ 5.858880915114D-01, 2.199672979126D-01, + $ 6.161399390603D-01, 2.512165482925D-01, + $ 6.448296482255D-01, 2.818368701872D-01, + $ 4.544796274918D-01, 3.088970405060D-02, + $ 4.919389072147D-01, 6.240947677637D-02, + $ 5.279313026985D-01, 9.430706144280D-02, + $ 5.624169925571D-01, 1.263547818770D-01, + $ 5.953484627093D-01, 1.583430788823D-01, + $ 6.266730715339D-01, 1.900748462556D-01, + $ 6.563363204279D-01, 2.213599519593D-01, + $ 5.314574716586D-01, 3.152508811515D-02, + $ 5.674614932298D-01, 6.343865291466D-02, + $ 6.017706004970D-01, 9.551503504224D-02, + $ 6.343471270264D-01, 1.275440099801D-01, + $ 6.651494599128D-01, 1.593252037672D-01, + $ 6.050184986006D-01, 3.192538338496D-02, + $ 6.390163550880D-01, 6.402824353962D-02, + $ 6.711199107088D-01, 9.609805077003D-02, + $ 6.741354429572D-01, 3.211853196273D-02 / + DATA ((S(i,j,31),i=1,2),j=1,90) + $ / 6.655644120217D-02, 1.936508874588D-02, + $ 9.446246161270D-02, 4.252442002116D-02, + $ 1.242651925453D-01, 6.806529315354D-02, + $ 1.553438064847D-01, 9.560957491205D-02, + $ 1.871137110543D-01, 1.245931657453D-01, + $ 2.192612628836D-01, 1.545385828779D-01, + $ 2.515682807207D-01, 1.851004249723D-01, + $ 2.838535866287D-01, 2.160182608272D-01, + $ 3.159578817529D-01, 2.470799012277D-01, + $ 3.477370882791D-01, 2.781014208986D-01, + $ 3.790576960891D-01, 3.089172523516D-01, + $ 4.097938317810D-01, 3.393750055472D-01, + $ 4.398256572860D-01, 3.693322470988D-01, + $ 4.690384114718D-01, 3.986541005610D-01, + $ 4.973216048301D-01, 4.272112491409D-01, + $ 5.245681526132D-01, 4.548781735310D-01, + $ 5.506733911804D-01, 4.815315355023D-01, + $ 5.755339829522D-01, 5.070486445802D-01, + $ 1.305472386056D-01, 2.284970375722D-02, + $ 1.637327908216D-01, 4.812254338288D-02, + $ 1.972734634150D-01, 7.531734457512D-02, + $ 2.308694653110D-01, 1.039043639882D-01, + $ 2.643899218338D-01, 1.334526587118D-01, + $ 2.977171599622D-01, 1.636414868936D-01, + $ 3.307293903032D-01, 1.942195406167D-01, + $ 3.633069198219D-01, 2.249752879944D-01, + $ 3.953346955923D-01, 2.557218821820D-01, + $ 4.267018394185D-01, 2.862897925213D-01, + $ 4.573009622572D-01, 3.165224536637D-01, + $ 4.870279559856D-01, 3.462730221636D-01, + $ 5.157819581450D-01, 3.754016870283D-01, + $ 5.434651666465D-01, 4.037733784994D-01, + $ 5.699823887765D-01, 4.312557784139D-01, + $ 5.952403350948D-01, 4.577175367122D-01, + $ 2.025152599210D-01, 2.520253617720D-02, + $ 2.381066653274D-01, 5.223254506119D-02, + $ 2.732823383652D-01, 8.060669688589D-02, + $ 3.080137692611D-01, 1.099335754081D-01, + $ 3.422405614588D-01, 1.399120955960D-01, + $ 3.758808773890D-01, 1.702977801652D-01, + $ 4.088458383439D-01, 2.008799256602D-01, + $ 4.410450550841D-01, 2.314703052181D-01, + $ 4.723879420561D-01, 2.618972111376D-01, + $ 5.027843561874D-01, 2.920013195600D-01, + $ 5.321453674452D-01, 3.216322555191D-01, + $ 5.603839113834D-01, 3.506456615934D-01, + $ 5.874150706875D-01, 3.789007181306D-01, + $ 6.131559381660D-01, 4.062580170573D-01, + $ 2.778497016395D-01, 2.696271276876D-02, + $ 3.143733562262D-01, 5.523469316960D-02, + $ 3.501485810262D-01, 8.445193201626D-02, + $ 3.851430322304D-01, 1.143263119336D-01, + $ 4.193013979470D-01, 1.446177898344D-01, + $ 4.525585960459D-01, 1.751165438438D-01, + $ 4.848447779623D-01, 2.056338306746D-01, + $ 5.160871208277D-01, 2.359965487229D-01, + $ 5.462112185697D-01, 2.660430223139D-01, + $ 5.751425068102D-01, 2.956193664498D-01, + $ 6.028073872854D-01, 3.245763905313D-01, + $ 6.291338275278D-01, 3.527670026207D-01, + $ 3.541797528439D-01, 2.823853479436D-02, + $ 3.908234972075D-01, 5.741296374713D-02, + $ 4.264408450108D-01, 8.724646633650D-02, + $ 4.609949666553D-01, 1.175034422916D-01, + $ 4.944389496536D-01, 1.479755652628D-01, + $ 5.267194884346D-01, 1.784740659484D-01, + $ 5.577787810221D-01, 2.088245700431D-01, + $ 5.875563763537D-01, 2.388628136571D-01, + $ 6.159910016391D-01, 2.684308928769D-01, + $ 6.430219602956D-01, 2.973740761960D-01, + $ 4.300647036214D-01, 2.916399920494D-02, + $ 4.661486308936D-01, 5.898803024756D-02, + $ 5.009658555287D-01, 8.924162698525D-02, + $ 5.344824270448D-01, 1.197185199637D-01, + $ 5.666575997416D-01, 1.502300756161D-01, + $ 5.974457471405D-01, 1.806004191914D-01, + $ 6.267984444117D-01, 2.106621764786D-01, + $ 6.546664713575D-01, 2.402526932672D-01, + $ 5.042711004437D-01, 2.982529203608D-02, + $ 5.392127456774D-01, 6.008728062340D-02, + $ 5.726819437669D-01, 9.058227674571D-02, + $ 6.046469254207D-01, 1.211219235803D-01, + $ 6.350716157435D-01, 1.515286404792D-01, + $ 6.639177679185D-01, 1.816314681256D-01, + $ 5.757276040972D-01, 3.026991752575D-02, + $ 6.090265823140D-01, 6.078402297871D-02, + $ 6.406735344388D-01, 9.135459984177D-02, + $ 6.706397927794D-01, 1.218024155967D-01, + $ 6.435019674427D-01, 3.052608357661D-02, + $ 6.747218676376D-01, 6.112185773983D-02 / + + Pi = ACOS(-1d0) + Pi4 = 4 * Pi + +c Determine if the number of points requested is valid, and, if the +c formula is simple enough, go ahead and put it in now... + + IF (N.eq.1) THEN + Pts(1,1) = 0D0 + Pts(2,1) = 0D0 + Pts(3,1) = 1D0 + Wts (1) = Pi4 + RETURN + ELSEIF (N.eq.4) THEN + CALL VRLoad(Pts,12,SQRT(1D0/3D0)) + CALL VRLoad(Wts,4,Pi) + Pts(1,2) = -Pts(1,2) + Pts(2,2) = -Pts(2,2) + Pts(1,3) = -Pts(1,3) + Pts(3,3) = -Pts(3,3) + Pts(2,4) = -Pts(2,4) + Pts(3,4) = -Pts(3,4) + RETURN + ELSEIF (N.eq.6) THEN + Leb = 1 + ELSEIF (N.eq.18) THEN + Leb = 2 + ELSEIF (N.eq.26) THEN + Leb = 3 + ELSEIF (N.eq.38) THEN + Leb = 4 + ELSEIF (N.eq.50) THEN + Leb = 5 + ELSEIF (N.eq.74) THEN + Leb = 6 + ELSEIF (N.eq.86) THEN + Leb = 7 + ELSEIF (N.eq.110) THEN + Leb = 8 + ELSEIF (N.eq.146) THEN + Leb = 9 + ELSEIF (N.eq.170) THEN + Leb = 10 + ELSEIF (N.eq.194) THEN + Leb = 11 + ELSEIF (N.eq.230) THEN + Leb = 12 + ELSEIF (N.eq.266) THEN + Leb = 13 + ELSEIF (N.eq.302) THEN + Leb = 14 + ELSEIF (N.eq.350) THEN + Leb = 15 + ELSEIF (N.eq.434) THEN + Leb = 16 + ELSEIF (N.eq.590) THEN + Leb = 17 + ELSEIF (N.eq.770) THEN + Leb = 18 + ELSEIF (N.eq.974) THEN + Leb = 19 + ELSEIF (N.eq.1202) THEN + Leb = 20 + ELSEIF (N.eq.1454) THEN + Leb = 21 + ELSEIF (N.eq.1730) THEN + Leb = 22 + ELSEIF (N.eq.2030) THEN + Leb = 23 + ELSEIF (N.eq.2354) THEN + Leb = 24 + ELSEIF (N.eq.2702) THEN + Leb = 25 + ELSEIF (N.eq.3074) THEN + Leb = 26 + ELSEIF (N.eq.3470) THEN + Leb = 27 + ELSEIF (N.eq.3890) THEN + Leb = 28 + ELSEIF (N.eq.4334) THEN + Leb = 29 + ELSEIF (N.eq.4802) THEN + Leb = 30 + ELSEIF (N.eq.5294) THEN + Leb = 31 + ELSE + write(*,*)'Valid Angular Grids are :' + write(*,*)'6, 18, 26, 38, 50, 74, 86, 110, 146, 170, 194, 230' + write(*,*)'266, 302, 434, 590, 770, 974, 1202, 1454, 1730' + write(*,*)'2030, 2354, 2702, 3074, 3470, 3890, 4334, 4802, 5294' + CALL EXIT + ENDIF + +c Construct the Lebedev octahedral sets from their defining +c parameters. See the references given above... + + iPt = 0 + +c First, the special sets... + +c 6-point set (A1)... + + IF (SetTyp(1,Leb).eq.1) THEN + CALL VRLoad(Pts(1,iPt+1),18,0D0) + CALL VRLoad(Wts(iPt+1),6,A(1,Leb)) + z = 1D0 + DO 100 i = 1,6 + Pts((i+1)/2,iPt+i) = z + z = -z + 100 CONTINUE + iPt = iPt + 6 + ENDIF + +c 12-point set (A2)... + + IF (SetTyp(2,Leb).eq.1) THEN + CALL VRLoad(Pts(1,iPt+1),36,0D0) + CALL VRLoad(Wts(iPt+1),12,A(2,Leb)) + z = SQRT(0.5D0) + DO 200 i = 1,2 + DO 210 j = i+1,3 + Pts(i,iPt+1) = z + Pts(j,iPt+1) = z + Pts(i,iPt+2) = z + Pts(j,iPt+2) = -z + Pts(i,iPt+3) = -z + Pts(j,iPt+3) = z + Pts(i,iPt+4) = -z + Pts(j,iPt+4) = -z + iPt = iPt + 4 + 210 CONTINUE + 200 CONTINUE + ENDIF + +c 8-point set (A3)... + + IF (SetTyp(3,Leb).eq.1) THEN + CALL VRLoad(Wts(iPt+1),8,A(3,Leb)) + z = SQRT(1D0/3D0) + DO 300 i1 = 0,1 + DO 310 i2 = 0,1 + DO 320 i3 = 0,1 + Pts(1,iPt+1) = (-1)**i1 * z + Pts(2,iPt+1) = (-1)**i2 * z + Pts(3,iPt+1) = (-1)**i3 * z + iPt = iPt + 1 + 320 CONTINUE + 310 CONTINUE + 300 CONTINUE + ENDIF + +c Next, the general sets... + +c 24-point sets (Bk)... + + DO 400 k = 1,SetTyp(4,Leb) + CALL VRLoad(Wts(iPt+1),24,B(k,Leb)) + mk = SQRT(ABS(T(k,Leb))) + lk = SQRT((1D0-mk**2)/2) + DO 410 j = 1,3 + DO 420 i1 = 0,1 + DO 430 i2 = 0,1 + DO 440 i3 = 0,1 + Pts(Pmt(1,j),iPt+1) = (-1)**i1 * mk + Pts(Pmt(2,j),iPt+1) = (-1)**i2 * lk + Pts(Pmt(3,j),iPt+1) = (-1)**i3 * lk + iPt = iPt + 1 + 440 CONTINUE + 430 CONTINUE + 420 CONTINUE + 410 CONTINUE + 400 CONTINUE + +c 24-point sets (Ck)... + + DO 500 k = 1,SetTyp(5,Leb) + CALL VRLoad(Wts(iPt+1),24,C(k,Leb)) + pk = SQRT(ABS((1D0+SQRT(1D0-4*V(k,Leb)))/2)) + qk = SQRT(1D0-pk**2) + DO 510 j = 1,6 + DO 520 i1 = 0,1 + DO 530 i2 = 0,1 + Pts(Pmt(1,j),iPt+1) = (-1)**i1 * pk + Pts(Pmt(2,j),iPt+1) = (-1)**i2 * qk + Pts(Pmt(3,j),iPt+1) = 0D0 + iPt = iPt + 1 + 530 CONTINUE + 520 CONTINUE + 510 CONTINUE + 500 CONTINUE + +c 48-point sets (Dk)... + + DO 600 k = 1,SetTyp(6,Leb) + CALL VRLoad(Wts(iPt+1),48,D(k,Leb)) + +c To find the base-points r,s,w, we must find the roots +c of a polynomial (See Ref. 2)... + + s1k = S(1,k,Leb) + s2k = S(2,k,Leb) + s3k = SQRT(1-s1k*s1k-s2k*s2k) + + DO j = 1,6 + do i1 = 0,1 + do i2 = 0,1 + do i3 = 0,1 + Pts(Pmt(1,j),iPt+1) = (-1)**i1*s1k + Pts(Pmt(2,j),iPt+1) = (-1)**i2*s3k + Pts(Pmt(3,j),iPt+1) = (-1)**i3*s2k + iPt = iPt + 1 + enddo + enddo + enddo + enddo + 600 CONTINUE + +c Scale the weights by 4*Pi and we're done... + + CALL VRScale(Wts,N,Pi4) + RETURN + END + +c----------------------------------------------------------------------- + + SUBROUTINE VRload(A,N,Value) + IMPLICIT REAL*8 (a-h,o-z) + REAL*8 A(N) + DO i = 1,N + A(i) = Value + END DO + RETURN + END + +c----------------------------------------------------------------------- + + SUBROUTINE VRscale(A,N,Scale) + IMPLICIT REAL*8 (a-h,o-z) + REAL*8 A(N) + DO i = 1, N + A(i) = Scale * A(i) + END DO + RETURN + END diff --git a/src/xcDFT/electron_number.f90 b/src/xcDFT/electron_number.f90 new file mode 100644 index 0000000..6028c05 --- /dev/null +++ b/src/xcDFT/electron_number.f90 @@ -0,0 +1,20 @@ +function electron_number(nGrid,w,rho) result(nEl) + +! Compute the number of electrons via integration of the one-electron density + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + double precision,intent(in) :: w(nGrid) + double precision,intent(in) :: rho(nGrid) + +! Output variables + + double precision :: nEl + + nEl = 2d0*dot_product(w,rho) + +end function electron_number diff --git a/src/xcDFT/elements.f90 b/src/xcDFT/elements.f90 new file mode 100644 index 0000000..1432c34 --- /dev/null +++ b/src/xcDFT/elements.f90 @@ -0,0 +1,171 @@ +function element_number(element_name) + + implicit none + integer,parameter :: nelement_max = 103 + character(len=2),intent(in) :: element_name + integer :: element_number + character(len=2),parameter :: element_list(nelement_max) = & + (/' H', 'He', & ! 2 + 'Li','Be', ' B',' C',' N',' O',' F','Ne', & ! 10 + 'Na','Mg', 'Al','Si',' P',' S','Cl','Ar', & ! 18 + ' K','Ca','Sc','Ti',' V','Cr','Mn','Fe','Co','Ni','Cu','Zn','Ga','Ge','As','Se','Br','Kr', & ! 36 + 'Rb','Sr',' Y','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag','Cd','In','Sn','Sb','Te',' I','Xe', & ! 54 + 'Cs','Ba', & ! 56 + 'La','Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb', & ! 70 + 'Lu','Hf','Ta',' W','Re','Os','Ir','Pt','Au','Hg','Tl','Pb','Bi','Po','At','Rn', & ! 86 + 'Fr','Ra', & ! 88 + 'Ac','Th','Pa',' U','Np','Pu','Am','Cm','Bk','Cf','Es','Fm','Md','No', & ! 102 + 'Lr' & ! 103 + /) + +!===== + integer :: ielement +!===== + + ielement=1 + do while( ADJUSTL(element_name) /= ADJUSTL(element_list(ielement)) ) + if( ielement == nelement_max ) then + write(*,'(a,a)') ' Input symbol ',element_name + write(*,'(a,i3,a)') ' Element symbol is not one of first ',nelement_max,' elements' + write(*,*) '!!! element symbol not understood !!!' + stop + endif + ielement = ielement + 1 + enddo + + element_number = ielement + +end function element_number + +function element_core(zval,zatom) + implicit none + double precision,intent(in) :: zval + double precision,intent(in) :: zatom + integer :: element_core +!===== + + ! + ! If zval /= zatom, this is certainly an effective core potential + ! and no core states should be frozen. + if( ABS(zval - zatom) > 1d0-3 ) then + element_core = 0 + else + + if( zval <= 4.00001d0 ) then ! up to Be + element_core = 0 + else if( zval <= 12.00001d0 ) then ! up to Mg + element_core = 1 + else if( zval <= 30.00001d0 ) then ! up to Ca + element_core = 5 + else if( zval <= 48.00001d0 ) then ! up to Sr + element_core = 9 + else + write(*,*) '!!! not imlemented in element_core !!!' + stop + endif + + endif + + +end function element_core + + + +function element_covalent_radius(zatom) + +! Return covalent radius of an atom + + implicit none + include 'parameters.h' + + integer,intent(in) :: zatom + double precision :: element_covalent_radius + + ! + ! Data from Cambridge Structural Database + ! http://en.wikipedia.org/wiki/Covalent_radius + ! + ! Values are first given in picometer + ! They will be converted in bohr just after + select case(zatom) + case( 1) + element_covalent_radius = 31. + case( 2) + element_covalent_radius = 28. + case( 3) + element_covalent_radius = 128. + case( 4) + element_covalent_radius = 96. + case( 5) + element_covalent_radius = 84. + case( 6) + element_covalent_radius = 73. + case( 7) + element_covalent_radius = 71. + case( 8) + element_covalent_radius = 66. + case( 9) + element_covalent_radius = 57. + case(10) ! Ne. + element_covalent_radius = 58. + case(11) + element_covalent_radius = 166. + case(12) + element_covalent_radius = 141. + case(13) + element_covalent_radius = 121. + case(14) + element_covalent_radius = 111. + case(15) + element_covalent_radius = 107. + case(16) + element_covalent_radius = 105. + case(17) + element_covalent_radius = 102. + case(18) ! Ar. + element_covalent_radius = 106. + case(19) + element_covalent_radius = 203. + case(20) + element_covalent_radius = 176. + case(21) + element_covalent_radius = 170. + case(22) + element_covalent_radius = 160. + case(23) + element_covalent_radius = 153. + case(24) + element_covalent_radius = 139. + case(25) + element_covalent_radius = 145. + case(26) + element_covalent_radius = 145. + case(27) + element_covalent_radius = 140. + case(28) + element_covalent_radius = 124. + case(29) + element_covalent_radius = 132. + case(30) + element_covalent_radius = 122. + case(31) + element_covalent_radius = 120. + case(32) + element_covalent_radius = 119. + case(34) + element_covalent_radius = 120. + case(35) + element_covalent_radius = 120. + case(36) ! Kr. + element_covalent_radius = 116. + case default + write(*,*) '!!! covalent radius not available !!!' + stop + end select + + ! pm to bohr conversion + element_covalent_radius = element_covalent_radius*pmtoau + + +end function element_covalent_radius + diff --git a/src/xcDFT/exchange_energy.f90 b/src/xcDFT/exchange_energy.f90 new file mode 100644 index 0000000..0054274 --- /dev/null +++ b/src/xcDFT/exchange_energy.f90 @@ -0,0 +1,79 @@ +function exchange_energy(rung,nGrid,weight,nBas,P,FxHF,rho,drho) result(Ex) + +! Compute the exchange energy + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: rung + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: FxHF(nBas,nBas) + double precision,intent(in) :: rho(nGrid) + double precision,intent(in) :: drho(3,nGrid) + +! Local variables + + double precision :: ExLDA,ExGGA,ExHF + double precision :: cX,aX,aC + double precision :: Ex + +! Output variables + +! Memory allocation + + Ex = 0d0 + ExLDA = 0d0 + ExGGA = 0d0 + ExHF = 0d0 + + select case (rung) + +! Hartree calculation + case(0) + + Ex = 0d0 + +! LDA functionals + case(1) + + call lda_exchange_energy(nGrid,weight,rho,ExLDA) + + Ex = ExLDA + +! GGA functionals + case(2) + + call gga_exchange_energy(nGrid,weight,rho,drho,ExGGA) + + Ex = ExGGA + +! Hybrid functionals + case(4) + + cX = 0.20d0 + aX = 0.72d0 + aC = 0.81d0 + + call lda_exchange_energy(nGrid,weight,rho,ExLDA) + call gga_exchange_energy(nGrid,weight,rho,drho,ExGGA) + call fock_exchange_energy(nBas,P,FxHF,ExHF) + + Ex = ExLDA & + + cX*(ExHF - ExLDA) & + + aX*(ExGGA - ExLDA) + +! Hartree-Fock calculation + case(666) + + call fock_exchange_energy(nBas,P,FxHF,ExHF) + + Ex = ExHF + + end select + +end function exchange_energy diff --git a/src/xcDFT/exchange_potential.f90 b/src/xcDFT/exchange_potential.f90 new file mode 100644 index 0000000..c634624 --- /dev/null +++ b/src/xcDFT/exchange_potential.f90 @@ -0,0 +1,82 @@ +subroutine exchange_potential(rung,nGrid,weight,nBas,P,ERI,AO,dAO,rho,drho,Fx,FxHF) + +! Compute the exchange potential + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: rung + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: dAO(3,nBas,nGrid) + double precision,intent(in) :: rho(nGrid) + double precision,intent(in) :: drho(3,nGrid) + +! Local variables + + double precision,allocatable :: FxLDA(:,:),FxGGA(:,:) + double precision :: cX,aX,aC + +! Output variables + + double precision,intent(out) :: Fx(nBas,nBas),FxHF(nBas,nBas) + +! Memory allocation + + allocate(FxLDA(nBas,nBas),FxGGA(nBas,nBas)) + + FxLDA(:,:) = 0d0 + FxGGA(:,:) = 0d0 + + select case (rung) + +! Hartree calculation + case(0) + + Fx(:,:) = 0d0 + +! LDA functionals + case(1) + + call lda_exchange_potential(nGrid,weight,nBas,AO,rho,FxLDA) + + Fx(:,:) = FxLDA(:,:) + +! GGA functionals + case(2) + + call gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,FxGGA) + + Fx(:,:) = FxGGA(:,:) + +! Hybrid functionals + case(4) + + cX = 0.20d0 + aX = 0.72d0 + aC = 0.81d0 + + call lda_exchange_potential(nGrid,weight,nBas,AO,rho,FxLDA) + call gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,FxGGA) + call fock_exchange_potential(nBas,P,ERI,FxHF) + + Fx(:,:) = FxLDA(:,:) & + + cX*(FxHF(:,:) - FxLDA(:,:)) & + + aX*(FxGGA(:,:) - FxLDA(:,:)) + +! Hartree-Fock calculation + case(666) + + call fock_exchange_potential(nBas,P,ERI,FxHF) + + Fx(:,:) = FxHF(:,:) + + end select + +end subroutine exchange_potential diff --git a/src/xcDFT/fock_exchange_energy.f90 b/src/xcDFT/fock_exchange_energy.f90 new file mode 100644 index 0000000..f019c04 --- /dev/null +++ b/src/xcDFT/fock_exchange_energy.f90 @@ -0,0 +1,25 @@ +subroutine fock_exchange_energy(nBas,P,Fx,Ex) + +! Compute the (exact) Fock exchange energy + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: Fx(nBas,nBas) + +! Local variables + + double precision,external :: trace_matrix + +! Output variables + + double precision,intent(out) :: Ex + +! Compute HF exchange energy + + Ex = trace_matrix(nBas,matmul(P,Fx)) + +end subroutine fock_exchange_energy diff --git a/src/xcDFT/fock_exchange_potential.f90 b/src/xcDFT/fock_exchange_potential.f90 new file mode 100644 index 0000000..483f08a --- /dev/null +++ b/src/xcDFT/fock_exchange_potential.f90 @@ -0,0 +1,34 @@ +subroutine fock_exchange_potential(nBas,P,ERI,Fx) + +! Compute the Fock exchange potential + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(out) :: Fx(nBas,nBas) + +! Compute HF exchange matrix + + Fx(:,:) = 0d0 + do nu=1,nBas + do si=1,nBas + do la=1,nBas + do mu=1,nBas + Fx(mu,nu) = Fx(mu,nu) - P(la,si)*ERI(mu,la,si,nu) + enddo + enddo + enddo + enddo + +end subroutine fock_exchange_potential diff --git a/src/xcDFT/generate_shell.f90 b/src/xcDFT/generate_shell.f90 new file mode 100644 index 0000000..c6e0ab5 --- /dev/null +++ b/src/xcDFT/generate_shell.f90 @@ -0,0 +1,32 @@ +subroutine generate_shell(atot,nShellFunction,ShellFunction) + +! Generate shells for a given total angular momemtum + + implicit none + +! Input variables + + integer,intent(in) :: atot,nShellFunction + +! Local variables + + integer :: ax,ay,az,ia + +! Output variables + + integer,intent(out) :: ShellFunction(nShellFunction,3) + + ia = 0 + do ax=atot,0,-1 + do az=0,atot + ay = atot - ax - az + if(ay >= 0) then + ia = ia + 1 + ShellFunction(ia,1) = ax + ShellFunction(ia,2) = ay + ShellFunction(ia,3) = az + endif + enddo + enddo + +end subroutine generate_shell diff --git a/src/xcDFT/gga_exchange_energy.f90 b/src/xcDFT/gga_exchange_energy.f90 new file mode 100644 index 0000000..b9773e3 --- /dev/null +++ b/src/xcDFT/gga_exchange_energy.f90 @@ -0,0 +1,44 @@ +subroutine gga_exchange_energy(nGrid,weight,rho,drho,Ex) + +! Compute GGA exchange energy + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + double precision,intent(in) :: rho(nGrid) + double precision,intent(in) :: drho(3,nGrid) + +! Local variables + + integer :: iG + double precision :: alpha,beta + double precision :: r,g + +! Output variables + + double precision :: Ex + +! Coefficients for G96 GGA exchange functional + + alpha = -(3d0/2d0)*(3d0/(4d0*pi))**(1d0/3d0) + beta = 1d0/137d0 + +! Compute GGA exchange energy + + Ex = 0d0 + do iG=1,nGrid + + r = rho(iG) + g = drho(1,iG)**2 + drho(2,iG)**2 + drho(3,iG)**2 + + Ex = Ex + weight(iG)*r**(4d0/3d0)*(alpha - beta*g**(3d0/4d0)/r**2) + + enddo + + Ex = 2d0*Ex + +end subroutine gga_exchange_energy diff --git a/src/xcDFT/gga_exchange_potential.f90 b/src/xcDFT/gga_exchange_potential.f90 new file mode 100644 index 0000000..41c50b9 --- /dev/null +++ b/src/xcDFT/gga_exchange_potential.f90 @@ -0,0 +1,62 @@ +subroutine gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx) + +! Compute GGA exchange potential + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + integer,intent(in) :: nBas + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: dAO(3,nBas,nGrid) + double precision,intent(in) :: rho(nGrid) + double precision,intent(in) :: drho(3,nGrid) + +! Local variables + + double precision,parameter :: thresh = 1d-15 + + integer :: mu,nu,iG + double precision :: alpha,beta + double precision :: r,g,vAO,gAO + +! Output variables + + double precision,intent(out) :: Fx(nBas,nBas) + +! Coefficients for G96 GGA exchange functional + + alpha = -(3d0/2d0)*(3d0/(4d0*pi))**(1d0/3d0) + beta = +1d0/137d0 + beta = 0d0 + +! Compute GGA exchange matrix in the AO basis + + Fx(:,:) = 0d0 + do mu=1,nBas + do nu=1,nBas + do iG=1,nGrid + + r = rho(iG) + g = drho(1,iG)**2 + drho(2,iG)**2 + drho(3,iG)**2 + + vAO = weight(iG)*AO(mu,iG)*AO(nu,iG) + Fx(mu,nu) = Fx(mu,nu) & + + vAO*(4d0/3d0*r**(1d0/3d0)*(alpha - beta*g**(3d0/4d0)/r**2) & + + 2d0*beta*g**(3d0/4d0)/r**(5d0/3d0)) + + gAO = drho(1,iG)*(dAO(1,mu,iG)*AO(nu,iG) + AO(mu,iG)*dAO(1,nu,iG)) & + + drho(2,iG)*(dAO(2,mu,iG)*AO(nu,iG) + AO(mu,iG)*dAO(2,nu,iG)) & + + drho(3,iG)*(dAO(3,mu,iG)*AO(nu,iG) + AO(mu,iG)*dAO(3,nu,iG)) + gAO = weight(iG)*gAO + + Fx(mu,nu) = Fx(mu,nu) - 2d0*gAO*3d0/4d0*beta*g**(-1d0/4d0)/r**(2d0/3d0) + + enddo + enddo + enddo + +end subroutine gga_exchange_potential diff --git a/src/xcDFT/gradient_density.f90 b/src/xcDFT/gradient_density.f90 new file mode 100644 index 0000000..7d9e0cd --- /dev/null +++ b/src/xcDFT/gradient_density.f90 @@ -0,0 +1,45 @@ +subroutine gradient_density(nGrid,nBas,P,AO,dAO,drho) + +! Calculate gradient of the one-electron density + + implicit none + include 'parameters.h' + +! Input variables + + double precision,parameter :: thresh = 1d-15 + + integer,intent(in) :: nGrid + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: dAO(3,nBas,nGrid) + +! Local variables + + integer :: ixyz,iG,mu,nu + double precision,external :: trace_matrix + +! Output variables + + double precision,intent(out) :: drho(3,nGrid) + + drho(:,:) = 0d0 + do iG=1,nGrid + do mu=1,nBas + do nu=1,nBas + do ixyz=1,3 + drho(ixyz,iG) = drho(ixyz,iG) & + + P(mu,nu)*(dAO(ixyz,mu,iG)*AO(nu,iG) + AO(mu,iG)*dAO(ixyz,nu,iG)) + enddo + enddo + enddo + enddo + + do iG=1,nGrid + do ixyz=1,3 + if(abs(drho(ixyz,iG)) < thresh) drho(ixyz,iG) = thresh + enddo + enddo + +end subroutine gradient_density diff --git a/src/xcDFT/hartree_coulomb.f90 b/src/xcDFT/hartree_coulomb.f90 new file mode 100644 index 0000000..42f83d7 --- /dev/null +++ b/src/xcDFT/hartree_coulomb.f90 @@ -0,0 +1,33 @@ +subroutine hartree_coulomb(nBas,P,ERI,J) + +! Compute Coulomb matrix + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas) + +! Local variables + + integer :: mu,nu,la,si + +! Output variables + + double precision,intent(out) :: J(nBas,nBas) + + J = 0d0 + do mu=1,nBas + do nu=1,nBas + do la=1,nBas + do si=1,nBas + J(mu,nu) = J(mu,nu) + P(la,si)*ERI(mu,la,nu,si) + enddo + enddo + enddo + enddo + + +end subroutine hartree_coulomb diff --git a/src/xcDFT/lda_exchange_energy.f90 b/src/xcDFT/lda_exchange_energy.f90 new file mode 100644 index 0000000..dcffb30 --- /dev/null +++ b/src/xcDFT/lda_exchange_energy.f90 @@ -0,0 +1,36 @@ +subroutine lda_exchange_energy(nGrid,weight,rho,Ex) + +! Compute LDA exchange energy + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + double precision,intent(in) :: rho(nGrid) + +! Local variables + + integer :: iG + double precision :: alpha + +! Output variables + + double precision :: Ex + +! Cx coefficient for Slater LDA exchange + + alpha = -(3d0/2d0)*(3d0/(4d0*pi))**(1d0/3d0) + +! Compute LDA exchange energy + + Ex = 0d0 + do iG=1,nGrid + Ex = Ex + weight(iG)*alpha*rho(iG)**(4d0/3d0) + enddo + + Ex = 2d0*Ex + +end subroutine lda_exchange_energy diff --git a/src/xcDFT/lda_exchange_potential.f90 b/src/xcDFT/lda_exchange_potential.f90 new file mode 100644 index 0000000..ece265f --- /dev/null +++ b/src/xcDFT/lda_exchange_potential.f90 @@ -0,0 +1,46 @@ +subroutine lda_exchange_potential(nGrid,weight,nBas,AO,rho,Fx) + +! Compute LDA exchange potential + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + double precision,intent(in) :: weight(nGrid) + integer,intent(in) :: nBas + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: rho(nGrid) + +! Local variables + + integer :: mu,nu,iG + double precision :: alpha + double precision :: r,vAO + +! Output variables + + double precision,intent(out) :: Fx(nBas,nBas) + +! Cx coefficient for Slater LDA exchange + + alpha = -(3d0/2d0)*(3d0/(4d0*pi))**(1d0/3d0) + +! Compute LDA exchange matrix in the AO basis + + Fx(:,:) = 0d0 + do mu=1,nBas + do nu=1,nBas + do iG=1,nGrid + r = rho(iG) + + vAO = weight(iG)*AO(mu,iG)*AO(nu,iG) + Fx(mu,nu) = Fx(mu,nu) & + + vAO*4d0/3d0*alpha*r**(1d0/3d0) + + enddo + enddo + enddo + +end subroutine lda_exchange_potential diff --git a/src/xcDFT/obj/AO_values_grid.o b/src/xcDFT/obj/AO_values_grid.o new file mode 100644 index 0000000000000000000000000000000000000000..5f828e0b2bb3831ac684ee920dadedae3acfb835 GIT binary patch literal 3396 zcmb7GU2Ggz6~5!$#!DMK6UCJlMC1{=piQVzoCjp9M%op-PJTi7N zFzm&<7~p&=m|uLFG0HJ)0o_mqzv4*6E)N#FJ|}H^@va7VTCk!4yf8O1wFUN2SeAXt zDwGFDZQrsNZz;fA3>Itz{Ivak`H}Xi5Q`*7m$5$zM>OIeN7vyGU)F%6^3wPOIyK67 z_rB78{J$;rQtHK2e=6JmH8K7791emQYVB&8?j?Si6z8$1EeX|F&$!1-uRYmUd)rWr zM``C8*D!Bj-nqfo5mnUdPnyl9dH9c++P}yc$Nc$z;ojhj(sMP_^%vni_XlEVJiKEp zzZ(%=Z~X?)}Q$S6gzb zTnDZ?*9xoQrDDRl#Mg)jxG!Kvz++zOkkCzMmNRLe6~ z%K8BTKK$)OJL>sET5(;5s5OO}-hPh^w2253qaf9peJF-|O=?{Ly5@s>HzWzu*^*1# zS!u4liL!B8H}~bI0OVCVWhS(zLivY@JZPiE;eQI8i4DXuyy%Yw7;jTt1YIOK6EI(=qh&ao(vTyAj-MpqHGn6rueuE9p-2bh8%xJT#6M0r9xJq# zGP(#?wPOnZ*;Y!`T3xso)Wic)j>opte1)HYj;Q%bo|9Iswgm7BPr$y8ejEJ_8Sdzo zI&d4FdHyO!WXtpJEj70ck6*%qo?C`B&2@F|14;IZ{Gpi6Fi)D!Bo}l#E`v;;bDt`* zfFV*8?iI2hQp7^~=MLdSoqCu);JU5LL^r)uoyK9~gZ&MA^dkU~HbOXD>v zG(n(rdBOunL>gFE=YAoxqm;dK#4pbiyCA^}d*XW^`87sz8W|(T0FK!%UaQ1MlGQ3a zmh#RMnJl3VRLGr52TLWWxm>H`W8!n7GvGUe)2BmD-GK2)9reLvPX8g5z}h3fk*qKu zu#&qWxly$ORs@gyjhQ+T$2JM<)dYqOL%C@vw}5_7L|)@lIH6|GBp+96U%~fI%=i~v zlm<(fi_uY9#DENRd&R}`{*|THjz4ZTac|LWs?5p{34I;uQkJY~1$`hC8q9}SWFZ6n z9%D3E3kP(;M0=|KXV8271F)ICnFHF_UryyyFQ;BfS*!C@^E}t?9>R%NJCbz2K#$!$ zD}ROB!MiOxSO*&G6vw%h>AFK7|Eqv8z2|md#9cg@eA4G-AL;nM)THI`j#&O{#PE8L z(5G7$b@}uVD4wVve;{4z$G1tEJ-RZu&=hTd zYmDxmS=c{;zJa`{h3`%lrB_Cq_Wc%r5TA?q1Ko@IgT(ApQ2?;EqZju1gYKEuC?(i7 zABnDF@N`>u;NgozfDj=1Li0sTif7n&V~pW?>pTaEcIbP+!C&WF_!#2@)cK=8_6BkX z&SbwE$b~@W0@)kLPX_V_aK_TkIY_WSGz5v4WaqO;7a=?U3?rWMojQWU^a@Gb{cR=4 zHWA(u#vl-|rl_zK~Lhe%Kc(?xSp81dO(Gz=geUIL=N5@0{WT8~9 zln2MG(rL>smrG@4*%RXouW{RE*61LeBxaqo$MD>**w*P&cClzNYphfr9V*#{0>*zjkcGxllgWO-y52Fn^RogEo29Am{V9Ag>bKkd7qbuspDgt0#j literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/DIIS_extrapolation.o b/src/xcDFT/obj/DIIS_extrapolation.o new file mode 100644 index 0000000000000000000000000000000000000000..43039889fbdabe7bf6553e882bda3abc046de6e2 GIT binary patch literal 2584 zcmb7GO>7iZ9DmaeFhbqgCN-&vgozoFUW&U)V%MNy<8Ja62ZLI)Mq$`&XX%>Voo1MY zY8olo)-Wjpn0Vk|qDKxyICwxLvc;TJ9?p^1%ps#AGzRctBmZjUgLE zFm$~)-Pap(OZa2pK=Fv|k{D|zwa7*Y!lCQAUA9#y?+gUZ@n(WJr9dyC80s+`LAfD| z`iceHu(HJ-U(_70Z<#MgIo=p*iWj5{wA8OLpy#b@$?!$Z@pc69js_khLA(=4K((!6 zY~Y_@AXLmK2_9WZzn)Deum<}!;K(D49Rb3RZNa2LHPNK)qjX5|zen>}aYs{o_}DGYNvVBY&Rowp=Q!wSnq-=~kvr3T z;R=bi$onIxE9q_(_*W18u|~_yYtC)Wnajw>zx517mAm34FJ%E_o7s1(DekCBvbub(43#B+=ud-jf_|80(R;BC+Fp8Bwjnr zt2F_nIKdOs^YWYG*?GC|!tm_8+#b<{YnpH|lUUq)F;lHenlQCFF}?RQ$|`B&NJyPW z;p`n{?wrNWUE{4C*tWK4#!X$7xZC@jfG)2t^@qTyftop6`JIo8*s1m2PVrWR%?Rh? zwU^wEKl0&vc;&UXaA7`~I9It%DLXTD@f)wpaa)aYXOX)d3!y!4S}%}$)9SS6 za6r8ej8BoIlRi0j7=A&GWV?ks$J8TU&>%VZ7+J!ITHwydszf}B9+XIc>J9@T^XUBz z^a;?R&6NiEg$8=A!KMpA!Z=C;9S!Ii*rMHq03UkD_f696p*cUlwJrH}a$9nHQlBM5 z@4NO*yl>gol5Seyby1~dO2_Y>qFh)ll^>x+lV;c6$MRucBsxanG1TPa3tU*#ggKm& zNeVps=U=dMpC{Un@6*91lNcjYwvC;JrI@=7D_=DCD0>EsvXaXdbCqJ&#yg|f1BQ|< znU%7wn0cjSluYYg#Ws~}v1sP9c5u%peXd}Zl|5#q*smBvIm74=?Tdv{q2U#rJJaE( zXTp20GGQnxMB7$KhtcT)$e+NxLEU47?;;cFb%;a{wTSfDMLG|*`Vz$zeWL5YGLe=l z68m7ePxMq*i1bE8Mq0%ea6zt&^oRgh`1-COf)AZOM17FFG^^NkIN<&0zDACWt-cJz z)8Bm&h-|Bm0a4j%6Nne8+W<;HEx=TO8-OUhdlANXvbxs-$&U^b-mY#rK-wvaL-#-7 zCjlxze0SRk5i0T_FoFQ#d+!E(%)68r+eM z^Powm)GX@^|6|HV*3x&G#oY$jLCY94%Kf005|y%csZ!Lf9#(wu8J6b$AC)*bnlY5f F{sxUCHJ$(f literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/NormCoeff.o b/src/xcDFT/obj/NormCoeff.o new file mode 100644 index 0000000000000000000000000000000000000000..5c0e45dd5665421e882562d00200d13555a3d330 GIT binary patch literal 1432 zcma)6K}Zx)7=Ejxj+HZGbl9MQ4c=i63af=|9n!%OHkd=!S}UoqMR!nGQ*0rrh`Tak{r~^I`QPx~yx!gU-Nsm= znPGry@HLvG;INbM4Do;1jV76RqiSLfO-4?-WI~jSi)A^NJU5ij?eloHqI5`)dP!sG zq@>0k5X2@#X{KCUD3mfXBE&(xRi%?s3+B;C+zW+ByU~OwPK#inFk6(-!+JHPx2hH` zE4_6H(I+^{*tAMTz%g1h>o^i|s!75(QQr>Cw=gyU#5#5fPKHqA^r}{PW51yPW$rci zsypK5My_PT@7blVd9TvvS4-T_hWEJRRqktk_|2;X`e0S-3q9@+R=Y0r)V`3o7yj@P zpXz3($E~_)Q9CS3WWx_VwJ5Gfyl#$qT!#>fmvvsa7p+PjRIA?A zl$^CMXT@?!$Z;tbn9fH?Zb4*<%UUn|97$#lOX^B8DLbxs+(AhP?IBu_0!u=08*GfH z>t=o%>=oqq_lXjuXj`N9--Qm!HdLQhnPV@bWlm~2PEBC1h~O(kAH~Toz05=N-Su&I z%pG?pT!HvoL|)X*;o1hNk_|*7``MrD_Hw^Yw<~T9oRA5YxO15$7OjMJtW96Wfq01c zDfrf&wD_JdjZT(fJ#CVc2V3@JM^ T74(AkvZ1W}^Ynm`r=j%+OWoQ6 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/RKS.o b/src/xcDFT/obj/RKS.o new file mode 100644 index 0000000000000000000000000000000000000000..762b74e396c872365a021ef49a2427a5dd08aa9c GIT binary patch literal 22196 zcmeHveRN#ab?*!kFeb)V?lV+LtauzQM8z01d{vW}SOUpC16MpfFpX$PB*m62x3Z)q zkCG`Bk{Zplx|PRq@>qE!b@*6|CVnlg-7GgT;G`oPOEMHA%$I=x4mcpiF&1{Q1q9UJ zZ=Z8#u0}Qq>3S>wyt|~?XP=LK_St8jefHVs&OGt%kq^!e1cC(teBi$j|C49nBaDAM zAIE=!_-URUf1(SDNC1zAgJ!_{XMTNsyeSc9NTGN+*ID`W%D@kwG7SP1v6=KZcK?&5ccsqFr`KTUdF?tt&p*a| zUbFNfR|~;>dL4#dkzt|_^gPA%3WwHE4JHlH`tTReYg*#&ceTPx7!`aiMhk-4PTixcA#F;0nbZ0H2dyTJ557B*>ZvJ^Fd|m!Xzad5G$W`YL@DTYAkr zc$((dcvXM5=AZwF%^xOfc_Ucv(Z~*VP|r&wBg|K)j>N1OCS|j&AZ%-61}#*2*-NCg z138$rX=PPS>7k}F3X@sEn#qAm6z-VT&m!f%R2?~_tgVMtbdPcmU3N#!nwApgXQ-{HByObHU-e5ey^tdk_LPg2P$fl6b5z@-;&}{6qMaR!rALun^J(c>|d+aFPjm`AC;~X)K&^b^`%`lVVl{ECclS zGK!H{$wKsE_!M#7g@$}cd=t_kq?^%tGt&OnTq{;`m~(B!RqnO)#I+3>p18L7(xYA) zWOpD<=EeZC;u?@l5m$yuuu=x-v9b*594l3Jhy=pOw31f~KSpM?$nwjq0XS(XFCXa^ zFAbTMvRuooPLf#ifVr+o?^H#{$8b6R(Jc}Q>br8jwLXvqN5)YqEy z%3x5PJWw6k8ykAH;QI7}`N|zqLq9K2>B4i=h$h~j390B<*JO3NGFTaX3&JappIPk= z9e#m>=FC<{GH6?Lsz#ORil7RihRfuenN#4gmE!P?*#`(sR=Xoc8(U?!T%Rr!i=kZXX;@GPVMUHx^LN^JiuOHV(|VJ!5TO{8 z?e-QSm$bJqFI^~J1~s5oJE|=@-n`>Qd4i# zm#2j019ll11EUAn4)X5`e=^t0t#k)Bf4XQuGk`d;>tE#fgFclBjqtgD?JwV{o zfar1S)}&03b=g6ye;9T^4X(6{U`SyLBYRbPyKKcGajZ8iN<7*Rf-8a?z00R}+5r}0 zoC!ca^fJ1c2ezpSEMpx$Oox2wBBVpiM;kdaU`tV~6!ujr^`*tH02v|2 z9h1XLm7P#9wxLKy9B4HabKj?J7CoU$t)`sl$u4ZCJGIU*FE-*t$F1bclnwGTfR4M; zE;aqH1UVSa6FINjf#g~oOkrtkXneU!?XR%z9>K0?ZGBrshpl^tkY#Ob$LS^8rdNF@ zcJh5EI%#drSU<`HhpJN~)Zm8iU*Q(6P>CIi;8F z0il2@pbHYrz$^?qJR`nLj;%#~QkX8hye5_DDfaM@ijd?RH{hu1AL5SgME7<*g)@k? z(UUSezcF3-jMRqdBh%vTD36bVm3G2$S93-;7}Hf%9&`p*(|K*hoTnEKvjw!_5*t3! z`y>VXI946muiV|%qAIvh{kyRAYf^`l`-0=X+*92w&!yI)Bx?tbSw-_y|41;BX_op_ zDC89mVWy5*w-)X?X4Q>$Pr$pH=LB~-!F^8jX!oNkI1%gL9jb{w+j}?p0f*iIz?bUp zw(A1%bEt@QddeVT9+k54&nodKbFsYi==Eud_$KhiDe_K6BttwTKDKDNJ}$BHHWXSL z@0Th&WmZ`=fU496&aDIfL_3U>Q~}(5Ctau~*xE{h@LY`Y(}(f{2=>aYbrRP2; zgMuoIM5e7p6@f^mCbhq(1j5V8vnm*(GkOL@3EybA>sOSo6WmMrMPKQ9TyY^&^D^A_ zFnQf}aaKwk3aznP0+wKdH;dUs;u;hLtkTygxe)B>YcY3EBopi36Lc&!4oiE#T?|=r zJB8i7^%3i`DeLPCFQ&}9?J!o#Q(|?y?G9rYj2YOj_qfyvn1SI~bdQz%Avz*cVPVQ~ zCy2B}PGEKK%P!|dYUt>46&(j{@Tu4d#Cf+hS?6Fwk=wC;wh% zLA+sVfHWF(?2hb=V?w1-dhT%KL``b17@6KP4==#6LX8v-k&r%EjB@^lF@IPQ&vrfS zjWr5>xlq{;HZb%^dNd_k?Hnr9ZCJnQg>Rz(bvNrJ9E7V3wrEV)p7V_*tMyPD@(c|* z%xWz97R-%xH%=IDE?+$QAbJeULF?_Ji;g>r_{fk0)4+Mcd5p4@OgEm&lr~@8iFi+TnVVNBFS>-<8vtp)wh`}DfHe~HZo_#nA=7Bb1 ze&Md}Lr(DL5EZP#WcR2Od;uqun&{)b-=l#*zYqr37dfK1wsEsYud9lPjbp7=!Sc&0 z!;ErB%=f|&lLluvf-^p4a7Hh(w&bAL25k=5nBfl=CajHDE+IYbx4Ca>n_mloQhapN zvg;S8toe{YZoDJt32kL9<0J!dVI4>Jbv>&sZ~u5uRwS_moVXwrq$6w6tc^#}8YW_g zP%#QaPq&V}TWU-}FT;$U6(OTK@*)}E!XCkG23b@b;WRy06sZaxoR-o98U`nwbn8$E z>k1z09++j$C&FHi`=)XyjKR;2=d|;wqEoQ_H8H(if&)1~ z2LV`_26Ur=9RNnALLqH!^g_5(Y`@qe(#CM^0?ZD_i4d>@)%~ z`V2wwpakQj^@4*He4#dy&^9?ZSzBS)*#{yd(lMZx&iz`^tgRRkCls1?uT+HSWrFD~ z6=Emfsr439G{y4tvXM=&b$qhx1^QKWMhKCnx%gVGdYo+;AZbEfv3mAMFj-SheGDedi#Ej z`;6J?kJ2%ylU-ih9W1AqyBn6|6=oiXBY?9MZ?vQ0+J^cl2OFQibsx`M&meKH{ zo(vK7WJtheh`jgGGY=E#K8NF*IH5Q#LIvSCLZ5KNA0f>m(3JB$t$}sfxb^j07L$6n zT@Ekv?N4*NL&#PD=3_b zK+h^V3AI@V4oC%T&K}ef8^tjqx+)Io^bQaV^e#AjftaJ5J<9V>W6=@qpJJzrMJK!V zkQvbgxWk-%Fo3Wwpf&Iqd4y;=;av5eHRpQZz*{h%DykL4!9*vB!#lwYAvjCKI}SlR zX~L=79n1%0U$R|0EM!lXGfdM=Yr>VmJW8evrdJNCoWBP85+b|cE^;oiPtP4w-XQ_f zD`$boCOFE?caw-|0i2yFqJ2cQ!>pnkBy?qcZ^-)5-o>NJeMb#VET1FIq@FtopBYZ_ z)+cEEWiyEG)R97~W+b~&psbEVK!@o<9P|)F!R0V5FpttNI_^HleJfGvo&OFcF3S3k zTxHxdhNhrvGaag41k!jA9HNsPi@w{ty9VwF4*BIy^hoc0T;H4$2O^=gsX?3)2OA=# zOu_0Y(Zb{iM8i_k@g*}9R~A!N0bxR@5PU>4v7ljZL6C;zUQ;3qT5lWXq{;oE1j%C5VcQJbq8`m9AEt|tW*eqEyfoT`O`B2EW)pC*E4p|W%TRwH zo0r=i#!UTF?G6W62HIj`!Oua1izx*@Zg6jRm^8SUayNf>h=0`Gfvj-|bi9QH41vSb zd1e}rM>cexo+7f$iKYn2N-TYwjjaF?5o9`Pg|t~_9EiLi!P;mg1JrxN7G%LRr(Wd7 zfd9P+CBBT4v$sFM1KB5mVY(s6y>&=*iY_EKiT)oIkpWx-L5IYp$OU=14U{YBPgsl! zYy^D?;TSw5%w#nH^5Mj__|n-)M}D6#pOfp==j3~7PQI7E*O%smd->Z;T2>Op#?E=p zVFMa2*mtrC_P7R)TRm7Q6dB(?V6NvmdxK~|EiPDrSg=cF%-m+m%xa|wFakE;fclCc!3Pm z6AJx-;BMJu#ZX12!OFQDEC#oSkY&&`4(T?#g8YL2o*QKZhY`Z9fRA54)NGYP2Eu>* zaxO z1{Nbt_23m%Gq!%YelgBJ)mqOSYwA@)hZiKsyO2OS%Y5l_ zU%JAVR=#wtFWrH(^aJ{vkmh8Z@~D9FExz(?NPAxVI0r!U%fV1u2;DmF>ynKayGR!^ ziDfLZhAgbqA3{u+hHKc=x(tUV6j}Y>oI@e5w2L0}2|p)tGYyo*sYEX~fkx!bc%h9` zz!Tg57e0l*B`5rI@U|l7>mX)Z&f7R^-!EYUZ)N!IH}&>q;i{5nX6v#^tN*Vc*wgG< zoSOy|^Wo;zhs}#h&-u!pg;9q(Ep?Fg>tLTRf54ZfZhH0a@}=+frKz7@9qK0^Q9_z( zGG%mAxi52{@AHb`kVbS4cW+Yh8eOa#$_m@}`%6)}Kf=kXxKOnb1(q#r+!Ym^ShlEOFOO=ee4e}}u zLM*uI(m6vw^h!cQaHfePm>f2*b3mXJ;%@Si6}%oF&zZoQ4q!nla)CWoWW7R z)t-1zHtY2cPUW4t-9y})%@9vf(Hkv@V9*eczFNUxkw!cRb^s&7KQG16?P)2I4N^b^ z_czwb3H=ltfpyNXNAI-6I7TBI=~yb7cR${k`R>OXQpO-Og;Mut7#;Q;B(X1IOi-u4 z`NRTfPyer%Ti+-`ibMC}gCWr-IH6{#$N>!Hd|{50LYvI`Ee7ucy@}7iGL6gU3CDfT zTtV^T$vfFE%AWjjMTIl&d+@`ug>nV;0q(SZ!v9!U+F@enDNFUW{Vzw866e4^m2R0#ax!SdK1|L_X!&lJNG2aNcKDn z?qNQ-D9wdW?`t^A#-hi2AH(f{Dp+RMMECXnleZ@_rtJw} z2zAA{uPF81JSOcvN<3MD8q&i9m`vd+JK3TDH>T}bGrnkM{MbMLc*&wi=ARd3(c^bK z#@Wa~*Y$nWU84O6qDp5Q^zBJjC8`iCLBvBxIuPm+mBZzrFU;Zab;%8OE$7#&8ivp? z_jus}^zfp=;}{a+JBWO2(D8EXe}2IG5!9ecNw8zt2(J}QGzG6V!ZWQ?2nlHgWXx>w zC>75{RanZ7bj<|rAosHNBs-GuPfiWJ>kkR3pv5WG?{m$YsC%VG_vAeBVfv?Uc|-?s ztaz1|`VDZqd;fv9w+~#HZBX>j+xtWXX%;zhR+7?*_q4kGc4j6$AI*Il7d!cp%*>Df z0L@QlX0}M-3^P;A`S~z2^NC#i$-BJHvp2Emi92xD`1`Oo>i2DLwtxXyuODh}o_TwE z8m}QGpTJjGpny2EVe_dvHa$%@y{yJP$TN}mwF5Cm2r64!-$O_n=YGEP1Vh>&u}ExX z689Lm-I}Q<>SQ;f2GQMOo8A!H#P^`Eh)(j&rwtO9lgJubHjy|iBKu!J0h6-E@tFbakO8Cmph1hVJnfwf0DJo1$8n38iWoje8yo$OnZ#~duy2ADxw zi9lkuecMGz$?Zb)0PUOHki*bu`^G>qBkrGju#wCd}g+N!ri-sd;Qzvp{#j&t9O)f-Ud~mL$*#78rAz<&JQ`Cc=ZUkI=BP! zo=v433F(}Aan!swZ&2ckly1Cr|FF0-@7koQ04i#32_#MyW>>t^KzolQ9 zqxxn2Efw8-N`DJ#cR-dqS|(U&670j-+MRQ@GHP%k-mCFBT+629eG7z5k5G*cqDfEX zjQeHkNF)P=a!yY9_B-$WJD)yvAJT4P_kY0Ma)M9PM0fYzSK~hKxW^|}{Zf1-3CzP` zqBQFuK|a(Sz9h>lTE`uSR-YUb>xDYC$P1wk=W~ECYv1zR>I{z2*}|+_4J(%Qt~~$3 zsve=21%rdBq9$zuT`RQ*M)h=>Q~@rmb97=v~ddQSh`2_all8T4{6T^S{uvJ@_O?X8F8klR4f(_d_H`M|9t?zKj-u3 zart)Q4!qfiyLWVw^XK0NyXbRLxhGHM&mUdB*!c7Bh(F&A)zao|pMp6vDkc|G;~+$T z9wORCn)+^v=t1d1M}%j(^!l=^;dk@zagQfbF;4z>9QWA7Q$NSv;XcoeQCY=EXepSX6Gy}*D@aXy>9 z0qOJE+r5uD!TsL(>^{eh+o72I!o)LAa_`qKn}HjBCo_mpGlN--(r{U2gO6$bwg>YV zyTBYuc^GLvv>+j*eNkiN6f*~Bhz>R@1%ly8voc>=d1*8#mj>8eOuYbbK5Wm3jo0la zUz-Zk<}TKQrC`jA^#{B6MV4vE#c-oK4LSuzmYsAW$TUfa@F2|!W(X5NYK^o8 zOe4yH*M zAXUm!VSLq0^ytIBPlkwNg_XRJL+t-m2;pqTTW_hng;!)dkXy^d7!&d`Xh;VK_;yPg z@enq{1a@#eVJXWuiNL6mZsnCmYz;hy>kJ^HU^j~#cfQWSh?v8NTT0)oQs#K2 zrGBbmKaxR}Y!?ZC$$%dT&mzwpKGJ!vDyJfqiQ~&7BU!Q)x#FF21CT9|EdXOW)8x>w z&1n7Ck0c=CFMg@=w#qM6ez~%Kx7>f~+WIRxB#zg;@R?ORsQ(N43;R#0D85MSePKUx zgzKtw!pTfe&!R)YTgh+WQ;H^HyRp(U6F%aT*1D0urO`7o%x3(9=90^s1OvG(Dca%Ge*eQs|uSJCk|M zpZxDN-~Zoh{#1T*Z=8|+krNTU=1)u&yNyvAlW{XU5V+}vn=fsSmIW$XTiaJP z#@DvDg}>I`)w(*|lvvf&v^u=5X)eY`!~sC#H4l|bO)kN9+l<+-Vezgn{@ z4$f|9Z)sb4b4%m8T<>7sJl#wGpFNuY(n#GUm61#Md4+uHbmZ#a4k`0j%OQW%eL?jN zH&-X{zv_mYuWN7nYFl-ybeQWe=Id`oioS71A&g^S zUh&2PofA$M>O|>=GYdm3D*KzW3PB|>ue|?kU3r^T_%wbbXWkA=;~4`-4IDG@fPn|C z!uv=7?H)ozn(gKiM?2nN6PFH9{(mqKKV8WOUEvmVafk}c16_fjdzGR4aa25KUb&`I zra`G0kp{&Y6loBWDjy4cAM${Fmfi=5-KgZdfF;2HHz1t0k{-Y?@b!R;0RIB;Q-I3g z6@ZI@e-02q)RId~`5aRoH08g(R(_YLx^K6`I}~2JSO(n}K&5_)P=* z053)V7XorTC4h?oivi&omCOO;c;8wc;8XJV(CGgGm;~fFVt~cKhhVNbjvoW!9kHc< zkKYC%{!KvQ3qFev{2lmX4L4%qiPv4B>3tlK`0bYm0=WMy`63|OUkz9W_&PuEw;GW7 zHv*oAdMf}~)XG8N?=U`C&hLIRzxNWI|IbV0ccDtY1;}y!9U#Y<0>lC;`6}QAz#C2e zZ6?3QWLD@?v^@)wwV%j5@4{v?j635C4iLomr(cz$iD!P`Evo8|L8?J|NDT< z{{|rQue(s^e-02?ORu%XCY2Nea=rtA=z3`ogCPDIm?r*z0g3kllFmP1(CqiuVU5Qj zY~oh|vi?RcR{V{lGVv53%U}M4u73u8c#ilrPy!5P>Ca)OIE7mQA=;&FfM8|mG1wu} zxdV`N&H-e*@uENgLs+^Ci;?*ZEwf(Fxf=ffhKqdO@iAThnK@b?9tY%njRI2d9|WZQ zzirAlnsNq-IG?v0ybBPdOPUSdXv%Lgcnu)BEcv{_qo({~gI@>;R!Yt{_%U@DDTY%t}?L7z!C!s4Ln?^>+d)4 zK?83zaCd<&PZ_w#K)w~ier`1|Xy8-9K;SauKLW_{>;xpg{M8QP8vqvr{w*N>N_gC1 z`7MAfuK`>Pr~pB-Bnrs#^8r~t4{$Ny96Gh0hbmn7rQ^e3_fM>Cx~ON z>sDy~wi7=y5b%E2@VmsJTi)*yev+ydW@{>^NTz@nOFa%yz)!)%D+733JKH<` zd7U_qtzFkNyI_61y`$dz6sV8J`gr}#@5-zUdQ#T+uP84b7vDi*U8~AP`{?LarN4!ws`&OrndEK<9}HnsK+_ArLk=d zM%ISo26I-gZCumd*4VoC_9isMaWR2R@V?52cHpN^zxXNCuGaQ-U#SnYUKhoG zB|z4q10tfU#E61gXaZ^>fe>Mllk_&? zFR-*s3}|9w(8^A*P!J)eiYXFj?)DVH%7Jg@o1Mqb&fQ((z1cyC<{_W}I$#+|007bl zc(vKzDuB5lX=Pm>dJ;q%20?^KCiapJcl_CKZ1%@@SwRu(hqHW(PSW2Th!BZ&v9`0a zm2ggl_}#Chl4Hs;7zE#V1{P=X60)vBwiyI%BJ1w7ea!I#E>wO6Ec#GKrT{4TWEYtK zADO$vs+oyn%H#u!kFsow$p)jW9?q8O$teVR{39as+#0UZ0m5$VTUaJn}{nMZAUI}(4!qvI-krV}t!Ucj+SXraP~`}e`J-S3NC XC@NRPYGQkLBe^d~m^nYl5Qe@0@i2YJ literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/dft_grid.o b/src/xcDFT/obj/dft_grid.o new file mode 100644 index 0000000000000000000000000000000000000000..c6b967f8c5a4638b5c300dc44be8cd9dd5a6b641 GIT binary patch literal 95064 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 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/elements.o b/src/xcDFT/obj/elements.o new file mode 100644 index 0000000000000000000000000000000000000000..22a95300971220557b15409110a2371adea3366e GIT binary patch literal 5228 zcmeHLeQ*=k5kK3)HiSqDb*P(i@sWyRXaGxc0+c2?SvH)(7}XX8Cj=o|CtHa=%t_*F zLgLg;u?C#F9r~RnZo*8N^dqEYQn#Ie8JmH&bV>rDOqvc3p@Ehb3UNqa3iP*kd$m!M zG=F#cW_Ew~+ugTs-@A9Gcl!O6zh5g7guDU)3SxousS|qd%9*)wW0Or_X;jQ zcJr?AF0ajA^#+!|Ofzp(dPM50JpMNcCDiq#9oD*@u)}_KQp8qP4M*o-e&^NJw6}AA zUS0ODd#KL3?0aYQPTAL)pVqnU=hY5-WPY{7nmMREK12z#XC8RayUP2ZclDssqu>9! z?CAs54rvMv`Z6s6&BClATkTk*WLG~werypoMM?0WWJ(k(`BrHAG&7&fDvb1>`N z#L=;gY?PNqrMc>;=t~%}&Czka6<*V_PqR1&27AX^ zQg__I9AlX_rJp7<*iXA)aCE$W$~TB@q36Z6uw#jp>{|*ZQ%u1Vm3_lSO7;XMX7?ag z$yyx7afRsQikP-Ae1vv^Cf{eg+3UU-O1lbMQ0oe}ef&`GS8nOeiB$c>!KuRDM z$adJ$h@%?lnq)V`T*EsYW2hwItVtVwjku zg~HK{QAlWAC>jej$2bfbZ)}pHsCCgQRjQJFQoXcHT3D~vhnBW_V~tVCFE#pNUQJr! z3pKU`qS6YVwluL&^(E`0zRdlJMWIEiH`SPuCH>Owx%uhobB@y2*fW>GlMT)k0A)@XrvQ*&KLi3CE@eGTfe zRITPudoxOFAm(qbiu#k@bVFjH))4Zx1ls%|X?cCSKjV%2;#Cj(A~mUn@ulJVWSu4m z*Nyhrjk6R6ro1@$nS8-6Ke=-2vOJ+&Ui72=KM;g_Wyi6Tjo3l5@8XHyg|m6`YscsuX^6wd$9dY^|B}O+k$7;PP*g~n*wFet$)|k`m669 ze|qE{PucwLZC4ju@ECb6c#agVowKQQyu9_1osXXPkCSirF1Yaa;(WR7xvu9=9uVX* z=WEkTW(o4U=dT=U+I!v8J@iho;}6$7J%Jfp))WfzrPGVr+ILyy?2hT{9{uhFdCErV zr^?U9%aK1uAFi$_mLo@ADtusSk=#1yzo)xkoP6}$eR+G%Vw~D@%MUjd$d{k_=bskL z9LMv?myJ3Ld3 z7H|Z0pa$_2@N>YUz?r}yAl?|_ZeTfZ2XH!YI}ktQVi#~4Fb#A7!@$n~1He0g)j+%t z#7dw9bO6hMB|w~aL<0)85J6nGnO2#9YbaW@d>UU3KTlfdo3$-pk) zt-v%8dqE5XKLHE?aWodIfwurRV-;z=G$5_lLqJ+D6^H|lxB^J)H4{kdMF(vg@FMmE zHi38wh;JV8Rp3P6K_JfD;s6k*5wQvtl6gd+>+EQJDEXw~qOKOorNO z=0}(>WIoJ%Hgo;aL;Pgs#q=nmU4u~mQs$f3-^aX(xy<}5#be>j@4@55F;)j|2DM`p z58lmu5A$B;Pci=%^R>+TnCBBmJ#9Rm%Z$fjQhNhJ`P-O#*}s$fkFej){)y}_X6|54 zH;396n7_~c1I+)yJjVPC^KUXAX8sH2$C96wfiyv)3n`8?)dV_w00H}i7lhnP#u-{g8qnJ;F4FY{*R-OTCvqk21-zrcJ0 z^Yff<4f7)QuVj9Jc{}slnD;TC!F(65$M=b2FYILhuaVyd+b#&Try<09@yt-`hY&X# zU5=sj4!(guk;CbCZ)`k$VvXf3IUIiswMLR!S_>tDq3}bQR5~`+gri$~kpK7@6PZc} z*K7E{Wo#&=NJUgF*wPl#LM`|+<|AUFiL~1KK@n!=U>HYEA;_mp91M-4V9+=U21h-K zOuQM1Mh$d^3<@#de2ANri zRFZO&a*=ZCHnLZeos^4|Q>SEilbw`{lvBSNEjSiUrDwb6&T~;HDK{w>DW^-QQH;Nh aoJ1j&q}-%jx`|W;*-5!cxkx$jqy8_<-K9YQ literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/exchange_energy.o b/src/xcDFT/obj/exchange_energy.o new file mode 100644 index 0000000000000000000000000000000000000000..45750161c4c192d1db358cb67e780323e384290c GIT binary patch literal 1392 zcma)6&ubG=5PnIwHl%hphaMs*?qQJyX(2u3V5y-ktgu3FQITu z@!bOv{RG{NRib;^;~8-tS2e5BNZ=8Mh?_eheP$mJ)T z;KL;+_~H1w*|jd`)re(NEg3X|FibN1X1u<U*mHtU(PTT4Y@BA~ zm5lFOs(iy)bFGTIj>%-Hpo-R~57qzE$_-pAA%+uN5gI|OxLou}xWOJ)5sPKEuv)lM z-m>Llc)C`4-7Z%pC~(ZbW)uzRFkK)mqe>#u`Wivp0%`y_9Mk{=%~4kmYodS#f! zZjG~8BNa;>?@DaogYF`J68gC%B|PU$qm!Yh*5lGh-|f)o`|IW%O`}7g+kU4;Cq|#u zCILy^RtXZ)iaIj7QdPMmR$|70r-Y`2UFash%4@5 z)bCe0lq-anZp>ZdUSqCOTqt|oTkvY-o1F1-x!5LJz1k*P9Ufq#j{L8ZVb$Rbh<^hM CVc_Qg literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/exchange_potential.o b/src/xcDFT/obj/exchange_potential.o new file mode 100644 index 0000000000000000000000000000000000000000..351f7dfcdf010b298dde75dc401b77667e5ca491 GIT binary patch literal 2788 zcmb7GU2GIp6rO1ZSWDSiV>LBt!#s?!J`}sL4_zan6Sn3qPO)gItwM)&nQa?)J7ha6 z^(T#Hw}x@q()cDZgajXWllY*-L~VrvEkvp&f)7S~Ftn5^Y$7yOS-&$sZCQ)Po4tGP zIp>~pzjN-nbMM8)`8(@4jxXo%hc2LVW#|$OIPPKe1Ejb|8(ZrrB(g#Cc=+U~+x|c` z&C~}?4BVz^?Jb?{9=A+)tZ~NVk8H2_I4(dUfqRRH*EB6QV5a)|dt5=OzfRXr($x{Q_)0|BP#WG&h=+w!IYU2e_ouPLrv3rwRkF;)K~X++4VQ$8Z5Z} z_T1;Be?7*Fe_CAyh3@W+Z7N$qCygEH@Ez(q%enz%em00S97ao@NJBYbGLoG{HjC;-UAD z`QiD9Rg75IlrJdMp(-`sI6-D7iESOerHbJjs&zYTRmpa~!?`M%4UdW07>uDHr@kdE zG!g5Jn0*>bz;4NHq4{cVm+TWq{3Og*&6E3xH50tGJzwcCw=YNXl@CP5uaw8*@lE2! zEKT9I?a^KKE^WRLK;}#Oxr-Lmc@MOMw@}?6XLO@^XLh)iPWZvpWDAaq#Ky z)EvsA)%t;u*8r?4H-u4vz~3&{Q4kV=tzHhGMjkq1?}(v1rPBRKR9ru!jO@rnxX!$~)k7+B-vvHq|P6(R9A3=4xbdWaa>>i1K#9MX7iFby!OE?Xy%JG7@>nrrB zg4hK?*ZG3j3BD6@O3B&GS)}CGR{k^+qw=Rv!0BVNj}tU1sNfh?lhUzjyzO+v?+$u+ zzN_0kVRL_>%BbX4ZdsK~(Kxk+@>;I9f8W2E()|mEzQ_I@@RmST&jlyRt+)R;um5%4 zP`RO-Vs;LLsPoVc|p3GvX#pT*+r4)UJgOlc2}Ih*Hj_L#(Ik$zL}(NmJ~s-B7` zjQ!I7UcFz6MH8`fB5LAZlgwUSiYAS8zbP4UDXAxo)N7JyNYO;Xh(%4^@uN6gpV2Sv zH`0l{l0F#I^}XKwL|?MczI6}3Pi=Bb#ie8WHdkETQstO){Oiwg{9u3&RIc-l;wy0h z@*4Cj&KJGt-N&4OL&*69hsvBm^+>rhkn)1yBURnOH3EHa{SEJ|bp}nDbpk$@oc|~< zbiusB-{kNOj=s+I;CggOz#%??Zm#vhd9pvw3%KSu{|R0QxxBp+{C@26_Bzl%dbgfy zg&W*`^$Zj?wF)Ti!TKl3J@}Vlh^w>y6dnio)qaXUK&{P!BCPr(DCxtXxLfN#fs*JO zpukkGyYzQBr}@9ZX(i}4E|oyBL^n|^=|2MMhmH3>IqdRB9X#AY;<1+Z-Ze5S8}o2=D`OaeCT8FMFj<`VmECy2`yCXgDLov2ccE02`RK|i;drznQNAypqIUK zzVr9pbAR^Ui?^=bX<;nV%Yrv|=8jz(@`Fik6K+HR^~{WIT8n6MPM*}SX|i$=Vd zb2fDOLdQ2oXzLbVrN8=FZKXi^2u6+4=ldEoS2-ABqH_X!1>p{9j-oEABryw zSNGQcj)yxbF2!%CT@yjxSCM#a)lg&YD{9wHpJ!E#DQ7^oiaD;T`xJb(DYN50^T;he z@Zzf0z`%bFmz+`BMPPHbv)0&(V@4#qzTUjQz#|k*efZNk~%!qcBa?fm99U-x<+<<8z8m(iR`--;-X&*p%B!Rsu0X1T<;s zmY`39ehGF;z$NexETz8~@RapwxcvP^8B+~-Mq=@df?Gp3DYt)iAr<PjhUoU=&aV#1;(WKl(pyPP6LU%+|t15x3``9K$Axqzzn*-24*`lA>f=WJo(=xq4LUtXjq$rT=y+%{w&Qwks%ScgP0Mv1 zx6$U}oaG9Zbl9$CF|**GHD=mQ`UMjQE1N225K^?<%n_5BAWK^a!uwi+x;_9*h0(m} V_Otxs53wO0JaBPn)ca5x`wNwzmxcfU literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/fock_exchange_potential.o b/src/xcDFT/obj/fock_exchange_potential.o new file mode 100644 index 0000000000000000000000000000000000000000..560303afee63a4a465167b1d3725072590cf55ca GIT binary patch literal 984 zcmb7D&1(};5P#cjO{ki;LXnDvF2F2&llc4&PXqur{3{3Du)3WJH*?|4=dA|?#!(H}7 zB-K3(K-2V+R=ktHrF+r8`<47YPyM1zSOjmZg2A2k6H@Y@T$cbVAv!qVa?BY5o%8cw zfKLL4I&u~i1xExL-0432hhZ1l1vbI56X$s$oa!moPhOi>tT&3)P^r@5Rx?ANuV-o- zD&^k*u4HP<0M{Vv{z-11sPmoAspT{F;CmdZ+F}#^xGjc@G&V*EUqDW{IUnJ&Q|_1z zK@~p9TjiD7Hl6(dPj(unww3yN2--EBUa!Y@mK5vbxIMgzrDju5>Kh?$KDsUaib zF!?*JmEnRblPt$3*%Z?n?o>hseJ|WSM}&$bNC(1^IoR_a#D_t@Kov^x{Sgs=(WvyK z&jUlVArHiD(F4iH{URP39eKFV1INv+L^w1_nlE1|R{%EI^z9VkiJH5J&>?3or{iaRDma0MY{lFh0;s1`uWf2?9ZU zd`W6W34{&dhqy+BAowsAObN(5kXzt@g`ok?1~TH~Q#0bziV|~EA)@i|sOD8b6-Pkn zA3*a!ehdIQ2;?Si28Il%6qr&0k^&$WFBg~(QX>Jx2~hP7Kw1XK2kK)80AdgTc^QU5 z>d672J3zXEeUjx|y7_%uZ~O3j-0<#|k@o7-f-$PY3k%@YCg!={EpGl z@?`B*$L3dzmHVS(4}&y{fOP}iUlqi_SRueDz{Acl0q7YUpg72%5B@^{EIt@mKtAOY zXk%hw12H6;nOU;IA`l48W|CMTsS; T@x>XbIXUqRt{#whHDmw)r^{SU literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/gga_exchange_energy.o b/src/xcDFT/obj/gga_exchange_energy.o new file mode 100644 index 0000000000000000000000000000000000000000..3ee163886e79cd6584ccb12d8b2647ac7ce74801 GIT binary patch literal 1208 zcma)6&ubGw6rQx(Ce(IkOFcv|xQ9K&gJ5fscrh+o*c^nSi6)q42z8T+v6fOWib5f_ z5c|Vk{2x5(#j9d}DD+?v^rC{Gg+Lo>gF^Ap_`RK3jDp~Ux9@##=6&F#b z7HDU9z%}?2N=!KH5IjcsU)ClEHvBmXgOiaHFPRWiZh1=P5+{e!$=}$|PAVSaBP|;s z=%hi7O;hkqh|;wwcQRj!$%+tv^7)!g)er)YuZ2p)-D*O(W1=vbzv0U2-+XDM>#=Hz z`g|awEgxWPtd-9KFsRVe<&|kp7;a!by_ac3l8!z$3@7VQPD|0A)so2m-|WlwrSsJ_ zJ7p(R7oEy>Y%Z91<+abe;EOsa6V>mD>N}^pUf?^;a|`8We|@XFz>nPbW;xZ>1~>W| zy!WmZbt=nYXO3jChRuy^ouQtzOw73c4Uf^i0*@}EmbF3!hmXHTTC&1;UbT#x*TxO6 zV0c}s(#u68zDIrEoJ|VQ9J~m^Le0(hRa%Mv6s> zbR>~xS?Yc`@P|K&2#W4Ue-zn|f@!lhbyF9HW7W;I3WK;>Rs*s!Hsg2RyIDI?FYnxQ zzH`n!_nhdf z!jKK@?+*C4a80^E31Cn>5{D7QN(u`bCsrHbaQt{8a&jQ7gj_JOV=EU@ z$!(;S@{7d6(USuwB8KXp@tCZ0O0Fo$c&o^-4!Wlpi%FBtIA$A3Pd}++^09+9;NJ*7 ztuS^F9P4xr#>kV1T1oo3Sa?vaR>i5`m*Fao*0o>tWq!zZ zYS|fXM`$hA)+N$;U#6g`zSW-edS;e?2v1EFceEGRV0y2|mup%S_m*iUZ31O zomVHX;GL2;d1={C^(3_HtWiexJhxGk(QL{<1D*n}s5ZNnS?$R@@MVe>b!Uj%9*4FP78TO;ZbUt5Yk|a`P0UyqsCd+1fz+2o7I~A_&v%pd5++-M>y8>f zNa*k;%@ORsvxAd3wm`C<3z4lyUIdQu)`}XKqmbVKj&Ua(gAkz;>d+E&Uamyd*2OZd z*jni2U8sv}uALIoH>Y+%8DeO@DRUSF>U%5W=e)d|ZS zP}wL7JH@$kdsRjwwrZ+X)5f7gb%?qS3C%^^%aHWW_J=qXxYy`*@K;J!?_AK2POJUj z!AK=})u8@HG;^HCG;@NFBA2V0`xqZa;AiD>$wPl&i|?rxyq>^ifSYhyLEo$3*FkRfhWV{NPsr2f>Gy;S zz52M;2`xss^UE)2+?TlYwPC;A={)yU`RB!TiT{*#rAuGNN}WxHz)bJH!AzqzldZ8q zIg1~WPOE0nDvm@Nwflit=w!CqKBzMU`=r?roH>gjw4SNAAON%Oet(A{xRMPPx|6JD z>n!JRo>^Ve!C%dRDscxmhQo>J3C8+~<8HC~z^$;=>VIA0JT{}T4@CAQ ziT6lclK2&gmnD8l;#G-Xkhm=I^Ac}J+#>O&#PkBKD6DqBq8Ci1cFRHHHi(OQ`0aOC zcyMqa92q?t8yFglK$D0JC5{io!z{kv4RV3@fnEdc1$BV-fL>+Y!nowyf!b+{zX1zJ B1*`x7 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/gradient_density.o b/src/xcDFT/obj/gradient_density.o new file mode 100644 index 0000000000000000000000000000000000000000..f3ccbb937066b9f8b2faad94e486dfcf1a2a3e1f GIT binary patch literal 1272 zcmbVM-Afcv6u;w6?oc^1fyqQgTkL~Dl zY)pFUA)^1FpqCzZR&agjV^y*x2!xO=sx80q9#8XP8uk!a~m_|XPF zV6%`9doO`;sd+NKQH6ZNL+Rvb-*Dupo8HX#i1Em*DGMLy?*&sL%lq($ugS}7=6k~U z1lCXhK0GsD{^rJ=YCcy6>25I>ygE&IDrp6JaCxF4O`n0mdjA{Unm=vVwt+6tyt@Z#W)+%mUdI5ijHpKo znHB8X4PB~z3Z}f!oc96UPB?;Qs|vMZ;j(UrU%OqFL+w~&AZ{PZVlB*$+i9nv1sNuh zcB(tPu3KL<>thP!u(a(q#ZGC4R$Y3v#exZQgcp-b46v_ znPOLu+O77ey{a*bZ9s=|6MdArjt>tX2NsXjdLiMiwGnPi=H%@`VFph2I^_3&u6TVF z|Gg0&Z}XB~{e1K9)r-6WwN zetUb63NQo)Cif!3T@?=iijeT%FMfvz3;z4VJ1@dz_TLZENFEn>AjXB!zJa0SNZJ@k Yj$9r}Up2_^$wtybz1J9lC<0}_0VovozyJUM literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/hartree_coulomb.o b/src/xcDFT/obj/hartree_coulomb.o new file mode 100644 index 0000000000000000000000000000000000000000..c472fdd7b487bbc4c13d3edc9c79aa23af4eb759 GIT binary patch literal 976 zcmb7D&ubGw6rO3e&0;mPqK67XbI73ukro6E9%M@bGi4V=Q?1x`ZEHdfmO@FON|C@C zVbHBT`X_j+M=wH>65A@Y&|a!u6rmPD2~nHSp!L1|Q9#OS{2XQybU!7Ql}pd&u)s6RN+pL=LG}l;{v4c# zS`JJhg#!-6veH>AGc!Jw_D=tv7tDF$H|>BBe8vI<)YM5x*1vKg22n$H^Z3 zfRry|B-}2kJYLJ!>?O+S*F=0X|2A3NVDqbRIp`$LQX$uQ`BNzA3{Zovi1K#Gpj)E+ zA;cY}!et^>)185RNUF{KeZUc_aXAue3MbdD84qv8YKCmRz@H}rcA9nH$GxP^v`$lg zH09?E>rQ|~`NohN&#}(U;l9l-fu_AWyAGRI6Y)}=4X@<4g5F z((jzM67g#ODYrq9D(q#|I6oI_vf>?3bz@W?(MR<$-C8>CZin}E_cEcg8r2Sm)dko( z2j?fj-$OZC@ZAsv-)Ka8+~$$4`H)AVj-ud)9qD=0uAuBl--8a1oU_BqML3G|d3lfD z;ZN{D^FW18w5S`&7$UYF1B}4xKnHGM7y`4h<1@LLblRGn&flJ%ny^Tcdw+y}Ecp!_ CjKQk_ literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/lda_exchange_energy.o b/src/xcDFT/obj/lda_exchange_energy.o new file mode 100644 index 0000000000000000000000000000000000000000..84f0bb628192b44f3a1087b381483c5b67cb10f0 GIT binary patch literal 952 zcma)4O=uHA6n@)Ino#ZT6htCe+(QpV5E2g(Pj+bw8|Xnakrr)-pqs7`Q;89yhzLP3 z)JQLiM~@yodGVl7(VqM%-ZUV1DbykadhuZUy`5Pa1)(3j`QCf`=9{-O@8j>yKS?61 zpRm9L>;*e63^)YKar_^Qn{S^C$1yaCjddAH)q_S|`#LU6%@lUy*n46e*5h6z1R@PV zcjFpnr7D-}L9JBD>8w(J>peBa(s0Cm~f>r3`)+4;3L*$%fi66IyTwc;;vL)3MK3!|y7=ScCb>^s%f zb)A(%%zk^q%Af3Xo!RLQN+p*%v#VWa=JWMeSl6&|_@Li>E6>k)7rZ%de#JR5NyKMu z{2(eu*gEAte!1RxxB2=2ivrfIGh{WSCHE&&%jonra))8xw>9EEtgHVl=BAG_;%`mLdj5(3EVqV5Dw(I#iVZPuFG~)MyDb(I-hGC8v!xQPNrkDL& zZ-w{um@j(5^~OO6k6hWCG0Z#$KI?@G>hR=zPTh(v` z_%G8gY8SK~E!pz|mvyt;*AyG9vRhfcm?+FMC9ztVqV#5Ww32Wd=Gevxa~jvMRCgK{ z5QkkmqBPw?M$S0mZpi%RY|%}#Tv1{zrOEZ&qQHcA?Jb`smpk(Bm6-$3JS*rlV(XM@ zPFsb|eF?BahBh;2Twog|z0gi$mb6Cjbvr{Nx;;f>Wkuaq&ulzVQdV{)sg%eqf-gvAO;Jy84l`wJ zY1N$t-nj|cUKvB($As{$v*kxw>8qs0OE)D z0D^_W5MYl1MEGaq6M!--@cTZ9H#&WHRPhW;AUX#A-VZehmC5>0sUmAqp&tTE7609N}01 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/one_electron_density.o b/src/xcDFT/obj/one_electron_density.o new file mode 100644 index 0000000000000000000000000000000000000000..4074174d097f00a96de7ce509430d67cf0eeb0e5 GIT binary patch literal 1348 zcmb7E-%C?*6u(!mIkfh@g3yA(1^2;TOu+{S5nkNjd*dr)&03`1!nO=d!zNg$2)6~_ z*42U@dhVYH>SbW`iMMnMqk z1vr2u;A^P3fq{+z=Pm8u#~n-rTEHBj>K$qd$aQE0()Dm~CT#2W-R}$dYxkwnhER_Z*jBn6-tj#>bTu4X|PtGFzoz$v44q{+Ht zj0?2}JKhZvV<1mBk9HtjxyqGxmi>PY^|G(4tX@(FRlmkJ2QSjmLyYgz(bJSOWsPyK zQlgQV##boOvV2@gQd8=sd`QV+SR{sKnvVS}m&^22mPU5am!ptZAd7u4m1eeXGoGPo zYbt8Q9MrQmU5NUXWMrKzo`nz^^(tBQHLgOVL&};r8pb}|E1061zOu&OQzIc$lO;+T zPx~S}^MPU?k=a(MpXV5V7wRBw53B}7A|GWO29JkGn^zFvUS~BGi$!uJ4%}O!o=lMh zGSgqEk#=a-M61&&DA)o8H6tNX@v9~leV&hV&tRkZ4ji!Ol{KFc7i+7yXu7w6Z9$eS z>3KW%!HTA^Ly6&H)SPjHOj16p)s`WzbZhrngaopcI;N z=S=Tz3AHRU&+K8JC?r4)bK#8<^hC$Kho}5~ z`bCkn^p~iy;$mW|UraD@mwCRC$W44(3|JP>PdRYo3|@1P-J zmn~#lIINInHzWd$xZ!{zPW;B5P^0?4z`_KND(RCGK|MGg91TxRPUts+6L)Wg@9Bb% K+JB!ei2DUyl3)J- literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/orthogonalization_matrix.o b/src/xcDFT/obj/orthogonalization_matrix.o new file mode 100644 index 0000000000000000000000000000000000000000..d6118bcb87ac53fe7ca2b41356585376e0a08f0c GIT binary patch literal 2688 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 CD1W^G literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/quadrature_grid.o b/src/xcDFT/obj/quadrature_grid.o new file mode 100644 index 0000000000000000000000000000000000000000..c72abac41ebb107f00a5ef5fd86100c9fdc3770b GIT binary patch literal 3840 zcmb7HZ){Ul6u)If3gTW7(3;rT#78V+;h*p@Ak7lfBAa}W3D=eA9Oc*=OX+B(9v!{|B40{Xa_v@zz(uOb9ne<)EAQw zO;rtTz_4kXPsY2F72ct~yvnA?AH@>5nz1Glx!G<4r>SbX&(L$d-9n(MbNziK{IrX4 zzLYUqqtisV4vYBGh2FkOfVKX7v>3FrHn8Vw{0Z?asA@iEXnHE&W{Yb5F_AX`Y{#;> z@zL6=o2qKt)vTWC(QIk0KaX(qjxZV!{thf>jMj=YZm;$ygYlB!8YrTXjt{*I{Z%BW zN5{Uyj&%}`h9z5_%7LtGOA!B~MYlvBh;EK1H{Z|AzxbY?M=>!^uji&A`?#sdZHgI_ zJGeP%=H)OydbVz;JWBI%>F!Bx{x(Td@u4y|-Lf>e6Pr9o7?T6iV2Y%}G1)iFhRX2P zB8`Mel%C|JT|JB+{jsj%CMGvXgX?LywDA{m?hGZ&32E>;%av8byrjro-25hSnDPcW z<}l;{FTEzeVKEzJrPK%to@~I>U6Hcw&pfS|@5%3AbYf6G0JxbHA-X^a*(D%S&lK|m z%b#OrW62Jo;)R=omZ|VYyXko03wo)T3$rz3cBMgJwc&}F+)2AJbWs}l9*8W5kyN=; zF?Y#4dYGz68J1-Z*2|AnGL=WBAoCQD7J5XWLDCdi@)M2a zzX7zfgUGyx=)iFEv?Wo@bB8=tJU4%>;ZG-uV;)}o*kkF(P<@@z;{HCYBV~@5 z8k{l5kuVD{FuxO~V`k%mITzj{z(M(ldNg5<@Bi<5@`^}Xsup;o6?IKL z`R3HqD19CyClvFdQ$~uJ!F1^0O|8X^z*aw zn7kddv)}V-w5mRL$;oJO!WFv>XGj{l-l@?4SncTS;hS4v8$=Y&g=1HQs8G~e<&1wW zjU0nAo$+|&^LXUj80`-q##y#^1XNq83uncUJK`liBi+=&;zQ+Up5eo8If47q7r8if zr{qnZVg$=iCep`wDcMn%C_$7cZ5+?;kCdk*Z_G0}C2c)AC9Q}pn&ibYPUaHU`(yUBbYJL&5t}nOrI#xOdhr7+N0+RJG)WP%se;C7Xbx+}{VL z6_#7HT=#Y(xYqU)?d|T*r}Qgu6lo6yyT~DME3g^(Ao*;m_Sqatw1kq8w$P@?t?MFT zsI`VRHMN4ogkrEc)VwJYUe{{HV^P+^tkqt)!+K+Yc0GL`a}9W1-sMX?`;qZ|kkN_! z0sBVHc@Hu-eOv0iFD|kP-$lypVZrYOLdCyZ z$OnWx3cMD2jY7Ug$S)xXvcCW%e`7$3>m?!I1Ejc~5SRi|T=xJ;eK(Pea3v*tWB=h(7Ite&uUgf*HZcU!;Vum zQ|QHPSzW_#Pl~QsrslQBGTM_WQ)_NhNVNWZPb#gl{9U)AZ$NKFZ$WQHZ(?z7|AmTx IqmJA6ADqD(9{>OV literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/read_basis.o b/src/xcDFT/obj/read_basis.o new file mode 100644 index 0000000000000000000000000000000000000000..83958526a39a4d4e6892dd933c2edd8ccca10105 GIT binary patch literal 6356 zcmbVQe@vWb9e=MJEnUYQT~}qBC$H{p0xML&QX#8`v#`Fb*M_yQVW7RT^4n zK6n&|PK`fHA21k9ghvx7$P)~s7B6;%*f1$xxe9^&NeWv*JfW#t_qi;dcfO1GL z>t7K0$r4Rt4zAp4hkp}>E=?8~ctb?fif^(w{V&CD2J&pvKdEUK;2ZjBt@!almGz^` zl)V|hwLbm_F0zaN{y?VADzxuUUG}%NA2MH|KkHFvp7{Fe*`sEn3~tN1LYt!Ia~EXm#o=yALmPz=o(CB{~wRDq&B z>U6?rop9U23pHj|%|e9Wd!s|A=(-D?%{2T_Vdtb&S;-E6k!{BreshTfA7gGiwM&9+ zOLl^lMQacf*kf`NO-suROijzIaLqu446)K-b4`;fZRcuy(tG+AtdX%vmxN?Y{o9H#mG{sXrI^Q_bL_ z!ga+gXfvwc^Om^G!ZWaG76gpa_q>~r4}CO0Z#G;R`O9kNOFe8a%#QjA`mWN{5^C1e zbTQMXjDOMdOya~1OI}HNe{K(8_aSdGjS%i`^(ODcR&F|ribLvfOw1<&Z$4w_kPK|*hRU=F{ zow&iQRv;8(v#wWaY3-rOT61i&he;~wUDJBxv1vJJMHAz-eP}AUj8MM5OjAo{=WA9c z<>2aq)J|7r0eymH*>>{>X)O+!W3SdOb*iDuDDjSefax~IX^(W3-`!+XddK(t7c+3# zrRU6Rhr?xi{W@c?c2E*x_A7U4%6tA&#@(0+xYngEP0g0MF1>l( z^@iE-hmm(IrKxIX1{TMWsiHA;ZkVZ;oTqy~o8Th{#7J2KTWJEQY%hdKt^+bo-b0l> zJJkJ5w+a~Qh!x~3K#9zeyeeay_mz^s{GGN)^YUCli@*BEBhAm zG#K)y-Ntt7xEW2k%oDHiLf3iN-{n8-KjII*y0|}ag*(k)4`+JC}wX3TXkZ{ik{j>m!1@Jo3ThSqZanhmHqn?eUTZV{NwSo z2LI+d=V5V`_WXJ5AzEv)_c!c?tF_mZ#~yAHYqEC?_EwJK-aJ-#DO^hww|=aZd-GVa z_Pf>3rMdGsG*%wV{ybK!RkH>wEsIAJPxHpPH~up}KOFAv2|m~zkH&ZOHdJfT*w9Gg za~3c6*Vb3;?H-B8qunvxs?y`(MAedqf|WHLl`S>9Dh`YcJQyC<2YdB+B;4O0_a_Di z^w^i9DmKOO8hFc z=Fy?SSU8r5?-`6GhPy+F=wM6<-BYt`M@@C54UW;<;p!cUS<-P0|NdH!>+1(K*Jz2W zYb07G4a*7XhD3__HLC`!4V^z!6{> zZ~zF`eceFnd4~k}7Lfc!;m-jne-?-}?aN5}{nCB_NWBd}%IyShh1@nE^~@F7danZ6 z{wE;yTn4iJIUq9Ns{odQ-#`}V$2B0^r-lC#$o>;R_WzNzCxGlf0A#-~kp8p-Dc=gj z`t|vN)Hh24oB^`^k3j1C4Up|;fYkR8ka8j5oxoNyIefA;~Y=XM~v__hEk zw+TqO^+3A(Z>%E9O#&(RG7#6Ts>gxsf;Ga&r{jgSICe|dh0Mh`lu_5UU&@KH-&GM?}v{FFB8r^gG1q1UU6I$`kf7seRMdQ2s`VRT3$g$ z?5`j}lS`XnIMhEF&oZo>3HIQmc6x*c>xQ#Ty=J#sr*%;4-_w9!4PW&v@bv{2_}aw+ mUv(_-wUY(DKF-*i88V literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/read_geometry.o b/src/xcDFT/obj/read_geometry.o new file mode 100644 index 0000000000000000000000000000000000000000..c4848733aeb4c885ca80008367df863a0d69dd14 GIT binary patch literal 4308 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 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/read_molecule.o b/src/xcDFT/obj/read_molecule.o new file mode 100644 index 0000000000000000000000000000000000000000..92700d127e269553dd86c81689c90eb878db4fd0 GIT binary patch literal 2780 zcmb7G+iM(E96p;)E^U*|)*C6fcB6|Vn6bMxsSz!7FvVF28Z^;BO@}p^B#V1VXD8Yg zp((bdqfP5`-|CC`2gDFWsTZO?*eHU1Pz-pX54CTGs+jtHGv{n3qg%*R-RFHwzKlCh&u4WAXtYh3@dOw+-mNva&x@CDFooMA82K{ji zmQSZMG(x-1AKzFSGT}k*skB;9SX0^+Hdtaw2fZ~Y_=b|-R9vC)_J~;fB-Vb$LbTqB za(LzX9tM}B$ov8Pir5OH9A*07+#2-WNDmoEBljT>0>=ek=^(VF`@pC(--kghk09Kj zd|0J9D>GCJ{{e2J3syuWx75zrkP=ezQ&I5)b05vYh%u;LzNQ}|-7t|olu_{q1-Vn0 zJR_8S(ChVgr$XBGeROWk#~n)Xpie{80V;`L@ zIQB$mm$9$ETmRq2rJn3)PcFN^``OvjE4GuWOs4W~rBvOZHr%=n?#JM+@r!Wcc@aC7 zh$UK^Ti!vE=P`Ld`s(eVsry%GD2RwBE;eX9%y`FzZ5q!bo|@N!LD%_4jc;x|bGAuq z;h_J`W{uyD_==`A;8NTX@7GxLcqV|ZKrI9{^IX4@f)Sxzy_f((V@OixMQS0^7isf%tanA4q%;h*wj;AlJ`IUIOBq zqdyEpOY&?XnM?t3m`8~C4#oG<4{}t`#Utc!sJ^R7$rmukwp;SgCBIkluO#0k`Ksh? zlHZVgyX1dM?&pbw)pz$#_-KcXYL_txQNgz|%zumUuOs}K2!B7qGZB6`!s#pQ?_`AI z57g9T#c`c{+2T)i(sryu*|n!^C%jg5t;&pD-aJ*AvE-knkP0kccM7f@Hmxa-Pv@Qd zxC5{yn>A4>Z*qwR|8A=@FM?Hd%~_)O^yBFJ(fiPQ(H}$KCk~mx L->obdI|}|UGEDMM literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/read_options.o b/src/xcDFT/obj/read_options.o new file mode 100644 index 0000000000000000000000000000000000000000..fafcae008572a4bcd4212ef0befe2127da065f77 GIT binary patch literal 1396 zcma)6O=}ZT6n$x4+o0_jQLv(g2(#!WHtuwn!3L&KuxKknZJ)(X(ny_z$p}GQv?$_$ zl`j1o?nGQD3c-~>!J-=xb*HF{>Nzv-CDTE{3wO@_IPc8+ntA){%igFExxBywF5zMb zUSc4`argr^{$abiSK=6$$)PFeu^v#V(CdZ>v?;YvyRu-i0Zym%;<0#)vn|EufJMFQ zoiJ$n4PDIY8J)wre}M~3nVxRH0=<^s8B8#%SJm^1=Ymn!GJ1U>9Vq3kt9r0{(@P3j zy?L#-qxo&g_h9U#Vuc{q)FbiNAh{#hXW zZ*wlY+rwnfMtjcUZ1l}pn0>y9oT7{Fb{QZpxm%x$n2{TOaHAQ!>OMs~M}`}{b0cZH z(S}{<&DceYH3Vn5kG*?#MQ_7LqzM^Br#Hf~)2p#6<|5nX*kgzd&tNQU2;7gjF&BM* z#s%Z;hG=l#fRkoGinxz3X$W)CS8!rcqm2&>E zMKt~Pt#Ddbpmr2a%iX>xa@}ICI5t|?!D@N)IGx?!iJAK=Bv0BZJ{po^3?{bolILNS z9!kl>wx;e6%L0SS-4V%8&Uzu`&$uADjn-5Gr9^2$3noxF0m_IF0`~k6J$rS(q literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/select_rung.o b/src/xcDFT/obj/select_rung.o new file mode 100644 index 0000000000000000000000000000000000000000..51890aa6a8e65cb6ed8ab4c6e5c22513b4314bce GIT binary patch literal 2564 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 literal 0 HcmV?d00001 diff --git a/src/xcDFT/obj/wrap_lapack.o b/src/xcDFT/obj/wrap_lapack.o new file mode 100644 index 0000000000000000000000000000000000000000..c56d8e668731b4ce38a684bb1cf53ce8d115c18b GIT binary patch literal 5144 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 literal 0 HcmV?d00001 diff --git a/src/xcDFT/one_electron_density.f90 b/src/xcDFT/one_electron_density.f90 new file mode 100644 index 0000000..ee6a654 --- /dev/null +++ b/src/xcDFT/one_electron_density.f90 @@ -0,0 +1,47 @@ +subroutine one_electron_density(nGrid,nBas,P,AO,dAO,rho,drho) + +! Calculate one-electron density + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nGrid + integer,intent(in) :: nBas + double precision,intent(in) :: P(nBas,nBas) + double precision,intent(in) :: AO(nBas,nGrid) + double precision,intent(in) :: dAO(3,nBas,nGrid) + +! Local variables + + integer :: ixyz,iG,mu,nu + double precision,external :: trace_matrix + +! Output variables + + double precision,intent(out) :: rho(nGrid) + double precision,intent(out) :: drho(3,nGrid) + + rho(:) = 0d0 + do iG=1,nGrid + do mu=1,nBas + do nu=1,nBas + rho(iG) = rho(iG) + AO(mu,iG)*P(mu,nu)*AO(nu,iG) + enddo + enddo + enddo + + drho(:,:) = 0d0 + do ixyz=1,3 + do iG=1,nGrid + do mu=1,nBas + do nu=1,nBas + drho(ixyz,iG) = drho(ixyz,iG) & + + P(mu,nu)*(dAO(ixyz,mu,iG)*AO(nu,iG) + AO(mu,iG)*dAO(ixyz,nu,iG)) + enddo + enddo + enddo + enddo + +end subroutine one_electron_density diff --git a/src/xcDFT/orthogonalization_matrix.f90 b/src/xcDFT/orthogonalization_matrix.f90 new file mode 100644 index 0000000..ed837d4 --- /dev/null +++ b/src/xcDFT/orthogonalization_matrix.f90 @@ -0,0 +1,63 @@ +subroutine orthogonalization_matrix(nBas,S,X) + +! Compute the orthogonalization matrix X = S^(-1/2) + + implicit none + +! Input variables + + integer,intent(in) :: nBas + double precision,intent(in) :: S(nBas,nBas) + +! Local variables + + logical :: debug + double precision,allocatable :: UVec(:,:),Uval(:) + double precision,parameter :: thresh = 1d-6 + + integer :: i + +! Output variables + + double precision,intent(out) :: X(nBas,nBas) + + debug = .false. + + allocate(Uvec(nBas,nBas),Uval(nBas)) + + write(*,*) + write(*,*) ' *** Lowdin orthogonalization X = S^(-1/2) *** ' + write(*,*) + + Uvec = S + call diagonalize_matrix(nBas,Uvec,Uval) + + do i=1,nBas + + if(Uval(i) > thresh) then + + Uval(i) = 1d0/sqrt(Uval(i)) + + else + + write(*,*) 'Eigenvalue',i,'too small for Lowdin orthogonalization' + + endif + + enddo + + call ADAt(nBas,Uvec,Uval,X) + +! Print results + + if(debug) then + + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Orthogonalization matrix' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,X) + write(*,*) + + endif + +end subroutine orthogonalization_matrix diff --git a/src/xcDFT/print_RKS.f90 b/src/xcDFT/print_RKS.f90 new file mode 100644 index 0000000..5082fa9 --- /dev/null +++ b/src/xcDFT/print_RKS.f90 @@ -0,0 +1,61 @@ +subroutine print_RKS(nBas,nO,e,C,ENuc,ET,EV,EJ,Ex,Ec,EKS) + +! Print one- and two-electron energies and other stuff for RKS calculation + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: e(nBas),c(nBas,nBas),ENuc,ET,EV,EJ,Ex,Ec,EKS + + integer :: HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = e(LUMO) - e(HOMO) + +! Dump results + + + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A32)') ' Summary ' + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' One-electron energy ',ET + EV + write(*,'(A32,1X,F16.10)') ' Kinetic energy ',ET + write(*,'(A32,1X,F16.10)') ' Potential energy ',EV + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Two-electron energy ',EJ + Ex + Ec + write(*,'(A32,1X,F16.10)') ' Coulomb energy ',EJ + write(*,'(A32,1X,F16.10)') ' Exchange energy ',Ex + write(*,'(A32,1X,F16.10)') ' Correlation energy ',Ec + write(*,'(A50)') '---------------------------------------' + write(*,'(A32,1X,F16.10)') ' Electronic energy ',EKS + write(*,'(A32,1X,F16.10)') ' Nuclear repulsion ',ENuc + write(*,'(A32,1X,F16.10)') ' Kohn-Sham energy ',EKS + ENuc + write(*,'(A50)') '---------------------------------------' + write(*,'(A36,F13.6)') ' KS HOMO energy (eV):',e(HOMO)*HatoeV + write(*,'(A36,F13.6)') ' KS LUMO energy (eV):',e(LUMO)*Hatoev + write(*,'(A36,F13.6)') ' KS HOMO-LUMO gap (eV):',Gap*Hatoev + write(*,'(A50)') '---------------------------------------' + write(*,*) + +! Print results + + write(*,'(A50)') '---------------------------------------' + write(*,'(A50)') 'Kohn-Sham orbital coefficients ' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,nBas,C) + write(*,*) + write(*,'(A50)') '---------------------------------------' + write(*,'(A50)') ' Kohn-Sham orbital energies ' + write(*,'(A50)') '---------------------------------------' + call matout(nBas,1,e) + write(*,*) + +end subroutine print_RKS + + diff --git a/src/xcDFT/quadrature_grid.f90 b/src/xcDFT/quadrature_grid.f90 new file mode 100644 index 0000000..420e80a --- /dev/null +++ b/src/xcDFT/quadrature_grid.f90 @@ -0,0 +1,77 @@ +subroutine quadrature_grid(nRad,nAng,nGrid,root,weight) + +! Build roots and weights of quadrature grid + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nRad,nAng,nGrid + +! Local variables + + integer :: i,j,k + double precision :: scale + double precision,allocatable :: Radius(:) + double precision,allocatable :: RadWeight(:) + double precision,allocatable :: XYZ(:,:) + double precision,allocatable :: XYZWeight(:) + +! Output variables + + double precision,intent(out) :: root(3,nGrid) + double precision,intent(out) :: weight(nGrid) + +! Memory allocation + + allocate(Radius(nRad),RadWeight(nRad),XYZ(3,nAng),XYZWeight(nAng)) + +! Findthe radial grid + + scale = 1d0 + call EulMac(Radius,RadWeight,nRad,scale) + + write(*,20) + write(*,30) + write(*,20) + do i = 1,nRad + write(*,40) i,Radius(i),RadWeight(i) + end do + write(*,20) + write(*,*) + +! Find the angular grid + + call Lebdev(XYZ,XYZWeight,nAng) + + write(*,20) + write(*,50) + write(*,20) + do j = 1,nAng + write(*,60) j,(XYZ(k,j),k=1,3), XYZWeight(j) + end do + write(*,20) + +! Form the roots and weights + + k = 0 + do i=1,nRad + do j=1,nAng + k = k + 1 + root(:,k) = Radius(i)*XYZ(:,j) + weight(k) = RadWeight(i)*XYZWeight(j) + enddo + enddo + +! Compute values of the basis functions (and the its gradient if required) at each grid point + +20 format(T2,58('-')) +30 format(T20,'Radial Quadrature',/, & + T6,'I',T26,'Radius',T50,'Weight') +40 format(T3,I4,T18,F17.10,T35,F25.10) +50 format(T20,'Angular Quadrature',/, & + T6,'I',T19,'X',T29,'Y',T39,'Z',T54,'Weight') +60 format(T3,I4,T13,3F10.5,T50,F10.5) + +end subroutine quadrature_grid diff --git a/src/xcDFT/read_basis.f90 b/src/xcDFT/read_basis.f90 new file mode 100644 index 0000000..403368d --- /dev/null +++ b/src/xcDFT/read_basis.f90 @@ -0,0 +1,117 @@ +subroutine read_basis(nAt,rAt,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell) + +! Read basis set information + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: nAt,nO + double precision,intent(in) :: rAt(nAt,3) + +! Local variables + + integer :: nShAt,iAt,iShell + integer :: i,j,k + character :: shelltype + +! Output variables + + integer,intent(out) :: nShell,nBas,nV + double precision,intent(out) :: CenterShell(maxShell,3) + integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell) + double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK) + +!------------------------------------------------------------------------ +! Primary basis set information +!------------------------------------------------------------------------ + +! Open file with basis set specification + + open(unit=2,file='input/basis') + +! Read basis information + + write(*,'(A28)') 'Gaussian basis set' + write(*,'(A28)') '------------------' + + nShell = 0 + do i=1,nAt + read(2,*) iAt,nShAt + write(*,'(A28,1X,I16)') 'Atom n. ',iAt + write(*,'(A28,1X,I16)') 'number of shells ',nShAt + write(*,'(A28)') '------------------' + +! Basis function centers + + do j=1,nShAt + nShell = nShell + 1 + do k=1,3 + CenterShell(nShell,k) = rAt(iAt,k) + enddo + +! Shell type and contraction degree + + read(2,*) shelltype,KShell(nShell) + if(shelltype == "S") then + TotAngMomShell(nShell) = 0 + write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell) + elseif(shelltype == "P") then + TotAngMomShell(nShell) = 1 + write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell) + elseif(shelltype == "D") then + TotAngMomShell(nShell) = 2 + write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell) + elseif(shelltype == "F") then + TotAngMomShell(nShell) = 3 + write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell) + elseif(shelltype == "G") then + TotAngMomShell(nShell) = 4 + write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell) + elseif(shelltype == "H") then + TotAngMomShell(nShell) = 5 + write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell) + elseif(shelltype == "I") then + TotAngMomShell(nShell) = 6 + write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell) + endif + +! Read exponents and contraction coefficients + + write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction' + do k=1,Kshell(nShell) + read(2,*) ExpShell(nShell,k),DShell(nShell,k) + write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k) + enddo + enddo + write(*,'(A28)') '------------------' + enddo + +! Total number of shells + + write(*,'(A28,1X,I16)') 'Number of shells',nShell + write(*,'(A28)') '------------------' + write(*,*) + +! Close file with basis set specification + + close(unit=2) + +! Calculate number of basis functions + + nBas = 0 + do iShell=1,nShell + nBas = nBas + (TotAngMomShell(iShell)*TotAngMomShell(iShell) + 3*TotAngMomShell(iShell) + 2)/2 + enddo + + write(*,'(A28)') '------------------' + write(*,'(A28,1X,I16)') 'Number of basis functions',NBas + write(*,'(A28)') '------------------' + write(*,*) + +! Number of virtual orbitals + + nV = nBas - nO + +end subroutine read_basis diff --git a/src/xcDFT/read_geometry.f90 b/src/xcDFT/read_geometry.f90 new file mode 100644 index 0000000..8f0fc56 --- /dev/null +++ b/src/xcDFT/read_geometry.f90 @@ -0,0 +1,58 @@ +subroutine read_geometry(nAt,ZNuc,rA,ENuc) + +! Read molecular geometry + + implicit none + +! Ouput variables + integer,intent(in) :: nAt + +! Local variables + integer :: i,j + double precision :: RAB + +! Ouput variables + double precision,intent(out) :: ZNuc(NAt),rA(nAt,3),ENuc + + +! Open file with geometry specification + open(unit=1,file='input/molecule') + +! Read number of atoms + read(1,*) + read(1,*) + read(1,*) + + do i=1,nAt + read(1,*) ZNuc(i),rA(i,1),rA(i,2),rA(i,3) + enddo + +! Compute nuclear repulsion energy + ENuc = 0 + + do i=1,nAt-1 + do j=i+1,nAt + RAB = (rA(i,1)-rA(j,1))**2 + (rA(i,2)-rA(j,2))**2 + (rA(i,3)-rA(j,3))**2 + ENuc = ENuc + ZNuc(i)*ZNuc(j)/sqrt(RAB) + enddo + enddo + +! Close file with geometry specification + close(unit=1) + +! Print geometry + write(*,'(A28)') '------------------' + write(*,'(A28)') 'Molecular geometry' + write(*,'(A28)') '------------------' + do i=1,NAt + write(*,'(A28,1X,I16)') 'Atom n. ',i + write(*,'(A28,1X,F16.10)') 'Z = ',ZNuc(i) + write(*,'(A28,1X,F16.10,F16.10,F16.10)') 'Atom coordinates:',(rA(i,j),j=1,3) + enddo + write(*,*) + write(*,'(A28)') '------------------' + write(*,'(A28,1X,F16.10)') 'Nuclear repulsion energy = ',ENuc + write(*,'(A28)') '------------------' + write(*,*) + +end subroutine read_geometry diff --git a/src/xcDFT/read_grid.f90 b/src/xcDFT/read_grid.f90 new file mode 100644 index 0000000..fb2eb3d --- /dev/null +++ b/src/xcDFT/read_grid.f90 @@ -0,0 +1,47 @@ +subroutine read_grid(SGn,nRad,nAng,nGrid) + +! Read grid type + + implicit none + +! Input variables + + integer,intent(in) :: SGn + +! Output variables + + integer,intent(out) :: nRad + integer,intent(out) :: nAng + integer,intent(out) :: nGrid + + write(*,*)'----------------------------------------------------------' + write(*,'(A22,I1)')' Quadrature grid: SG-',SGn + write(*,*)'----------------------------------------------------------' + + select case (SGn) + + case(0) + nRad = 23 + nAng = 170 + + case(1) + nRad = 50 + nAng = 194 + + case(2) + nRad = 75 + nAng = 302 + + case(3) + nRad = 99 + nAng = 590 + + case default + write(*,*) '!!! Quadrature grid not available !!!' + stop + + end select + + nGrid = nRad*nAng + +end subroutine read_grid diff --git a/src/xcDFT/read_integrals.f90 b/src/xcDFT/read_integrals.f90 new file mode 100644 index 0000000..0644a99 --- /dev/null +++ b/src/xcDFT/read_integrals.f90 @@ -0,0 +1,114 @@ +subroutine read_integrals(nBas,S,T,V,Hc,G) + +! Read one- and two-electron integrals from files + + implicit none + +! Input variables + + integer,intent(in) :: nBas + +! Local variables + + logical :: debug + integer :: mu,nu,la,si + double precision :: Ov,Kin,Nuc,ERI + +! Output variables + + double precision,intent(out) :: S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),G(nBas,nBas,nBas,nBas) + +! Open file with integrals + + debug = .false. + + open(unit=8 ,file='int/Ov.dat') + open(unit=9 ,file='int/Kin.dat') + open(unit=10,file='int/Nuc.dat') + open(unit=11,file='int/ERI.dat') + +! Read overlap integrals + + S = 0d0 + do + read(8,*,end=8) mu,nu,Ov + S(mu,nu) = Ov + enddo + 8 close(unit=8) + +! Read kinetic integrals + + T = 0d0 + do + read(9,*,end=9) mu,nu,Kin + T(mu,nu) = Kin + enddo + 9 close(unit=9) + +! Read nuclear integrals + + V = 0d0 + do + read(10,*,end=10) mu,nu,Nuc + V(mu,nu) = Nuc + enddo + 10 close(unit=10) + +! Define core Hamiltonian + + Hc = T + V + +! Read nuclear integrals + + G = 0d0 + do + read(11,*,end=11) mu,nu,la,si,ERI +! <12|34> + G(mu,nu,la,si) = ERI +! <32|14> + G(la,nu,mu,si) = ERI +! <14|32> + G(mu,si,la,nu) = ERI +! <34|12> + G(la,si,mu,nu) = ERI +! <41|23> + G(si,mu,nu,la) = ERI +! <23|41> + G(nu,la,si,mu) = ERI +! <21|43> + G(nu,mu,si,la) = ERI +! <43|21> + G(si,la,nu,mu) = ERI + enddo + 11 close(unit=11) + + +! Print results + if(debug) then + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Overlap integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,S) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Kinetic integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,T) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Nuclear integrals' + write(*,'(A28)') '----------------------' + call matout(nBas,nBas,V) + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28)') 'Electron repulsion integrals' + write(*,'(A28)') '----------------------' + do la=1,nBas + do si=1,nBas + call matout(nBas,nBas,G(1,1,la,si)) + enddo + enddo + write(*,*) + endif + +end subroutine read_integrals diff --git a/src/xcDFT/read_molecule.f90 b/src/xcDFT/read_molecule.f90 new file mode 100644 index 0000000..3094c80 --- /dev/null +++ b/src/xcDFT/read_molecule.f90 @@ -0,0 +1,42 @@ +subroutine read_molecule(nAt,nEl,nO) + +! Read number of atoms nAt and number of electrons nEl + + implicit none + +! Input variables + integer,intent(out) :: nAt,nEl,nO + +! Open file with geometry specification + + open(unit=1,file='input/molecule') + +! Read number of atoms and number of electrons + + read(1,*) + read(1,*) nAt,nEl + +! Number of occupied orbitals + + if(mod(nEl,2) /= 0) then + write(*,*) 'closed-shell system required!' + stop + endif + nO = nEl/2 + +! Print results + + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of atoms',nAt + write(*,'(A28)') '----------------------' + write(*,*) + write(*,'(A28)') '----------------------' + write(*,'(A28,1X,I16)') 'Number of electrons',nEl + write(*,'(A28)') '----------------------' + write(*,*) + +! Close file with geometry specification + + close(unit=1) + +end subroutine read_molecule diff --git a/src/xcDFT/read_options.f90 b/src/xcDFT/read_options.f90 new file mode 100644 index 0000000..2f414e3 --- /dev/null +++ b/src/xcDFT/read_options.f90 @@ -0,0 +1,31 @@ +subroutine read_options(rung,SGn) + +! Read DFT options + + implicit none + +! Input variables + + integer,intent(out) :: rung + integer,intent(out) :: SGn + +! Open file with method specification + + open(unit=1,file='input/options') + +! Default values + + rung = 1 + SGn = 0 + +! Read rung of Jacob's ladder + + read(1,*) + read(1,*) rung + +! Read SG-n grid + + read(1,*) + read(1,*) SGn + +end subroutine read_options diff --git a/src/xcDFT/select_rung.f90 b/src/xcDFT/select_rung.f90 new file mode 100644 index 0000000..60c988f --- /dev/null +++ b/src/xcDFT/select_rung.f90 @@ -0,0 +1,45 @@ +subroutine select_rung(rung) + +! Select rung of Jacob's ladder + + implicit none + include 'parameters.h' + +! Input variables + + integer,intent(in) :: rung + + select case (rung) + +! Hartree calculation + case(0) + write(*,*) " *** 0th rung of Jacob's ladder: Hartree calculation *** " + +! LDA functionals + case(1) + write(*,*) " *** 1st rung of Jacob's ladder: local-density approximation (LDA) *** " + +! GGA functionals + case(2) + write(*,*) " *** 2nd rung of Jacob's ladder: generalized gradient approximation (GGA) *** " + +! meta-GGA functionals + case(3) + write(*,*) " *** 3rd rung of Jacob's ladder: meta-GGA functional (MGGA) *** " + +! Hybrid functionals + case(4) + write(*,*) " *** 4th rung of Jacob's ladder: hybrid functional *** " + +! Hartree-Fock calculation + case(666) + write(*,*) " *** rung 666: Hartree-Fock calculation *** " + +! Default + case default + write(*,*) "!!! rung not available !!!" + stop + + end select + +end subroutine select_rung diff --git a/src/xcDFT/utils.f90 b/src/xcDFT/utils.f90 new file mode 100644 index 0000000..19df907 --- /dev/null +++ b/src/xcDFT/utils.f90 @@ -0,0 +1,246 @@ +!------------------------------------------------------------------------ +subroutine matout(m,n,A) + +! Print the MxN array A + + implicit none + + integer,parameter :: ncol = 5 + double precision,parameter :: small = 1d-10 + integer,intent(in) :: m,n + double precision,intent(in) :: A(m,n) + double precision :: B(ncol) + integer :: ilower,iupper,num,i,j + + do ilower=1,n,ncol + iupper = min(ilower + ncol - 1,n) + num = iupper - ilower + 1 + write(*,'(3X,10(9X,I6))') (j,j=ilower,iupper) + do i=1,m + do j=ilower,iupper + B(j-ilower+1) = A(i,j) + enddo + do j=1,num + if(abs(B(j)) < small) B(j) = 0d0 + enddo + write(*,'(I7,10F15.8)') i,(B(j),j=1,num) + enddo + enddo + +end subroutine matout +!------------------------------------------------------------------------ +function trace_matrix(n,A) result(Tr) + +! Calculate the trace of the square matrix A + + implicit none + +! Input variables + + integer,intent(in) :: n + double precision,intent(in) :: A(n,n) + +! Local variables + + integer :: i + +! Output variables + + double precision :: Tr + + Tr = 0d0 + do i=1,n + Tr = Tr + A(i,i) + enddo + +end function trace_matrix +!------------------------------------------------------------------------ +subroutine prepend(N,M,A,b) + +! Prepend the vector b of size N into the matrix A of size NxM + + implicit none + +! Input variables + + integer,intent(in) :: N,M + double precision,intent(in) :: b(N) + +! Local viaruabkes + + integer :: i,j + +! Output variables + + double precision,intent(out) :: A(N,M) + + +! print*,'b in append' +! call matout(N,1,b) + + do i=1,N + do j=M-1,1,-1 + A(i,j+1) = A(i,j) + enddo + A(i,1) = b(i) + enddo + +end subroutine prepend +!------------------------------------------------------------------------ +subroutine append(N,M,A,b) + +! Append the vector b of size N into the matrix A of size NxM + + implicit none + +! Input variables + + integer,intent(in) :: N,M + double precision,intent(in) :: b(N) + +! Local viaruabkes + + integer :: i,j + +! Output variables + + double precision,intent(out) :: A(N,M) + + do i=1,N + do j=2,M + A(i,j-1) = A(i,j) + enddo + A(i,M) = b(i) + enddo + +end subroutine append +!------------------------------------------------------------------------ +subroutine AtDA(N,A,D,B) + +! Perform B = At.D.A where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),D(N) + +! Local viaruabkes + + integer :: i,j,k + +! Output variables + + double precision,intent(out) :: B(N,N) + + B = 0d0 + + do i=1,N + do j=1,N + do k=1,N + B(i,k) = B(i,k) + A(j,i)*D(j)*A(j,k) + enddo + enddo + enddo + +end subroutine AtDA +!------------------------------------------------------------------------ +subroutine ADAt(N,A,D,B) + +! Perform B = A.D.At where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),D(N) + +! Local viaruabkes + + integer :: i,j,k + +! Output variables + + double precision,intent(out) :: B(N,N) + + B = 0d0 + + do i=1,N + do j=1,N + do k=1,N + B(i,k) = B(i,k) + A(i,j)*D(j)*A(k,j) + enddo + enddo + enddo + +end subroutine ADAt +!------------------------------------------------------------------------ +subroutine DA(N,D,A) + +! Perform A <- D.A where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + + integer,intent(in) :: N + integer :: i,j + double precision,intent(in) :: D(N) + double precision,intent(inout):: A(N,N) + + do i=1,N + do j=1,N + A(i,j) = D(i)*A(i,j) + enddo + enddo + +end subroutine DA + +!------------------------------------------------------------------------ +subroutine AD(N,A,D) + +! Perform A <- A.D where A is a NxN matrix and D is a diagonal matrix given +! as a vector of length N + + implicit none + + integer,intent(in) :: N + integer :: i,j + double precision,intent(in) :: D(N) + double precision,intent(inout):: A(N,N) + + do i=1,N + do j=1,N + A(i,j) = A(i,j)*D(j) + enddo + enddo + +end subroutine AD +!------------------------------------------------------------------------ +recursive function fac(n) result(fact) + + implicit none + integer :: fact + integer, intent(in) :: n + + if (n == 0) then + fact = 1 + else + fact = n * fac(n-1) + end if + +end function fac + +function dfac(n) result(fact) + + implicit none + double precision :: fact + integer, intent(in) :: n + integer :: fac + + fact = dble(fac(n)) + +end function dfac diff --git a/src/xcDFT/wrap_lapack.f90 b/src/xcDFT/wrap_lapack.f90 new file mode 100644 index 0000000..aff8f60 --- /dev/null +++ b/src/xcDFT/wrap_lapack.f90 @@ -0,0 +1,147 @@ +subroutine diagonalize_matrix(N,A,e) + +! Diagonalize a square matrix + + implicit none + +! Input variables + + integer,intent(in) :: N + double precision,intent(inout):: A(N,N) + double precision,intent(out) :: e(N) + +! Local variables + + integer :: lwork,info + double precision,allocatable :: work(:) + +! Memory allocation + + allocate(work(3*N)) + lwork = size(work) + + call dsyev('V','U',N,A,N,e,work,lwork,info) + + if(info /= 0) then + print*,'Problem in diagonalize_matrix (dsyev)!!' + stop + endif + +end subroutine diagonalize_matrix + +subroutine svd(N,A,U,D,Vt) + + ! Compute A = U.D.Vt + ! Dimension of A is NxN + + implicit none + + integer, intent(in) :: N + double precision,intent(in) :: A(N,N) + double precision,intent(out) :: U(N,N) + double precision,intent(out) :: Vt(N,N) + double precision,intent(out) :: D(N) + double precision,allocatable :: work(:) + integer :: info,lwork + + double precision,allocatable :: scr(:,:) + + allocate (scr(N,N)) + + scr(:,:) = A(:,:) + + ! Find optimal size for temporary arrays + + allocate(work(1)) + + lwork = -1 + call dgesvd('A','A',N,N,scr,N,D,U,N,Vt,N,work,lwork,info) + lwork = int(work(1)) + + deallocate(work) + + allocate(work(lwork)) + + call dgesvd('A','A',N,N,scr,N,D,U,N,Vt,N,work,lwork,info) + + deallocate(work,scr) + + if (info /= 0) then + print *, info, ': SVD failed' + stop + endif + +end + +subroutine inverse_matrix(N,A,B) + +! Returns the inverse of the square matrix A in B + + implicit none + + integer,intent(in) :: N + double precision, intent(in) :: A(N,N) + double precision, intent(out) :: B(N,N) + + integer :: info,lwork + integer, allocatable :: ipiv(:) + double precision,allocatable :: work(:) + + allocate (ipiv(N),work(N*N)) + lwork = size(work) + + B(1:N,1:N) = A(1:N,1:N) + + call dgetrf(N,N,B,N,ipiv,info) + + if (info /= 0) then + + print*,info + stop 'error in inverse (dgetrf)!!' + + endif + + call dgetri(N,B,N,ipiv,work,lwork,info) + + if (info /= 0) then + + print *, info + stop 'error in inverse (dgetri)!!' + + endif + + deallocate(ipiv,work) + +end subroutine inverse_matrix + +subroutine linear_solve(N,A,b,x) + +! Solve the linear system A.x = b where A is a NxN matrix +! and x and x are vectors of size N + + implicit none + + integer,intent(in) :: N + double precision,intent(in) :: A(N,N),b(N) + double precision,intent(out) :: x(N) + + integer :: info,lwork + integer,allocatable :: ipiv(:) + double precision,allocatable :: work(:) + + allocate(ipiv(N),work(N*N)) + lwork = size(work) + + x = b + + call dsysv('U',N,1,A,N,ipiv,x,N,work,lwork,info) + + if (info /= 0) then + + print *, info + stop 'error in linear_solve (dsysv)!!' + + endif + +end subroutine linear_solve + diff --git a/src/xcDFT/xcDFT.f90 b/src/xcDFT/xcDFT.f90 new file mode 100644 index 0000000..e20e046 --- /dev/null +++ b/src/xcDFT/xcDFT.f90 @@ -0,0 +1,120 @@ +program xcDFT + +! exchange-correlation density-functional theory calculations + + include 'parameters.h' + + integer :: nAt,nBas,nEl,nO,nV + double precision :: ENuc,EKS + + double precision,allocatable :: ZNuc(:),rAt(:,:) + + integer :: nShell + integer,allocatable :: TotAngMomShell(:) + integer,allocatable :: KShell(:) + double precision,allocatable :: CenterShell(:,:) + double precision,allocatable :: DShell(:,:) + double precision,allocatable :: ExpShell(:,:) + + double precision,allocatable :: S(:,:),T(:,:),V(:,:),Hc(:,:),X(:,:) + double precision,allocatable :: ERI(:,:,:,:) + + integer :: rung + integer :: SGn + integer :: nRad,nAng,nGrid + double precision,allocatable :: root(:,:) + double precision,allocatable :: weight(:) + double precision,allocatable :: AO(:,:) + double precision,allocatable :: dAO(:,:,:) + + double precision :: start_KS,end_KS,t_KS + +! Hello World + + write(*,*) + write(*,*) '********************************' + write(*,*) '* TCCM winter school 2008: DFT *' + write(*,*) '********************************' + write(*,*) + +!------------------------------------------------------------------------ +! Read input information +!------------------------------------------------------------------------ + +! Read number of atoms, number of electrons of the system +! nO = number of occupied orbitals +! nV = number of virtual orbitals (see below) +! nBas = number of basis functions (see below) +! = nO + nV + + call read_molecule(nAt,nEl,nO) + allocate(ZNuc(nAt),rAt(nAt,3)) + +! Read geometry + + call read_geometry(nAt,ZNuc,rAt,ENuc) + + allocate(CenterShell(maxShell,3),TotAngMomShell(maxShell),KShell(maxShell), & + DShell(maxShell,maxK),ExpShell(maxShell,maxK)) + +!------------------------------------------------------------------------ +! Read basis set information +!------------------------------------------------------------------------ + + call read_basis(nAt,rAt,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell) + +!------------------------------------------------------------------------ +! Read one- and two-electron integrals +!------------------------------------------------------------------------ + +! Memory allocation for one- and two-electron integrals + + allocate(S(nBas,nBas),T(nBas,nBas),V(nBas,nBas),Hc(nBas,nBas),X(nBas,nBas), & + ERI(nBas,nBas,nBas,nBas)) + +! Read integrals + + call read_integrals(nBas,S,T,V,Hc,ERI) + +! Orthogonalization X = S^(-1/2) + + call orthogonalization_matrix(nBas,S,X) + +!------------------------------------------------------------------------ +! DFT options +!------------------------------------------------------------------------ + + call read_options(rung,SGn) + +!------------------------------------------------------------------------ +! Construct quadrature grid +!------------------------------------------------------------------------ + call read_grid(SGn,nRad,nAng,nGrid) + + allocate(root(3,nGrid),weight(nGrid)) + call quadrature_grid(nRad,nAng,nGrid,root,weight) + +!------------------------------------------------------------------------ +! Calculate AO values at grid points +!------------------------------------------------------------------------ + + allocate(AO(nBas,nGrid),dAO(3,nBas,nGrid)) + call AO_values_grid(nBas,nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell, & + nGrid,root,AO,dAO) + +!------------------------------------------------------------------------ +! Compute KS energy +!------------------------------------------------------------------------ + + call cpu_time(start_KS) + call RKS(rung,nGrid,weight,nBas,AO,dAO,nO,S,T,V,Hc,ERI,X,ENuc,EKS) + call cpu_time(end_KS) + + t_KS = end_KS - start_KS + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for KS = ',t_KS,' seconds' + write(*,*) + +!------------------------------------------------------------------------ +! End of xcDFT +!------------------------------------------------------------------------ +end program xcDFT diff --git a/utils/cp2input b/utils/cp2input new file mode 100755 index 0000000..2d1ee76 --- /dev/null +++ b/utils/cp2input @@ -0,0 +1,17 @@ +#! /bin/bash + +if [ $# -lt 2 ] +then + echo "At least 2 arguments required [Molecule] [Basis] [AuxBasis] !!" +fi +if [ $# = 2 ] +then + cp molecule."$1" ../input/molecule + cp basis."$1"."$2" ../input/basis +elif [ $# = 3 ] +then + cp molecule."$1" ../input/molecule + cp basis."$1"."$2" ../input/basis + cp auxbasis."$1"."$3" ../input/auxbasis +fi + diff --git a/utils/create_function.sh b/utils/create_function.sh new file mode 100755 index 0000000..1c124ff --- /dev/null +++ b/utils/create_function.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +if [ $# != 2 ] +then + echo "Two arguments required [name of function] [name of result]" +fi +if [ $# = 2 ] +then + + NAME=$1 + +echo "function ${NAME}() result(${RES}) + +! Description of the function + + implicit none + + include 'parameters.h' + +! Input variables + + integer,intent(in) :: + double precision,intent(in) :: + +! Local variables + + integer :: + double precision :: + +! Output variables + + integer,intent(out) :: + double precision,intent(out) :: + +! Initalization + +end function ${NAME}" > ${NAME}.f90 + +fi + + + diff --git a/utils/create_subroutine.sh b/utils/create_subroutine.sh new file mode 100755 index 0000000..e2f2a49 --- /dev/null +++ b/utils/create_subroutine.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +if [ $# != 1 ] +then + echo "One argument required [name of subroutine]" +fi +if [ $# = 1 ] +then + + NAME=$1 + +echo "subroutine ${NAME}() + +! Description of the subroutine + + implicit none + + include 'parameters.h' + +! Input variables + + integer,intent(in) :: + double precision,intent(in) :: + +! Local variables + + integer :: + double precision :: + +! Output variables + + integer,intent(out) :: + double precision,intent(out) :: + +! Initalization + +end subroutine ${NAME}" > ${NAME}.f90 + +fi + + + diff --git a/utils/fsplit b/utils/fsplit new file mode 100755 index 0000000000000000000000000000000000000000..e967b1506ee802e2321697ca82f0c372059251c7 GIT binary patch literal 31968 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 X7bqN1&6<;!m#_Fy=}JoSknn#1FvX?d literal 0 HcmV?d00001 diff --git a/utils/install_lapack.sh b/utils/install_lapack.sh new file mode 100755 index 0000000..203d7fb --- /dev/null +++ b/utils/install_lapack.sh @@ -0,0 +1,7 @@ +#!/bin/bash -x + +git clone https://github.com/Reference-LAPACK/lapack-release.git +cd lapack-release +cp make.inc.example make.inc +make -j 8 +mv librefblas.a liblapack.a libtmglib.a /Users/loos/Dropbox/quack/lib diff --git a/utils/lapack-release b/utils/lapack-release new file mode 160000 index 0000000..ba3779a --- /dev/null +++ b/utils/lapack-release @@ -0,0 +1 @@ +Subproject commit ba3779a6813d84d329b73aac86afc4e041170609 diff --git a/utils/reblock.f90 b/utils/reblock.f90 new file mode 100644 index 0000000..063344b --- /dev/null +++ b/utils/reblock.f90 @@ -0,0 +1,2764 @@ +!--------------------------------------------------------------------! +! REBLOCK ! +! ======= ! +! Neil Drummond, 8.2005 ! +! (Based on earlier MDT reblock utility for old-style .hist files) ! +! ! +! This utility performs a statistical analysis of the raw QMC data ! +! held in the .hist file. The reblocking procedure is ! +! necessary in order to obtain reliable statistical error bars for ! +! the mean values of serially correlated data. Please refer to the ! +! CASINO manual for further information about the procedure. ! +! ! +! Changes ! +! NDD 9.05 Data files renamed vmc.hist, etc. Check for old format.! +! Other new checks on files. ! +! NDD 9.05 Changed format of .hist files (again). ! +! AB 5.06 Add reblocking analysis for future walking estimators. ! +! AB 11.07 Add reblocking analysis of forces and introduce a line ! +! break in the .hist file to allow storing many items. ! +! NDD 05.08 Rearranged output, to put important stuff at end. ! +! NDD 05.10 Allow for FISQ data in qmc.hist. ! +!--------------------------------------------------------------------! + + +MODULE stats_calcs +!-------------------------------------------------------------------! +! A collection of subroutines for performing various statistical ! +! analyses of data. ! +!-------------------------------------------------------------------! + IMPLICIT NONE + + +CONTAINS + + + SUBROUTINE compute_stats_unweighted(want_skew_kurt,n,data_arr,av,var,skew, & + &kurt,max_val,min_val) +!-------------------------------------------------------------------! +! Compute mean, variance, skewness, kurtosis and max and min of a ! +! set of data. ! +!-------------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: n + DOUBLE PRECISION,INTENT(in) :: data_arr(n) + LOGICAL,INTENT(in) :: want_skew_kurt + DOUBLE PRECISION,INTENT(out) :: av,var,skew,kurt,max_val,min_val + INTEGER i + DOUBLE PRECISION sum_delta_x2,sum_delta_x3,sum_delta_x4 + + if(n<2)then + write(6,*)'Can''t compute variance with fewer than two points.' + stop + endif + +! Compute average. + av=sum(data_arr(1:n))/dble(n) + +! Compute max and min. + max_val=maxval(data_arr(1:n)) + min_val=minval(data_arr(1:n)) + + if(want_skew_kurt)then +! Compute variance, skewness and kurtosis. + sum_delta_x2=0.d0 ; sum_delta_x3=0.d0 ; sum_delta_x4=0.d0 + do i=1,n + sum_delta_x2=sum_delta_x2+(data_arr(i)-av)**2 + sum_delta_x3=sum_delta_x3+(data_arr(i)-av)**3 + sum_delta_x4=sum_delta_x4+(data_arr(i)-av)**4 + enddo ! i + var=sum_delta_x2/dble(n-1) + if(var>0.d0)then + skew=((sqrt(dble(n-1))*dble(n))/dble(n-2))*sum_delta_x3/sum_delta_x2**1.5d0 + kurt=((dble(n+1)*dble(n)*dble(n-1))/(dble(n-2)*dble(n-3)))*& + &sum_delta_x4/sum_delta_x2**2-& + &((dble(n-1)*dble(n-1))/(dble(n-2)*dble(n-3)))*3.d0 + else + skew=0.d0 + kurt=0.d0 + endif + else +! Compute variance. + sum_delta_x2=0.d0 + do i=1,n + sum_delta_x2=sum_delta_x2+(data_arr(i)-av)**2 + enddo ! i + var=sum_delta_x2/dble(n-1) + skew=0.d0 + kurt=0.d0 + endif ! want_skew_kurt + + END SUBROUTINE compute_stats_unweighted + + + SUBROUTINE reblock_unweighted(no_pts,data_array,block_length,av, & + &std_err,delta_std_err) +!---------------------------------------------------------------! +! Compute the unweighted average of the data, and calculate the ! +! error bar for a given block length. ! +!---------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: no_pts,block_length + DOUBLE PRECISION,INTENT(in) :: data_array(:) + DOUBLE PRECISION,INTENT(out) :: av,std_err,delta_std_err + INTEGER i,k,no_blocks,no_pts_in_last_block,j + DOUBLE PRECISION last_block_weight,var,tot_weight, & + &tot_weight_sq,block_av,red_tot_weight,rec_block_length + +! Compute average of data. + av=sum(data_array(1:no_pts))/dble(no_pts) + +! Number of blocks. + no_blocks=no_pts/block_length + rec_block_length=1.d0/dble(block_length) + +! Evaluate the sum of the squares of the deviations from the average. +! Weight the last, incomplete block by its size as a fraction of the others. + var=0.d0 + k=0 + do i=1,no_blocks + block_av=0.d0 + do j=1,block_length + k=k+1 + block_av=block_av+data_array(k) + enddo ! j + block_av=block_av*rec_block_length + var=var+(block_av-av)**2 + enddo ! i + block_av=0.d0 + no_pts_in_last_block=0 + do + k=k+1 + if(k>no_pts)exit + no_pts_in_last_block=no_pts_in_last_block+1 + block_av=block_av+data_array(k) + enddo ! k + last_block_weight=dble(no_pts_in_last_block)*rec_block_length + if(no_pts_in_last_block>0)then + block_av=block_av/dble(no_pts_in_last_block) + var=var+(block_av-av)**2*last_block_weight + endif ! last block nonzero + +! Evaluate variance, standard error in mean and error in standard error. + tot_weight=dble(no_blocks)+last_block_weight + tot_weight_sq=dble(no_blocks)+last_block_weight**2 + red_tot_weight=tot_weight-tot_weight_sq/tot_weight + var=var/red_tot_weight + std_err=sqrt(var/tot_weight) + if(tot_weight>1.d0)then + delta_std_err=std_err/sqrt(2.d0*(tot_weight-1.d0)) + else + delta_std_err=0.d0 + endif + + END SUBROUTINE reblock_unweighted + + + SUBROUTINE reblock_weighted(no_pts,data_array,weight_array,block_length, & + &av,std_err,delta_std_err) +!--------------------------------------------------------------! +! Compute the weighted average of the data, and calculate the ! +! error bar for a given block length. ! +!--------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: no_pts,block_length + DOUBLE PRECISION,INTENT(in) :: weight_array(no_pts),data_array(no_pts) + DOUBLE PRECISION,INTENT(out) :: av,std_err,delta_std_err + INTEGER i,k,no_blocks,no_pts_in_last_block,j + DOUBLE PRECISION var,tot_weight, & + &tot_weight_sq,block_av,red_tot_weight,block_weight, & + &eff_no_blocks + +! Compute average of data. + av=0.d0 + tot_weight=0.d0 + do i=1,no_pts + av=av+data_array(i)*weight_array(i) + tot_weight=tot_weight+weight_array(i) + enddo ! i + av=av/tot_weight + +! Number of blocks + no_blocks=no_pts/block_length + +! Evaluate the sum of the squares of the deviations from the average. +! Last, incomplete block has fewer data points and hence a smaller weight. + var=0.d0 + tot_weight_sq=0.d0 + k=0 + do i=1,no_blocks + block_av=0.d0 + block_weight=0.d0 + do j=1,block_length + k=k+1 + block_av=block_av+data_array(k)*weight_array(k) + block_weight=block_weight+weight_array(k) + enddo ! j + block_av=block_av/block_weight + var=var+(block_av-av)**2*block_weight + tot_weight_sq=tot_weight_sq+block_weight**2 + enddo ! i + block_av=0.d0 + block_weight=0.d0 + no_pts_in_last_block=0 + do + k=k+1 + if(k>no_pts)exit + no_pts_in_last_block=no_pts_in_last_block+1 + block_av=block_av+data_array(k)*weight_array(k) + block_weight=block_weight+weight_array(k) + enddo ! k + if(no_pts_in_last_block>0)then + block_av=block_av/block_weight + var=var+(block_av-av)**2*block_weight + tot_weight_sq=tot_weight_sq+block_weight**2 + endif ! last block nonzero + +! Evaluate variance, standard error in mean and error in standard error. + red_tot_weight=tot_weight-tot_weight_sq/tot_weight + var=var/red_tot_weight + + eff_no_blocks=dble(no_blocks)+dble(no_pts_in_last_block)/dble(block_length) + + std_err=sqrt(var/eff_no_blocks) + if(eff_no_blocks>1.d0)then + delta_std_err=std_err/sqrt(2.d0*(eff_no_blocks-1.d0)) + else + delta_std_err=0.d0 + endif + + END SUBROUTINE reblock_weighted + + + SUBROUTINE correlation_time(n,Odata,Otau,Otau_err,Oave_in,Ovar_in) +!------------------------------------------------------------------------! +! Obtain correlation time from a set of data ! +!------------------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: n + DOUBLE PRECISION,INTENT(in) :: Odata(n) + DOUBLE PRECISION,INTENT(in),OPTIONAL :: Oave_in,Ovar_in + DOUBLE PRECISION,INTENT(out) :: Otau,Otau_err + DOUBLE PRECISION Oave,Oave2,O2ave,Ovar,invOvar,Oacorr,ri,invn + DOUBLE PRECISION,PARAMETER :: tol=1.d-100 + INTEGER i,sqrtn + + Otau=-1.d0 ; Otau_err=-1.d0 + if(n<10)return + invn=1.d0/dble(n) + sqrtn=nint(sqrt(dble(n))) + +! , **2, , variance + if(present(Oave_in))then + Oave=Oave_in + else + Oave=sum(Odata)*invn + endif + if(present(Ovar_in))then + Ovar=Ovar_in*invn*(n-1) + else + Oave2=Oave**2 + O2ave=sum(Odata**2)*invn + Ovar=O2ave-Oave2 + endif + if(Ovar tau + Otau=1.d0 + do i=1,n-1 + Oacorr=sum((Odata(1:n-i)-Oave)*(Odata(1+i:n)-Oave))*invOvar/dble(n-i) + Otau=Otau+2*Oacorr + if(i>=nint(3*Otau))then + ri=dble(i) ; exit + endif + enddo + +! Error in tau + Otau_err=Otau*sqrt((4*ri+2.d0)*invn) + + END SUBROUTINE correlation_time + + +END MODULE stats_calcs + + +MODULE analysis +!-------------------------------------------------------------! +! Miscellaneous subroutines for reading & analysing the data. ! +!-------------------------------------------------------------! + USE stats_calcs + IMPLICIT NONE + +! Tags for the columns of the data file, specifying where each data item +! is held. If a tag is negative, the data item isn't present. + INTEGER tag_step,tag_energy,tag_etotalt,tag_esqr,tag_popavgsqr,tag_K,tag_T, & + &tag_fisq,tag_Ewald,tag_local,tag_nonlocal,tag_short,tag_long,tag_cppei, & + &tag_cppe,tag_cppee,tag_masspol,tag_massvel,tag_darwinen,tag_darwinee, & + &tag_retard,tag_weight,tag_nconf,tag_eref,tag_ebest,tag_acc,tag_teff, & + &tag_dipole1,tag_dipole2,tag_dipole3,tag_dipole_sq,tag_contact_den, & + &tag_future0,tag_future1,tag_future2,tag_future3,tag_future4,tag_future5, & + &tag_future6,tag_future7,tag_future8,tag_future9,tag_future10 + +! Number of columns of data in .hist file. + INTEGER no_cols_qmc + +! Title of .hist file + CHARACTER(72) title + +! File version number + INTEGER version + +! CASINO input keywords: interaction type and basis type. + CHARACTER(20) interaction,atom_basis_type + +! Do we have Ewald/Coulomb interaction? Do we have MPC interaction? + LOGICAL coul_mpc,coul_ewald + +! Ion-ion energy + DOUBLE PRECISION constant_energy + +! Total number of electrons; no. of atoms per prim cell; no. primitive cells + INTEGER netot,nbasis,npcells + +! Number of parts in simulation cell: +! =npcells for periodic systems +! =netot for electron gas +! =1 otherwise + INTEGER nparts_per_simcell + +! Is the system periodic? + LOGICAL isperiodic + +! QMC method used + CHARACTER(3) qmc_method + +! Number of lines of data. + INTEGER Nlines + +! Number of equilibration lines. + INTEGER Nequil + +! Name of .hist file. + CHARACTER(8) filename + +! Number of initial lines to discard. + INTEGER Nskip + +! Array with the hist data from the files. + DOUBLE PRECISION,ALLOCATABLE :: data_array(:,:) + +! Energy units + CHARACTER(15) e_units + +! Units conversion: a.u.->eV and a.u.->kcal. + DOUBLE PRECISION,PARAMETER :: htoev=27.2113962d0,htokcal=627.507541278d0 + +! Are forces to be calculated? + INTEGER iion,iaxis,item,nitot_forces,naxis_forces,nitem_forces,& + &nitot_max_forces + INTEGER,ALLOCATABLE :: tag_forces(:,:,:) + DOUBLE PRECISION,ALLOCATABLE :: forces_array(:,:) + LOGICAL forces + + ! Use weights when calculating average energy, etc. + LOGICAL,PARAMETER :: use_weights=.true. + + +CONTAINS + + + SUBROUTINE read_header(io,dmc) +!----------------------------------------------------------------------! +! Read in the data in the .hist file header and count the lines, etc. ! +!----------------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: io + LOGICAL,INTENT(in) :: dmc + INTEGER ierr,i,s,isper_flag,nbreak,ialloc + CHARACTER(1) temp + CHARACTER(72) datastring + CHARACTER(500) checkline + LOGICAL,PARAMETER :: verbose=.false. + +! Check we don't have an old-style .hist file. + rewind(io) + read(io,'(a)',iostat=ierr)checkline + call check_ierr(ierr) + checkline=adjustl(checkline) + if(index(checkline,'Block')>0)then + write(6,*)'You appear to be analyzing a CASINO version 1 vmc.hist file. & + &Please use the' + write(6,*)'UPDATE_HIST utility to update it to the new format.' + stop + endif ! Old-style vmc.hist + if(index(checkline,'#')==0)then + write(6,*)'Your data file does not seem to start with a header. & + &This may be because you' + write(6,*)'are using an old-format file. If this is the case then & + &please use UPDATE_HIST' + write(6,*)'to update your file.' + stop + endif ! No header. + +! Count the data lines. Ignore comments. + rewind(io) + Nlines=0 + Nequil=0 + forces=.false. + do + read(io,'(a)',iostat=ierr)datastring + if(ierr>0)then + write(6,*)'Error reading data file.' + stop + endif + if(ierr<0)exit + if(index(datastring,'#')==0)then + Nlines=Nlines+1 + else + if(trim(adjustl(datastring))=='#### START STATS')Nequil=Nlines + endif ! Line not a comment. + if(.not.forces)then + if(index(datastring,'FOR')>0)forces=.true. ! atomic forces present + endif + enddo ! lines + if(dmc.and.Nequil==0)Nequil=Nlines + rewind(io) + if(verbose)then + if(Nlines/=1)then + write(6,*)'There are '//trim(i2s(Nlines))//' lines of data in ' & + &//trim(filename)//'.' + else + write(6,*)'There is 1 line of data in '//trim(filename)//'.' + endif ! Singular / plural + if(Nequil>1)then + write(6,*)'Of these, '//trim(i2s(Nlines))//' lines are marked as & + &equilibration data.' + elseif(Nequil==1)then + write(6,*)'Of these, 1 line is marked as equilibration data.' + else + write(6,*)'No data are marked as equilibration data.' + endif ! Nequil + endif ! verbose + if(Nlines<2)then + write(6,*)'There are less than two lines of data in '//trim(filename)//'.' + write(6,*)'One cannot obtain error bars with fewer than 2 data points.' + stop + endif + +! Get title. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,'(a)',iostat=ierr)datastring + call check_ierr(ierr) + s=index(datastring,'#') + if(s>0)then + title=datastring(s+1:len_trim(datastring)) + else + write(6,*)'Header line does not have a "#" in front. Stopping.' + stop + endif + title=adjustl(title) + if(verbose)write(6,*)'Title: '//trim(title) + +! Get version number. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,version + call check_ierr(ierr) + call check_hash(temp) + if(verbose)write(6,*)'File version number is '//trim(i2s(version))//'.' + if(version/=1)then + write(6,*)'Version number of '//trim(filename)//' must be 1.' + stop + endif ! version/=1 + +! Get QMC method. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,qmc_method + call check_ierr(ierr) + call check_hash(temp) + qmc_method=adjustl(qmc_method) + if(verbose)write(6,*)'The data were generated using '//trim(qmc_method)//'.' + if(trim(qmc_method)/='VMC'.and.trim(qmc_method)/='DMC')then + write(6,*)'Method in '//trim(filename)//' should be either VMC or DMC.' + stop + endif ! method + if(trim(filename)=='vmc.hist'.and.trim(qmc_method)/='VMC')then + write(6,*)'Warning: you appear to have non-VMC data in a file called & + &vmc.hist.' + write(6,*) + endif + if(trim(filename)=='dmc.hist'.and.trim(qmc_method)/='DMC')then + write(6,*)'Warning: you appear to have non-DMC data in a file called & + &dmc.hist.' + write(6,*) + endif + +! Get interaction-type (interaction). + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,interaction + call check_ierr(ierr) + call check_hash(temp) + coul_ewald=.false. ; coul_mpc=.false. + select case(trim(interaction)) + case('none','coulomb','ewald','mpc','ewald_mpc','mpc_ewald','manual') + continue + case('1') ; interaction='default' + case('2') ; interaction='mpc' + case('3') ; interaction='ewald_mpc' + case('4') ; interaction='mpc_ewald' + case default + write(6,*)'Value of INTERACTION=',trim(interaction),' not recognized. & + &Stopping.' + stop + end select + select case(trim(interaction)) + case('none') ; continue + case('coulomb','ewald','default','manual') ; coul_ewald=.true. + case('mpc') ; coul_mpc=.true. + case('ewald_mpc','mpc_ewald') ; coul_ewald=.true. ; coul_mpc=.true. + end select + if(verbose)write(6,*)'The value of the interaction parameter is ',& + &trim(interaction),'.' + +! Get constant (ion-ion) energy. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,constant_energy + call check_ierr(ierr) + call check_hash(temp) + if(verbose)write(6,*)'Have got constant energy component.' + +! Get total number of electrons. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,netot + call check_ierr(ierr) + call check_hash(temp) + if(verbose)then + if(netot/=1)then + write(6,*)'There are '//trim(i2s(netot))//' particles in the simulation.' + else + write(6,*)'There is 1 particle in the simulation.' + endif + endif ! verbose + if(netot<1)then + write(6,*)'Should be more than one particle!' + stop + endif + +! Get number of atoms per primitive cell. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,nbasis + call check_ierr(ierr) + call check_hash(temp) + if(verbose)then + if(nbasis/=1)then + write(6,*)'The primitive cell contains '//trim(i2s(nbasis))//' atoms.' + else + write(6,*)'The primitive cell contains 1 atom.' + endif + endif ! verbose + if(nbasis<0)then + write(6,*)'There should be at least zero atoms...' + stop + endif + +! Get number of primitive cells. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,npcells + call check_ierr(ierr) + call check_hash(temp) + if(verbose)then + if(npcells/=1)then + write(6,*)'There are '//trim(i2s(npcells))//' primitive cells.' + else + write(6,*)'There is 1 primitive cell.' + endif + endif ! verbose + if(npcells<1)then + write(6,*)'There should be at least one primitive cell.' + stop + endif + +! When forces are present, allocate force array. + if(forces)then + nitot_max_forces=nbasis*npcells + allocate(tag_forces(22,3,nitot_max_forces),stat=ialloc) + if(ialloc/=0)then + write(6,*)'Force array allocation problem.' + stop + endif ! ialloc/=0 + endif ! forces + +! Basis-type keyword. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,atom_basis_type + call check_ierr(ierr) + call check_hash(temp) + select case(trim(atom_basis_type)) + case('0') ; atom_basis_type='none' + case('1') ; atom_basis_type='plane-wave' + case('2') ; atom_basis_type='gaussian' + case('3') ; atom_basis_type='numerical' + case('4') ; atom_basis_type='blip' + case('5') ; atom_basis_type='non_int_he' + case default + continue + end select + if(verbose)write(6,*)'The value of the atom_basis_type parameter is ' & + &//trim(atom_basis_type)//'.' + +! Get periodicity. + read(io,*,iostat=ierr) + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,isper_flag + call check_ierr(ierr) + call check_hash(temp) + if(isper_flag==1)then + isperiodic=.true. ; if(verbose)write(6,*)'The system is periodic.' + select case(trim(interaction)) + case('default','coulomb') ; interaction='ewald' + end select + elseif(isper_flag==0)then + isperiodic=.false. ; if(verbose)write(6,*)'The system is not periodic.' + select case(trim(interaction)) + case('default','ewald') ; interaction='coulomb' + case('mpc','mpc_ewald','ewald_mpc') + write(6,*)'Interaction type should be ''coulomb'' or ''none'' for finite & + &systems. Contradiction in header.' + stop + end select + else + write(6,*)'Periodicity flag must be 0 or 1.' + stop + endif ! periodicity. + +! Get number of data columns. Increase it by 1, since the line-numbers will +! also be read. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + read(io,*,iostat=ierr)temp,no_cols_qmc + call check_ierr(ierr) + call check_hash(temp) + if(verbose)then + if(no_cols_qmc/=1)then + write(6,*)'There are '//trim(i2s(no_cols_qmc))//' columns of data in ' & + &//trim(filename)//'.' + else + write(6,*)'There is 1 column of data in '//trim(filename)//'.' + endif ! Singular/plural + endif ! verbose + if(no_cols_qmc<1)then + write(6,*)'No data to analyse. Stopping.' + stop + endif + no_cols_qmc=no_cols_qmc+1 +! Account for line breaking as the maximum number of items per line is 25 + nbreak=no_cols_qmc/25 + if(modulo(no_cols_qmc,25)>0)nbreak=nbreak+1 + Nlines=Nlines/nbreak + Nequil=Nequil/nbreak + +! Get items in .hist file + tag_step=1 ! Move number + tag_energy=-1 ! Total energy + tag_etotalt=-1 ! Alternative total energy + tag_esqr=-1 ! Square of total energy + tag_popavgsqr=-1 ! Square of population average over total energy + tag_K=-1 ! KEI kinetic-energy estimator + tag_T=-1 ! TI kinetic-energy estimator + tag_fisq=-1 ! FISQ kinetic-energy estimator + tag_Ewald=-1 ! 1/r or Ewald e-e interaction + tag_local=-1 ! Local electron-ion energy + tag_nonlocal=-1 ! Nonlocal electron-ion energy + tag_short=-1 ! Short-range part of MPC + tag_long=-1 ! Long-range part of MPC + tag_cppei=-1 ! Electron-ion CPP term + tag_cppe=-1 ! Electron CPP term + tag_cppee=-1 ! Electron-electron CPP term + tag_masspol=-1 ! Mass-polarization term + tag_future0=-1 ! Future-walking estimator + tag_future1=-1 ! " + tag_future2=-1 ! " + tag_future3=-1 ! " + tag_future4=-1 ! " + tag_future5=-1 ! " + tag_future6=-1 ! " + tag_future7=-1 ! " + tag_future8=-1 ! " + tag_future9=-1 ! " + tag_future10=-1 ! " + tag_massvel=-1 ! Mass-velocity term + tag_darwinen=-1 ! Darwin e-n term + tag_darwinee=-1 ! Darwin e-e term + tag_retard=-1 ! Retardation term. + tag_weight=-1 ! Total weight of configs + tag_nconf=-1 ! Number of configs + tag_eref=-1 ! Reference energy + tag_ebest=-1 ! Best estimate of energy + tag_acc=-1 ! Acceptance ratio + tag_teff=-1 ! Effective time step + tag_dipole1=-1 ! Electric dipole moment + tag_dipole2=-1 ! " " " + tag_dipole3=-1 ! " " " + tag_dipole_sq=-1 ! " " " + tag_contact_den=-1 ! Electron-positron contact density + if(forces)then + tag_forces(1:22,1:3,1:nitot_max_forces)=-1 + nitem_forces=0 ; naxis_forces=0 ; nitot_forces=0 + endif ! forces + + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + do i=2,no_cols_qmc + read(io,*,iostat=ierr)temp,datastring + call check_ierr(ierr) + call check_hash(temp) + datastring=adjustl(datastring) + if(trim(datastring)=='ETOT')then + call check_tag_free(tag_energy) + tag_energy=i + elseif(trim(datastring)=='ETOTALT')then + call check_tag_free(tag_etotalt) + tag_etotalt=i + elseif(trim(datastring)=='ESQR')then + call check_tag_free(tag_esqr) + tag_esqr=i + elseif(trim(datastring)=='POPAVGSQR')then + call check_tag_free(tag_popavgsqr) + tag_popavgsqr=i + elseif(trim(datastring)=='KEI')then + call check_tag_free(tag_K) + tag_K=i + elseif(trim(datastring)=='TI')then + call check_tag_free(tag_T) + tag_T=i + elseif(trim(datastring)=='FISQ')then + call check_tag_free(tag_fisq) + tag_fisq=i + elseif(trim(datastring)=='EWALD')then + call check_tag_free(tag_Ewald) + tag_Ewald=i + elseif(trim(datastring)=='LOCAL')then + call check_tag_free(tag_local) + tag_local=i + elseif(trim(datastring)=='NONLOCAL')then + call check_tag_free(tag_nonlocal) + tag_nonlocal=i + elseif(trim(datastring)=='SHORT')then + call check_tag_free(tag_short) + tag_short=i + elseif(trim(datastring)=='LONG')then + call check_tag_free(tag_long) + tag_long=i + elseif(trim(datastring)=='CPPEI')then + call check_tag_free(tag_cppei) + tag_cppei=i + elseif(trim(datastring)=='CPPE')then + call check_tag_free(tag_cppe) + tag_cppe=i + elseif(trim(datastring)=='CPPEE')then + call check_tag_free(tag_cppee) + tag_cppee=i + elseif(trim(datastring)=='MASSPOL')then + call check_tag_free(tag_masspol) + tag_masspol=i + elseif(trim(datastring(1:3))=='FOR')then + call generate_tag_forces(datastring,i) + elseif(trim(datastring)=='FUTURE0')then + call check_tag_free(tag_future0) + tag_future0=i + elseif(trim(datastring)=='FUTURE1')then + call check_tag_free(tag_future1) + tag_future1=i + elseif(trim(datastring)=='FUTURE2')then + call check_tag_free(tag_future2) + tag_future2=i + elseif(trim(datastring)=='FUTURE3')then + call check_tag_free(tag_future3) + tag_future3=i + elseif(trim(datastring)=='FUTURE4')then + call check_tag_free(tag_future4) + tag_future4=i + elseif(trim(datastring)=='FUTURE5')then + call check_tag_free(tag_future5) + tag_future5=i + elseif(trim(datastring)=='FUTURE6')then + call check_tag_free(tag_future6) + tag_future6=i + elseif(trim(datastring)=='FUTURE7')then + call check_tag_free(tag_future7) + tag_future7=i + elseif(trim(datastring)=='FUTURE8')then + call check_tag_free(tag_future8) + tag_future8=i + elseif(trim(datastring)=='FUTURE9')then + call check_tag_free(tag_future9) + tag_future9=i + elseif(trim(datastring)=='FUTURE10')then + call check_tag_free(tag_future10) + tag_future10=i + elseif(trim(datastring)=='MASSVEL')then + call check_tag_free(tag_massvel) + tag_massvel=i + elseif(trim(datastring)=='DARWINEN')then + call check_tag_free(tag_darwinen) + tag_darwinen=i + elseif(trim(datastring)=='DARWINEE')then + call check_tag_free(tag_darwinee) + tag_darwinee=i + elseif(trim(datastring)=='RETARD')then + call check_tag_free(tag_retard) + tag_retard=i + elseif(trim(datastring)=='WEIGHT')then + call check_tag_free(tag_weight) + tag_weight=i + elseif(trim(datastring)=='NCONF')then + call check_tag_free(tag_nconf) + tag_nconf=i + elseif(trim(datastring)=='EREF')then + call check_tag_free(tag_eref) + tag_eref=i + elseif(trim(datastring)=='EBEST')then + call check_tag_free(tag_ebest) + tag_ebest=i + elseif(trim(datastring)=='ACC')then + call check_tag_free(tag_acc) + tag_acc=i + elseif(trim(datastring)=='TEFF')then + call check_tag_free(tag_teff) + tag_teff=i + elseif(trim(datastring)=='DIPOLE1')then + call check_tag_free(tag_dipole1) + tag_dipole1=i + elseif(trim(datastring)=='DIPOLE2')then + call check_tag_free(tag_dipole2) + tag_dipole2=i + elseif(trim(datastring)=='DIPOLE3')then + call check_tag_free(tag_dipole3) + tag_dipole3=i + elseif(trim(datastring)=='DIPOLESQ')then + call check_tag_free(tag_dipole_sq) + tag_dipole_sq=i + elseif(trim(datastring)=='CONTACT_DEN')then + call check_tag_free(tag_contact_den) + tag_contact_den=i + else + write(6,*)'Column label not recognised.' + write(6,*)'Label is: '//trim(datastring) + stop + endif ! Label + enddo ! i + if(verbose)then + write(6,*)'Have read in column labels.' + write(6,*) + endif ! verbose + +! Warn about missing data, etc. + if(tag_energy<=0)then + write(6,*)'Warning: total energy data are not present!' + write(6,*) + endif + if(tag_K<=0)then + write(6,*)'Warning: kinetic energy (K) data are not present!' + write(6,*) + endif + if((tag_short>0.or.tag_long>0).and..not.coul_mpc)then + write(6,*)'Warning: MPC data are inexplicably present.' + write(6,*) + endif + if(tag_ewald>0.and..not.coul_ewald)then + write(6,*)'Warning: Ewald data are inexplicably present.' + write(6,*) + endif + if(tag_short>0.and.tag_long<=0)then + write(6,*)'Warning: only have short-ranged part of MPC interaction.' + write(6,*) + endif + if(tag_short<=0.and.tag_long>0)then + write(6,*)'Warning: only have long-ranged part of MPC interaction.' + write(6,*) + endif + +! Read final comment line in header. + read(io,*,iostat=ierr)temp + call check_ierr(ierr) + call check_hash(temp) + + END SUBROUTINE read_header + + + SUBROUTINE check_hash(char) +!---------------------------------------------------------------------------! +! This sub is used to check that the 1st char in each header line is a "#". ! +!---------------------------------------------------------------------------! + IMPLICIT NONE + CHARACTER(1),INTENT(in) :: char + if(char/='#')then + write(6,*)'Header line does not have a "#" in front. Stopping.' + stop + endif + END SUBROUTINE check_hash + + + SUBROUTINE check_ierr(ierr,nline) +!------------------------------------------------------! +! Complain if there has been a problem reading a file. ! +!------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: ierr + INTEGER,INTENT(in),OPTIONAL :: nline + if(ierr/=0)then + if(present(nline))then + write(6,*)'Problem reading '//trim(filename)//' at line '//trim(i2s(nline))//'.' + else + write(6,*)'Problem reading '//trim(filename)//'.' + endif + stop + endif + END SUBROUTINE check_ierr + + + SUBROUTINE check_tag_free(tag) +!----------------------------------------------! +! Complain if a tag has already been assigned. ! +!----------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: tag + if(tag/=-1)then + write(6,*)'Tag assigned twice. Two column labels must be the same.' + stop + endif + END SUBROUTINE check_tag_free + + + SUBROUTINE read_data(dmc) +!--------------------------------------------------! +! Read in the raw QMC data from the .hist file. ! +!--------------------------------------------------! + IMPLICIT NONE + LOGICAL,INTENT(in) :: dmc + INTEGER ierr,i,ialloc,nbreak,nleft,in,im + INTEGER,PARAMETER :: io=8 + CHARACTER(640) char640 + +! Open the data file. + open(unit=io,file=trim(filename),status='old',iostat=ierr) + if(ierr/=0)then + write(6,*)'Sorry, cannot open '//trim(filename)//'.' + stop + endif + +! Count the columns and rows of data, establish which data are present, etc. + call read_header(io,dmc) + +! Allocate the data array. + allocate(data_array(Nlines,no_cols_qmc),stat=ialloc) + if(ialloc/=0)then + write(6,*)'Allocation problem (1).' + stop + endif + +! Read in the data. Ignore comments. + i=0 + do + read(io,'(a)',iostat=ierr)char640 + call check_ierr(ierr,i+1) + if(index(char640,'#')==0)then + i=i+1 +! When reading from .hist file, account for maximum number of items +! (=25 per line). + nbreak=no_cols_qmc/25 + nleft=modulo(no_cols_qmc,25) + im=0 + if(nbreak>0)then + do in=1,nbreak + im=in + read(char640,*,iostat=ierr)data_array(i,(im-1)*25+1:im*25) + read(io,'(a)',iostat=ierr)char640 + enddo + endif + if(nleft>0)then + read(char640,*,iostat=ierr)data_array(i,im*25+1:no_cols_qmc) + endif + call check_ierr(ierr,i+1) + if(i>=Nlines)exit + endif ! Line not a comment. + enddo ! i + close(io) + + END SUBROUTINE read_data + + + SUBROUTINE check_data +!------------------------------------------------------------------------! +! This subroutine checks that the raw data in data_array are consistent. ! +! It checks that adding up the energy components gives the total energy, ! +! and that the ion-ion energy in the header is correct. It looks for ! +! Ewald and MPC data and decides which is to be used in the total energy.! +! The number of equilibration steps to be discarded are chosen and the ! +! energy units are selected. ! +!------------------------------------------------------------------------! + IMPLICIT NONE + INTEGER i,ierr,units_choice + DOUBLE PRECISION econst_check,econst_hist,escale,tot_weight + LOGICAL econst_is_const +! Tolerance for checking that total energy is sum of components. + DOUBLE PRECISION,PARAMETER :: tol=1.d-6 + +! Check move numbers + if(tag_step>0)then + do i=1,Nlines + if(nint(data_array(i,tag_step))/=i)then + write(6,*)'WARNING: iteration number behaves oddly at line ' & + &//trim(i2s(i))//' in '//trim(filename)//'.' + write(6,*) + exit + endif ! Problem with move number + enddo ! i + endif ! tag_step>0 + +! Check weights. + if(tag_weight>0)then + tot_weight=0.d0 + do i=1,Nlines + if(data_array(i,tag_weight)<0.d0)then + write(6,*)'Found a negative weight at line '//trim(i2s(i)) & + &//' of '//trim(filename)//'.' + stop + endif ! weight<0 + tot_weight=tot_weight+data_array(i,tag_weight) + enddo ! i + if(tot_weight<=0.d0)then + write(6,*)'Sum of weights is 0. Stopping.' + stop + endif ! total weight=0 + if(.not.use_weights)then + write(6,*)'Weights are present, but will not be used.' + write(6,*) + endif ! weights not to be used. + endif ! weights present. + +! Check that total energy minus KE, e-i pot E, and e-e pot E is a constant: +! the ion-ion energy. + if(tag_energy>0)then + econst_is_const=.true. + do i=1,Nlines + econst_check=data_array(i,tag_energy) + if(tag_K>0)econst_check=econst_check-data_array(i,tag_K) + if(trim(interaction)=='coulomb'.or.trim(interaction)=='ewald'.or.& + &trim(interaction)=='ewald_mpc'.or.trim(interaction)=='manual')then + if(tag_ewald>0)econst_check=econst_check-data_array(i,tag_ewald) + elseif(trim(interaction)=='mpc'.or.trim(interaction)=='mpc_ewald')then + if(tag_short>0)econst_check=econst_check-data_array(i,tag_short) + if(tag_long>0)econst_check=econst_check-data_array(i,tag_long) + endif ! MPC or Ewald present. + if(tag_local>0)econst_check=econst_check-data_array(i,tag_local) + if(tag_nonlocal>0)econst_check=econst_check-data_array(i,tag_nonlocal) + if(tag_cppei>0)econst_check=econst_check-data_array(i,tag_cppei) + if(tag_cppe>0)econst_check=econst_check-data_array(i,tag_cppe) + if(tag_cppee>0)econst_check=econst_check-data_array(i,tag_cppee) + if(i==1)then + econst_hist=econst_check + else + if(abs(econst_hist-econst_check)>tol)then + write(6,*)'Warning: some component of energy is not accounted for!' + write(6,*)'First evaluation of ion-ion energy: ',econst_hist + write(6,*)'Later evaluation of ion-ion energy: ',econst_check + write(6,*) + econst_is_const=.false. + exit + endif ! constanet_energy not constant. + endif ! i=1 + enddo ! i + if(abs(econst_hist)tol)then + write(6,*)'Warning: value of ion-ion energy obtained from raw data & + &differs from the value' + write(6,*)'in the header. Missing constant energy component?' + write(6,*) + endif ! Difference in constant_energy + endif ! Can compare constant_energy values + endif ! Components for check present? + +! Check that FISQ=2*TI-KEI. + if(tag_K>0.and.tag_T>0.and.tag_fisq>0)then + do i=1,Nlines + if(abs(data_array(i,tag_fisq)+data_array(i,tag_K) & + &-2.d0*data_array(i,tag_T))>tol)then + write(6,*)'Warning: problem with kinetic-energy estimators. & + &FISQ /= 2.TI-KEI.' + write(6,*)' KEI at line '//trim(i2s(i))//' : ',data_array(i,tag_K) + write(6,*)' TI at line '//trim(i2s(i))//' : ',data_array(i,tag_T) + write(6,*)'FISQ at line '//trim(i2s(i))//' : ',data_array(i,tag_fisq) + write(6,*) + exit + endif ! Problem with KE estimators. + enddo ! i + endif ! All KE estimators present. + +! Find out how many lines are to be skipped. + if(trim(qmc_method)=='DMC')then + do + write(6,*)'There are '//trim(i2s(Nlines))//' lines of data in total.' + write(6,*)'There are '//trim(i2s(Nequil))//' lines of equilibration data.' + write(6,*)'How many initial lines of data do you wish to discard?' + read(5,*,iostat=ierr)Nskip + if(ierr/=0)Nskip=-1 + if(Nskip<0.or.Nskip>Nlines-2)then + write(6,*)'Number of lines to skip must be between 0 and '// & + &trim(i2s(Nlines-2))//'.' + else + exit + endif ! Problem with Nskip + enddo ! Loop asking for Nskip + if(Nskip=1.and.units_choice<=2)then + exit + else + write(6,*)'Please try again. Choose a number between 1 and 2.' + write(6,*) + endif + enddo ! choice loop + if(units_choice==1)then + escale=1.d0 + e_units='au/particle' + else + escale=htoev + e_units='eV/particle' + endif ! units choice + elseif(isperiodic.and.nbasis>0)then +! Periodic system. + do + write(6,*)'Your data are for a periodic system with atoms.' + write(6,*)'Please select units for your energy data.' + write(6,*)'Choose one of: (1) au per prim cell; (2) eV per & + &prim cell;' + write(6,*)'(3) kcal per prim cell; (4) au per atom; (5) eV per atom; & + &(6) kcal per atom.' + read(5,*,iostat=ierr)units_choice + if(ierr/=0)units_choice=-1 + if(units_choice>=1.and.units_choice<=6)then + exit + else + write(6,*)'Please try again. Choose a number between 1 and 6.' + write(6,*) + endif + enddo ! choice loop + if(units_choice==1)then + escale=1.d0 + e_units='au/prim cell' + elseif(units_choice==2)then + escale=htoev + e_units='eV/prim cell' + elseif(units_choice==3)then + escale=htokcal + e_units='kcal/prim cell' + elseif(units_choice==4)then + escale=1.d0/dble(nbasis) + e_units='au/atom' + elseif(units_choice==5)then + escale=htoev/dble(nbasis) + e_units='eV/atom' + else + escale=htokcal/dble(nbasis) + e_units='kcal/atom' + endif + elseif(.not.isperiodic.and.nbasis>0)then +! Finite system. + do + write(6,*)'Your data are for a finite system with atoms.' + write(6,*)'Please select units for your energy data.' + write(6,*)'Choose one of: (1) au; (2) eV; (3) kcal; (4) au per atom; & + &(5) eV per atom;' + write(6,*)'(6) kcal per atom.' + read(5,*,iostat=ierr)units_choice + if(ierr/=0)units_choice=-1 + if(units_choice>=1.and.units_choice<=6)then + exit + else + write(6,*)'Please try again. Choose a number between 1 and 6.' + write(6,*) + endif + enddo ! choice loop + if(units_choice==1)then + escale=1.d0 + e_units='au' + elseif(units_choice==2)then + escale=htoev + e_units='eV' + elseif(units_choice==3)then + escale=htokcal + e_units='kcal' + elseif(units_choice==4)then + escale=1.d0/dble(nbasis) + e_units='au/atom' + elseif(units_choice==5)then + escale=htoev/dble(nbasis) + e_units='eV/atom' + else + escale=htokcal/dble(nbasis) + e_units='kcal/atom' + endif + else +! Default. + do + write(6,*)'Please select units for your energy data.' + write(6,*)'Choose one of: (1) au; (2) eV; (3) kcal.' + read(5,*,iostat=ierr)units_choice + if(ierr/=0)units_choice=-1 + if(units_choice>=1.and.units_choice<=3)then + exit + else + write(6,*)'Please try again. Choose a number between 1 and 3.' + write(6,*) + endif + enddo ! choice loop + if(units_choice==1)then + escale=1.d0 + e_units='au' + elseif(units_choice==2)then + escale=htoev + e_units='eV' + else + escale=htokcal + e_units='kcal' + endif + write(6,*)'For finite systems, energies are quoted for the whole system.' + write(6,*)'For real crystals, energies are quoted per primitive cell.' + write(6,*)'For electron(-hole) systems, energies are quoted per particle.' + endif + write(6,*) + +! Rescale energy data. (Easier just to rescale the raw data than to rescale +! each result quoted.) + if(escale/=1.d0)then + if(tag_energy>0)data_array(:,tag_energy)=data_array(:,tag_energy)*escale + if(tag_etotalt>0)data_array(:,tag_etotalt)=data_array(:,tag_etotalt)*escale + if(tag_esqr>0)data_array(:,tag_esqr)=data_array(:,tag_esqr)*escale*escale + if(tag_popavgsqr>0)data_array(:,tag_popavgsqr)=data_array(:,tag_popavgsqr) & + &*escale*escale + if(tag_K>0)data_array(:,tag_K)=data_array(:,tag_K)*escale + if(tag_T>0)data_array(:,tag_T)=data_array(:,tag_T)*escale + if(tag_fisq>0)data_array(:,tag_fisq)=data_array(:,tag_fisq)*escale + if(tag_Ewald>0)data_array(:,tag_Ewald)=data_array(:,tag_Ewald)*escale + if(tag_local>0)data_array(:,tag_local)=data_array(:,tag_local)*escale + if(tag_nonlocal>0)data_array(:,tag_nonlocal)=data_array(:,tag_nonlocal) & + &*escale + if(tag_short>0)data_array(:,tag_short)=data_array(:,tag_short)*escale + if(tag_long>0)data_array(:,tag_long)=data_array(:,tag_long)*escale + if(tag_cppei>0)data_array(:,tag_cppei)=data_array(:,tag_cppei)*escale + if(tag_cppe>0)data_array(:,tag_cppe)=data_array(:,tag_cppe)*escale + if(tag_cppee>0)data_array(:,tag_cppee)=data_array(:,tag_cppee)*escale + if(tag_masspol>0)data_array(:,tag_masspol)=data_array(:,tag_masspol)*escale + if(forces)then + do iion=1,nitot_forces + do iaxis=1,3 + do item=1,22 + if(tag_forces(item,iaxis,iion)/=-1)then + data_array(:,tag_forces(item,iaxis,iion))=& + &data_array(:,tag_forces(item,iaxis,iion))*escale + endif + enddo + enddo + enddo + endif ! if forces + if(tag_future0>0)data_array(:,tag_future0)=data_array(:,tag_future0)*escale + if(tag_future1>0)data_array(:,tag_future1)=data_array(:,tag_future1)*escale + if(tag_future2>0)data_array(:,tag_future2)=data_array(:,tag_future2)*escale + if(tag_future3>0)data_array(:,tag_future3)=data_array(:,tag_future3)*escale + if(tag_future4>0)data_array(:,tag_future4)=data_array(:,tag_future4)*escale + if(tag_future5>0)data_array(:,tag_future5)=data_array(:,tag_future5)*escale + if(tag_future6>0)data_array(:,tag_future6)=data_array(:,tag_future6)*escale + if(tag_future7>0)data_array(:,tag_future7)=data_array(:,tag_future7)*escale + if(tag_future8>0)data_array(:,tag_future8)=data_array(:,tag_future8)*escale + if(tag_future9>0)data_array(:,tag_future9)=data_array(:,tag_future9)*escale + if(tag_future10>0)data_array(:,tag_future10)=data_array(:,tag_future10)*& + &escale + if(tag_massvel>0)data_array(:,tag_massvel)=data_array(:,tag_massvel)*escale + if(tag_darwinen>0)data_array(:,tag_darwinen)=data_array(:,tag_darwinen) & + &*escale + if(tag_darwinee>0)data_array(:,tag_darwinee)=data_array(:,tag_darwinee) & + &*escale + if(tag_retard>0)data_array(:,tag_retard)=data_array(:,tag_retard)*escale + if(tag_eref>0)data_array(:,tag_eref)=data_array(:,tag_eref)*escale + if(tag_ebest>0)data_array(:,tag_ebest)=data_array(:,tag_ebest)*escale + constant_energy=constant_energy*escale + endif ! Data needs rescaling. + + END SUBROUTINE check_data + + + SUBROUTINE compute_stats +!--------------------------------------------------------------------------! +! In this subroutine, the various columns of data are subjected to various ! +! statistical analyses. ! +!--------------------------------------------------------------------------! + IMPLICIT NONE + INTEGER ierr,block_length,Nstudy,startline,nthird,nthirdstart, & + &ialloc,nthirdstop,i + DOUBLE PRECISION av,av_energy,std_err,std_err_energy,delta_std_err,var, & + &max_val,min_val,skew,kurt,corr_tau,corr_tau_err,sqrt_tau,err_sqrt_tau, & + &raw_var,raw_var_err,pop_var,pop_var_err + DOUBLE PRECISION,ALLOCATABLE :: temp_data(:) + + Nstudy=Nlines-Nskip + startline=Nskip+1 + +! Write out some information about the more important DMC simulation params. +! Do this first, so that important data appears at end of output. + if(tag_nconf>0)then + + write(6,*)'ANALYSIS OF CONFIGURATION POPULATION' + write(6,*)'====================================' + call compute_stats_unweighted(.false.,Nstudy,data_array(startline:Nlines, & + &tag_nconf),av,var,skew,kurt,max_val,min_val) + write(6,*)'Minimum population : ',min_val + write(6,*)' Mean population : ',av + write(6,*)'Maximum population : ',max_val + write(6,*)' Std error : ',sqrt(var/dble(Nstudy)) + if(av-min_val>0.25d0*av.or.max_val-av>0.25d0*av)write(6,*) & + &'Warning: Population fluctuated by more than 25% of mean.' + write(6,*) + + endif ! Config population data present. + + if(tag_acc>0)then + + write(6,*)'ANALYSIS OF ACCEPTANCE RATIO' + write(6,*)'============================' + call compute_stats_unweighted(.false.,Nstudy,data_array(startline:Nlines, & + &tag_acc),av,var,skew,kurt,max_val,min_val) + write(6,*)'Minimum acceptance ratio : ',min_val + write(6,*)' Mean acceptance ratio : ',av + write(6,*)'Maximum acceptance ratio : ',max_val + write(6,*)' Std error : ',sqrt(var/dble(Nstudy)) + write(6,*) + + endif ! Acceptance-ratio data present. + + if(tag_teff>0)then + + write(6,*)'ANALYSIS OF EFFECTIVE TIME STEP' + write(6,*)'===============================' + call compute_stats_unweighted(.false.,Nstudy,data_array(startline:Nlines, & + &tag_teff),av,var,skew,kurt,max_val,min_val) + write(6,*)'Minimum time step (au) : ',min_val + write(6,*)' Mean time step (au) : ',av + write(6,*)'Maximum time step (au) : ',max_val + write(6,*)' Std error (au) : ',sqrt(var/dble(Nstudy)) + write(6,*) + + endif ! Effective time step data present. + + if(tag_energy>0)then + +! Compute lots of information about the total energy data. + write(6,*)'ANALYSIS OF TOTAL-ENERGY DATA' + write(6,*)'=============================' + call compute_stats_unweighted(.true.,Nstudy,data_array(startline:Nlines, & + &tag_energy),av,var,skew,kurt,max_val,min_val) + write(6,*)'Minimum energy (',trim(e_units),') : ',min_val + write(6,*)' Mean energy (',trim(e_units),') : ',av + write(6,*)'Maximum energy (',trim(e_units),') : ',max_val + write(6,*)' Variance (',trim(e_units),') : ',var + write(6,*)' Std error (',trim(e_units),') : ',sqrt(var/dble(Nstudy)) + write(6,*)repeat(' ',len_trim(e_units))//' Skewness : ',skew + write(6,*)repeat(' ',len_trim(e_units))//'Normal sk. fluct. : ',& + &sqrt(6.d0/dble(Nstudy)) + write(6,*)repeat(' ',len_trim(e_units))//' Kurtosis : ',kurt + write(6,*)repeat(' ',len_trim(e_units))//'Normal ku. fluct. : ',& + &sqrt(24.d0/dble(Nstudy)) + write(6,*)'(NB, the var of the energy data is not an estimate & + &of the actual var.)' + write(6,*) +! Analyse total energy by thirds if there is enough data. + if(Nstudy>=6)then + write(6,*)'ANALYSIS OF TOTAL-ENERGY DATA BY THIRDS' + write(6,*)'=======================================' + write(6,*)'(Energy data in units of '//trim(e_units)//'.)' + nthird=Nstudy/3 + write(6,*)' Data range Av energy Std error Maximum & + &Minimum' + do i=1,3 + nthirdstart=startline+(i-1)*nthird + nthirdstop=nthirdstart+nthird-1 + call compute_stats_unweighted(.false.,nthird, & + &data_array(nthirdstart:nthirdstop,tag_energy),av,var,skew,kurt, & + &max_val,min_val) + write(6,'(" ",a16,4(" ",es12.5))')trim(i2s(nthirdstart)) & + &//'->'//trim(i2s(nthirdstop)),av,sqrt(var/dble(nthird)),max_val,min_val + enddo ! i + else + write(6,*)'Not enough data to analyse by thirds: need at least 6 points.' + endif ! Enough data? + write(6,*) + write(6,*)'CORRELATION-TIME ANALYSIS OF TOTAL-ENERGY DATA' + write(6,*)'==============================================' + call correlation_time(Nstudy,data_array(startline:Nlines,tag_energy), & + &corr_tau,corr_tau_err,av,var) + if(corr_tau/=-1.d0)then + write(6,*)' Correlation time (steps) : ',corr_tau + write(6,*)' Error in correlation time (steps) : ',corr_tau_err + write(6,*) + if(corr_tau>0.d0)then + sqrt_tau=sqrt(corr_tau) + err_sqrt_tau=corr_tau_err/(2*sqrt_tau) + write(6,*)' Error-bar factor : ',sqrt_tau + write(6,*)' Error in error-bar factor : ',err_sqrt_tau + write(6,*) + if(tag_weight>0.and.use_weights)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_energy), & + &data_array(startline:Nlines,tag_weight),1,av,std_err,delta_std_err) + else + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_energy), & + &1,av,std_err,delta_std_err) + endif + write(6,*)' Mean energy (',trim(e_units),') : ',av + write(6,*)' Correlation-corrected error (',trim(e_units),') : ',& + &std_err*sqrt(corr_tau) + write(6,*)' Error in error (',trim(e_units),') : ',& + &sqrt((std_err*err_sqrt_tau)**2+(sqrt_tau*delta_std_err)**2) + else + write(6,*)'The correlation time appears to be negative.' + endif + else + write(6,*)'The correlation time could not be computed.' + endif ! corr_tau calculated. + write(6,*) + + write(6,*)'REBLOCKING ANALYSIS OF TOTAL-ENERGY DATA' + write(6,*)'========================================' +! Print out reblocking analysis of energy + write(6,*)'(Energy data in units of '//trim(e_units)//'.)' + if(tag_weight>0.and.use_weights)then + call reblock_analysis(Nstudy,data_array(startline:Nlines,tag_energy), & + &data_array(startline:Nlines,tag_weight)) + else + call reblock_analysis(Nstudy,data_array(startline:Nlines,tag_energy)) + endif ! weights + + endif ! energy data available + + do + write(6,*)'Please choose a block length for reblocking all energy & + &components.' + read(5,*,iostat=ierr)block_length + if(ierr/=0)block_length=-1 + if(block_length>=1.and.block_length<=Nstudy/2)then + exit + else + write(6,*)'Please try again. Block length should be between 1 and ' & + &//trim(i2s(Nstudy/2))//'.' + endif + enddo ! get block length + write(6,*)'Chosen block length: '//trim(i2s(block_length))//'.' + write(6,*) + +! Write out the energy components with reblocked error bars. + + write(6,*)'ENERGY COMPONENTS WITH REBLOCKED ERROR BARS' + write(6,*)'===========================================' + +5 format(" ",a30,2(" ",es22.14)) +10 format(" ",a30," ",es22.14) +15 format(32x,a23,a) + write(6,15)' Mean ('//trim(e_units)//') ',' Err (' & + &//trim(e_units)//')' + + allocate(temp_data(startline:Nlines),stat=ialloc) + if(ialloc/=0)then + write(6,*)'Allocation problem.' + stop + endif + + if(tag_weight>0.and.use_weights)then + + if(tag_energy>0)then + + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_energy), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + av_energy=av ; std_err_energy=std_err + if(trim(interaction)=='mpc'.or.trim(interaction)=='mpc_ewald')then + write(6,5)'Total energy (using MPC) :',av,std_err + if(trim(interaction)=='mpc_ewald'.and.tag_ewald>0.and.tag_short>0.and.& + &tag_long>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &-data_array(startline:Nlines,tag_short)-data_array(startline:Nlines, & + &tag_long)+data_array(startline:Nlines,tag_ewald) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total energy (using Ewald) :',av,std_err + endif ! ewald present + else + if(isperiodic)then + write(6,5)'Total energy (using Ewald) :',av,std_err + else + write(6,5)'Total energy :',av,std_err + endif ! periodic + if(trim(interaction)=='ewald_mpc'.and.tag_ewald>0.and.tag_short>0.and.& + &tag_long>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &+data_array(startline:Nlines,tag_short)+data_array(startline:Nlines, & + &tag_long)-data_array(startline:Nlines,tag_ewald) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total energy (using MPC) :',av,std_err + endif ! MPC present + endif ! use_mpc_energy + + if(tag_esqr>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_esqr), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total energy squared:',av,std_err + raw_var=av-av_energy*av_energy + raw_var_err=sqrt(std_err**2+(av_energy*std_err_energy)**2) + write(6,5)'Variance of total energy:',raw_var,raw_var_err + endif + + if(tag_popavgsqr>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_popavgsqr), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Population avg of total energy squared:',av,std_err + pop_var=av-av_energy*av_energy + pop_var_err=sqrt(std_err**2+(av_energy*std_err_energy)**2) + write(6,5)'Variance of population avg of energy:',pop_var,pop_var_err + endif + + if(tag_esqr>0.and.tag_popavgsqr>0)then + write(6,5)'Effective population size:',raw_var/pop_var,& + &sqrt((raw_var_err/pop_var)**2+(pop_var_err*raw_var/pop_var**2)**2) + endif + + if(tag_masspol>0.and.tag_massvel>0.and.tag_darwinen>0.and.tag_darwinee>0 & + &.and.tag_retard>0)then +! At present, only have relativistic data for atoms. + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &+data_array(startline:Nlines,tag_masspol) & + &+data_array(startline:Nlines,tag_massvel) & + &+data_array(startline:Nlines,tag_darwinen) & + &+data_array(startline:Nlines,tag_darwinee) & + &+data_array(startline:Nlines,tag_retard) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total energy (inc rel) :',av,std_err + endif ! rel_present + + if(tag_K>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &-data_array(startline:Nlines,tag_K) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + if(trim(interaction)=='mpc'.or.trim(interaction)=='mpc_ewald')then + write(6,5)'Total pot energy (using MPC) :',av,std_err + else + if(isperiodic)then + write(6,5)'Tot pot energy (using Ewald) :',av,std_err + else + write(6,5)'Total potential energy :',av,std_err + endif ! periodic + endif ! use_mpc_energy + endif ! K present + + endif ! energy present. + + if(tag_K>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_K), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Kinetic energy (K) :',av,std_err + endif ! K present + if(tag_T>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_T), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Kinetic energy (T) :',av,std_err + endif ! T present + if(tag_fisq>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_fisq), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Kinetic energy (FISQ) :',av,std_err + elseif(tag_K>0.and.tag_T>0)then + temp_data(startline:Nlines)=2.d0*data_array(startline:Nlines,tag_T) & + &-data_array(startline:Nlines,tag_K) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Kinetic energy (FISQ) :',av,std_err + endif ! FISQ present. + if(tag_ewald>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_ewald), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + if(isperiodic)then + write(6,5)'Ewald interaction :',av,std_err + else + write(6,5)'Coulomb interaction :',av,std_err + endif ! periodic + endif ! Ewald present. + if(tag_local>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_local), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Local e-i energy :',av,std_err + endif ! local present + if(tag_nonlocal>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines, & + &tag_nonlocal),data_array(startline:Nlines,tag_weight),block_length, & + &av,std_err,delta_std_err) + write(6,5)'Nonlocal e-i energy :',av,std_err + endif ! nonlocal e-i pot present + + else + + if(tag_energy>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_energy), & + &block_length,av,std_err,delta_std_err) + av_energy=av ; std_err_energy=std_err + if(trim(interaction)=='mpc'.or.trim(interaction)=='mpc_ewald')then + write(6,5)'Total energy (using MPC) :',av,std_err + if(trim(interaction)=='mpc_ewald'.and.tag_ewald>0.and.tag_long>0.and.& + &tag_short>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &-data_array(startline:Nlines,tag_short)-data_array(startline:Nlines, & + &tag_long)+data_array(startline:Nlines,tag_ewald) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Total energy (using Ewald) :',av,std_err + endif ! Ewald present. + else + if(isperiodic)then + write(6,5)'Total energy (using Ewald) :',av,std_err + else + write(6,5)'Total energy :',av,std_err + endif ! periodic + if(trim(interaction)=='ewald_mpc'.and.tag_ewald>0.and.tag_long>0.and.& + &tag_short>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &+data_array(startline:Nlines,tag_short)+data_array(startline:Nlines, & + &tag_long)-data_array(startline:Nlines,tag_ewald) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Total energy (using MPC) :',av,std_err + endif ! MPC present. + endif ! use_mpc_energy + if(tag_esqr>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_esqr), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Total energy squared:',av,std_err + write(6,10)'Raw variance of total energy:',& + &(av-av_energy*av_energy)*dble(nparts_per_simcell) + endif + if(tag_masspol>0.and.tag_massvel>0.and.tag_darwinen>0.and.tag_darwinee>0 & + &.and.tag_retard>0)then +! At present, only have relativistic data for atoms. + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &+data_array(startline:Nlines,tag_masspol) & + &+data_array(startline:Nlines,tag_massvel) & + &+data_array(startline:Nlines,tag_darwinen) & + &+data_array(startline:Nlines,tag_darwinee) & + &+data_array(startline:Nlines,tag_retard) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines),block_length, & + &av,std_err,delta_std_err) + write(6,5)'Total energy (inc rel) :',av,std_err + endif ! rel_present + if(tag_K>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_energy) & + &-data_array(startline:Nlines,tag_K) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines),block_length, & + &av,std_err,delta_std_err) + if(trim(interaction)=='mpc'.or.trim(interaction)=='mpc_ewald')then + write(6,5)'Total pot energy (using MPC) :',av,std_err + else + if(isperiodic)then + write(6,5)'Tot pot energy (using Ewald) :',av,std_err + else + write(6,5)'Total potential energy :',av,std_err + endif ! periodic + endif ! use_mpc_energy + endif ! K present + endif ! Energy data present. + if(tag_K>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_K), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Kinetic energy (K) :',av,std_err + endif ! K present. + if(tag_T>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_T), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Kinetic energy (T) :',av,std_err + endif ! T present + if(tag_fisq>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_fisq), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Kinetic energy (FISQ) :',av,std_err + elseif(tag_K>0.and.tag_T>0)then + temp_data(startline:Nlines)=2.d0*data_array(startline:Nlines,tag_T) & + &-data_array(startline:Nlines,tag_K) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines),block_length, & + &av,std_err,delta_std_err) + write(6,5)'Kinetic energy (FISQ) :',av,std_err + endif ! K & T present. + if(tag_ewald>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_ewald), & + &block_length,av,std_err,delta_std_err) + if(isperiodic)then + write(6,5)'Ewald interaction :',av,std_err + else + write(6,5)'Coulomb interaction :',av,std_err + endif ! periodic + endif ! Ewald present. + if(tag_local>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_local), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Local e-i energy :',av,std_err + endif ! local present + if(tag_nonlocal>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines, & + &tag_nonlocal),block_length,av,std_err,delta_std_err) + write(6,5)'Nonlocal e-i energy :',av,std_err + endif ! nonlocal e-i pot present + + endif ! weighted + + if(tag_weight>0.and.use_weights)then + if(tag_short>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_short), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Short-range MPC energy :',av,std_err + endif ! short present + if(tag_long>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_long), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Long-range MPC energy :',av,std_err + endif ! long present. + if(tag_short>0.and.tag_long>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_short)+ & + &data_array(startline:Nlines,tag_long) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total MPC energy :',av,std_err + endif ! MPC data present + if(tag_cppei>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_cppei), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'CPP energy (e-i) :',av,std_err + endif ! CPPEI present + if(tag_cppe>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_cppe), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'CPP energy (e) :',av,std_err + endif ! CPPE present + if(tag_cppee>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_cppee), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'CPP energy (e-e) :',av,std_err + endif ! CPP data present + if(tag_masspol>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_masspol), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Mass-polarization energy :',av,std_err + endif ! masspol present + if(tag_massvel>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_massvel), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Mass-velocity energy :',av,std_err + endif ! massvel present. + if(tag_darwinen>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_darwinen), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Electron-nucleus Darwin :',av,std_err + endif ! darawin e-n present. + if(tag_darwinee>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_darwinee), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Electron-electron Darwin :',av,std_err + endif ! darwin e-e present. + if(tag_retard>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_retard), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Retardation term :',av,std_err + endif ! Duh. + if(tag_masspol>0.and.tag_massvel>0.and.tag_darwinen>0.and.tag_darwinee>0 & + &.and.tag_retard>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_masspol) & + &+data_array(startline:Nlines,tag_massvel) & + &+data_array(startline:Nlines,tag_darwinen) & + &+data_array(startline:Nlines,tag_darwinee) & + &+data_array(startline:Nlines,tag_retard) + call reblock_weighted(Nstudy,temp_data(startline:Nlines), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Total rel correction :',av,std_err + endif ! Relativistic data present + + else + + if(tag_short>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_short), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Short-range MPC energy :',av,std_err + endif ! short present. + if(tag_long>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_long), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Long-range MPC energy :',av,std_err + endif ! long present. + if(tag_short>0.and.tag_long>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_short) & + &+data_array(startline:Nlines,tag_long) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines),block_length, & + &av,std_err,delta_std_err) + write(6,5)'Total MPC energy :',av,std_err + endif ! MPC data present + if(tag_cppei>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_cppei), & + &block_length,av,std_err,delta_std_err) + write(6,5)'CPP energy (e-i) :',av,std_err + endif ! CPPEI present + if(tag_cppe>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_cppe), & + &block_length,av,std_err,delta_std_err) + write(6,5)'CPP energy (e) :',av,std_err + endif ! CPPE present. + if(tag_cppee>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_cppee), & + &block_length,av,std_err,delta_std_err) + write(6,5)'CPP energy (e-e) :',av,std_err + endif ! CPPEE data present + if(tag_masspol>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_masspol), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Mass-polarization energy :',av,std_err + endif ! masspol present. + if(tag_massvel>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_massvel), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Mass-velocity energy :',av,std_err + endif ! massvel present. + if(tag_darwinen>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_darwinen), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Electron-nucleus Darwin :',av,std_err + endif ! darwinen present. + if(tag_darwinee>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_darwinee), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Electron-electron Darwin :',av,std_err + endif ! darwinee present. + if(tag_retard>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_retard), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Retardation term :',av,std_err + endif ! Duh. + if(tag_masspol>0.and.tag_massvel>0.and.tag_darwinen>0.and.tag_darwinee>0 & + &.and.tag_retard>0)then + temp_data(startline:Nlines)=data_array(startline:Nlines,tag_masspol) & + &+data_array(startline:Nlines,tag_massvel) & + &+data_array(startline:Nlines,tag_darwinen) & + &+data_array(startline:Nlines,tag_darwinee) & + &+data_array(startline:Nlines,tag_retard) + call reblock_unweighted(Nstudy,temp_data(startline:Nlines), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Total rel correction :',av,std_err + endif ! Relativistic data present + + endif ! weighted. + + deallocate(temp_data) + + if(constant_energy/=0.d0)write(6,10)'Constant energy :',constant_energy + write(6,*) + +! Calculate and write out forces + if(forces)call construct_write_forces(startline,Nstudy,block_length) + +! Write out future-walking estimates + if(tag_future1>0)then + write(6,*)'FUTURE-WALKING ESTIMATES WITH REBLOCKED ERROR BAR' + write(6,*)'=================================================' + write(6,*)'Future-walking estimates of the observable pureitems(1) & + &from the dmc_main' + write(6,*)'routine. Temporarily, pureitems(1) is the Hellmann-Feynman & + &forces in the' + write(6,*)'x-direction of the 1st atom as ordered in the gwfn.data & + &file. To estimate' + write(6,*)'a different observable, alter the assignment after line:' + write(6,*)"'Change next line when future-walking estimates are required'" + write(6,*)' Mean (au) Err (au)' + + if(tag_weight>0.and.use_weights)then + if(tag_future0>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future0), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (1st) :',av,std_err + endif + if(tag_future1>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future1), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (2nd) :',av,std_err + endif + if(tag_future2>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future2), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (3rd) :',av,std_err + endif + if(tag_future3>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future3), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (4th) :',av,std_err + endif + if(tag_future4>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future4), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (5th) :',av,std_err + endif + if(tag_future5>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future5), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (6th) :',av,std_err + endif + if(tag_future6>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future6), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (7th) :',av,std_err + endif + if(tag_future7>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future7), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (8th) :',av,std_err + endif + if(tag_future8>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future8), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (9th) :',av,std_err + endif + if(tag_future9>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future9), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (10th) :',av,std_err + endif + if(tag_future10>0) then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_future10), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'FW Estimator (11th) :',av,std_err + endif + write(6,*) + write(6,*)'The 1st estimator corresponds to future-walking projection & + &time T=0 1/Ha,' + write(6,*)'the 2nd to T=0.5 1/Ha, the 3rd to T=1 1/Ha..., and the & + &11th to T=10 1/Ha.' + write(6,*) + + endif ! tag_weight + + endif ! future + + if(tag_dipole1>0.or.tag_dipole2>0.or.tag_dipole3>0.or.tag_dipole_sq>0)then + write(6,*)'ELECTRIC DIPOLE MOMENT WITH REBLOCKED ERROR BARS' + write(6,*)'================================================' + write(6,15)' Mean (au) ',' Err (au)' + + if(tag_weight>0.and.use_weights)then + if(tag_dipole1>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_dipole1), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Dipole moment (x cpt) :',av,std_err + endif ! tag_dipole1 + if(tag_dipole2>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_dipole2), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Dipole moment (y cpt) :',av,std_err + endif ! tag_dipole2 + if(tag_dipole3>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_dipole3), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Dipole moment (z cpt) :',av,std_err + endif ! tag_dipole3 + if(tag_dipole_sq>0)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_dipole_sq), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Dipole moment squared :',av,std_err + endif ! tag_dipole_sq + else + if(tag_dipole1>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_dipole1), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Dipole moment (x cpt) :',av,std_err + endif ! tag_dipole1 + if(tag_dipole2>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_dipole2), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Dipole moment (y cpt) :',av,std_err + endif ! tag_dipole2 + if(tag_dipole3>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines,tag_dipole3), & + &block_length,av,std_err,delta_std_err) + write(6,5)'Dipole moment (z cpt) :',av,std_err + endif ! tag_dipole3 + if(tag_dipole_sq>0)then + call reblock_unweighted(Nstudy,data_array(startline:Nlines, & + &tag_dipole_sq),block_length,av,std_err,delta_std_err) + write(6,5)'Dipole moment squared :',av,std_err + endif ! tag_dipole_sq + endif ! weighted. + write(6,*) + endif ! Dipole moment + + if(tag_contact_den>0)then + write(6,*)'CONTACT DENSITY' + write(6,*)'===============' + write(6,15)' Mean (au) ',' Err (au)' + if(tag_weight>0.and.use_weights)then + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_contact_den), & + &data_array(startline:Nlines,tag_weight),block_length,av,std_err, & + &delta_std_err) + write(6,5)'Elec-pos contact density :',av,std_err + else + call reblock_unweighted(Nstudy,data_array(startline:Nlines, & + &tag_contact_den),block_length,av,std_err,delta_std_err) + write(6,5)'Elec-pos contact density :',av,std_err + endif ! weighted. + write(6,*) + endif ! Contact density + + END SUBROUTINE compute_stats + + + SUBROUTINE reblock_analysis(no_pts,data_array,weight_array) +!--------------------------------------------------------------! +! Compute the weighted average of the data, and calculate the ! +! error bar as a function of reblocking transformation number. ! +!--------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: no_pts + DOUBLE PRECISION,INTENT(in) :: data_array(no_pts) + DOUBLE PRECISION,INTENT(in),OPTIONAL :: weight_array(no_pts) + INTEGER no_rtns,rtn,block_length,ierr + DOUBLE PRECISION av,std_err,delta_std_err + + open(unit=10,file='reblock.plot',status='replace',iostat=ierr) + if(ierr/=0)then + write(6,*)'Problem opening reblock.plot.' + stop + endif + +! Number of reblocking transformations + no_rtns=floor(log(dble(no_pts))/log(2.d0)) + +! Initial block length + block_length=1 + +! Write out results of reblocking analysis + write(6,*)' RTN Blk leng Std error in mean Error in std error' + do rtn=0,no_rtns-1 + if(present(weight_array))then + call reblock_weighted(no_pts,data_array,weight_array,block_length, & + &av,std_err,delta_std_err) + else + call reblock_unweighted(no_pts,data_array,block_length,av,std_err, & + &delta_std_err) + endif ! weights present + write(6,'(" ",i4," ",i10," ",es23.15," ",es23.15)')rtn,block_length, & + &std_err,delta_std_err + write(10,*)rtn,std_err,delta_std_err + block_length=2*block_length + enddo ! rtn + write(6,*) + + write(6,*)'Reblocked error bar against reblocking transformation number & + &(RTN) has been' + write(6,*)'written to reblock.plot. Please use "plot_reblock" to view & + &these data.' + write(6,*) + close(10) + + END SUBROUTINE reblock_analysis + + + SUBROUTINE reblock_forces_analysis(no_pts,data_array,plotname,weight_array) +!--------------------------------------------------------------! +! Compute the weighted average of the data, and calculate the ! +! error bar as a function of reblocking transformation number. ! +! This routine is an extension of routine reblock_analysis ! +! to allow specifying the name of the file to be written out. ! +! ! +! AB 11.2007 ! +!--------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: no_pts + DOUBLE PRECISION,INTENT(in) :: data_array(no_pts) + DOUBLE PRECISION,INTENT(in),OPTIONAL :: weight_array(no_pts) + CHARACTER(20),INTENT(in) :: plotname + INTEGER no_rtns,rtn,block_length,ierr + DOUBLE PRECISION av,std_err,delta_std_err + + open(unit=10,file=plotname ,status='replace',iostat=ierr) + if(ierr/=0)then + write(6,*)'Problem opening plotname.' + stop + endif + +! Number of reblocking transformations + no_rtns=floor(log(dble(no_pts))/log(2.d0)) + +! Initial block length + block_length=1 + +! Write out results of reblocking analysis + write(6,*)' RTN Blk leng Std error in mean Error in std error' + do rtn=0,no_rtns-1 + if(present(weight_array))then + call reblock_weighted(no_pts,data_array,weight_array,block_length, & + &av,std_err,delta_std_err) + else + call reblock_unweighted(no_pts,data_array,block_length,av,std_err, & + &delta_std_err) + endif ! weights present + write(6,'(" ",i4," ",i10," ",es23.15," ",es23.15)')rtn,block_length, & + &std_err,delta_std_err + write(10,*)rtn,std_err,delta_std_err + block_length=2*block_length + enddo ! rtn + write(6,*) + + close(10) + + END SUBROUTINE reblock_forces_analysis + + + CHARACTER(12) FUNCTION i2s(n) +!-----------------------------------------------------------------------! +! I2S ! +! === ! +! Convert integers to left justified strings that can be printed in the ! +! middle of a sentence without introducing large amounts of white space.! +! ! +! Calling routine is intended to include something like: ! +! USE utilities ! +! INTEGER i ! +! i=12 ! +! write(6,*)'Integer number ',trim(i2s(i)),' with words at the end.' ! +!-----------------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: n + INTEGER i,j + INTEGER,PARAMETER :: ichar0=ichar('0') + i2s='' + i=abs(n) + do j=len(i2s),1,-1 + i2s(j:j)=achar(ichar0+mod(i,10)) + i=i/10 ; if(i==0)exit + enddo ! j + if(n<0)then + i2s='-'//adjustl(i2s) + else + i2s=adjustl(i2s) + endif ! n<0 + END FUNCTION i2s + + + SUBROUTINE generate_tag_forces(datastring,i) +!------------------------------------------------------------------! +! This subroutine generates tags for forces from tags read in from ! +! the .hist file. It also determines the number of atoms and axes ! +! for which forces data are available. ! +! ! +! AB 11.2007 ! +!------------------------------------------------------------------! + IMPLICIT NONE + CHARACTER(72),INTENT(in) :: datastring + INTEGER,INTENT(in) :: i + CHARACTER(1) :: axis(3)=(/'X','Y','Z'/) + CHARACTER(1) :: atem(22)=(/'A','B','C','D','E','F','G','H','I','J','K',& + &'L','M','N','O','P','Q','R','S','T','U','V'/) + CHARACTER(1) iaxis_char,item_char + INTEGER iaxis,item,iion,ion_tmp + + read(datastring(6:),*)ion_tmp + do iion=1,nitot_max_forces + if(ion_tmp==iion)then +! Generate the number of atoms for which forces are calculated. + if(iion>nitot_forces)nitot_forces=iion + do iaxis=1,3 + iaxis_char=axis(iaxis) + if(datastring(5:5)==iaxis_char)then +! Generate the number of axis for which forces are calculated. + if(iaxis>naxis_forces)naxis_forces=iaxis + do item=1,22 + item_char=atem(item) + if(datastring(4:4)==item_char)then +! Generate the number of items. + if(item>nitem_forces)nitem_forces=item + call check_tag_free(tag_forces(item,iaxis,iion)) +! Generate label for forces + tag_forces(item,iaxis,iion)=i + endif ! item_char + enddo ! item + endif ! datastring=iaxis_char + enddo ! iaxis + endif ! iion + enddo ! iion + + END SUBROUTINE generate_tag_forces + + + SUBROUTINE construct_write_forces(startline,Nstudy,block_length) +!----------------------------------------------------------------! +! This routine calculates VMC/DMC forces from available data and ! +! performs a reblocking analysis. ! +! ! +! AB 11.2007 ! +!----------------------------------------------------------------! + IMPLICIT NONE + INTEGER,INTENT(in) :: startline,Nstudy,block_length + CHARACTER(20) plotname + INTEGER i,n,ialloc,nthird,nthirdstart,nthirdstop,ierr + DOUBLE PRECISION etot,std_err,delta_std_err,etot_dmc,etot_dmc_SE + DOUBLE PRECISION av,var,skew,kurt,max_val,min_val + LOGICAL forces_reblock,ltemp + +! Do we want to reblock forces? + forces_reblock=.false. + do + write(6,*)'Forces data are detected. When you like to reblock the forces da& + &ta with the' + write(6,*)'same block length as the total energy, choose F. When you like t& + &o investigate' + write(6,*)'reblocked forces error bars, choose T and use gnuplot to look at& + & error bars.' + write(6,*)'Choose F or T:' + read(5,*,iostat=ierr)forces_reblock + if(ierr/=0)forces_reblock=.false. + if((forces_reblock).or.(.not.forces_reblock))then + exit + else + write(6,*)'Please try again. Choose T or F.' + endif + enddo ! choice loop + + + write(6,*)'FORCES COMPONENTS WITH REBLOCKED ERROR BARS' + write(6,*)'===========================================' + +!------------------ reblock VMC forces ------------------------- + + if(trim(qmc_method)=='VMC')then + + allocate(forces_array(Nlines,11),stat=ialloc) + if(ialloc/=0)then + write(6,*)'Allocation problem (1).' + stop + endif + +! Need energy estimate + call reblock_unweighted(Nstudy,data_array(startline:Nlines,& + &tag_energy),1,etot,std_err,delta_std_err) + + inquire(file='DMC_energy',exist=ltemp) + if(ltemp)then + open(11,file='DMC_energy') + read(11,*)etot_dmc,etot_dmc_SE + close(11) + else + etot_dmc=0.d0 + endif + + do iion=1,nitot_forces + do iaxis=1,naxis_forces + write(6,*)'Forces on atom ',trim(i2s(iion)),' along axis ',& + &trim(i2s(iaxis)),' Mean (au) Err (au)' + +! Construct various VMC estimators for the forces + do n=1,Nlines +! 1. Total forces (d-loc) + forces_array(n,1)=data_array(n,tag_forces(9,iaxis,iion))& + &-2.d0*data_array(n,tag_forces(2,iaxis,iion))& + &+2.d0*etot*data_array(n,tag_forces(1,iaxis,iion)) +! HFT forces (d-loc) + forces_array(n,2)=data_array(n,tag_forces(9,iaxis,iion)) + if(data_array(n,tag_forces(10,iaxis,iion))/=0.d0)then +! HFT forces (p-loc) + forces_array(n,3)=data_array(n,tag_forces(10,iaxis,iion)) +! HFT forces (s-loc) + forces_array(n,4)=data_array(n,tag_forces(11,iaxis,iion)) + endif +! Wavefunction Pulay term + forces_array(n,5)=& + &-2.d0*data_array(n,tag_forces(2,iaxis,iion))& + &+2.d0*etot*data_array(n,tag_forces(1,iaxis,iion)) +! Pseudopotential Pulay term + forces_array(n,6)=-data_array(n,tag_forces(7,iaxis,iion))& + &+data_array(n,tag_forces(4,iaxis,iion)) +! 2. Total forces zero-variance corrected (class 1,d-loc) + forces_array(n,7)=data_array(n,tag_forces(9,iaxis,iion))& ! HFT + &-2.d0*data_array(n,tag_forces(2,iaxis,iion))& ! Pulay + &+2.d0*etot*data_array(n,tag_forces(1,iaxis,iion))& ! " + &-data_array(n,tag_forces(6,iaxis,iion))& ! -H Psi' + &-data_array(n,tag_forces(7,iaxis,iion))& ! " + &+data_array(n,tag_forces(3,iaxis,iion))& ! " + &+data_array(n,tag_forces(4,iaxis,iion)) ! " +! Zero-variance term + forces_array(n,8)=& + &-data_array(n,tag_forces(6,iaxis,iion))& !- H Psi' + &-data_array(n,tag_forces(7,iaxis,iion))& ! " + &+data_array(n,tag_forces(3,iaxis,iion))& ! " + &+data_array(n,tag_forces(4,iaxis,iion)) ! " + ! E_l Psi' term cancelled +! VMC nodal term, added to Total Forces (purHFT,purNT,d-loc) + if(etot_dmc/=0.d0)then + forces_array(n,9)=& ! + &-data_array(n,tag_forces(6,iaxis,iion))& ! -H Psi' + &-data_array(n,tag_forces(7,iaxis,iion))& ! " + &-data_array(n,tag_forces(2,iaxis,iion))& ! " + &+data_array(n,tag_forces(3,iaxis,iion))& ! " + &+data_array(n,tag_forces(4,iaxis,iion))& ! " + &+etot_dmc*data_array(n,tag_forces(1,iaxis,iion)) ! E*Psi' + else + forces_array(n,9)=0.d0 + endif + enddo ! Nlines + +! Write out the various estimators for the forces +! 1. Total forces + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,1),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'Total Force(dloc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,2),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'HFT Force(dloc) :',av,std_err + if(data_array(n,tag_forces(10,iaxis,iion))/=0.d0)then + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,3),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'HFT Force(ploc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,4),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'HFT Force(sloc) :',av,std_err + endif + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,5),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'Wavefunction Pulay term :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,6),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'Pseudopotential Pulay term :',av,std_err + +! 2. Total forces zero-variance corrected + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,7),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'Total Force+ZV(dloc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,8),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'Zero-variance term :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,9),& + &block_length,av,std_err,delta_std_err) + write(6,9) 'VMC NT(add to last DMC est) :',av,std_err + + if(forces_reblock)then + plotname='forces'//'.tot.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:& + &Nlines,1),plotname) + plotname='forces'//'.HFT.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:& + &Nlines,2),plotname) + plotname='forces'//'.totZV.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:& + &Nlines,7),plotname) + plotname='forces'//'.vmcNT.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:& + &Nlines,9),plotname) +! Analyse total forces by thirds if there is enough data. + if(Nstudy>=6)then + write(6,*) + write(6,*)'ANALYSIS OF TOTAL FORCES DATA BY THIRDS' + nthird=Nstudy/3 + write(6,*)' Data range Av forces Variance Maximum & + &Minimum' + do i=1,3 + nthirdstart=startline+(i-1)*nthird + nthirdstop=nthirdstart+nthird-1 + call compute_stats_unweighted(.false.,nthird, & + &forces_array(nthirdstart:nthirdstop,1),av,var,skew,kurt, & + &max_val,min_val) + write(6,'(" ",a16,4(" ",es12.5))')trim(i2s(nthirdstart)) & + &//'->'//trim(i2s(nthirdstop)),av,var,max_val,min_val + enddo ! i + else + write(6,*)'Not enough data to analyse by thirds: need at least 6 points.' + endif ! Enough data? + endif ! reblock + write(6,*) + + enddo ! iaxis + enddo ! iion + write(6,*) "The last estimator 'VMC NT' is zero (not used), unless a 'DMC_en& + &ergy' file is " + write(6,*) "provided in the working directory during the reblocking process & + &which contains" + write(6,*) "the DMC energy followed by its error bar. After this estimator V& + &MC NT is " + write(6,*) "calculated by the reblocking routine, please add it by hand to t& + &he 'Total" + write(6,*) "Force(purHFT/NT,dloc)' estimator to obtain another force estimat& + &or." + write(6,*) + endif ! VMC + +!------------------- reblock DMC forces --------------------- + + if(trim(qmc_method)=='DMC')then + allocate(forces_array(Nlines,10),stat=ialloc) + if(ialloc/=0)then + write(6,*)'Allocation problem (1).' + stop + endif + +! Need energy estimate + call reblock_weighted(Nstudy,data_array(startline:Nlines,tag_energy),& + &data_array(startline:Nlines,tag_weight),1,etot,std_err,delta_std_err) + +! Construct various DMC estimators for the forces + do iion=1,nitot_forces + do iaxis=1,naxis_forces + write(6,*)'Forces on atom ',trim(i2s(iion)),' along axis ',& + &trim(i2s(iaxis)),' Mean (au) Err (au)' + + do n=1,Nlines +! 1. Pure total forces (mixNT,dloc) + forces_array(n,1)=data_array(n,tag_forces(20,iaxis,iion))& ! HFT + &-data_array(n,tag_forces(18,iaxis,iion))& ! PPT + &+data_array(n,tag_forces(15,iaxis,iion))& ! " + &-2.d0*(data_array(n,tag_forces(6,iaxis,iion))& ! NT + & +data_array(n,tag_forces(8,iaxis,iion))& ! " + & +data_array(n,tag_forces(2,iaxis,iion))& ! " + & -data_array(n,tag_forces(3,iaxis,iion))& ! " + & -data_array(n,tag_forces(5,iaxis,iion))& ! " + & -etot*data_array(n,tag_forces(1,iaxis,iion))) ! " +! Pure total forces (purNT,dloc) + forces_array(n,2)=data_array(n,tag_forces(20,iaxis,iion))& ! HFT + &-data_array(n,tag_forces(18,iaxis,iion))& ! PPT + &+data_array(n,tag_forces(15,iaxis,iion))& ! " + &-(data_array(n,tag_forces(17,iaxis,iion))& ! NT + & +data_array(n,tag_forces(19,iaxis,iion))& ! " + & +data_array(n,tag_forces(13,iaxis,iion))& ! " + & -data_array(n,tag_forces(14,iaxis,iion))& ! " + & -data_array(n,tag_forces(16,iaxis,iion))& ! " + & -etot*data_array(n,tag_forces(12,iaxis,iion))) ! " +! Pure HFT forces (d-loc) + forces_array(n,3)=data_array(n,tag_forces(20,iaxis,iion)) + if(data_array(n,tag_forces(10,iaxis,iion))/=0.d0)then +! Pure HFT forces (p-loc) + forces_array(n,4)=data_array(n,tag_forces(21,iaxis,iion)) +! Pure HFT forces (s-loc) + forces_array(n,5)=data_array(n,tag_forces(22,iaxis,iion)) + endif +! Nodal term (mix) + forces_array(n,6)=& + &-2.d0*(data_array(n,tag_forces(6,iaxis,iion))& ! NT + & +data_array(n,tag_forces(8,iaxis,iion))& ! " + & +data_array(n,tag_forces(2,iaxis,iion))& ! " + & -data_array(n,tag_forces(3,iaxis,iion))& ! " + & -data_array(n,tag_forces(5,iaxis,iion))& ! " + & -etot*data_array(n,tag_forces(1,iaxis,iion))) ! " +! Nodal term (pur) + forces_array(n,7)=& + &-(data_array(n,tag_forces(17,iaxis,iion))& ! NT + & +data_array(n,tag_forces(19,iaxis,iion))& ! " + & +data_array(n,tag_forces(13,iaxis,iion))& ! " + & -data_array(n,tag_forces(14,iaxis,iion))& ! " + & -data_array(n,tag_forces(16,iaxis,iion))& ! " + & -etot*data_array(n,tag_forces(12,iaxis,iion))) ! " +! Pseudopotential Pulay term: Psi^(-1)WPsi'-Psi^(-1)WPsi Psi'/Psi + forces_array(n,8)=-data_array(n,tag_forces(18,iaxis,iion))& + &+data_array(n,tag_forces(15,iaxis,iion)) +! 2. Mixed total forces (d-loc) + forces_array(n,9)=data_array(n,tag_forces(9,iaxis,iion))& ! HFT + & -data_array(n,tag_forces(7,iaxis,iion))& ! PPT + & +data_array(n,tag_forces(4,iaxis,iion))& ! " + & -data_array(n,tag_forces(6,iaxis,iion))& ! NT + & -data_array(n,tag_forces(8,iaxis,iion))& ! " + & -2.d0*data_array(n,tag_forces(2,iaxis,iion))& ! " + & +data_array(n,tag_forces(3,iaxis,iion))& ! " + & +data_array(n,tag_forces(5,iaxis,iion))& ! " + & +2.d0*etot*data_array(n,tag_forces(1,iaxis,iion)) ! " + +! Mixed HFT forces (d-loc) + forces_array(n,10)=data_array(n,tag_forces(9,iaxis,iion)) + enddo ! Nlines + +! Write out forces + if(tag_weight>0.and.use_weights)then +! 1. Pure total forces + call reblock_weighted(Nstudy,forces_array(startline:Nlines,1),& + &data_array(startline:Nlines,tag_weight),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Total Force(purHFT,mixNT,dloc) :',av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,2),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'Total Force(purHFT,purNT,dloc) :',av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,3),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'HFT Force(pur,dloc) :',av,std_err + if(data_array(n,tag_forces(10,iaxis,iion))/=0.d0)then + call reblock_weighted(Nstudy,forces_array(startline:Nlines,4),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'HFT Force(pur,ploc) :',av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,5),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'HFT Force(pur,sloc) :',av,std_err + endif + call reblock_weighted(Nstudy,forces_array(startline:Nlines,6),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'Nodal Term(mix) :', av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,7),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'Nodal Term(pur) :', av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,8),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'Pseudopot. Pulay Term(pur) :',av,std_err +! Mixed total forces + call reblock_weighted(Nstudy,forces_array(startline:Nlines,9),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'Total Force(mix,dloc) :',av,std_err + call reblock_weighted(Nstudy,forces_array(startline:Nlines,10),& + &data_array(startline:Nlines,tag_weight),block_length,av,std_err,& + &delta_std_err) + write(6,9)'HFT Force(mix,dloc) :',av,std_err + write(6,*) + +! Reblock forces and write out into files + if(forces_reblock)then + plotname='forces'//'.totpur.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,1),& + &plotname,data_array(startline:Nlines,tag_weight)) + plotname='forces'//'.HFTpur.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,3),& + &plotname,data_array(startline:Nlines,tag_weight)) + plotname='forces'//'.totmix'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,9),& + &plotname,data_array(startline:Nlines,tag_weight)) + plotname='forces'//'.HFT'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,10),& + &plotname,data_array(startline:Nlines,tag_weight)) + endif ! forces_reblock + + else ! have weights +! 1. Pure total forces + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,1),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Total Force(purHFT,mixHFT,dloc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,2),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Total Force(purHFT,purHFT,dloc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,3),& + &block_length,av,std_err,delta_std_err) + write(6,9)'HFT Force(pur,dloc) :',av,std_err + if(data_array(n,tag_forces(10,iaxis,iion))/=0.d0)then + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,4),& + &block_length,av,std_err,delta_std_err) + write(6,9)'HFT Force(pur,ploc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,5),& + &block_length,av,std_err,delta_std_err) + write(6,9)'HFT Force(pur,sloc) :',av,std_err + endif + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,6),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Nodal Term(mix) :', av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,7),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Nodal Term(pur) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,8),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Pseudopot. Pulay Term(pur) :',av,std_err +! Mixed total forces + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,9),& + &block_length,av,std_err,delta_std_err) + write(6,9)'Total Force(mix,dloc) :',av,std_err + call reblock_unweighted(Nstudy,forces_array(startline:Nlines,10),& + &block_length,av,std_err,delta_std_err) + write(6,9)'HFT Force(mix,dloc) :',av,std_err + write(6,*) + +! Reblock forces and write out into files + if(forces_reblock)then + plotname='forces'//'.totpur.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,1),& + &plotname) + plotname='forces'//'.HFTpur.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,3),& + &plotname) + plotname='forces'//'.totmix.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,9),& + &plotname) + plotname='forces'//'.HFTmix.'//trim(i2s(iaxis))//trim(i2s(iion))//& + &'.plot' + call reblock_forces_analysis(Nstudy,forces_array(startline:Nlines,10),& + &plotname) + endif + endif ! have weights + + enddo ! naxis + enddo ! nitot_forces + + endif ! DMC + +9 format(" ",a32,2(" ",f20.14)) + + END SUBROUTINE construct_write_forces + + +END MODULE analysis + + +PROGRAM analyse_qmc +!---------------------------! +! Main program starts here. ! +!---------------------------! + USE analysis, ONLY : filename,read_data,check_data,compute_stats + IMPLICIT NONE + LOGICAL vmc,dmc + + write(6,*) + write(6,*)'O---------O' + write(6,*)'| REBLOCK |' + write(6,*)'O---------O' + write(6,*) + +! What files are present? + inquire(file='vmc.hist',exist=vmc) + inquire(file='dmc.hist',exist=dmc) + + if(.not.(vmc.or.dmc))then + write(6,*)'Sorry, there are no vmc.hist or dmc.hist files to analyse.' + stop + endif ! No hist files found. + +! Sort out which file to analyse if more than one possibility exists. + if(dmc)then + filename='dmc.hist' + elseif(vmc)then + filename='vmc.hist' + else + write(6,*)'Bug.' + stop + endif + write(6,*)'Data in '//trim(filename)//' will be analysed.' + write(6,*) + +! Read in data from the file. + call read_data(dmc) + +! Check the data for inconsistencies and get units etc. + call check_data + +! Analyse the data. + call compute_stats + + write(6,*)'Program finished.' + write(6,*) + +END PROGRAM analyse_qmc diff --git a/utils/rename b/utils/rename new file mode 100755 index 0000000..ae8cc33 --- /dev/null +++ b/utils/rename @@ -0,0 +1,14 @@ +#! /bin/bash + +if [ $# != 1 ] +then + echo "1 argument required!!" +else + mv Ov.dat Ov."$1".dat + mv Kin.dat Kin."$1".dat + mv Nuc.dat Nuc."$1".dat + mv ERI.dat ERI."$1".dat + mv F12.dat F12."$1".dat + mv Erf.dat Erf."$1".dat +fi +