V3FIT
read_wout_booz.f
1  SUBROUTINE read_wout_booz(extension, iread, ierr)
2  USE read_wout_mod
3  USE booz_params, mpol_b => mpol, nfp_b => nfp, ns_b => ns,
4  1 ntor_b => ntor, mnmax_b => mnmax, phip_b => phip,
5  2 mpol_nyq_b => mpol_nyq, ntor_nyq_b => ntor_nyq,
6  3 mnmax_nyq_b => mnmax_nyq,
7  4 pres_b => pres, beta_b => beta_vol, phi_b => phi,
8  5 buco_b => buco, bvco_b => bvco,
9  6 bsubumnc_b => bsubumnc, bsubvmnc_b => bsubvmnc,
10  6 bsubumns_b => bsubumns, bsubvmns_b => bsubvmns
11  USE booz_persistent, rmnc_b => rmnc, zmns_b => zmns,
12  1 lmns_b => lmns, rmns_b => rmns, zmnc_b => zmnc,
13  2 lmnc_b => lmnc,
14  3 xm_b => xm, xn_b => xn, xm_nyq_b => xm_nyq,
15  4 xn_nyq_b => xn_nyq
16  IMPLICIT NONE
17 C-----------------------------------------------
18 C D u m m y A r g u m e n t s
19 C-----------------------------------------------
20  INTEGER :: ierr, iread
21  CHARACTER(LEN=*) :: extension
22 C-----------------------------------------------
23  CALL read_wout_file(extension, ierr)
24 
25  IF (ierr .ne. 0) THEN
26  print *,' ierr = ', ierr,
27  1 ' error in read_wout_file called from xbooz_xform'
28  END IF
29  IF (ierr_vmec.ne.0 .or. ierr.ne.0) GOTO 1000
30 
31 !
32 ! Load booz_params module from wout file module
33 !
34  mpol_b = mpol; mpol_nyq_b = mnyq
35  mpol1 = mpol - 1
36  ntor_b = ntor; ntor_nyq_b = nnyq
37  mnmax_b= mnmax; mnmax_nyq_b = mnmax_nyq
38  nfp_b = nfp
39  ns_b = ns
40  lasym_b= lasym
41 ! CRCook 10/8/12 now read in LRFP from wout file
42  lrfp_b = lrfp
43 
44 !
45 ! COMPUTE ACTUAL NO. THETA, PHI POINTS FOR INTEGRATIONS
46 ! NEEDED FOR DYNAMIC MEMORY ALLOCATION
47 !
48  mboz = max(6*mpol, 2, mboz)
49  nboz = max(2*ntor-1, 0, nboz)
50  nu_boz = 2*(2*mboz+1) !CHANGED THIS FROM 2*(3*mboz+1)
51  nv_boz = 2*(2*nboz+1) !CHANGED THIS FROM 2*(2*nboz+1)
52  IF (nboz .eq. 0) nv_boz = 1
53 ! nu_boz = nu_boz + MOD(nu_boz,2) !nu_boz, nv_boz MUST be even
54 ! nv_boz = nv_boz + MOD(nv_boz,2)
55  nunv = nu_boz*nv_boz
56  mnboz = nboz+1 + (mboz-1)*(1+2*nboz)
57  nu2_b = nu_boz/2+1 !pi
58 
59 !
60 ! ALLOCATE ARRAYS FIRST TIME THRU AND THEN STORE INPUT DATA IN PERSISTENT ARRAYS
61 !
62  CALL allocate_boozer (iread)
63 
64  xm_b(:mnmax) = xm(:mnmax)
65  xn_b(:mnmax) = xn(:mnmax)
66  xm_nyq_b(:mnmax_nyq) = xm_nyq(:mnmax_nyq)
67  xn_nyq_b(:mnmax_nyq) = xn_nyq(:mnmax_nyq)
68 
69  rmnc_b(:mnmax,:ns) = rmnc(:mnmax,:ns)
70  zmns_b(:mnmax,:ns) = zmns(:mnmax,:ns)
71  lmns_b(:mnmax,:ns) = lmns(:mnmax,:ns)
72 
73  IF (lasym_b) THEN
74  rmns_b(:mnmax,:ns) = rmns(:mnmax,:ns)
75  zmnc_b(:mnmax,:ns) = zmnc(:mnmax,:ns)
76  lmnc_b(:mnmax,:ns) = lmnc(:mnmax,:ns)
77  ENDIF
78 
79  bsubumnc_b(:mnmax_nyq,:ns) = bsubumnc(:mnmax_nyq,:ns)
80  bsubvmnc_b(:mnmax_nyq,:ns) = bsubvmnc(:mnmax_nyq,:ns)
81  bmodmnc(:mnmax_nyq,:ns) = bmnc(:mnmax_nyq,:ns)
82 
83  IF (lasym_b) THEN
84  bsubumns_b(:mnmax_nyq,:ns) = bsubumns(:mnmax_nyq,:ns)
85  bsubvmns_b(:mnmax_nyq,:ns) = bsubvmns(:mnmax_nyq,:ns)
86  bmodmns(:mnmax_nyq,:ns) = bmns(:mnmax_nyq,:ns)
87  END IF
88 
89  hiota(2:ns) = iotas(2:ns)
90  phip_b(2:ns) = phip(2:ns)
91  pres_b(2:ns) = pres(2:ns)
92  beta_b(2:ns) = beta_vol(2:ns)
93  phi_b(2:ns) = phi(2:ns)
94  buco_b(2:ns) = buco(2:ns)
95  bvco_b(2:ns) = bvco(2:ns)
96 
97 !
98 ! Deallocate memory in read_wout module
99 !
100  1000 CALL read_wout_deallocate
101  IF (ierr .eq. 0) THEN
102  ierr = -ierr_vmec
103  ELSE
104  print *,' ierr = ', ierr, ' writing in READ_WOUT_BOOZ'
105  END IF
106 
107  END SUBROUTINE read_wout_booz