From 0ac8bc5b0b125b6af8427ed6fa5637e4e0eacd20 Mon Sep 17 00:00:00 2001 From: Manu Date: Mon, 16 Mar 2015 14:39:31 +0100 Subject: [PATCH] add inact bitmask/virtual bitmasks and 2h-2p filter --- src/Bitmask/bitmask_cas_routines.irp.f | 386 +++++++++++++++++++++++++ src/Bitmask/bitmasks.irp.f | 20 ++ src/Generators_CAS/generators.irp.f | 2 +- 3 files changed, 407 insertions(+), 1 deletion(-) create mode 100644 src/Bitmask/bitmask_cas_routines.irp.f diff --git a/src/Bitmask/bitmask_cas_routines.irp.f b/src/Bitmask/bitmask_cas_routines.irp.f new file mode 100644 index 00000000..540f4bf7 --- /dev/null +++ b/src/Bitmask/bitmask_cas_routines.irp.f @@ -0,0 +1,386 @@ +integer function number_of_holes(key_in) + ! function that returns the number of holes in the inact space + implicit none + integer(bit_kind), intent(in) :: key_in(N_int,2) + integer :: i + number_of_holes = 0 + if(N_int == 1)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) + return + else if(N_int == 2)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) + return + else if(N_int == 3)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) + return + else if (N_int == 4)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) + return + else if (N_int == 5)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) + return + else if (N_int == 6)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) + return + else if (N_int == 7)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) & + + popcnt(iand(iand(key_in(7,1),inact_bitmask(7,1)),inact_bitmask(7,1))) & + + popcnt(iand(iand(key_in(7,2),inact_bitmask(7,1)),inact_bitmask(7,1))) + return + else if (N_int == 8)then + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) & + + popcnt(iand(iand(key_in(7,1),inact_bitmask(7,1)),inact_bitmask(7,1))) & + + popcnt(iand(iand(key_in(7,2),inact_bitmask(7,1)),inact_bitmask(7,1))) & + + popcnt(iand(iand(key_in(8,2),inact_bitmask(8,1)),inact_bitmask(8,1))) & + + popcnt(iand(iand(key_in(8,2),inact_bitmask(8,1)),inact_bitmask(8,1))) + return + else + do i = 1, N_int + number_of_holes = number_of_holes + popcnt(iand(iand(key_in(i,1),inact_bitmask(i,1)),inact_bitmask(i,1))) & + + popcnt(iand(iand(key_in(i,2),inact_bitmask(i,1)),inact_bitmask(i,1))) + enddo + + endif +end + + +integer function number_of_particles(key_in) + ! function that returns the number of particles in the virtual space + implicit none + integer(bit_kind), intent(in) :: key_in(N_int,2) + integer :: i + number_of_particles= 0 + if(N_int == 1)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) + return + else if(N_int == 2)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) + return + else if(N_int == 3)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) + return + else if(N_int == 4)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),virt_bitmask(4,1)),virt_bitmask(4,1))) + return + else if(N_int == 5)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),virt_bitmask(5,1)),virt_bitmask(5,1))) + return + else if(N_int == 6)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),virt_bitmask(6,1)),virt_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),virt_bitmask(6,1)),virt_bitmask(6,1))) + return + else if(N_int == 7)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),virt_bitmask(6,1)),virt_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),virt_bitmask(6,1)),virt_bitmask(6,1))) & + + popcnt(iand(iand(key_in(7,1),virt_bitmask(7,1)),virt_bitmask(7,1))) & + + popcnt(iand(iand(key_in(7,2),virt_bitmask(7,1)),virt_bitmask(7,1))) + return + else if(N_int == 8)then + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) & + + popcnt(iand(iand(key_in(2,1),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(2,2),virt_bitmask(2,1)),virt_bitmask(2,1))) & + + popcnt(iand(iand(key_in(3,1),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(3,2),virt_bitmask(3,1)),virt_bitmask(3,1))) & + + popcnt(iand(iand(key_in(4,1),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(4,2),virt_bitmask(4,1)),virt_bitmask(4,1))) & + + popcnt(iand(iand(key_in(5,1),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(5,2),virt_bitmask(5,1)),virt_bitmask(5,1))) & + + popcnt(iand(iand(key_in(6,1),virt_bitmask(6,1)),virt_bitmask(6,1))) & + + popcnt(iand(iand(key_in(6,2),virt_bitmask(6,1)),virt_bitmask(6,1))) & + + popcnt(iand(iand(key_in(7,1),virt_bitmask(7,1)),virt_bitmask(7,1))) & + + popcnt(iand(iand(key_in(7,2),virt_bitmask(7,1)),virt_bitmask(7,1))) & + + popcnt(iand(iand(key_in(8,1),virt_bitmask(8,1)),virt_bitmask(8,1))) & + + popcnt(iand(iand(key_in(8,2),virt_bitmask(8,1)),virt_bitmask(8,1))) + return + else + do i = 1, N_int + number_of_particles = number_of_particles + popcnt(iand(iand(key_in(i,1),virt_bitmask(i,1)),virt_bitmask(i,1))) & + + popcnt(iand(iand(key_in(i,2),virt_bitmask(i,1)),virt_bitmask(i,1))) + enddo + endif +end + +logical function is_a_two_holes_two_particles(key_in) + ! logical function that returns True if the determinant 'key_in' + ! belongs to the 2h-2p excitation class of the DDCI space + ! this is calculated using the CAS_bitmask that defines the active + ! orbital space, the inact_bitmasl that defines the inactive oribital space + ! and the virt_bitmask that defines the virtual orbital space + implicit none + integer(bit_kind), intent(in) :: key_in(N_int,2) + integer :: i,i_diff + i_diff = 0 + if(N_int == 1)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)),virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)),virt_bitmask(1,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 2)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 3)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 4)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles beta + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes alpha + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes beta + + popcnt(iand(iand(key_in(4,1), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles alpha + + popcnt(iand(iand(key_in(4,2), virt_bitmask(4,1)), virt_bitmask(4,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 5)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles beta + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes alpha + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes beta + + popcnt(iand(iand(key_in(4,1), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles alpha + + popcnt(iand(iand(key_in(4,2), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles beta + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes alpha + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes beta + + popcnt(iand(iand(key_in(5,1), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles alpha + + popcnt(iand(iand(key_in(5,2), virt_bitmask(5,1)), virt_bitmask(5,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 6)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles beta + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes alpha + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes beta + + popcnt(iand(iand(key_in(4,1), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles alpha + + popcnt(iand(iand(key_in(4,2), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles beta + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes alpha + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes beta + + popcnt(iand(iand(key_in(5,1), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles alpha + + popcnt(iand(iand(key_in(5,2), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles beta + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes alpha + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes beta + + popcnt(iand(iand(key_in(6,1), virt_bitmask(6,1)), virt_bitmask(6,1))) & ! particles alpha + + popcnt(iand(iand(key_in(6,2), virt_bitmask(6,1)), virt_bitmask(6,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 7)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles beta + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes alpha + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes beta + + popcnt(iand(iand(key_in(4,1), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles alpha + + popcnt(iand(iand(key_in(4,2), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles beta + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes alpha + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes beta + + popcnt(iand(iand(key_in(5,1), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles alpha + + popcnt(iand(iand(key_in(5,2), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles beta + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes alpha + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes beta + + popcnt(iand(iand(key_in(6,1), virt_bitmask(6,1)), virt_bitmask(6,1))) & ! particles alpha + + popcnt(iand(iand(key_in(6,2), virt_bitmask(6,1)), virt_bitmask(6,1))) & ! particles beta + + popcnt(iand(iand(key_in(7,1),inact_bitmask(7,1)),inact_bitmask(7,1))) & ! holes alpha + + popcnt(iand(iand(key_in(7,2),inact_bitmask(7,1)),inact_bitmask(7,1))) & ! holes beta + + popcnt(iand(iand(key_in(7,1), virt_bitmask(7,1)), virt_bitmask(7,1))) & ! particles alpha + + popcnt(iand(iand(key_in(7,2), virt_bitmask(7,1)), virt_bitmask(7,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else if(N_int == 8)then + i_diff = i_diff + popcnt(iand(iand(key_in(1,1),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes alpha + + popcnt(iand(iand(key_in(1,2),inact_bitmask(1,1)),inact_bitmask(1,1))) & ! holes beta + + popcnt(iand(iand(key_in(1,1),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles alpha + + popcnt(iand(iand(key_in(1,2),virt_bitmask(1,1)), virt_bitmask(1,1))) & ! particles beta + + popcnt(iand(iand(key_in(2,1),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes alpha + + popcnt(iand(iand(key_in(2,2),inact_bitmask(2,1)),inact_bitmask(2,1))) & ! holes beta + + popcnt(iand(iand(key_in(2,1), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles alpha + + popcnt(iand(iand(key_in(2,2), virt_bitmask(2,1)), virt_bitmask(2,1))) & ! particles beta + + popcnt(iand(iand(key_in(3,1),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes alpha + + popcnt(iand(iand(key_in(3,2),inact_bitmask(3,1)),inact_bitmask(3,1))) & ! holes beta + + popcnt(iand(iand(key_in(3,1), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles alpha + + popcnt(iand(iand(key_in(3,2), virt_bitmask(3,1)), virt_bitmask(3,1))) & ! particles beta + + popcnt(iand(iand(key_in(4,1),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes alpha + + popcnt(iand(iand(key_in(4,2),inact_bitmask(4,1)),inact_bitmask(4,1))) & ! holes beta + + popcnt(iand(iand(key_in(4,1), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles alpha + + popcnt(iand(iand(key_in(4,2), virt_bitmask(4,1)), virt_bitmask(4,1))) & ! particles beta + + popcnt(iand(iand(key_in(5,1),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes alpha + + popcnt(iand(iand(key_in(5,2),inact_bitmask(5,1)),inact_bitmask(5,1))) & ! holes beta + + popcnt(iand(iand(key_in(5,1), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles alpha + + popcnt(iand(iand(key_in(5,2), virt_bitmask(5,1)), virt_bitmask(5,1))) & ! particles beta + + popcnt(iand(iand(key_in(6,1),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes alpha + + popcnt(iand(iand(key_in(6,2),inact_bitmask(6,1)),inact_bitmask(6,1))) & ! holes beta + + popcnt(iand(iand(key_in(6,1), virt_bitmask(6,1)), virt_bitmask(6,1))) & ! particles alpha + + popcnt(iand(iand(key_in(6,2), virt_bitmask(6,1)), virt_bitmask(6,1))) & ! particles beta + + popcnt(iand(iand(key_in(7,1),inact_bitmask(7,1)),inact_bitmask(7,1))) & ! holes alpha + + popcnt(iand(iand(key_in(7,2),inact_bitmask(7,1)),inact_bitmask(7,1))) & ! holes beta + + popcnt(iand(iand(key_in(7,1), virt_bitmask(7,1)), virt_bitmask(7,1))) & ! particles alpha + + popcnt(iand(iand(key_in(7,2), virt_bitmask(7,1)), virt_bitmask(7,1))) & ! particles beta + + popcnt(iand(iand(key_in(8,1),inact_bitmask(8,1)),inact_bitmask(8,1))) & ! holes alpha + + popcnt(iand(iand(key_in(8,2),inact_bitmask(8,1)),inact_bitmask(8,1))) & ! holes beta + + popcnt(iand(iand(key_in(8,1), virt_bitmask(8,1)), virt_bitmask(8,1))) & ! particles alpha + + popcnt(iand(iand(key_in(8,2), virt_bitmask(8,1)), virt_bitmask(8,1))) ! particles beta + is_a_two_holes_two_particles = (i_diff >3) + else + do i = 1, N_int + i_diff = i_diff + popcnt(iand(iand(key_in(i,1),inact_bitmask(i,1)),inact_bitmask(i,1))) & ! holes alpha + + popcnt(iand(iand(key_in(i,2),inact_bitmask(i,1)),inact_bitmask(i,1))) & ! holes beta + + popcnt(iand(iand(key_in(i,1),virt_bitmask(i,1)),virt_bitmask(i,1))) & ! particles alpha + + popcnt(iand(iand(key_in(i,2),virt_bitmask(i,1)),virt_bitmask(i,1))) ! particles beta + enddo + is_a_two_holes_two_particles = (i_diff >3) + endif + end diff --git a/src/Bitmask/bitmasks.irp.f b/src/Bitmask/bitmasks.irp.f index a2564aee..e0e04614 100644 --- a/src/Bitmask/bitmasks.irp.f +++ b/src/Bitmask/bitmasks.irp.f @@ -123,6 +123,7 @@ BEGIN_PROVIDER [ integer(bit_kind), generators_bitmask, (N_int,2,6,N_generators_ call ezfio_has_bitmasks_generators(exists) if (exists) then + print*,'EXIST !!' call ezfio_get_bitmasks_generators(generators_bitmask) else integer :: k, ispin @@ -189,6 +190,24 @@ BEGIN_PROVIDER [ integer(bit_kind), cas_bitmask, (N_int,2,N_cas_bitmask) ] enddo endif +END_PROVIDER + + BEGIN_PROVIDER [ integer(bit_kind), inact_bitmask, (N_int,2) ] +&BEGIN_PROVIDER [ integer(bit_kind), virt_bitmask, (N_int,2) ] + implicit none + BEGIN_DOC + ! Bitmasks for the inactive orbitals that are excited in post CAS method + END_DOC + logical :: exists + integer :: j + PROVIDE ezfio_filename + do j = 1, N_int + inact_bitmask(j,1) = xor(generators_bitmask(j,1,1,1),cas_bitmask(j,1,1)) + inact_bitmask(j,2) = xor(generators_bitmask(j,2,1,1),cas_bitmask(j,2,1)) + virt_bitmask(j,1) = xor(generators_bitmask(j,1,2,1),cas_bitmask(j,1,1)) + virt_bitmask(j,2) = xor(generators_bitmask(j,2,2,1),cas_bitmask(j,2,1)) + enddo + END_PROVIDER BEGIN_PROVIDER [ integer, i_bitmask_gen ] @@ -199,3 +218,4 @@ BEGIN_PROVIDER [ integer, i_bitmask_gen ] i_bitmask_gen = 1 END_PROVIDER + diff --git a/src/Generators_CAS/generators.irp.f b/src/Generators_CAS/generators.irp.f index f014cc00..1ea98eee 100644 --- a/src/Generators_CAS/generators.irp.f +++ b/src/Generators_CAS/generators.irp.f @@ -60,7 +60,7 @@ BEGIN_PROVIDER [ integer(bit_kind), psi_generators, (N_int,2,psi_det_size) ] psi_generators(k,1,m) = psi_det(k,1,i) psi_generators(k,2,m) = psi_det(k,2,i) enddo - call debug_det(psi_generators(1,1,m),N_int) +! call debug_det(psi_generators(1,1,m),N_int) endif enddo