mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 03:23:29 +01:00
added new feature for new dft functionals
This commit is contained in:
parent
3315d9855d
commit
9762b51df5
1
ocaml/.gitignore
vendored
1
ocaml/.gitignore
vendored
@ -17,6 +17,7 @@ Input_dressing.ml
|
|||||||
Input_mo_one_e_ints.ml
|
Input_mo_one_e_ints.ml
|
||||||
Input_mo_two_e_erf_ints.ml
|
Input_mo_two_e_erf_ints.ml
|
||||||
Input_mo_two_e_ints.ml
|
Input_mo_two_e_ints.ml
|
||||||
|
Input_new_functionals.ml
|
||||||
Input_nuclei.ml
|
Input_nuclei.ml
|
||||||
Input_perturbation.ml
|
Input_perturbation.ml
|
||||||
Input_pseudo.ml
|
Input_pseudo.ml
|
||||||
|
18
scripts/functionals/do_not_touch_func/EZFIO.cfg
Normal file
18
scripts/functionals/do_not_touch_func/EZFIO.cfg
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[new_exchange_functional]
|
||||||
|
type: character*(32)
|
||||||
|
doc: name of the exchange functional
|
||||||
|
interface: ezfio, provider, ocaml
|
||||||
|
default: short_range_LDA
|
||||||
|
|
||||||
|
[new_correlation_functional]
|
||||||
|
type: character*(32)
|
||||||
|
doc: name of the correlation functional
|
||||||
|
interface: ezfio, provider, ocaml
|
||||||
|
default: short_range_LDA
|
||||||
|
|
||||||
|
[new_HF_exchange]
|
||||||
|
type: double precision
|
||||||
|
doc: Percentage of HF exchange in the DFT model
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 0.
|
||||||
|
|
1
scripts/functionals/do_not_touch_func/NEED
Normal file
1
scripts/functionals/do_not_touch_func/NEED
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
33
scripts/functionals/do_not_touch_func/e_x.irp.f
Normal file
33
scripts/functionals/do_not_touch_func/e_x.irp.f
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
BEGIN_PROVIDER[double precision, energy_x_new_functional, (N_states) ]
|
||||||
|
&BEGIN_PROVIDER[double precision, energy_c_new_functional, (N_states) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! energy_x_new_functional = define here your functional
|
||||||
|
! energy_c_new_functional = define here your functional
|
||||||
|
END_DOC
|
||||||
|
energy_x_new_functional = 0.d0
|
||||||
|
energy_c_new_functional = 0.d0
|
||||||
|
if(trim(new_exchange_functional)=="your_new_keyword")then
|
||||||
|
energy_x_new_functional = 0.d0 ! replace by your new provider
|
||||||
|
else if(new_exchange_functional.EQ."None")then
|
||||||
|
energy_x_new_functional = 0.d0 ! replace by your new provider
|
||||||
|
else
|
||||||
|
print*, 'Exchange functional required does not exist ...'
|
||||||
|
print*,'new_exchange_functional',new_exchange_functional
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
|
if(trim(new_correlation_functional)=="your_new_keyword")then
|
||||||
|
energy_c_new_functional = 0.d0 ! replace by your new provider
|
||||||
|
else if(new_correlation_functional.EQ."None")then
|
||||||
|
energy_c_new_functional = 0.d0 ! replace by your new provider
|
||||||
|
else
|
||||||
|
print*, 'Correlation functional required does not exist ...'
|
||||||
|
print*,'new_correlation_functional',new_correlation_functional
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
40
scripts/functionals/do_not_touch_func/pot_x_general.irp.f
Normal file
40
scripts/functionals/do_not_touch_func/pot_x_general.irp.f
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
BEGIN_PROVIDER [double precision, potential_new_functional_x_alpha_ao,(ao_num,ao_num,N_states)]
|
||||||
|
&BEGIN_PROVIDER [double precision, potential_new_functional_x_beta_ao,(ao_num,ao_num,N_states)]
|
||||||
|
&BEGIN_PROVIDER [double precision, potential_new_functional_c_alpha_ao,(ao_num,ao_num,N_states)]
|
||||||
|
&BEGIN_PROVIDER [double precision, potential_new_functional_c_beta_ao,(ao_num,ao_num,N_states)]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! define here your exchange/correlation potentials for alpha/beta electrons
|
||||||
|
END_DOC
|
||||||
|
potential_new_functional_x_alpha_ao = 0.d0
|
||||||
|
potential_new_functional_c_alpha_ao = 0.d0
|
||||||
|
potential_new_functional_x_beta_ao = 0.d0
|
||||||
|
potential_new_functional_c_beta_ao = 0.d0
|
||||||
|
if(trim(new_exchange_functional)=="your_new_keyword")then
|
||||||
|
potential_new_functional_x_alpha_ao = 0.d0 ! replace by your new provider
|
||||||
|
potential_new_functional_x_beta_ao = 0.d0 ! replace by your new provider
|
||||||
|
else if(new_exchange_functional.EQ."None")then
|
||||||
|
potential_new_functional_x_alpha_ao = 0.d0
|
||||||
|
potential_new_functional_x_beta_ao = 0.d0
|
||||||
|
else
|
||||||
|
print*, 'Exchange functional required does not exist ...'
|
||||||
|
print*,'new_exchange_functional',new_exchange_functional
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
|
if(trim(new_correlation_functional)=="your_new_keyword")then
|
||||||
|
potential_new_functional_c_alpha_ao = 0.d0 ! replace by your new provider
|
||||||
|
potential_new_functional_c_beta_ao = 0.d0 ! replace by your new provider
|
||||||
|
else if(new_correlation_functional.EQ."None")then
|
||||||
|
potential_new_functional_c_alpha_ao = 0.d0
|
||||||
|
potential_new_functional_c_beta_ao = 0.d0
|
||||||
|
else
|
||||||
|
print*, 'Correlation functional required does not ecist ...'
|
||||||
|
print*,'new_correlation_functional',new_correlation_functional
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
@ -35,31 +35,50 @@ subroutine davidson_run_slave(thread,iproc)
|
|||||||
integer(ZMQ_PTR) :: zmq_socket_push
|
integer(ZMQ_PTR) :: zmq_socket_push
|
||||||
|
|
||||||
integer, external :: connect_to_taskserver
|
integer, external :: connect_to_taskserver
|
||||||
integer :: doexit, send, receive
|
integer, external :: zmq_get_N_states_diag
|
||||||
|
|
||||||
|
PROVIDE mpi_rank
|
||||||
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
||||||
|
zmq_socket_push = new_zmq_push_socket(thread)
|
||||||
|
|
||||||
|
|
||||||
|
integer :: ierr, doexit
|
||||||
|
do
|
||||||
doexit = 0
|
doexit = 0
|
||||||
|
if (connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread) == -1) then
|
||||||
|
call sleep( int(1.5+float(mpi_rank)/10.) )
|
||||||
if (connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread) == -1) then
|
if (connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread) == -1) then
|
||||||
doexit=1
|
doexit=1
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
IRP_IF MPI
|
IRP_IF MPI
|
||||||
include 'mpif.h'
|
include 'mpif.h'
|
||||||
integer :: ierr
|
integer :: sendbuf, recvbuf
|
||||||
send = doexit
|
sendbuf = doexit
|
||||||
call MPI_AllReduce(send, receive, 1, MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, ierr)
|
recvbuf = doexit
|
||||||
|
call MPI_ALLREDUCE(sendbuf, recvbuf, 1, MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, ierr)
|
||||||
if (ierr /= MPI_SUCCESS) then
|
if (ierr /= MPI_SUCCESS) then
|
||||||
doexit=1
|
print *, irp_here//': Unable to reduce '
|
||||||
|
stop -1
|
||||||
endif
|
endif
|
||||||
doexit = receive
|
doexit = recvbuf
|
||||||
IRP_ENDIF
|
IRP_ENDIF
|
||||||
if (doexit) then
|
|
||||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
if (doexit == 0) then
|
||||||
return
|
exit
|
||||||
|
else
|
||||||
|
print *, irp_here, ': retrying connection (', doexit, ')'
|
||||||
endif
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
zmq_socket_push = new_zmq_push_socket(thread)
|
do
|
||||||
|
if (zmq_get_N_states_diag(zmq_to_qp_run_socket, 1) /= -1) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
print *, irp_here, ': Waiting for N_states_diag'
|
||||||
|
call sleep(1)
|
||||||
|
enddo
|
||||||
call davidson_slave_work(zmq_to_qp_run_socket, zmq_socket_push, N_states_diag, N_det, worker_id)
|
call davidson_slave_work(zmq_to_qp_run_socket, zmq_socket_push, N_states_diag, N_det, worker_id)
|
||||||
|
|
||||||
integer, external :: disconnect_from_taskserver
|
integer, external :: disconnect_from_taskserver
|
||||||
@ -72,8 +91,7 @@ subroutine davidson_run_slave(thread,iproc)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||||
call end_zmq_push_socket(zmq_socket_push)
|
call end_zmq_push_socket(zmq_socket_push,thread)
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
|
||||||
@ -123,9 +141,8 @@ subroutine davidson_slave_work(zmq_to_qp_run_socket, zmq_socket_push, N_st, sze,
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
do while (zmq_get_dmatrix(zmq_to_qp_run_socket, worker_id, 'u_t', u_t, ni, nj, size(u_t,kind=8)) == -1)
|
do while (zmq_get_dmatrix(zmq_to_qp_run_socket, worker_id, 'u_t', u_t, ni, nj, size(u_t,kind=8)) == -1)
|
||||||
print *, 'mpi_rank, N_states_diag, N_det'
|
call sleep(1)
|
||||||
print *, mpi_rank, N_states_diag, N_det
|
print *, irp_here, ': waiting for u_t...'
|
||||||
stop 'u_t'
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
IRP_IF MPI
|
IRP_IF MPI
|
||||||
@ -330,9 +347,9 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze)
|
|||||||
|
|
||||||
call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,'davidson')
|
call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,'davidson')
|
||||||
|
|
||||||
! integer :: N_states_diag_save
|
integer :: N_states_diag_save
|
||||||
! N_states_diag_save = N_states_diag
|
N_states_diag_save = N_states_diag
|
||||||
! N_states_diag = N_st
|
N_states_diag = N_st
|
||||||
if (zmq_put_N_states_diag(zmq_to_qp_run_socket, 1) == -1) then
|
if (zmq_put_N_states_diag(zmq_to_qp_run_socket, 1) == -1) then
|
||||||
stop 'Unable to put N_states_diag on ZMQ server'
|
stop 'Unable to put N_states_diag on ZMQ server'
|
||||||
endif
|
endif
|
||||||
@ -451,8 +468,8 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze)
|
|||||||
!$OMP TASKWAIT
|
!$OMP TASKWAIT
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
! N_states_diag = N_states_diag_save
|
N_states_diag = N_states_diag_save
|
||||||
! SOFT_TOUCH N_states_diag
|
SOFT_TOUCH N_states_diag
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -565,4 +582,3 @@ integer function zmq_get_N_states_diag(zmq_to_qp_run_socket, worker_id)
|
|||||||
endif
|
endif
|
||||||
IRP_ENDIF
|
IRP_ENDIF
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1 +1,2 @@
|
|||||||
dft_utils_one_e
|
dft_utils_one_e
|
||||||
|
new_functionals
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
else if(exchange_functional.EQ."None")then
|
else if(exchange_functional.EQ."None")then
|
||||||
energy_x = 0.d0
|
energy_x = 0.d0
|
||||||
energy_x = 0.d0
|
energy_x = 0.d0
|
||||||
|
else if(exchange_functional.EQ."my_functional")then
|
||||||
|
energy_x = energy_x_new_functional
|
||||||
else
|
else
|
||||||
print*, 'Exchange functional required does not exist ...'
|
print*, 'Exchange functional required does not exist ...'
|
||||||
print*,'exchange_functional',exchange_functional
|
print*,'exchange_functional',exchange_functional
|
||||||
@ -41,6 +43,8 @@
|
|||||||
else if(correlation_functional.EQ."None")then
|
else if(correlation_functional.EQ."None")then
|
||||||
energy_c = 0.d0
|
energy_c = 0.d0
|
||||||
energy_c = 0.d0
|
energy_c = 0.d0
|
||||||
|
else if(correlation_functional.EQ."my_functional")then
|
||||||
|
energy_c = energy_c_new_functional
|
||||||
else
|
else
|
||||||
print*, 'Correlation functional required does not ecist ...'
|
print*, 'Correlation functional required does not ecist ...'
|
||||||
print*,'correlation_functional',correlation_functional
|
print*,'correlation_functional',correlation_functional
|
||||||
|
@ -20,6 +20,9 @@
|
|||||||
else if(exchange_functional.EQ."PBE")then
|
else if(exchange_functional.EQ."PBE")then
|
||||||
potential_x_alpha_ao = potential_x_alpha_ao_PBE
|
potential_x_alpha_ao = potential_x_alpha_ao_PBE
|
||||||
potential_x_beta_ao = potential_x_beta_ao_PBE
|
potential_x_beta_ao = potential_x_beta_ao_PBE
|
||||||
|
else if(exchange_functional.EQ."my_functional")then
|
||||||
|
potential_x_alpha_ao = potential_new_functional_x_alpha_ao
|
||||||
|
potential_x_beta_ao = potential_new_functional_x_beta_ao
|
||||||
else if(exchange_functional.EQ."None")then
|
else if(exchange_functional.EQ."None")then
|
||||||
potential_x_alpha_ao = 0.d0
|
potential_x_alpha_ao = 0.d0
|
||||||
potential_x_beta_ao = 0.d0
|
potential_x_beta_ao = 0.d0
|
||||||
@ -41,6 +44,9 @@
|
|||||||
else if(correlation_functional.EQ."PBE")then
|
else if(correlation_functional.EQ."PBE")then
|
||||||
potential_c_alpha_ao = potential_c_alpha_ao_PBE
|
potential_c_alpha_ao = potential_c_alpha_ao_PBE
|
||||||
potential_c_beta_ao = potential_c_beta_ao_PBE
|
potential_c_beta_ao = potential_c_beta_ao_PBE
|
||||||
|
else if(correlation_functional.EQ."my_functional")then
|
||||||
|
potential_c_alpha_ao = potential_new_functional_c_alpha_ao
|
||||||
|
potential_c_beta_ao = potential_new_functional_c_beta_ao
|
||||||
else if(correlation_functional.EQ."None")then
|
else if(correlation_functional.EQ."None")then
|
||||||
potential_c_alpha_ao = 0.d0
|
potential_c_alpha_ao = 0.d0
|
||||||
potential_c_beta_ao = 0.d0
|
potential_c_beta_ao = 0.d0
|
||||||
|
Loading…
Reference in New Issue
Block a user