V3FIT
load_saddle_wsurf.f
1  SUBROUTINE load_saddle_wsurf (nvariables, xvariables)
2 !-----------------------------------------------
3 ! M o d u l e s
4 !-----------------------------------------------
5  USE saddle_surface
6  IMPLICIT NONE
7 !-----------------------------------------------
8 ! L o c a l V a r i a b l e s
9 !-----------------------------------------------
10  INTEGER :: nvariables, mb, nb, ik, j1
11  REAL(rprec) :: xvariables(*)
12  EXTERNAL unique_boundary, unique_boundary_pg
13 !-----------------------------------------------
14 
15  IF (nopt_wsurf .eq. -1) THEN
16  rmn_sad(:numsurf_sad) = xvariables(1:numsurf_sad)
17  zmn_sad(:numsurf_sad) = xvariables(numsurf_sad+1:2*numsurf_sad)
18  nvariables = 2*numsurf_sad
19 
20  ELSE IF (nopt_wsurf .eq. 0) THEN
21 
22  rbc = 0; zbs = 0
23 
24  DO ik = 1, irm0_bdy
25  rbc(nrz0_opt(ik),0) = xvariables(ik)
26  END DO
27  DO ik = 1, izm0_bdy
28  zbs(nrz0_opt(ik+irm0_bdy),0) = xvariables(ik+irm0_bdy)
29  END DO
30  DO ik = 1, irho_bdy
31  j1 = ik + irm0_bdy + izm0_bdy
32  rhobc(nbrho_opt(ik),mbrho_opt(ik)) = xvariables(j1)
33  END DO
34 
35  nvariables = irm0_bdy + izm0_bdy + irho_bdy
36 
37  CALL unique_boundary(rbc, zbs, rhobc, mpol_opt, ntor_opt,
38  1 mpol_opt, ntor_opt, mpol_opt)
39 
40 ! CONVERT FROM VMEC TO NESCOIL FORM FOR WINDING SURFACE
41 
42  rmn_sad = 0
43  zmn_sad = 0
44 
45  DO ik = 1, numsurf_sad
46  mb = m_sad(ik)
47 
48  IF (mb .eq. 0) THEN
49  nb = n_sad(ik)
50  IF (nb .ge. 0) THEN
51  rmn_sad(ik) = rbc(nb, mb)
52  zmn_sad(ik) = -zbs(nb, mb)
53  ELSE
54  nb = -nb
55  rmn_sad(ik) = rbc(nb, mb)
56  zmn_sad(ik) = zbs(nb, mb)
57  END IF ! mb=0
58 
59  ELSE
60  nb = -n_sad(ik)
61  rmn_sad(ik) = rbc(nb, mb)
62  zmn_sad(ik) = zbs(nb, mb)
63  END IF
64  END DO
65 
66 
67  ELSE IF (nopt_wsurf .eq. 1) THEN
68 
69  DO ik = 1, irho_bdy
70  j1 = ik
71  delta_mn(nbrho_opt(ik),mbrho_opt(ik)) = xvariables(j1)
72  END DO
73 
74  CALL unique_boundary_pg(rbc, zbs, delta_mn, ntor_opt, mpol_opt,
75  1 mpol_opt, ntor_opt)
76 
77  nvariables = 0
78  DO mb = 0, mpol_opt
79  DO nb = -ntor_opt, ntor_opt
80  IF( abs(rbc(nb,mb)) .gt. zero .or.
81  1 abs(zbs(nb,mb)) .gt. zero ) THEN
82  nvariables = nvariables + 1
83  m_sad(nvariables) = mb
84  IF (mb .eq. 0) THEN
85  n_sad(nvariables) = nb
86  rmn_sad(nvariables) = rbc(nb,mb)
87  zmn_sad(nvariables) = -zbs(nb,mb)
88  ELSE
89  n_sad(nvariables) = -nb
90  rmn_sad(nvariables) = rbc(nb,mb)
91  zmn_sad(nvariables) = zbs(nb,mb)
92  END IF
93  END IF
94  END DO
95  END DO
96 
97  IF (nvariables .ne. numsurf_sad) THEN
98  WRITE(6,*) "nvariables != numsurf_sad in load_saddle_surf"
99  stop
100  END IF
101 
102  nvariables = irho_bdy
103 
104  END IF
105 
106  END SUBROUTINE load_saddle_wsurf