2 USE vmec_main, p5 => cp5
4 USE vforces, ru12 => pazmn_e, zu12 => parmn_e,
5 & pazmn_e => pazmn_e, parmn_e => parmn_e,
6 & lv_e => pcrmn_e, lu_e => pczmn_e, lu_o => pczmn_o,
7 & pcrmn_e => pcrmn_e, pczmn_e => pczmn_e,
9 USE parallel_include_module
15 REAL(dp),
PARAMETER :: p25 = p5*p5, dshalfds=p25
20 INTEGER :: i, j, k, nsmin, nsmax
21 REAL(dp),
DIMENSION(:,:),
POINTER ::
22 & bsqr, gvvs, guvs, guus
23 REAL(dp),
ALLOCATABLE,
DIMENSION(:) :: bcastbuf
25 IF (.NOT.lactive .AND. .NOT.lfreeb)
RETURN
31 nsmin=tlglob; nsmax=t1rglob
34 bsqr => pextra1(:,:,1); gvvs => pextra2(:,:,1)
35 guvs => pextra3(:,:,1); guus => pextra4(:,:,1)
37 lu_e(:,1) = 0; lv_e(:,1) = 0
38 pguu(:,1) = 0; pguv(:,1) = 0; pgvv(:,1) = 0
41 guus(:,l) = pguu(:,l)*pshalf(:,l)
42 guvs(:,l) = pguv(:,l)*pshalf(:,l)
43 gvvs(:,l) = pgvv(:,l)* pshalf(:,l)
45 parmn_e(:,l) = ohs*zu12(:,l)*lu_e(:,l)
46 pazmn_e(:,l) =-ohs*ru12(:,l)*lu_e(:,l)
47 pbrmn_e(:,l) = pbrmn_e(:,l)*lu_e(:,l)
48 pbzmn_e(:,l) =-pbzmn_e(:,l)*lu_e(:,l)
49 bsqr(:,l) = dshalfds*lu_e(:,l)/pshalf(:,l)
51 parmn_o(:,l) = parmn_e(:,l)*pshalf(:,l)
52 pazmn_o(:,l) = pazmn_e(:,l)*pshalf(:,l)
53 pbrmn_o(:,l) = pbrmn_e(:,l)*pshalf(:,l)
54 pbzmn_o(:,l) = pbzmn_e(:,l)*pshalf(:,l)
63 nsmin=tlglob; nsmax=min(ns-1,trglob)
65 pguu(:,l) = p5*(pguu(:,l) + pguu(:,l+1))
66 pgvv(:,l) = p5*(pgvv(:,l) + pgvv(:,l+1))
67 bsqr(:,l) = bsqr(:,l) + bsqr(:,l+1)
68 guus(:,l) = p5*(guus(:,l) + guus(:,l+1))
69 gvvs(:,l) = p5*(gvvs(:,l) + gvvs(:,l+1))
72 IF (trglob .ge. ns)
THEN
73 pguu(:,ns) = p5*pguu(:,ns)
74 pgvv(:,ns) = p5*pgvv(:,ns)
75 guus(:,ns) = p5*guus(:,ns)
76 gvvs(:,ns) = p5*gvvs(:,ns)
80 nsmin=tlglob; nsmax=min(ns-1,trglob)
82 parmn_e(:,l) = parmn_e(:,l+1) - parmn_e(:,l)
83 & + p5*(lv_e(:,l) + lv_e(:,l+1))
84 pazmn_e(:,l) = pazmn_e(:,l+1) - pazmn_e(:,l)
85 pbrmn_e(:,l) = p5*(pbrmn_e(:,l) + pbrmn_e(:,l+1))
86 pbzmn_e(:,l) = p5*(pbzmn_e(:,l) + pbzmn_e(:,l+1))
89 parmn_e(:,ns) = - parmn_e(:,ns) + p5*lv_e(:,ns)
90 pazmn_e(:,ns) = - pazmn_e(:,ns)
91 pbrmn_e(:,ns) = p5*pbrmn_e(:,ns)
92 pbzmn_e(:,ns) = p5*pbzmn_e(:,ns)
94 nsmin=tlglob; nsmax=t1rglob
96 parmn_e(:,l) = parmn_e(:,l)
97 & - (gvvs(:,l)*pr1(:,l,1) + pgvv(:,l)*pr1(:,l,0))
98 pbrmn_e(:,l) = pbrmn_e(:,l) + bsqr(:,l)*pz1(:,l,1)
99 & - (guus(:,l)*pru(:,l,1) + pguu(:,l)*pru(:,l,0))
100 pbzmn_e(:,l) = pbzmn_e(:,l) - (bsqr(:,l)*pr1(:,l,1)
101 & + guus(:,l)*pzu(:,l,1) + pguu(:,l)*pzu(:,l,0))
102 lv_e(:,l) = lv_e(:,l)*pshalf(:,l)
103 lu_o(:,l) = dshalfds*lu_e(:,l)
106 nsmin=tlglob; nsmax=min(ns-1,trglob)
109 parmn_o(:,l) = parmn_o(:,l+1) - parmn_o(:,l)
110 & - pzu(:,l,0)*bsqr(:,l)
111 & + p5*(lv_e(:,l)+lv_e(:,l+1))
112 pazmn_o(:,l) = pazmn_o(:,l+1) - pazmn_o(:,l)
113 & + pru(:,l,0)*bsqr(:,l)
114 pbrmn_o(:,l) = p5*(pbrmn_o(:,l) + pbrmn_o(:,l+1))
115 pbzmn_o(:,l) = p5*(pbzmn_o(:,l) + pbzmn_o(:,l+1))
116 lu_o(:,l) = lu_o(:,l) + lu_o(:,l+1)
119 parmn_o(:,ns) = - parmn_o(:,ns) - pzu(:,ns,0)*bsqr(:,ns)
121 pazmn_o(:,ns) = - pazmn_o(:,ns) + pru(:,ns,0)*bsqr(:,ns)
122 pbrmn_o(:,ns) = p5*pbrmn_o(:,ns)
123 pbzmn_o(:,ns) = p5*pbzmn_o(:,ns)
124 lu_o(:,ns) = lu_o(:,ns)
126 nsmin=tlglob; nsmax=trglob
128 pguu(:,l) = pguu(:,l) * psqrts(:,l)**2
129 bsqr(:,l) = pgvv(:,l) * psqrts(:,l)**2
133 parmn_o(:,l) = parmn_o(:,l) - (pzu(:,l,1)*lu_o(:,l)
134 & + bsqr(:,l)*pr1(:,l,1) + gvvs(:,l)*pr1(:,l,0))
135 pazmn_o(:,l) = pazmn_o(:,l) + pru(:,l,1)*lu_o(:,l)
136 pbrmn_o(:,l) = pbrmn_o(:,l) + pz1(:,l,1)*lu_o(:,l)
137 & -(pguu(:,l)*pru(:,l,1) + guus(:,l)*pru(:,l,0))
138 pbzmn_o(:,l) = pbzmn_o(:,l) - (pr1(:,l,1)*lu_o(:,l)
139 & + pguu(:,l)*pzu(:,l,1) + guus(:,l)*pzu(:,l,0))
144 nsmin=tlglob; nsmax=min(ns-1,trglob)
146 pguv(:,l) = p5*(pguv(:,l) + pguv(:,l+1))
147 guvs(:,l) = p5*(guvs(:,l) + guvs(:,l+1))
149 pguv(:,ns) = p5*pguv(:,ns)
150 guvs(:,ns) = p5*guvs(:,ns)
152 nsmin=tlglob; nsmax=trglob
154 pbrmn_e(:,l) = pbrmn_e(:,l)
155 & - (pguv(:,l)*prv(:,l,0) + guvs(:,l)*prv(:,l,1))
156 pbzmn_e(:,l) = pbzmn_e(:,l)
157 & - (pguv(:,l)*pzv(:,l,0) + guvs(:,l)*pzv(:,l,1))
158 pcrmn_e(:,l) = pguv(:,l)*pru(:,l,0) + pgvv(:,l)*prv(:,l,0)
159 & + gvvs(:,l)*prv(:,l,1) + guvs(:,l)*pru(:,l,1)
160 pczmn_e(:,l) = pguv(:,l)*pzu(:,l,0) + pgvv(:,l)*pzv(:,l,0)
161 & + gvvs(:,l)*pzv(:,l,1) + guvs(:,l)*pzu(:,l,1)
162 pguv(:,l) = pguv(:,l)*psqrts(:,l)*psqrts(:,l)
163 pbrmn_o(:,l) = pbrmn_o(:,l)
164 & - (guvs(:,l)*prv(:,l,0) + pguv(:,l)*prv(:,l,1))
165 pbzmn_o(:,l) = pbzmn_o(:,l)
166 & - (guvs(:,l)*pzv(:,l,0) + pguv(:,l)*pzv(:,l,1))
167 pcrmn_o(:,l) = guvs(:,l)*pru(:,l,0) + gvvs(:,l)*prv(:,l,0)
168 & + bsqr(:,l)*prv(:,l,1) + pguv(:,l)*pru(:,l,1)
169 pczmn_o(:,l) = guvs(:,l)*pzu(:,l,0) + gvvs(:,l)*pzv(:,l,0)
170 & + bsqr(:,l)*pzv(:,l,1) + pguv(:,l)*pzu(:,l,1)
177 IF (ivac .GE. 1)
THEN
182 parmn_e(l,ns) = parmn_e(l,ns) + pzu0(l,ns)*rbsq(l)
183 parmn_o(l,ns) = parmn_o(l,ns) + pzu0(l,ns)*rbsq(l)
184 pazmn_e(l,ns) = pazmn_e(l,ns) - pru0(l,ns)*rbsq(l)
185 pazmn_o(l,ns) = pazmn_o(l,ns) - pru0(l,ns)*rbsq(l)
198 prcon(:,l,0) = (prcon(:,l,0)-prcon0(:,l))*pgcon(:,l)
199 pzcon(:,l,0) = (pzcon(:,l,0)-pzcon0(:,l))*pgcon(:,l)
200 pbrmn_e(:,l) = pbrmn_e(:,l) + prcon(:,l,0)
201 pbzmn_e(:,l) = pbzmn_e(:,l) + pzcon(:,l,0)
202 pbrmn_o(:,l) = pbrmn_o(:,l)+ prcon(:,l,0)*psqrts(:,l)
203 pbzmn_o(:,l) = pbzmn_o(:,l)+ pzcon(:,l,0)*psqrts(:,l)
204 prcon(:,l,0) = pru0(:,l) * pgcon(:,l)
205 pzcon(:,l,0) = pzu0(:,l) * pgcon(:,l)
206 prcon(:,l,1) = prcon(:,l,0) * psqrts(:,l)
207 pzcon(:,l,1) = pzcon(:,l,0) * psqrts(:,l)
210 CALL second0 (tforoff)
211 timer(tfor) = timer(tfor) + (tforoff - tforon)
212 forces_time = timer(tfor)
214 END SUBROUTINE forces_par
217 USE vmec_main, p5 => cp5
219 USE vforces, ru12 => azmn_e, zu12 => armn_e,
220 & azmn_e => azmn_e, armn_e => armn_e,
221 & lv_e => crmn_e, lu_e => czmn_e, lu_o => czmn_o,
222 & crmn_e => crmn_e, czmn_e => czmn_e, czmn_o => czmn_o
229 REAL(dp),
PARAMETER :: p25 = p5*p5, dshalfds=p25
234 REAL(dp),
DIMENSION(:),
POINTER ::
235 & bsqr, gvvs, guvs, guus
239 CALL second0 (tforon)
242 bsqr => extra1(:,1); gvvs => extra2(:,1)
243 guvs => extra3(:,1); guus => extra4(:,1)
270 lu_e(1:ndim:ns) = 0; lv_e(1:ndim:ns) = 0
271 guu(1:ndim:ns) = 0; guv(1:ndim:ns) = 0; gvv(1:ndim:ns) = 0
272 guus = guu*shalf; guvs = guv*shalf; gvvs = gvv*shalf
274 armn_e = ohs*zu12 * lu_e
275 azmn_e =-ohs*ru12 * lu_e
276 brmn_e = brmn_e * lu_e
277 bzmn_e =-bzmn_e * lu_e
278 bsqr = dshalfds*lu_e/shalf
280 armn_o(1:ndim) = armn_e(1:ndim) *shalf
281 azmn_o(1:ndim) = azmn_e(1:ndim) *shalf
282 brmn_o(1:ndim) = brmn_e(1:ndim) *shalf
283 bzmn_o(1:ndim) = bzmn_e(1:ndim) *shalf
292 guu(l) = p5*(guu(l) + guu(l+1))
293 gvv(l) = p5*(gvv(l) + gvv(l+1))
294 bsqr(l) = bsqr(l) + bsqr(l+1)
295 guus(l) = p5*(guus(l) + guus(l+1))
296 gvvs(l) = p5*(gvvs(l) + gvvs(l+1))
301 armn_e(l) = armn_e(l+1) - armn_e(l) + p5*(lv_e(l) + lv_e(l+1))
302 azmn_e(l) = azmn_e(l+1) - azmn_e(l)
303 brmn_e(l) = p5*(brmn_e(l) + brmn_e(l+1))
304 bzmn_e(l) = p5*(bzmn_e(l) + bzmn_e(l+1))
307 armn_e(:nrzt) = armn_e(:nrzt) - (gvvs(:nrzt)*r1(:nrzt,1)
308 & + gvv(:nrzt)*r1(:nrzt,0))
309 brmn_e(:nrzt) = brmn_e(:nrzt) + bsqr(:nrzt)*z1(:nrzt,1)
310 & -(guus(:nrzt)*ru(:nrzt,1) + guu(:nrzt)*ru(:nrzt,0))
311 bzmn_e(:nrzt) = bzmn_e(:nrzt) - (bsqr(:nrzt)*r1(:nrzt,1)
312 & + guus(:nrzt)*zu(:nrzt,1) + guu(:nrzt)*zu(:nrzt,0))
313 lv_e(1:ndim) = lv_e(1:ndim)*shalf(1:ndim)
314 lu_o(1:ndim) = dshalfds*lu_e(1:ndim)
318 armn_o(l) = armn_o(l+1) - armn_o(l) - zu(l,0)*bsqr(l)
319 & + p5*(lv_e(l) + lv_e(l+1))
320 azmn_o(l) = azmn_o(l+1) - azmn_o(l) + ru(l,0)*bsqr(l)
321 brmn_o(l) = p5*(brmn_o(l) + brmn_o(l+1))
322 bzmn_o(l) = p5*(bzmn_o(l) + bzmn_o(l+1))
323 lu_o(l) = lu_o(l) + lu_o(l+1)
326 guu(1:nrzt) = guu(1:nrzt) * sqrts(1:nrzt)**2
327 bsqr(1:nrzt) = gvv(1:nrzt) * sqrts(1:nrzt)**2
329 armn_o(:nrzt) = armn_o(:nrzt) - (zu(:nrzt,1)*lu_o(:nrzt)
330 & + bsqr(:nrzt)*r1(:nrzt,1) + gvvs(:nrzt)*r1(:nrzt,0))
331 azmn_o(:nrzt) = azmn_o(:nrzt) + ru(:nrzt,1)*lu_o(:nrzt)
332 brmn_o(:nrzt) = brmn_o(:nrzt) + z1(:nrzt,1)*lu_o(:nrzt)
333 & -(guu(:nrzt)*ru(:nrzt,1) + guus(:nrzt)*ru(:nrzt,0))
334 bzmn_o(:nrzt) = bzmn_o(:nrzt) - (r1(:nrzt,1)*lu_o(:nrzt)
335 & + guu(:nrzt)*zu(:nrzt,1) + guus(:nrzt)*zu(:nrzt,0))
340 guv(l) = p5*(guv(l) + guv(l+1))
341 guvs(l) = p5*(guvs(l) + guvs(l+1))
344 brmn_e(:nrzt) = brmn_e(:nrzt)
345 & - (guv(:nrzt)*rv(:nrzt,0) + guvs(:nrzt)*rv(:nrzt,1))
346 bzmn_e(:nrzt) = bzmn_e(:nrzt)
347 & - (guv(:nrzt)*zv(:nrzt,0) + guvs(:nrzt)*zv(:nrzt,1))
348 crmn_e(:nrzt) = guv(:nrzt) *ru(:nrzt,0)
349 & + gvv(:nrzt) *rv(:nrzt,0)
350 & + gvvs(:nrzt)*rv(:nrzt,1) + guvs(:nrzt)*ru(:nrzt,1)
351 czmn_e(:nrzt) = guv(:nrzt) *zu(:nrzt,0)
352 & + gvv(:nrzt) *zv(:nrzt,0)
353 & + gvvs(:nrzt)*zv(:nrzt,1) + guvs(:nrzt)*zu(:nrzt,1)
354 guv(:nrzt) = guv(:nrzt) *sqrts(:nrzt)*sqrts(:nrzt)
355 brmn_o(:nrzt) = brmn_o(:nrzt)
356 & - (guvs(:nrzt)*rv(:nrzt,0) + guv(:nrzt)*rv(:nrzt,1))
357 bzmn_o(:nrzt) = bzmn_o(:nrzt)
358 & - (guvs(:nrzt)*zv(:nrzt,0) + guv(:nrzt)*zv(:nrzt,1))
359 crmn_o(:nrzt) = guvs(:nrzt)*ru(:nrzt,0)
360 & + gvvs(:nrzt)*rv(:nrzt,0)
361 & + bsqr(:nrzt)*rv(:nrzt,1) + guv(:nrzt) *ru(:nrzt,1)
362 czmn_o(:nrzt) = guvs(:nrzt)*zu(:nrzt,0)
363 & + gvvs(:nrzt)*zv(:nrzt,0)
364 & + bsqr(:nrzt)*zv(:nrzt,1) + guv(:nrzt) *zu(:nrzt,1)
370 IF (ivac .ge. 1)
THEN
371 armn_e(ns:nrzt:ns) = armn_e(ns:nrzt:ns)
372 & + zu0(ns:nrzt:ns)*rbsq(1:nznt)
373 armn_o(ns:nrzt:ns) = armn_o(ns:nrzt:ns)
374 & + zu0(ns:nrzt:ns)*rbsq(1:nznt)
375 azmn_e(ns:nrzt:ns) = azmn_e(ns:nrzt:ns)
376 & - ru0(ns:nrzt:ns)*rbsq(1:nznt)
377 azmn_o(ns:nrzt:ns) = azmn_o(ns:nrzt:ns)
378 & - ru0(ns:nrzt:ns)*rbsq(1:nznt)
389 rcon(:nrzt,0) = (rcon(:nrzt,0) - rcon0(:nrzt)) * gcon(:nrzt)
390 zcon(:nrzt,0) = (zcon(:nrzt,0) - zcon0(:nrzt)) * gcon(:nrzt)
391 brmn_e(:nrzt) = brmn_e(:nrzt) + rcon(:nrzt,0)
392 bzmn_e(:nrzt) = bzmn_e(:nrzt) + zcon(:nrzt,0)
393 brmn_o(:nrzt) = brmn_o(:nrzt)+ rcon(:nrzt,0)*sqrts(:nrzt)
394 bzmn_o(:nrzt) = bzmn_o(:nrzt)+ zcon(:nrzt,0)*sqrts(:nrzt)
395 rcon(:nrzt,0) = ru0(:nrzt) * gcon(:nrzt)
396 zcon(:nrzt,0) = zu0(:nrzt) * gcon(:nrzt)
397 rcon(:nrzt,1) = rcon(:nrzt,0) * sqrts(:nrzt)
398 zcon(:nrzt,1) = zcon(:nrzt,0) * sqrts(:nrzt)
401 CALL second0 (tforoff)
402 timer(tfor) = timer(tfor) + (tforoff - tforon)
404 END SUBROUTINE forces