3 SUBROUTINE precondn_par(lu1, bsq, gsqrt, r12, xs, xu12, xue, xuo,
4 & xodd, axm, axd, bxm, bxd,
5 & cx, eqfactor, trigmult)
7 USE vmec_params,
ONLY: signgs
8 USE realspace,
ONLY: pshalf, pwint
9 USE parallel_include_module
14 REAL(rprec),
DIMENSION(nznt,ns),
INTENT(in) ::
15 & lu1, bsq, gsqrt, r12, xs, xu12, xue, xuo, xodd
16 REAL(rprec),
DIMENSION(ns+1,2),
INTENT(out) ::
18 REAL(rprec),
DIMENSION(ns+1),
INTENT(out) :: cx
19 REAL(rprec),
DIMENSION(ns),
INTENT(out) :: eqfactor
20 REAL(rprec),
DIMENSION(nznt),
INTENT(in) :: trigmult
25 REAL(rprec),
DIMENSION(:,:),
ALLOCATABLE :: ax, bx
27 REAL(rprec),
ALLOCATABLE,
DIMENSION(:) :: temp
28 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: ptau, ptau2
29 REAL(rprec) :: t1, t2, t3, pfactor
31 INTEGER :: nsmin, nsmax, i, j, k, numjs
32 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ldisps, lcounts
33 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: sbuf
35 nsmin=tlglob; nsmax=t1rglob
39 ALLOCATE (ax(ns+1,4), bx(ns+1,4),
40 & ptau(nznt), ptau2(nznt), temp(ns+1))
45 pfactor = -4*r0scale**2
58 t1 = pfactor*r12(lk,js)*bsq(lk,js)
59 ptau2(lk) = r12(lk,js)*t1/gsqrt(lk,js)
61 temp(js) = temp(js) + t1*trigmult(lk)*xu12(lk,js)
62 ptau(lk) = r12(lk,js)*t1/gsqrt(lk,js)
64 t2 = cp25*(xue(lk,js)/pshalf(lk,js)+xuo(lk,js))
66 t3 = cp25*(xue(lk,js-1)/pshalf(lk,js) +
67 & xuo(lk,js-1))/pshalf(lk,js)
68 ax(js,1) = ax(js,1) + ptau(lk)*t1*t1
69 ax(js,2) = ax(js,2) + ptau(lk)*(-t1+t3)*(t1+t2)
70 ax(js,3) = ax(js,3) + ptau(lk)*(t1+t2)*(t1+t2)
71 ax(js,4) = ax(js,4) + ptau(lk)*(-t1+t3)*(-t1+t3)
81 t1 = cp5*(xs(lk,js) + cp5*xodd(lk,js)/pshalf(lk,js))
82 t2 = cp5*(xs(lk,js) + cp5*xodd(lk,js-1)/pshalf(lk,js))
83 bx(js,1) = bx(js,1) + ptau(lk)*t1*t2
84 bx(js,2) = bx(js,2) + ptau(lk)*t1*t1
85 bx(js,3) = bx(js,3) + ptau(lk)*t2*t2
87 & + cp25*pfactor*lu1(lk,js)**2 *
88 & gsqrt(lk,js)*pwint(lk,js)
97 temp(nsmin:nsmax) = temp(nsmin:nsmax)/vp(nsmin:nsmax);
103 axm(js,1) = -ax(js,1)
104 axd(js,1) = ax(js,1) + ax(js+1,1)
105 axm(js,2) = ax(js,2) * sm(js) * sp(js-1)
106 axd(js,2) = ax(js,3)*sm(js)**2 + ax(js+1,4)*sp(js)**2
108 bxm(js,2) = bx(js,1) * sm(js) * sp(js-1)
109 bxd(js,1) = bx(js,2) + bx(js+1,3)
110 bxd(js,2) = bx(js,2)*sm(js)**2 + bx(js+1,3)*sp(js)**2
111 cx(js) = cx(js) + cx(js+1)
112 temp(js) = signgs*(temp(js) + temp(js+1))
115 nsmin = max(2,tlglob)
116 nsmax = min(ns-1,trglob)
117 eqfactor(nsmin:nsmax) = axd(nsmin:nsmax,2)*hs*hs/
125 DEALLOCATE (ax, bx, ptau, ptau2, temp)
127 END SUBROUTINE precondn_par
129 SUBROUTINE precondn(lu1, bsq, gsqrt, r12, xs, xu12, xue, xuo,
130 & xodd, axm, axd, bxm, bxd,
131 & cx, eqfactor, trigmult)
133 USE vmec_params,
ONLY: signgs
140 REAL(rprec),
DIMENSION(nrzt),
INTENT(in) ::
141 1 lu1, bsq, gsqrt, r12, xs, xu12, xue, xuo, xodd
142 REAL(rprec),
DIMENSION(ns+1,2),
INTENT(out) ::
144 REAL(rprec),
DIMENSION(ns+1),
INTENT(out) :: cx
145 REAL(rprec),
DIMENSION(ns),
INTENT(out) :: eqfactor
146 REAL(rprec),
DIMENSION(nznt),
INTENT(in) :: trigmult
151 REAL(rprec),
DIMENSION(:,:),
ALLOCATABLE :: ax, bx
152 REAL(rprec) :: temp(ns+1)
153 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: ptau, ptau2
154 REAL(rprec) :: t1, t2, t3, pfactor
168 ALLOCATE (ax(ns+1,4), bx(ns+1,4), ptau(nznt), ptau2(nznt))
169 ax = 0; bx = 0; cx = 0
172 pfactor = -4*r0scale**2
182 t1 = pfactor*r12(l)*bsq(l)
183 ptau2(lk) = r12(l)*t1/gsqrt(l)
185 temp(js) = temp(js) + t1*trigmult(lk)*xu12(l)
186 ptau(lk) = r12(l)*t1/gsqrt(l)
188 t2 = cp25*(xue(l)/shalf(js) + xuo(l))/shalf(js)
189 t3 = cp25*(xue(l-1)/shalf(js) + xuo(l-1))/shalf(js)
190 ax(js,1) = ax(js,1) + ptau(lk)*t1*t1
191 ax(js,2) = ax(js,2) + ptau(lk)*(-t1+t3)*(t1+t2)
192 ax(js,3) = ax(js,3) + ptau(lk)*(t1+t2)*(t1+t2)
193 ax(js,4) = ax(js,4) + ptau(lk)*(-t1+t3)*(-t1+t3)
201 t1 = cp5*(xs(l) + cp5*xodd(l)/shalf(js))
202 t2 = cp5*(xs(l) + cp5*xodd(l-1)/shalf(js))
203 bx(js,1) = bx(js,1) + ptau(lk)*t1*t2
204 bx(js,2) = bx(js,2) + ptau(lk)*t1*t1
205 bx(js,3) = bx(js,3) + ptau(lk)*t2*t2
206 cx(js) = cx(js) + cp25*pfactor*lu1(l)**2*gsqrt(l)*wint(l)
211 temp(2:ns) = temp(2:ns)/vp(2:ns)
215 axd(js,1) = ax(js,1) + ax(js+1,1)
216 axm(js,2) = ax(js,2) * sm(js) * sp(js-1)
217 axd(js,2) = ax(js,3)*sm(js)**2 + ax(js+1,4)*sp(js)**2
219 bxm(js,2) = bx(js,1) * sm(js) * sp(js-1)
220 bxd(js,1) = bx(js,2) + bx(js+1,3)
221 bxd(js,2) = bx(js,2)*sm(js)**2 + bx(js+1,3)*sp(js)**2
222 cx(js) = cx(js) + cx(js+1)
223 temp(js) = signgs*(temp(js) + temp(js+1))
226 eqfactor(2:ns-1) = axd(2:ns-1,2)*hs*hs/temp(2:ns-1)
233 DEALLOCATE (ax, bx, ptau, ptau2)
235 END SUBROUTINE precondn