22 SUBROUTINE convert_par(rmnc, zmns, lmns,
27 USE parallel_include_module
32 REAL(dp),
DIMENSION(mnmax),
INTENT(OUT) ::
33 & rmnc, zmns, lmns, rmns, zmnc, lmnc
34 REAL(dp),
DIMENSION(0:ntor,0:mpol1,ns,3*ntmax),
35 &
INTENT(INOUT) :: rzl_array
39 REAL(dp),
PARAMETER :: p5 = 0.5_dp
43 INTEGER :: rmncc, rmnss, rmncs, rmnsc, zmncs, zmnsc,
44 & zmncc, zmnss, lmncs, lmnsc, lmncc, lmnss
45 INTEGER :: mn, m, n, n1, bufsize, js
46 REAL(dp) :: t1, sign0, mul1, tbroadon, tbroadoff
47 REAL(dp),
ALLOCATABLE,
DIMENSION(:) :: bcastbuf
56 bufsize = (ntor+1)*(mpol1+1)*3*ntmax
57 ALLOCATE(bcastbuf(bufsize))
63 bcastbuf(mn) = rzl_array(n,m,js,n1)
67 CALL second0(tbroadon)
68 CALL mpi_bcast(bcastbuf, bufsize, mpi_real8, nranks - 1,
71 CALL mpi_bcast(bcastbuf, bufsize, mpi_real8, 0,
74 CALL second0(tbroadoff)
75 broadcast_time = broadcast_time + (tbroadoff -tbroadon)
82 rzl_array(n,m,js,n1) = bcastbuf(mn)
100 lmnss = zss + 2*ntmax
106 zmns(1:ntor+1) = 0; lmns(1:ntor+1) = 0
108 t1 = mscale(m)*nscale(n)
110 rmnc(mn) = t1*rzl_array(n,m,js,rmncc)
111 IF (.not. lthreed) cycle
112 zmns(mn) =-t1*rzl_array(n,m,js,zmncs)
113 lmns(mn) =-t1*rzl_array(n,m,js,lmncs)
121 t1 = mscale(m)*nscale(n1)
124 rmnc(mn) = t1*rzl_array(n,m,js,rmncc)
125 zmns(mn) = t1*rzl_array(n,m,js,zmnsc)
126 lmns(mn) = t1*rzl_array(n,m,js,lmnsc)
127 ELSE IF (js .gt. 1)
THEN
129 IF (.not.lthreed) sign0 = 0
130 rmnc(mn) = p5*t1*(rzl_array(n1,m,js,rmncc) +
131 & sign0*rzl_array(n1,m,js,rmnss))
132 zmns(mn) = p5*t1*(rzl_array(n1,m,js,zmnsc) -
133 & sign0*rzl_array(n1,m,js,zmncs))
134 lmns(mn) = p5*t1*(rzl_array(n1,m,js,lmnsc) -
135 & sign0*rzl_array(n1,m,js,lmncs))
136 ELSE IF (js .eq. 1)
THEN
144 IF (mn .ne. mnmax) stop
'Error in Convert!'
156 t1 = mscale(m)*nscale(n)
158 zmnc(mn) = t1*rzl_array(n,m,js,zmncc)
159 lmnc(mn) = t1*rzl_array(n,m,js,lmncc)
160 IF (.not.lthreed) cycle
161 rmns(mn) =-t1*rzl_array(n,m,js,rmncs)
165 IF (.not.lthreed) mul1 = 0
169 t1 = mscale(m)*nscale(n1)
172 rmns(mn) = t1*rzl_array(n,m,js,rmnsc)
173 zmnc(mn) = t1*rzl_array(n,m,js,zmncc)
174 lmnc(mn) = t1*rzl_array(n,m,js,lmncc)
175 ELSE IF (js .gt. 1)
THEN
177 rmns(mn) = p5*t1*(mul1*rzl_array(n1,m,js,rmnsc) -
178 & sign0*rzl_array(n1,m,js,rmncs))
179 zmnc(mn) = p5*t1*(mul1*rzl_array(n1,m,js,zmncc) +
180 & sign0*rzl_array(n1,m,js,zmnss))
181 lmnc(mn) = p5*t1*(mul1*rzl_array(n1,m,js,lmncc) +
182 & sign0*rzl_array(n1,m,js,lmnss))
183 ELSE IF (js .eq. 1)
THEN
191 END SUBROUTINE convert_par
214 SUBROUTINE convert(rmnc, zmns, lmns,
219 USE parallel_include_module
224 INTEGER,
INTENT(IN) :: js
225 REAL(dp),
DIMENSION(mnmax),
INTENT(out) ::
226 & rmnc, zmns, lmns, rmns, zmnc, lmnc
227 REAL(dp),
DIMENSION(ns,0:ntor,0:mpol1,3*ntmax),
228 &
INTENT(in) :: rzl_array
232 REAL(dp),
PARAMETER :: p5 = 0.5_dp
236 INTEGER :: rmncc, rmnss, rmncs, rmnsc, zmncs, zmnsc,
237 & zmncc, zmnss, lmncs, lmnsc, lmncc, lmnss
238 INTEGER :: mn, m, n, n1
239 REAL(dp) :: t1, sign0, mul1
253 lmnsc = zsc + 2*ntmax
254 lmncc = zcc + 2*ntmax
255 lmncs = zcs + 2*ntmax
256 lmnss = zss + 2*ntmax
262 zmns(1:ntor+1) = 0; lmns(1:ntor+1) = 0
264 t1 = mscale(m)*nscale(n)
266 rmnc(mn) = t1*rzl_array(js,n,m,rmncc)
267 IF (.not. lthreed) cycle
268 zmns(mn) =-t1*rzl_array(js,n,m,zmncs)
269 lmns(mn) =-t1*rzl_array(js,n,m,lmncs)
272 IF (lthreed .and. js.eq.1)
THEN
275 t1 = mscale(m)*nscale(n)
277 lmns(mn) =-t1*(2*rzl_array(2,n,m,lmncs)
278 & - rzl_array(3,n,m,lmncs))
287 t1 = mscale(m)*nscale(n1)
290 rmnc(mn) = t1*rzl_array(js,n,m,rmncc)
291 zmns(mn) = t1*rzl_array(js,n,m,zmnsc)
292 lmns(mn) = t1*rzl_array(js,n,m,lmnsc)
293 ELSE IF (js .gt. 1)
THEN
295 IF (.not.lthreed) sign0 = 0
296 rmnc(mn) = p5*t1*(rzl_array(js,n1,m,rmncc) +
297 & sign0*rzl_array(js,n1,m,rmnss))
298 zmns(mn) = p5*t1*(rzl_array(js,n1,m,zmnsc) -
299 & sign0*rzl_array(js,n1,m,zmncs))
300 lmns(mn) = p5*t1*(rzl_array(js,n1,m,lmnsc) -
301 & sign0*rzl_array(js,n1,m,lmncs))
302 ELSE IF (js .eq. 1)
THEN
310 IF (mn .ne. mnmax) stop
'Error in Convert!'
322 t1 = mscale(m)*nscale(n)
324 zmnc(mn) = t1*rzl_array(js,n,m,zmncc)
325 lmnc(mn) = t1*rzl_array(js,n,m,lmncc)
326 IF (.not.lthreed) cycle
327 rmns(mn) =-t1*rzl_array(js,n,m,rmncs)
331 IF (.not.lthreed) mul1 = 0
335 t1 = mscale(m)*nscale(n1)
338 rmns(mn) = t1*rzl_array(js,n,m,rmnsc)
339 zmnc(mn) = t1*rzl_array(js,n,m,zmncc)
340 lmnc(mn) = t1*rzl_array(js,n,m,lmncc)
341 ELSE IF (js .gt. 1)
THEN
343 rmns(mn) = p5*t1*(mul1*rzl_array(js,n1,m,rmnsc) -
344 & sign0*rzl_array(js,n1,m,rmncs))
345 zmnc(mn) = p5*t1*(mul1*rzl_array(js,n1,m,zmncc) +
346 & sign0*rzl_array(js,n1,m,zmnss))
347 lmnc(mn) = p5*t1*(mul1*rzl_array(js,n1,m,lmncc) +
348 & sign0*rzl_array(js,n1,m,lmnss))
349 ELSE IF (js .eq. 1)
THEN
357 END SUBROUTINE convert