From cf12806fc72cc97fb952b818d913d56de2daed4e Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 1 Dec 2015 16:45:41 +0100 Subject: [PATCH] Forgot file --- .../ao_bielec_integrals_in_map_slave.irp.f | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/Integrals_Bielec/ao_bielec_integrals_in_map_slave.irp.f diff --git a/src/Integrals_Bielec/ao_bielec_integrals_in_map_slave.irp.f b/src/Integrals_Bielec/ao_bielec_integrals_in_map_slave.irp.f new file mode 100644 index 00000000..7aa59c0d --- /dev/null +++ b/src/Integrals_Bielec/ao_bielec_integrals_in_map_slave.irp.f @@ -0,0 +1,99 @@ +subroutine ao_bielec_integrals_in_map_slave + use map_module + use f77_zmq + implicit none + BEGIN_DOC +! Computes a buffer of integrals + END_DOC + + integer :: j,l,n_integrals + integer :: rc + character*(8), external :: zmq_port + integer(ZMQ_PTR) :: zmq_socket_req_inproc, zmq_socket_push_inproc + real(integral_kind), allocatable :: buffer_value(:) + integer(key_kind), allocatable :: buffer_i(:) + + allocate ( buffer_i(ao_num*ao_num), buffer_value(ao_num*ao_num) ) + + ! Sockets + zmq_socket_req_inproc = f77_zmq_socket(zmq_context, ZMQ_REQ) + rc = f77_zmq_connect(zmq_socket_req_inproc, 'inproc://req_rep') + if (rc /= 0) then + stop 'Unable to connect zmq_socket_req_inproc' + endif + + zmq_socket_push_inproc = f77_zmq_socket(zmq_context, ZMQ_PUSH) + rc = f77_zmq_connect(zmq_socket_push_inproc, 'inproc://push_pull') + if (rc /= 0) then + stop 'Unable to connect zmq_socket_push_inproc' + endif + + + + rc = f77_zmq_send( zmq_socket_req_inproc, 'get_ao_integrals', 16, 0) + rc = f77_zmq_recv( zmq_socket_req_inproc, l, 4, 0) + + do while (l > 0) + rc = f77_zmq_send( zmq_socket_req_inproc, 'get_ao_integrals', 16, 0) + + do j = 1, l + if (ao_overlap_abs(j,l) < ao_integrals_threshold) then + cycle + endif + call compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value) + rc = f77_zmq_send( zmq_socket_push_inproc, n_integrals, 4, ZMQ_SNDMORE) + rc = f77_zmq_send( zmq_socket_push_inproc, buffer_i, key_kind*n_integrals, ZMQ_SNDMORE) + rc = f77_zmq_send( zmq_socket_push_inproc, buffer_value, integral_kind*n_integrals, 0) + enddo + rc = f77_zmq_recv( zmq_socket_req_inproc, l, 4, 0) + enddo + + deallocate( buffer_i, buffer_value ) + + rc = f77_zmq_disconnect(zmq_socket_req_inproc, 'inproc://req_rep') +end + + +subroutine ao_bielec_integrals_in_map_collector + use map_module + use f77_zmq + implicit none + BEGIN_DOC +! Collects results from the AO integral calculation + END_DOC + + integer :: j,l,n_integrals + integer :: rc + character*(8), external :: zmq_port + integer(ZMQ_PTR) :: zmq_socket_pull_inproc + real(integral_kind), allocatable :: buffer_value(:) + integer(key_kind), allocatable :: buffer_i(:) + + allocate ( buffer_i(ao_num*ao_num), buffer_value(ao_num*ao_num) ) + + zmq_socket_pull_inproc = f77_zmq_socket(zmq_context, ZMQ_PULL) + rc = f77_zmq_bind(zmq_socket_pull_inproc, 'inproc://push_pull') + if (rc /= 0) then + stop 'Unable to connect zmq_socket_pull_inproc' + endif + + n_integrals = 0 + do while (n_integrals >= 0) + + rc = f77_zmq_recv( zmq_socket_pull_inproc, n_integrals, 4, 0) + if (n_integrals > -1) then + rc = f77_zmq_recv( zmq_socket_pull_inproc, buffer_i, key_kind*n_integrals, 0) + rc = f77_zmq_recv( zmq_socket_pull_inproc, buffer_value, integral_kind*n_integrals, 0) + call insert_into_ao_integrals_map(n_integrals,buffer_i,buffer_value) + else + rc = f77_zmq_recv( zmq_socket_pull_inproc, buffer_i, key_kind, 0) + rc = f77_zmq_recv( zmq_socket_pull_inproc, buffer_value, integral_kind, 0) + endif + + enddo + + rc = f77_zmq_unbind(zmq_socket_pull_inproc, 'inproc://push_pull') + + deallocate( buffer_i, buffer_value ) +end +