1 SUBROUTINE init_saddle_wsurf (nvariables, xvariables)
12 REAL(rprec),
ALLOCATABLE,
DIMENSION(:,:) :: rbc_in, zbs_in
14 INTEGER,
INTENT(out) :: nvariables
15 REAL(rprec) :: xvariables(*)
16 EXTERNAL unique_boundary, convert_boundary,
17 1 unique_boundary_pg, convert_boundary_pg
19 IF (nopt_wsurf .eq. -1)
THEN
20 xvariables(1:numsurf_sad) = rmn_sad(:numsurf_sad)
21 xvariables(numsurf_sad+1:2*numsurf_sad) = zmn_sad(:numsurf_sad)
22 nvariables = 2*numsurf_sad
26 irm0_bdy = 0; izm0_bdy = 0; irho_bdy = 0;
28 ntor_opt = max(maxval(n_sad(1:numsurf_sad)),
29 1 abs(minval(n_sad(1:numsurf_sad))))
30 mpol_opt = max(maxval(m_sad(1:numsurf_sad)),
31 1 abs(minval(m_sad(1:numsurf_sad))))
32 IF (nopt_wsurf .eq. 1) mpol_opt = mpol_opt + 1
33 ik = (2*ntor_opt+1)*(mpol_opt+1)
35 ALLOCATE (nbrho_opt(ik), mbrho_opt(ik),
36 1 rbc(-ntor_opt:ntor_opt,0:mpol_opt),
37 2 zbs(-ntor_opt:ntor_opt,0:mpol_opt),
38 3 rbc_in(-ntor_opt:ntor_opt,0:mpol_opt),
39 4 zbs_in(-ntor_opt:ntor_opt,0:mpol_opt),
40 5 rhobc(-ntor_opt:ntor_opt,0:mpol_opt),
41 6 nrz0_opt(2*(ntor_opt+1)),
42 7 delta_mn(-ntor_opt:ntor_opt,-mpol_opt:mpol_opt))
48 DO ik = 1, numsurf_sad
54 rbc(nb, mb) = rmn_sad(ik)
55 zbs(nb, mb) = -zmn_sad(ik)
58 rbc(nb, mb) = rmn_sad(ik)
59 zbs(nb, mb) = zmn_sad(ik)
64 rbc(nb, mb) = rmn_sad(ik)
65 zbs(nb, mb) = zmn_sad(ik)
70 IF (nopt_wsurf .eq. 0)
THEN
80 CALL convert_boundary(rbc, zbs, rhobc, mpol_opt, ntor_opt)
82 CALL unique_boundary(rbc_in, zbs_in, rhobc, mpol_opt,
83 1 ntor_opt, mpol_opt, ntor_opt, mpol_opt)
84 delta = sum((rbc - rbc_in)**2)/rbc(0,1)**2
85 1 + sum((zbs - zbs_in)**2)/zbs(0,1)**2
87 IF (delta.gt.1.e-8_dp .and. myid.eq.master)
88 1
WRITE(*,10) 100*(one-delta)
90 10
FORMAT(
' Input boundary representation was converted!',/,
91 1
' Reliability of conversion = ',f7.2,
'%')
93 DO nb = -ntor_opt, ntor_opt
94 IF (rbc(nb,0).ne.zero .or. zbs(nb,0).ne.zero)
THEN
95 nvariables = nvariables + 1
96 n_sad(nvariables) = nb
98 irm0_bdy = irm0_bdy + 1
99 nrz0_opt(irm0_bdy) = nb
100 xvariables(nvariables) = rbc(nb,0)
107 izm0_bdy = izm0_bdy + 1
108 nvariables = nvariables + 1
109 nrz0_opt(nvariables) = nb
110 xvariables(nvariables) = zbs(nb,0)
117 DO nb = -ntor_opt, ntor_opt
123 IF (rhobc(nb,mb) .ne. zero
124 1 .and. (mb .ne. 0 .or. nb .ge. 0))
THEN
125 nvariables = nvariables + 1
126 irho_bdy = irho_bdy + 1
127 nbrho_opt(irho_bdy) = nb
128 mbrho_opt(irho_bdy) = mb
129 xvariables(nvariables) = rhobc(nb,mb)
136 IF (numsurf_sad .gt. nsurf) stop
' NUMSURF_SAD > NSURF '
140 IF (nopt_wsurf.eq.1)
THEN
141 CALL convert_boundary_pg(rbc,zbs,delta_mn,mpol_opt,ntor_opt)
143 DO nb = -ntor_opt, ntor_opt
144 DO mb = -mpol_opt, mpol_opt
145 IF (delta_mn(nb,mb) .ne. zero
146 1 .and. .not.(nb .eq.0 .and. mb .eq. 0))
THEN
147 irho_bdy = irho_bdy + 1
148 nvariables = nvariables + 1
149 nbrho_opt(irho_bdy) = nb
150 mbrho_opt(irho_bdy) = mb
151 xvariables(nvariables) = delta_mn(nb,mb)
158 DEALLOCATE (rbc_in, zbs_in)
160 END SUBROUTINE init_saddle_wsurf