1 SUBROUTINE scalpot(bvec, amatrix, ivacskip)
3 USE parallel_include_module
9 INTEGER,
INTENT(in) :: ivacskip
10 REAL(dp),
INTENT(out) :: bvec(mnpd2), amatrix(mnpd2*mnpd2)
14 INTEGER :: ip, istore, istart, istore_max, ndim
15 REAL(dp),
ALLOCATABLE :: grpmn(:), green(:), gstore(:)
16 REAL(dp),
ALLOCATABLE :: greenp(:,:)
17 REAL(dp) :: ton, toff, tonscal
21 IF (.NOT.
ALLOCATED(amatsav))
THEN
22 stop
'AMATSAV: Allocation error in scalpot'
25 ALLOCATE (grpmn(nuv3*mnpd2), stat=ip)
26 IF (ip .NE. 0) stop
'GRPMN: Allocation error in scalpot'
38 CALL analyt (grpmn, bvec, ivacskip, ndim)
40 IF (ivacskip .NE. 0)
THEN
44 istore_max = min(64,nuv3)
46 ALLOCATE (green(nuv), gstore(nuv), greenp(nuv,istore_max),
48 IF (ip .NE. 0) stop
'Allocation error in scalpot'
63 primed:
DO ip = nuv3min, nuv3max
64 istore = 1 + mod(ip-nuv3min,istore_max)
75 CALL greenf (green, greenp(1,istore), ip)
82 gstore = gstore + bexni(ip)*green
90 IF (istore.EQ.istore_max .OR. ip.EQ.nuv3max)
THEN
91 CALL fourp (grpmn, greenp, istore, istart, ip, ndim)
98 CALL mpi_allreduce(mpi_in_place, gstore,
SIZE(gstore),
99 & mpi_real8, mpi_sum, vac_comm, mpi_err)
102 allreduce_time = allreduce_time + (toff - ton)
103 timer_vac(tallr) = timer_vac(tallr) + (toff-ton)
108 CALL fouri (grpmn, gstore, amatrix, amatsav, bvec,
110 DEALLOCATE (green, greenp, gstore)
114 DEALLOCATE (grpmn, stat=ip)
123 CALL mpi_allreduce(mpi_in_place, bvec,
SIZE(bvec), mpi_real8,
124 & mpi_sum, vac_comm, mpi_err)
128 allreduce_time = allreduce_time + (toff - ton)
129 timer_vac(tanar) = timer_vac(tanar) + (toff-ton)
131 scalpot_time = scalpot_time + (tonscal - toff)
133 END SUBROUTINE scalpot