V3FIT
symrzl.f
1  SUBROUTINE symrzl_par(r1s, rus, rvs, z1s, zus, zvs, lus, lvs,
2  1 rcons, zcons, r1a, rua, rva, z1a, zua, zva, lua, lva, rcona,
3  2 zcona)
4  USE vmec_main
5  USE realspace, ONLY: ireflect_par
6  USE parallel_include_module
7  IMPLICIT NONE
8 C-----------------------------------------------
9 C D u m m y A r g u m e n t s
10 C-----------------------------------------------
11  REAL(dp), DIMENSION(nzeta,ntheta3,ns,0:1), INTENT(inout) ::
12  1 r1s, rus, rvs, z1s, zus, zvs, lus, lvs, rcons, zcons
13  REAL(dp), DIMENSION(nzeta,ntheta3,ns,0:1), INTENT(in) ::
14  1 r1a, rua, rva, z1a, zua, zva, lua, lva, rcona, zcona
15 C-----------------------------------------------
16 C L o c a l V a r i a b l e s
17 C-----------------------------------------------
18  INTEGER :: mpar, ir, i, jk, jka, n2
19  INTEGER :: j, k, nsmin, nsmax
20  REAL(dp) :: tsymon, tsymoff
21 C-----------------------------------------------
22 !
23 ! FIRST SUM SYMMETRIC, ANTISYMMETRIC PIECES ON EXTENDED INTERVAL, THETA = [PI,2*PI]
24 !
25  CALl second0(tsymon)
26  nsmin = t1lglob
27  nsmax = t1rglob
28 
29  DO k = nsmin, nsmax
30  DO mpar = 0, 1
31  DO i = 1 + ntheta2, ntheta1
32  ir = ntheta1 + 2 - i !-theta
33  DO j = 1, nzeta
34  jka = ireflect_par(j) !-zeta
35  r1s(j,i,k,mpar) = r1s(jka,ir,k,mpar)
36  & - r1a(jka,ir,k,mpar)
37  rus(j,i,k,mpar) = rua(jka,ir,k,mpar)
38  & - rus(jka,ir,k,mpar)
39  z1s(j,i,k,mpar) = z1a(jka,ir,k,mpar)
40  & - z1s(jka,ir,k,mpar)
41  zus(j,i,k,mpar) = zus(jka,ir,k,mpar)
42  & - zua(jka,ir,k,mpar)
43  lus(j,i,k,mpar) = lus(jka,ir,k,mpar)
44  & - lua(jka,ir,k,mpar)
45  rcons(j,i,k,mpar) = rcons(jka,ir,k,mpar)
46  & - rcona(jka,ir,k,mpar)
47  zcons(j,i,k,mpar) = zcona(jka,ir,k,mpar)
48  & - zcons(jka,ir,k,mpar)
49  END DO
50  IF (lthreed) THEN
51  DO j = 1, nzeta
52  jka = ireflect_par(j) !-zeta
53  rvs(j,i,k,mpar) = rva(jka,ir,k,mpar)
54  & - rvs(jka,ir,k,mpar)
55  zvs(j,i,k,mpar) = zvs(jka,ir,k,mpar)
56  & - zva(jka,ir,k,mpar)
57  lvs(j,i,k,mpar) = lvs(jka,ir,k,mpar)
58  & - lva(jka,ir,k,mpar)
59  END DO
60  END IF
61  END DO
62 
63 !
64 ! NOW SUM SYMMETRIC, ANTISYMMETRIC PIECES FOR THETA = [0,PI]
65 !
66  n2 = ntheta2
67  r1s(:,:n2,k,mpar) = r1s(:,:n2,k,mpar) + r1a(:,:n2,k,mpar)
68  rus(:,:n2,k,mpar) = rus(:,:n2,k,mpar) + rua(:,:n2,k,mpar)
69  z1s(:,:n2,k,mpar) = z1s(:,:n2,k,mpar) + z1a(:,:n2,k,mpar)
70  zus(:,:n2,k,mpar) = zus(:,:n2,k,mpar) + zua(:,:n2,k,mpar)
71  lus(:,:n2,k,mpar) = lus(:,:n2,k,mpar) + lua(:,:n2,k,mpar)
72  rcons(:,:n2,k,mpar) = rcons(:,:n2,k,mpar)
73  & + rcona(:,:n2,k,mpar)
74  zcons(:,:n2,k,mpar) = zcons(:,:n2,k,mpar)
75  & + zcona(:,:n2,k,mpar)
76  IF (lthreed) THEN
77  rvs(:,:n2,k,mpar) = rvs(:,:n2,k,mpar)
78  & + rva(:,:n2,k,mpar)
79  zvs(:,:n2,k,mpar) = zvs(:,:n2,k,mpar)
80  & + zva(:,:n2,k,mpar)
81  lvs(:,:n2,k,mpar) = lvs(:,:n2,k,mpar)
82  & + lva(:,:n2,k,mpar)
83  END IF
84 
85  END DO
86  END DO
87 
88  CALl second0(tsymoff)
89  symrzl_time = symrzl_time + (tsymoff - tsymon)
90 
91  END SUBROUTINE symrzl_par
92 
93  SUBROUTINE symrzl(r1s, rus, rvs, z1s, zus, zvs, lus, lvs, rcons,
94  & zcons, r1a, rua, rva, z1a, zua, zva, lua, lva,
95  & rcona, zcona)
96  USE vmec_main
97  USE parallel_include_module
98  IMPLICIT NONE
99 C-----------------------------------------------
100 C D u m m y A r g u m e n t s
101 C-----------------------------------------------
102  REAL(dp), DIMENSION(ns*nzeta,ntheta3,0:1), INTENT(inout) ::
103  1 r1s, rus, rvs, z1s, zus, zvs, lus, lvs, rcons, zcons
104  REAL(dp), DIMENSION(ns*nzeta,ntheta3,0:1), INTENT(in) ::
105  1 r1a, rua, rva, z1a, zua, zva, lua, lva, rcona, zcona
106 C-----------------------------------------------
107 C L o c a l V a r i a b l e s
108 C-----------------------------------------------
109  INTEGER :: mpar, ir, i, jk, jka, n2
110  INTEGER :: j, k, nsmin, nsmax
111  REAL(dp) :: tsymon, tsymoff
112 C-----------------------------------------------
113 !
114 ! FIRST SUM SYMMETRIC, ANTISYMMETRIC PIECES ON EXTENDED INTERVAL, THETA = [PI,2*PI]
115 !
116  CALl second0(tsymon)
117  DO mpar = 0, 1
118  DO i = 1 + ntheta2, ntheta1
119  ir = ntheta1 + 2 - i !-theta
120  DO jk = 1, ns*nzeta
121  jka = ireflect(jk) !-zeta
122  r1s(jk,i,mpar) = r1s(jka,ir,mpar) - r1a(jka,ir,mpar)
123  rus(jk,i,mpar) = rua(jka,ir,mpar) - rus(jka,ir,mpar)
124  z1s(jk,i,mpar) = z1a(jka,ir,mpar) - z1s(jka,ir,mpar)
125  zus(jk,i,mpar) = zus(jka,ir,mpar) - zua(jka,ir,mpar)
126  lus(jk,i,mpar) = lus(jka,ir,mpar) - lua(jka,ir,mpar)
127  rcons(jk,i,mpar) = rcons(jka,ir,mpar)
128  & - rcona(jka,ir,mpar)
129  zcons(jk,i,mpar) = zcona(jka,ir,mpar)
130  & - zcons(jka,ir,mpar)
131  END DO
132  IF (lthreed) THEN
133  DO jk = 1, ns*nzeta
134  jka = ireflect(jk)
135  rvs(jk,i,mpar) = rva(jka,ir,mpar) - rvs(jka,ir,mpar)
136  zvs(jk,i,mpar) = zvs(jka,ir,mpar) - zva(jka,ir,mpar)
137  lvs(jk,i,mpar) = lvs(jka,ir,mpar) - lva(jka,ir,mpar)
138  END DO
139  ENDIF
140  END DO
141 
142 !
143 ! NOW SUM SYMMETRIC, ANTISYMMETRIC PIECES FOR THETA = [0,PI]
144 !
145  n2 = ntheta2
146  r1s(:,:n2,mpar) = r1s(:,:n2,mpar) + r1a(:,:n2,mpar)
147  rus(:,:n2,mpar) = rus(:,:n2,mpar) + rua(:,:n2,mpar)
148  z1s(:,:n2,mpar) = z1s(:,:n2,mpar) + z1a(:,:n2,mpar)
149  zus(:,:n2,mpar) = zus(:,:n2,mpar) + zua(:,:n2,mpar)
150  lus(:,:n2,mpar) = lus(:,:n2,mpar) + lua(:,:n2,mpar)
151  rcons(:,:n2,mpar) = rcons(:,:n2,mpar) + rcona(:,:n2,mpar)
152  zcons(:,:n2,mpar) = zcons(:,:n2,mpar) + zcona(:,:n2,mpar)
153  IF (lthreed) THEN
154  rvs(:,:n2,mpar) = rvs(:,:n2,mpar) + rva(:,:n2,mpar)
155  zvs(:,:n2,mpar) = zvs(:,:n2,mpar) + zva(:,:n2,mpar)
156  lvs(:,:n2,mpar) = lvs(:,:n2,mpar) + lva(:,:n2,mpar)
157  END IF
158  END DO
159 
160  CALl second0(tsymoff)
161  s_symrzl_time = s_symrzl_time + (tsymoff - tsymon)
162 
163  END SUBROUTINE symrzl