108 Subroutine exchange_step(Phase,GR, udvr, udvl, Stab_nt, udvst, N_exchange_steps, Tempering_calc_det)
116 COMPLEX (Kind=Kind(0.d0)),
INTENT(INOUT) :: Phase
117 CLASS(
udv_state),
intent(inout),
allocatable,
Dimension(:) :: udvl, udvr
118 COMPLEX (Kind=Kind(0.d0)),
Dimension(:,:,:),
INTENT(INOUT),
allocatable :: GR
119 CLASS(
udv_state),
intent(inout),
allocatable,
Dimension(:, :) :: udvst
120 INTEGER,
dimension(:),
INTENT (IN),
allocatable :: Stab_nt
121 INTEGER,
INTENT(IN) :: N_exchange_steps
122 Logical,
INTENT(IN) :: Tempering_calc_det
126 Integer :: NST, NSTM, NF, nf_eff, NT, NT1, NVAR,N, N1,N2, I, NC, I_Partner, n_step, N_count, N_part
127 Type (Fields) :: nsigma_old
128 Real (Kind=kind(0.d0)) :: t0_proposal_ratio, weight, weight1, delta_s0_log, exp_delta_s0
129 Complex (Kind=Kind(0.d0)) :: Z_ONE = cmplx(1.d0, 0.d0, kind(0.d0)), z, ratiotot, ratiotot_p, phase_old, phase_new
130 Real (Kind=kind(0.d0)),
allocatable :: det_vec_old(:,:), det_vec_new(:,:)
131 Complex (Kind=Kind(0.d0)),
allocatable :: Phase_Det_new(:), Phase_Det_old(:)
132 Complex (Kind=Kind(0.d0)) :: Ratio(2), Ratio_p(2),Phase_array(N_FL)
133 Logical :: TOGGLE, L_Test
134 Integer,
allocatable :: List_partner(:), List_masters(:)
137 Integer :: nsigma_irank, nsigma_old_irank, nsigma_irank_temp
143 Integer :: Isize, Irank, Ierr, irank_g, isize_g, igroup
144 Integer :: STATUS(MPI_STATUS_SIZE)
146 Character (Len=64) :: storage
149 CALL mpi_comm_size(mpi_comm_world,isize,ierr)
150 CALL mpi_comm_rank(mpi_comm_world,irank,ierr)
151 call mpi_comm_rank(group_comm, irank_g, ierr)
152 call mpi_comm_size(group_comm, isize_g, ierr)
153 igroup = irank/isize_g
156 n1 =
size(nsigma%f,1)
157 n2 =
size(nsigma%f,2)
158 nstm =
Size(udvst, 1)
159 call nsigma_old%make(n1, n2)
160 if (tempering_calc_det)
then
161 Allocate ( det_vec_old(ndim,n_fl), det_vec_new(ndim,n_fl) )
162 Allocate ( phase_det_new(n_fl), phase_det_old(n_fl) )
164 Allocate ( list_partner(0:isize-1), list_masters(isize/2) )
171 if (tempering_calc_det)
then
174 Call compute_fermion_det(phase_det_old,det_vec_old, udvl, udvst, stab_nt, storage)
176 Do nf_eff = 1,n_fl_eff
177 nf=calc_fl_map(nf_eff)
178 phase_array(nf) = phase_det_old(nf)
179 Call op_phase(phase_array(nf),op_v,nsigma,nf)
181 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
182 phase_old=product(phase_array)
183 phase_old=phase_old**n_sun
186 nsigma_old%f = nsigma%f
187 nsigma_old%t = nsigma%t
188 nsigma_old_irank = nsigma_irank
191 Do i = 0,isize-1,2*isize_g
194 list_masters(nc) = i + n
199 Write(6,*)
'List of masters: '
201 Write(6,*) nc, list_masters(nc)
205 DO n_count = 1,n_exchange_steps
207 If (irank == 0 )
then
209 if ( ranf_wrap() > 0.5d0 ) n_step = -isize_g
210 Do i = 0,isize-1,2*isize_g
212 list_partner(npbc_tempering(i + n ,isize)) = npbc_tempering(i + n + n_step ,isize)
213 list_partner(npbc_tempering(i + n + n_step , isize)) = npbc_tempering(i + n ,isize)
218 CALL mpi_bcast(list_partner, isize ,mpi_integer, 0,mpi_comm_world,ierr)
221 if (irank == 0 )
then
222 Write(6,*)
'Testing global : '
224 Write(6,*) i, list_partner(i)
225 Write(11,*) i, list_partner(i)
234 n =
size(nsigma_old%f,1)*
size(nsigma_old%f,2)
235 CALL mpi_sendrecv(nsigma_old%f , n, mpi_complex16, list_partner(irank), 0, &
236 & nsigma%f , n, mpi_complex16, list_partner(irank), 0, mpi_comm_world,status,ierr)
237 CALL mpi_sendrecv(nsigma_old_irank, 1, mpi_integer, list_partner(irank), 0, &
238 & nsigma_irank , 1, mpi_integer, list_partner(irank), 0, mpi_comm_world,status,ierr)
243 if (tempering_calc_det)
then
247 Call compute_fermion_det(phase_det_new,det_vec_new, udvl, udvst, stab_nt, storage)
249 phase_array = cmplx(1.d0,0.d0,kind=kind(0.d0))
250 Do nf_eff = 1,n_fl_eff
251 nf=calc_fl_map(nf_eff)
252 phase_array(nf) = phase_det_new(nf)
253 Call op_phase(phase_array(nf),op_v,nsigma,nf)
255 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
256 phase_new=product(phase_array)
257 phase_new=phase_new**n_sun
259 t0_proposal_ratio = 1.d0
260 ratiotot = compute_ratio_global(phase_det_old, phase_det_new, &
261 & det_vec_old, det_vec_new, nsigma_old, t0_proposal_ratio,ratio)
263 If (l_test)
Write(6,*)
'Ratio_global: Irank, Partner',irank,list_partner(irank), &
264 & ratiotot, ratio(1)*exp(ratio(2))
266 delta_s0_log = ham%Get_Delta_S0_global(nsigma_old)
268 ratio(2) = delta_s0_log
274 If (irank == i )
Then
275 CALL mpi_send(ratio ,2, mpi_complex16 , list_partner(i), i+1024, mpi_comm_world,ierr)
276 else if (irank == list_partner(i) )
Then
277 CALL mpi_recv(ratio_p , 2, mpi_complex16, i, i+1024, mpi_comm_world,status,ierr)
279 weight= abs(ratio(1) * ratio_p(1) * exp( ratio_p(2) + ratio(2) ) )
281 if ( weight > ranf_wrap() ) toggle =.true.
282 If (l_test)
Write(6,*)
'Master : ', list_partner(i), i, weight, toggle
289 If (irank == list_partner(i) )
Then
291 CALL mpi_send(toggle, 1, mpi_logical, i, i+1024, mpi_comm_world,ierr)
292 else if (irank == i )
Then
293 CALL mpi_recv(toggle , 1, mpi_logical, list_partner(i), i+1024 ,mpi_comm_world,status,ierr)
294 If (l_test)
Write(6,*)
'Slave : ', irank, toggle
298 If (l_test)
Write(6,*)
'Final: ', irank, list_partner(irank), toggle
299 Call global_tempering_obser(toggle)
300 Call control_upgrade_temp (toggle)
303 if (tempering_calc_det)
then
304 phase_old = phase_new
305 phase_det_old = phase_det_new
306 det_vec_old = det_vec_new
308 nsigma_old%f = nsigma%f
309 nsigma_old%t = nsigma%t
310 nsigma_old_irank = nsigma_irank
312 nsigma%f = nsigma_old%f
313 nsigma%t = nsigma_old%t
314 nsigma_irank = nsigma_old_irank
319 if (tempering_calc_det)
then
321 If (.not.toggle)
then
322 DO nf_eff = 1,n_fl_eff
323 nf=calc_fl_map(nf_eff)
325 CALL udvl(nf_eff)%reset(
'l',wf_l(nf)%P)
327 CALL udvl(nf_eff)%reset(
'l')
334 CALL wrapul(nt1,nt, udvl)
335 Do nf_eff = 1,n_fl_eff
336 udvst(nst, nf_eff) = udvl(nf_eff)
340 CALL wrapul(nt1,0, udvl)
344 phase_array = cmplx(1.d0,0.d0,kind(0.d0))
345 do nf_eff = 1,n_fl_eff
346 nf=calc_fl_map(nf_eff)
347 CALL cgr(z, nvar, gr(:,:,nf), udvr(nf_eff), udvl(nf_eff))
348 call op_phase(z,op_v,nsigma,nf)
351 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
352 phase=product(phase_array)
362 CALL mpi_recv(nsigma_irank_temp , 1, mpi_integer, i, 0, mpi_comm_world,status,ierr)
363 If ( nsigma_irank_temp == 0)
then
366 CALL mpi_send(i , 1, mpi_integer, nsigma_irank_temp, 0, mpi_comm_world,ierr)
369 If ( nsigma_irank /= 0 )
then
370 CALL mpi_send(0 , 1, mpi_integer, nsigma_irank, 0, mpi_comm_world,ierr)
373 CALL mpi_send(nsigma_irank , 1, mpi_integer, 0, 0, mpi_comm_world,ierr)
374 CALL mpi_recv(nsigma_old_irank , 1, mpi_integer, 0, 0, mpi_comm_world,status,ierr)
377 if ( nsigma_irank /= irank )
then
378 CALL mpi_sendrecv_replace(phase, 1, mpi_complex16, nsigma_old_irank, 0, &
379 & nsigma_irank, 0, mpi_comm_world, status, ierr)
381 n_gr =
size(gr,1)*
size(gr,2)*
size(gr,3)
382 CALL mpi_sendrecv_replace(gr, n_gr, mpi_complex16, nsigma_old_irank, 0, &
383 & nsigma_irank, 0, mpi_comm_world, status, ierr)
385 do nf_eff = 1,n_fl_eff
386 CALL udvr(nf_eff)%MPI_Sendrecv(nsigma_old_irank, 0, nsigma_irank, 0, status, ierr)
388 do nf_eff = 1,n_fl_eff
389 CALL udvl(nf_eff)%MPI_Sendrecv(nsigma_old_irank, 0, nsigma_irank, 0, status, ierr)
392 do nf_eff = 1,n_fl_eff
393 CALL udvst(nst, nf_eff)%MPI_Sendrecv(nsigma_old_irank, 0, nsigma_irank, 0, status, ierr)
400 call nsigma_old%clear
402 if (tempering_calc_det)
then
403 Deallocate ( det_vec_old, det_vec_new )
404 Deallocate ( phase_det_new, phase_det_old )
406 Deallocate ( list_partner, list_masters )
450 Subroutine global_updates(Phase,GR, udvr, udvl, Stab_nt, udvst,N_Global)
458 COMPLEX (Kind=Kind(0.d0)),
INTENT(INOUT) :: Phase
459 class(
udv_state),
DIMENSION(:),
ALLOCATABLE,
INTENT(INOUT) :: udvl, udvr
460 COMPLEX (Kind=Kind(0.d0)),
Dimension(:,:,:),
allocatable,
INTENT(INOUT) :: GR
461 CLASS(
udv_state),
Dimension(:,:),
ALLOCATABLE,
INTENT(INOUT) :: udvst
462 INTEGER,
dimension(:),
allocatable,
INTENT(IN) :: Stab_nt
463 Integer,
INTENT(IN) :: N_Global
467 Integer :: NST, NSTM, NF, NT, NT1, NVAR,N, N1,N2, I, NC, N_part,j, nf_eff
468 Real (Kind=kind(0.d0)) :: t0_proposal_ratio, weight
469 Complex (Kind=Kind(0.d0)) :: Z_ONE = cmplx(1.d0, 0.d0, kind(0.d0)), z, ratiotot, phase_old, phase_new
470 Complex (Kind=Kind(0.d0)),
allocatable :: Det_vec_test(:,:), Phase_Det_new(:), Phase_Det_old(:)
471 Real (Kind=kind(0.d0)),
allocatable :: det_vec_old(:,:), det_vec_new(:,:)
472 Type (Fields) :: nsigma_old
474 Complex (Kind=Kind(0.d0)) :: Ratio(2), Phase_array(N_Fl)
475 Logical :: TOGGLE, L_Test
476 Real (Kind=kind(0.d0)) :: size_clust
477 Real (Kind=kind(0.d0)) :: ratio_2_test
478 Character (Len=64) :: storage
482 n1 =
size(nsigma%f,1)
483 n2 =
size(nsigma%f,2)
484 nstm =
Size(udvst, 1)
485 call nsigma_old%make(n1, n2)
487 Allocate ( det_vec_old(ndim,n_fl_eff), det_vec_new(ndim,n_fl_eff), det_vec_test(ndim,n_fl_eff) )
488 Allocate ( phase_det_new(n_fl_eff), phase_det_old(n_fl_eff) )
493 Call compute_fermion_det(phase_det_old,det_vec_old, udvl, udvst, stab_nt, storage)
494 phase_array = cmplx(1.d0,0.d0,kind=kind(0.d0))
495 Do nf_eff = 1,n_fl_eff
496 nf=calc_fl_map(nf_eff)
497 phase_array(nf) = phase_det_old(nf_eff)
498 Call op_phase(phase_array(nf),op_v,nsigma,nf)
500 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
501 phase_old=product(phase_array)
502 phase_old=phase_old**n_sun
506 Do nf_eff = 1,n_fl_eff
507 nf=calc_fl_map(nf_eff)
509 CALL udvr(nf_eff)%reset(
'r',wf_r(nf)%P)
511 CALL udvr(nf_eff)%reset(
'r')
515 phase_array = cmplx(1.d0,0.d0,kind(0.d0))
516 do nf_eff = 1,n_fl_eff
517 nf=calc_fl_map(nf_eff)
518 CALL cgr(z, nvar, gr(:,:,nf), udvr(nf_eff), udvl(nf_eff))
519 call op_phase(z,op_v,nsigma,nf)
522 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
523 phase=product(phase_array)
525 Do nf_eff = 1,n_fl_eff
526 nf=calc_fl_map(nf_eff)
527 Call det_c_lu(gr(:,:,nf),det_vec_test(:,nf_eff),ndim)
529 z = phase_det_old(nf_eff)
532 z = z*det_vec_test(i,nf_eff)/abs(det_vec_test(i,nf_eff))
533 ratio_2_test=ratio_2_test+log(abs(det_vec_test(i,nf_eff)))+det_vec_old(i,nf_eff)
535 z=z*cmplx(exp(ratio_2_test),0.d0,kind(0.d0))
536 Write(6,*)
'Testing weight: ', z
537 if(abs(ratio_2_test)>650)
write(6,*)
"Weight is about to reach double underflow!"
542 nsigma_old%f = nsigma%f
543 nsigma_old%t = nsigma%t
549 Call ham%Global_move(t0_proposal_ratio,nsigma_old,size_clust)
550 If (t0_proposal_ratio > 0.d0)
then
554 Call compute_fermion_det(phase_det_new,det_vec_new, udvl, udvst, stab_nt, storage)
556 phase_array = cmplx(1.d0,0.d0,kind=kind(0.d0))
557 Do nf_eff = 1,n_fl_eff
558 nf=calc_fl_map(nf_eff)
559 phase_array(nf) = phase_det_new(nf)
560 Call op_phase(phase_array(nf),op_v,nsigma,nf)
562 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
563 phase_new=product(phase_array)
564 phase_new=phase_new**n_sun
566 ratiotot = compute_ratio_global(phase_det_old, phase_det_new, &
567 & det_vec_old, det_vec_new, nsigma_old, t0_proposal_ratio, ratio)
571 weight = abs( real( phase_old * ratiotot, kind=kind(0.d0))/real(phase_old,kind=kind(0.d0)) )
573 z = phase_old * ratiotot/abs(ratiotot)
574 Call control_precisionp_glob(z,phase_new)
579 if ( weight > ranf_wrap() )
Then
581 phase_old = phase_new
582 phase_det_old = phase_det_new
583 nsigma_old%t = nsigma%t
584 nsigma_old%f = nsigma%f
585 det_vec_old = det_vec_new
587 nsigma%t = nsigma_old%t
588 nsigma%f = nsigma_old%f
590 Call control_upgrade_glob(toggle,size_clust)
592 nsigma%t = nsigma_old%t
593 nsigma%f = nsigma_old%f
598 If (.not.toggle)
then
599 DO nf_eff = 1,n_fl_eff
600 nf=calc_fl_map(nf_eff)
602 CALL udvl(nf_eff)%reset(
'l',wf_l(nf)%P)
604 CALL udvl(nf_eff)%reset(
'l')
611 CALL wrapul(nt1,nt, udvl)
612 Do nf_eff = 1,n_fl_eff
613 udvst(nst, nf_eff) = udvl(nf_eff)
617 CALL wrapul(nt1,0, udvl)
621 phase_array = cmplx(1.d0,0.d0,kind(0.d0))
622 do nf_eff = 1,n_fl_eff
623 nf=calc_fl_map(nf_eff)
624 CALL cgr(z, nvar, gr(:,:,nf), udvr(nf_eff), udvl(nf_eff))
625 call op_phase(z,op_v,nsigma,nf)
628 if (reconstruction_needed)
call ham%weight_reconstruction(phase_array)
629 phase=product(phase_array)
634 call nsigma_old%clear
635 Deallocate ( det_vec_old , det_vec_new, det_vec_test )
636 Deallocate ( phase_det_new, phase_det_old )
669 Complex (Kind=Kind(0.d0)) Function compute_ratio_global(Phase_Det_old, Phase_Det_new, &
670 & Det_vec_old, Det_vec_new, nsigma_old, T0_Proposal_ratio,Ratio)
676 Complex (Kind=Kind(0.d0)),
allocatable,
INTENT(IN) :: phase_det_old(:), phase_det_new(:)
677 REAL (kind=kind(0.d0)),
allocatable,
INTENT(IN) :: det_vec_old(:,:), det_vec_new(:,:)
678 Real (kind=kind(0.d0)),
INTENT(IN) :: t0_proposal_ratio
679 Type (
fields),
INTENT(IN) :: nsigma_old
680 Complex (Kind=Kind(0.d0)),
INTENT(out) :: ratio(2)
683 Integer :: nf, i, nt, nf_eff
684 Complex (Kind=Kind(0.d0)) :: z, z1, ratio_1_array(n_fl), ratio_2_array(n_fl), g_loc
685 Real (kind=kind(0.d0)) :: x, ratio_2, delta, log_delta
687 ratio = cmplx(0.d0,0.d0,kind(0.d0))
690 Do nf_eff = 1,n_fl_eff
691 nf=calc_fl_map(nf_eff)
694 ratio_2_array(nf) = ratio_2_array(nf) + det_vec_new(i,nf_eff) - det_vec_old(i,nf_eff)
697 ratio_2_array(nf) = real(n_sun,kind(0.d0))*ratio_2_array(nf)
700 ratio_1_array = cmplx(1.d0,0.d0,kind(0.d0))
701 Do nf_eff = 1,n_fl_eff
702 nf=calc_fl_map(nf_eff)
704 ratio_1_array(nf_eff) = ratio_1_array(nf) * phase_det_new(nf_eff)/phase_det_old(nf_eff)
706 ratio_1_array(nf) = ratio_1_array(nf)**n_sun
710 Do i = 1,
Size(op_v,1)
714 ratio(1) = ratio(1) * cmplx( nsigma%Gama(i,nt)/nsigma_old%Gama(i,nt),0.d0,kind(0.d0) )
716 Do nf_eff = 1,n_fl_eff
717 nf=calc_fl_map(nf_eff)
718 z = nsigma%Phi(i,nt) - nsigma_old%Phi(i,nt)
720 if ( op_v(i,nf)%get_g_t_alloc()) g_loc = op_v(i,nf)%g_t(nt)
722 ratio_1_array(nf) = ratio_1_array(nf) * exp(z*cmplx( real(n_sun,kind(0.d0)), 0.d0,kind(0.d0)) * g_loc * op_v(i,nf)%alpha )
726 if (reconstruction_needed)
then
727 call ham%weight_reconstruction(ratio_1_array)
728 call ham%weight_reconstruction(ratio_2_array)
730 ratio(1)=ratio(1)*product(ratio_1_array)
733 ratio(2) = sum(ratio_2_array)
734 log_delta = ham%Get_Delta_S0_global(nsigma_old)
735 ratio(2) = ratio(2) + log_delta + log(t0_proposal_ratio)
737 compute_ratio_global = ratio(1)*exp(ratio(2))
780 Subroutine compute_fermion_det(Phase_det,Det_Vec, udvl, udvst, Stab_nt, storage)
789 REAL (Kind=kind(0.d0)),
Dimension(:,:),
Intent(OUT) :: det_vec
790 Complex (Kind=Kind(0.d0)),
Dimension(:) ,
Intent(OUT) :: Phase_det
791 CLASS(
udv_state),
DIMENSION(:) ,
ALLOCATABLE,
INTENT(INOUT) :: udvl
792 CLASS(
udv_state),
Dimension(:,:),
ALLOCATABLE,
INTENT(INOUT) :: udvst
793 INTEGER,
dimension(:),
allocatable,
INTENT(IN) :: Stab_nt
794 Character (Len=64),
Intent(IN) :: storage
798 Integer :: N_size, NCON, I, J, N_part, info, NSTM, N, nf, nst, nt, nt1, nf_eff
799 Integer,
allocatable :: ipiv(:)
800 COMPLEX (Kind=Kind(0.d0)) :: alpha,beta, Z, Z1
802 COMPLEX (Kind=Kind(0.d0)),
Dimension(:,:),
Allocatable :: TP
803 COMPLEX (Kind=Kind(0.d0)),
Dimension(:),
Allocatable :: D
807 if(udvl(1)%side .ne.
"L" .and. udvl(1)%side .ne.
"l" )
then
808 write(error_unit,*)
"Compute_Fermion_Det: calling wrong decompose"
809 CALL terminate_on_error(error_global_updates,__file__,__line__)
812 nstm =
Size(udvst, 1)
813 If (str_to_upper(storage) ==
"EMPTY" )
then
814 DO nf_eff = 1,n_fl_eff
815 nf=calc_fl_map(nf_eff)
817 CALL udvl(nf_eff)%reset(
'l',wf_l(nf)%P)
819 CALL udvl(nf_eff)%reset(
'l')
826 CALL wrapul(nt1,nt, udvl)
827 Do nf_eff = 1,n_fl_eff
828 udvst(nst, nf_eff) = udvl(nf_eff)
832 CALL wrapul(nt1,0, udvl)
836 n_part=udvst(1,1)%N_part
839 Allocate (tp(n_part,n_part), ipiv(n_part))
841 nf=calc_fl_map(nf_eff)
842 n_part=udvst(1,nf)%N_part
846 det_vec(n,nf_eff)=det_vec(n,nf_eff)+log(dble(udvst(i,nf)%D(n)))
848 det_vec(n,nf_eff)=det_vec(n,nf_eff)+udvst(i,nf)%L(n)
854 det_vec(n,nf_eff)=det_vec(n,nf_eff)+log(dble(udvl(nf_eff)%D(n)))
856 det_vec(n,nf_eff)=det_vec(n,nf_eff)+udvl(nf_eff)%L(n)
861 CALL zgemm(
'C',
'N',n_part,n_part,n_size,alpha,udvl(nf_eff)%U(1,1),n_size,wf_r(nf)%P(1,1),n_size,beta,tp(1,1),n_part)
864 call zgetrf(n_part, n_part, tp(1,1), n_part, ipiv, info)
867 if (ipiv(j).ne.j)
then
872 phase_det(nf_eff) = z/abs(z)
873 det_vec(1,nf) = det_vec(1,nf)+log(abs(z))
880 n_size = udvl(1)%ndim
882 alpha = cmplx(1.d0,0.d0,kind(0.d0))
883 beta = cmplx(0.d0,0.d0,kind(0.d0))
884 Allocate (tp(n_size,n_size),d(n_size))
885 CALL udvlocal%alloc(n_size)
886 Do nf_eff = 1,n_fl_eff
887 nf=calc_fl_map(nf_eff)
892 tp(:,j) = tp(:,j) + udvl(nf_eff)%V(:,j)*udvl(nf_eff)%D(j)
896 if ( dble(udvl(nf_eff)%D(j)) <= 1.d0 )
then
897 tp(:,j) = tp(:,j) + udvl(nf_eff)%V(:,j)*udvl(nf_eff)%D(j)
899 tp(:,j) = tp(:,j)/udvl(nf_eff)%D(j) + udvl(nf_eff)%V(:,j)
905 if ( udvl(nf_eff)%L(j) <= 0.d0 )
then
906 tp(:,j) = tp(:,j) + udvl(nf_eff)%V(:,j)*cmplx(exp(udvl(nf_eff)%L(j)),0.d0,kind(0.d0))
908 tp(:,j) = tp(:,j)*cmplx(exp(-udvl(nf_eff)%L(j)),0.d0,kind(0.d0)) + udvl(nf_eff)%V(:,j)
914 Call udv_wrap(tp,udvlocal%U, d, udvlocal%V, ncon )
915 z = det_c(udvlocal%V, n_size)
917 CALL zgemm(
'C',
'N', n_size, n_size, n_size, alpha, udvl(nf_eff)%U(1,1), n_size, udvlocal%U(1,1), n_size, beta, tp, n_size)
918 z1 = det_c(tp, n_size)
919 phase_det(nf_eff) = z*z1/abs(z*z1)
922 det_vec(:,nf_eff) = log(real(d(:)))
923 det_vec(1,nf_eff) = log(real(d(1))) + log(abs(z*z1))
925 det_vec(1,nf_eff) = log(real(d(1))*abs(z*z1))
926 if (dble(udvl(nf_eff)%D(1)) > 1.d0) det_vec(1,nf_eff)=det_vec(1,nf_eff)+log(dble(udvl(nf_eff)%D(1)))
928 if (dble(udvl(nf_eff)%D(j))<=1.d0)
then
929 det_vec(j,nf_eff) = log(real(d(j)))
931 det_vec(j,nf_eff) = log(real(d(j)))+log(dble(udvl(nf_eff)%D(j)))
936 det_vec(:,nf_eff) = log(real(d(:)))
937 det_vec(1,nf_eff) = log(real(d(1))*abs(z*z1))
938 if (udvl(nf_eff)%L(1) > 0.d0) det_vec(1,nf_eff)=det_vec(1,nf_eff)+udvl(nf_eff)%L(1)
940 if (udvl(nf_eff)%L(j)<=0.d0)
then
941 det_vec(j,nf_eff) = log(real(d(j)))
943 det_vec(j,nf_eff) = log(real(d(j)))+udvl(nf_eff)%L(j)
949 CALL udvlocal%dealloc