1 SUBROUTINE precal (wint)
2 USE vparams,
ONLY: zero, one, epstan
4 USE vmec_main,
ONLY: mnmax
5 USE parallel_include_module
10 REAL(dp),
INTENT(in) :: wint(nuv3)
14 REAL(dp),
PARAMETER :: p25 = p5*p5, bigno = 1.e50_dp
18 INTEGER :: kp, ku, kuminus, kv, kvminus, i, m, n, mn, n1,
19 1 imn, jmn, kmn, l, istat1, smn, nuv_tan, ndim, q, qq
20 REAL(dp),
DIMENSION(0:mf + nf,0:mf,0:nf) :: cmn
21 REAL(dp) :: argu, argv, argp, dn1, f1, f2, f3, alp_per,
54 ALLOCATE (tanu(nuv_tan), tanv(nuv_tan),
55 1 sinper(nvper), cosper(nvper), sinuv(nuv), cosuv(nuv),
56 2 sinu(0:mf,nu), cosu(0:mf,nu), sinv(-nf:nf,nv),
57 3 cosv(-nf:nf,nv), sinui(0:mf,nu2), cosui(0:mf,nu2),
58 4 cmns(0:(mf+nf),0:mf,0:nf), csign(-nf:nf),
59 5 sinu1(nuv3,0:mf), cosu1(nuv3,0:mf),
60 6 sinv1(nuv3,0:nf), cosv1(nuv3,0:nf), imirr(nuv),
61 7 xmpot(mnpd), xnpot(mnpd), stat=istat1)
62 IF (istat1.ne.0) stop
'allocation error in precal'
69 cosper(kp) = cos(alp_per*(kp - 1))
70 sinper(kp) = sin(alp_per*(kp - 1))
74 kuminus = mod(nu + 1 - ku,nu) + 1
76 kvminus = mod(nv + 1 - kv,nv) + 1
78 imirr(i) = kvminus + nv*(kuminus - 1)
79 cosuv(i) = cos(alvp*(kv - 1))
80 sinuv(i) = sin(alvp*(kv - 1))
93 IF (kp.gt.1 .and. nv.ne.1)
EXIT
94 argp = p5*alp_per*(kp-1)
96 argu = p5*alu*(ku - 1)
99 argv = p5*alv*(kv - 1) + argp
100 IF (abs(argu - p25*pi2)<epstan .or.
101 1 abs(argu - 0.75_dp*pi2) < epstan)
THEN
104 tanu(i) = 2*tan(argu)
106 IF (abs(argv - p25*pi2) < epstan)
THEN
109 tanv(i) = 2*tan(argv)
117 cosu(m,ku) = cos(alu*(m*(ku - 1)))
118 sinu(m,ku) = sin(alu*(m*(ku - 1)))
121 IF (i > nuv3) cycle l40
122 cosu1(i,m) = cosu(m,ku)
123 sinu1(i,m) = sinu(m,ku)
127 cosui(m,ku) = cosu(m,ku)*alu*alv*2
128 sinui(m,ku) = sinu(m,ku)*alu*alv*2
129 IF (ku.eq.1 .or. ku.eq.nu2) cosui(m,ku) = p5*cosui(m,ku)
135 csign(n) = sign(one,dn1)
139 cosv(n,kv) = cos(dn1*(kv - 1))
140 sinv(n,kv) = sin(dn1*(kv - 1))
141 IF (i.gt.nuv3 .or. n.lt.0) cycle l50
142 cosv1(i,n) = cosv(n,kv)
143 sinv1(i,n) = sinv(n,kv)
150 numjs_vac=nuv3max-nuv3min+1
152 ALLOCATE(sinmni(numjs_vac,mnpd), cosmni(numjs_vac,mnpd),stat=i)
153 IF (i .NE. 0) stop
'Allocation error in scalpot'
160 DO i = nuv3min, nuv3max
161 sinmni(i-imn,mn) = wint(i)*(sinu1(i,m)*cosv1(i,n1)
162 1 - csign(n)*cosu1(i,m)*sinv1(i,n1))*(pi2*pi2)
163 cosmni(i-imn,mn) = wint(i)*(cosu1(i,m)*cosv1(i,n1)
164 1 + csign(n)*sinu1(i,m)*sinv1(i,n1))*(pi2*pi2)
191 f1 = f1*(smn + 1 - i)
196 cmn(l,m,n) = f1/(f2*f3)*((-1)**((l - imn)/2))
197 f1 = f1*p25*((jmn + l + 2)*(jmn - l))
198 f2 = f2*p5*(l + 2 + kmn)
199 f3 = f3*p5*(l + 2 - kmn)
209 cmns(0:mf+nf,m,n) = p5*alp*(cmn(0:mf+nf,m,n) +
210 1 cmn(0:mf+nf,m-1,n) + cmn(0:mf+nf,m,n-1) +
211 2 cmn(0:mf+nf,m-1,n-1))
214 cmns(0:mf+nf,1:mf,0) = (p5*alp)*(cmn(0:mf+nf,1:mf,0)
215 1 + cmn(0:mf+nf,:mf-1,0))
216 cmns(0:mf+nf,0,1:nf) = (p5*alp)*(cmn(0:mf+nf,0,1:nf)
217 1 + cmn(0:mf+nf,0,:nf-1))
218 cmns(0:mf+nf,0,0) = (p5*alp)*(cmn(0:mf+nf,0,0)
219 1 + cmn(0:mf+nf,0,0))
221 numjs_vac=nuv3max-nuv3min+1
224 ALLOCATE (counts_vac(vnranks),disps_vac(vnranks), stat=i)
225 IF (i .NE. 0) stop
'Allocation error in precal'
227 counts_vac(i) = nuv3max_arr(i) - nuv3min_arr(i) + 1
231 disps_vac(i) = disps_vac(i - 1) + counts_vac(i - 1)
234 CALL second0(tprecoff)
235 precal_time = precal_time + (tprecoff - tprecon)
237 END SUBROUTINE precal