V3FIT
write_boozmn.f
1  SUBROUTINE write_boozmn (extension)
2  USE booz_params
3  USE booz_persistent, ONLY: xmb, xnb
4  USE read_wout_mod, ONLY: rmax_surf, rmin_surf, betaxis, aspect
5 #ifdef NETCDF
6  USE ezcdf
7 C-----------------------------------------------
8 C L O C A L P A R A M E T E R S
9 C-----------------------------------------------
10  USE read_boozer_mod, ONLY: vn_nfp, vn_ns, vn_aspect,
11  1 vn_rmax, vn_rmin, vn_betaxis, vn_mboz, vn_nboz, vn_mnboz,
12  2 vn_version, vn_iota, vn_pres, vn_beta, vn_phip, vn_phi,
13  3 vn_bvco, vn_buco, vn_ixm, vn_ixn, vn_bmnc, vn_rmnc,
14  4 vn_zmns, vn_pmns, vn_gmnc, vn_lasym, vn_bmns, vn_rmns,
15  5 vn_zmnc, vn_pmnc, vn_gmns, vn_jlist
16 #else
17  USE safe_open_mod
18 #endif
19 !-----------------------------------------------
20 ! D u m m y A r g u m e n t s
21 !-----------------------------------------------
22  CHARACTER(LEN=*) :: extension
23 !-----------------------------------------------
24 ! L o c a l P a r a m e t e r s
25 !-----------------------------------------------
26  CHARACTER(LEN=*), PARAMETER :: version =
27  1 "Boozer Transformation Code Version 2.0"
28 !-----------------------------------------------
29 #ifdef netcdf
30 C-----------------------------------------------
31 C L o c a l V a r i a b l e s
32 C-----------------------------------------------
33  INTEGER :: nbooz, ierr
34  CHARACTER(LEN=*), PARAMETER, DIMENSION(1) ::
35  1 r1dim = (/'radius'/), mn1dim = (/'mn_mode'/),
36  2 j1dim = (/'comput_surfs'/)
37  CHARACTER(LEN=*), DIMENSION(2), PARAMETER ::
38  1 r2dim = (/'mn_modes','pack_rad'/)
39 ! CRCook add vn_lrfp, vn_chip, vn_chi here
40  CHARACTER(LEN=*), PARAMETER :: vn_lrfp="lrfp_b", vn_chip="chip_b",
41  1 vn_chi="chi_b"
42 C-----------------------------------------------
43 ! Open cdf File
44  CALL cdf_open(nbooz,'boozmn_' // trim(extension) // '.nc',
45  1 'w', ierr)
46  IF (ierr .ne. 0) THEN
47  print *,' Error opening boozmn .nc file'
48  RETURN
49  END IF
50 
51 ! Define Variables
52 ! Scalars
53  CALL cdf_define(nbooz, vn_nfp, nfp)
54  CALL cdf_define(nbooz, vn_ns, ns)
55  CALL cdf_define(nbooz, vn_aspect, aspect)
56  CALL cdf_define(nbooz, vn_rmax, rmax_surf)
57  CALL cdf_define(nbooz, vn_rmin, rmin_surf)
58  CALL cdf_define(nbooz, vn_betaxis, betaxis)
59  CALL cdf_define(nbooz, vn_mboz, mboz)
60  CALL cdf_define(nbooz, vn_nboz, nboz)
61  CALL cdf_define(nbooz, vn_mnboz, mnboz)
62  CALL cdf_define(nbooz, vn_version, version)
63  CALL cdf_define(nbooz, vn_lasym, lasym_b)
64 ! CRCook
65  CALL cdf_define(nbooz, vn_lrfp, lrfp_b)
66  IF (lrfp_b) THEN
67  CALL cdf_define(nbooz, vn_chip, chip, dimname=r1dim)
68  CALL cdf_define(nbooz, vn_chi, chi, dimname=r1dim)
69  ENDIF
70 ! 1D Arrays
71  CALL cdf_define(nbooz, vn_iota, hiota, dimname=r1dim)
72  CALL cdf_define(nbooz, vn_pres, pres, dimname=r1dim)
73  CALL cdf_define(nbooz, vn_beta, beta_vol, dimname=r1dim)
74  CALL cdf_define(nbooz, vn_phip, phip, dimname=r1dim)
75  CALL cdf_define(nbooz, vn_phi, phi, dimname=r1dim)
76  CALL cdf_define(nbooz, vn_bvco, bvco, dimname=r1dim)
77  CALL cdf_define(nbooz, vn_buco, buco, dimname=r1dim)
78  CALL cdf_define(nbooz, vn_jlist, jlist, dimname=j1dim)
79  CALL cdf_define(nbooz, vn_ixm, nint(xmb), dimname=mn1dim)
80  CALL cdf_define(nbooz, vn_ixn, nint(xnb), dimname=mn1dim)
81 ! 2D Arrays
82  CALL cdf_define(nbooz, vn_bmnc, bmncb, dimname=r2dim)
83  CALL cdf_define(nbooz, vn_rmnc, rmncb, dimname=r2dim)
84  CALL cdf_define(nbooz, vn_zmns, zmnsb, dimname=r2dim)
85  CALL cdf_define(nbooz, vn_pmns, pmnsb, dimname=r2dim)
86  CALL cdf_define(nbooz, vn_gmnc, gmncb, dimname=r2dim)
87  IF (lasym_b) THEN
88  CALL cdf_define(nbooz, vn_bmns, bmnsb, dimname=r2dim)
89  CALL cdf_define(nbooz, vn_rmns, rmnsb, dimname=r2dim)
90  CALL cdf_define(nbooz, vn_zmnc, zmncb, dimname=r2dim)
91  CALL cdf_define(nbooz, vn_pmnc, pmncb, dimname=r2dim)
92  CALL cdf_define(nbooz, vn_gmns, gmnsb, dimname=r2dim)
93  ENDIF
94 
95 ! Write out scalars
96  CALL cdf_write(nbooz, vn_nfp, nfp)
97  CALL cdf_write(nbooz, vn_ns, ns)
98  CALL cdf_write(nbooz, vn_aspect, aspect)
99  CALL cdf_write(nbooz, vn_rmax, rmax_surf)
100  CALL cdf_write(nbooz, vn_rmin, rmin_surf)
101  CALL cdf_write(nbooz, vn_betaxis, betaxis)
102  CALL cdf_write(nbooz, vn_mboz, mboz)
103  CALL cdf_write(nbooz, vn_nboz, nboz)
104  CALL cdf_write(nbooz, vn_mnboz, mnboz)
105  CALL cdf_write(nbooz, vn_version, version)
106 
107 ! 1D arrays
108  hiota(1) = 0; pres(1) = 0; beta_vol(1) = 0
109  phip(1) = 0; phi(1) = 0; bvco(1) = 0; buco(1) = 0
110 ! CRCook 10/9/2012
111  chip(1) = 0; chi(1) = 0
112 
113  CALL cdf_write(nbooz, vn_iota, hiota)
114  CALL cdf_write(nbooz, vn_pres, pres)
115  CALL cdf_write(nbooz, vn_beta, beta_vol)
116  CALL cdf_write(nbooz, vn_phip, phip)
117  CALL cdf_write(nbooz, vn_phi, phi)
118 ! CRCook dump poloidal flux chi
119  IF (lrfp_b) THEN
120  CALL cdf_write(nbooz, vn_chip, chip)
121  CALL cdf_write(nbooz, vn_chi, chi)
122  ENDIF
123  CALL cdf_write(nbooz, vn_bvco, bvco)
124  CALL cdf_write(nbooz, vn_buco, buco)
125  CALL cdf_write(nbooz, vn_jlist, jlist)
126  CALL cdf_write(nbooz, vn_ixm, nint(xmb))
127  CALL cdf_write(nbooz, vn_ixn, nint(xnb))
128 
129 ! Write packed 2D arrays
130  CALL cdf_write(nbooz, vn_bmnc, bmncb)
131  CALL cdf_write(nbooz, vn_rmnc, rmncb)
132  CALL cdf_write(nbooz, vn_zmns, zmnsb)
133  CALL cdf_write(nbooz, vn_pmns, pmnsb)
134  CALL cdf_write(nbooz, vn_gmnc, gmncb)
135  CALL cdf_write(nbooz, vn_lasym, lasym_b)
136 ! CRCook
137  CALL cdf_write(nbooz, vn_lrfp, lrfp_b)
138  IF (lasym_b) THEN
139  CALL cdf_write(nbooz, vn_bmns, bmnsb)
140  CALL cdf_write(nbooz, vn_rmns, rmnsb)
141  CALL cdf_write(nbooz, vn_zmnc, zmncb)
142  CALL cdf_write(nbooz, vn_pmnc, pmncb)
143  CALL cdf_write(nbooz, vn_gmns, gmnsb)
144  ENDIF
145 
146 
147 ! Close cdf File
148  CALL cdf_close(nbooz, ierr)
149 
150 #else
151 C-----------------------------------------------
152 C L o c a l V a r i a b l e s
153 C-----------------------------------------------
154  INTEGER :: i, iunit, istat, js
155 C-----------------------------------------------
156  iunit = unit_booz
157  CALL safe_open (iunit, istat, 'boozmn.' // extension, 'replace',
158  1 'unformatted')
159  IF (istat .ne. 0) THEN
160  print *,' istat = ', istat
161  stop 'Error opening boozmn file in XBOOZ_XFORM!'
162  END IF
163 
164 !
165 ! Write out surface quantities needed by ballooning code
166 !
167  WRITE(iunit, iostat=istat, err=100)
168  1 nfp, ns, aspect, rmax_surf, rmin_surf, betaxis
169 
170  DO js = 2, ns
171  WRITE(iunit, iostat=istat, err=100) hiota(js), pres(js),
172  1 beta_vol(js), phip(js), phi(js), bvco(js), buco(js)
173  END DO
174 
175 ! SPH 070909: ADDED lasym to dump
176 ! CRCook 10/8/12: ADDED lrfp to dump
177  WRITE (iunit, iostat=istat, err=100) mboz, nboz, mnboz, jsize
178  WRITE (iunit, iostat=istat, err=100) version, lasym, lrfp_b
179 
180  WRITE (iunit, iostat=istat, err=100) nint(xnb(:mnboz)),
181  1 nint(xmb(:mnboz))
182 
183 !
184 ! Write packed (in radial coordinate) 2D arrays
185 !
186  DO i = 1, jsize
187  js = jlist(i)
188  IF (js.le.0 .or. js.gt.ns) cycle
189  WRITE (iunit, iostat=istat, err=100) js
190  WRITE (iunit, iostat=istat, err=100) bmncb(:mnboz,i),
191  1 rmncb(:mnboz,i), zmnsb(:mnboz,i), pmnsb(:mnboz,i),
192  2 gmncb(:mnboz,i)
193 !SPH070909: WRITE OUT ASYMMETRIC PARTS
194  IF (lasym) THEN
195  WRITE (iunit, iostat=istat, err=100) bmncb(:mnboz,i),
196  1 rmnsb(:mnboz,i), zmncb(:mnboz,i), pmncb(:mnboz,i),
197  2 gmnsb(:mnboz,i)
198  ENDIF
199  END DO
200 
201 
202  100 CONTINUE
203  IF (istat .gt. 0)
204  1 print *,' Error writing in subroutine write_boozmn:',
205  2 ' istat = ', istat
206 
207  CLOSE(iunit)
208 
209 #endif
210  END SUBROUTINE write_boozmn