V3FIT
transpmn.f
1  SUBROUTINE transpmn(pmns, bsubtmnc, bsubzmnc, pmnc, bsubtmns,
2  1 bsubzmns, xm, xn, gpsi, ipsi, mnmax, js, lasym)
3  USE stel_kinds
4  USE booz_params, ONLY: ns
5  IMPLICIT NONE
6 C-----------------------------------------------
7 C D u m m y A r g u m e n t s
8 C-----------------------------------------------
9  INTEGER :: mnmax, js
10  REAL(rprec), DIMENSION(mnmax) :: pmns, bsubtmnc, bsubzmnc
11  REAL(rprec), DIMENSION(mnmax) :: pmnc, bsubtmns, bsubzmns
12  REAL(rprec), DIMENSION(mnmax) :: xm, xn
13  REAL(rprec), DIMENSION(ns) :: gpsi, ipsi
14  LOGICAL, INTENT(in) :: lasym
15 C-----------------------------------------------
16 C L o c a l V a r i a b l e s
17 C-----------------------------------------------
18  INTEGER :: mn
19  REAL(rprec) :: rad_cur
20 C-----------------------------------------------
21 !
22 ! COMPUTE THE PART OF Pmns,c WHICH IS INDEPENDENT OF Lmns,c (the COVARIANT source terms
23 ! in Eq.10). THE NET P IN REAL SPACE IS GIVEN AS FOLLOWS:
24 !
25 ! P(FINAL) = {SUM(m,n)[pmns(m,n)*SIN(arg) + pmnc(m,n)*COS(arg)] - Ipsi*Lambda} / D
26 !
27 ! WHERE arg = m*theta - n*zeta, D = gpsi + iota*Ipsi
28 !
29  DO mn = 1,mnmax
30  IF (nint(xm(mn)) .ne. 0) THEN
31  pmns(mn) = bsubtmnc(mn)/xm(mn)
32  IF (lasym) pmnc(mn) = -bsubtmns(mn)/xm(mn)
33  ELSE IF (nint(xn(mn)) .ne. 0) THEN
34  pmns(mn) = -bsubzmnc(mn)/xn(mn)
35  IF (lasym) pmnc(mn) = bsubzmns(mn)/xn(mn)
36  ELSE
37  pmns(mn) = 0
38  IF (lasym) pmnc(mn) = 0
39  gpsi(js) = bsubzmnc(mn)
40  ipsi(js) = bsubtmnc(mn)
41  ENDIF
42 
43 ! DIAGNOSTIC: CHECK IF RADIAL CURRENT VANISHES
44  cycle !COMMENT THIS FOR DIAGNOSTIC DUMP
45  IF (xm(mn).ne.0 .or. xn(mn).ne.0) THEN
46  rad_cur = xn(mn)*bsubtmnc(mn)+xm(mn)*bsubzmnc(mn)
47  rad_cur = rad_cur/(abs(ipsi(js))+abs(gpsi(js)))
48  IF (abs(rad_cur) .gt. 1.e-10_dp) THEN
49  print *,'m: ',xm(mn),' n: ',xn(mn),' Radial Current: ',
50  1 rad_cur
51  END IF
52  END IF
53 
54  END DO
55 
56  END SUBROUTINE transpmn