74 CHARACTER (LEN=*),
PARAMETER ::
75 & vn_c_type =
'c_type',
77 & vn_l_name =
'l_name',
78 & vn_current =
'current',
85 & vn_ave_n_area =
'ave_n_area'
87 CHARACTER (LEN=64),
PRIVATE ::
114 SUBROUTINE bsc_cdf_define_coil(this,lunit,prefix)
120 TYPE (bsc_coil),
INTENT (in) :: this
122 CHARACTER (len=*) :: prefix
131 CHARACTER(len=32) :: prefix_use
137 prefix_use = trim(adjustl(prefix))
140 CALL bsc_cdf_defvn_coil(prefix_use)
143 CALL cdf_define(lunit, trim(vn_c_type_use), this%c_type)
144 CALL cdf_define(lunit, trim(vn_s_name_use), this%s_name)
145 CALL cdf_define(lunit, trim(vn_l_name_use), this%l_name)
146 CALL cdf_define(lunit, trim(vn_current_use), this%current)
147 CALL cdf_define(lunit, trim(vn_raux_use), this%raux)
151 SELECT CASE (this%c_type)
153 CASE (
'fil_loop',
'floop')
154 IF (
ASSOCIATED(this%xnod))
THEN
155 CALL cdf_define(lunit, trim(vn_xnod_use), this%xnod)
158 CASE (
'fil_circ',
'fcirc')
159 CALL cdf_define(lunit, trim(vn_rcirc_use), this%rcirc)
160 CALL cdf_define(lunit, trim(vn_xcent_use), this%xcent(1:3))
161 CALL cdf_define(lunit, trim(vn_enhat_use), this%enhat(1:3))
164 IF (
ASSOCIATED(this%xnod))
THEN
165 CALL cdf_define(lunit, trim(vn_xnod_use), this%xnod)
167 CALL cdf_define(lunit, trim(vn_ave_n_area_use),
172 END SUBROUTINE bsc_cdf_define_coil
177 SUBROUTINE bsc_cdf_define_coilcoll(this,lunit)
185 TYPE (bsc_coilcoll),
INTENT (in) :: this
194 INTEGER :: i, n, ncoild
196 CHARACTER(len=40) nowname
197 CHARACTER(len=40) :: prefix
204 IF (this%s_name .eq.
' ')
THEN
205 WRITE(*,*)
'this%s_name = one blank. bsc_cdf_define_coilcoll'
206 WRITE(*,*)
' is returning'
215 prefix = this%coils(i)%s_name
216 CALL bsc_cdf_define_coil(this%coils(i),lunit,prefix)
219 END SUBROUTINE bsc_cdf_define_coilcoll
227 SUBROUTINE bsc_cdf_write_coil(this,lunit,prefix)
233 TYPE (bsc_coil),
INTENT (in) :: this
235 CHARACTER (len=*) :: prefix
244 CHARACTER(len=32) :: prefix_use
250 prefix_use = trim(adjustl(prefix))
253 CALL bsc_cdf_defvn_coil(prefix_use)
256 CALL cdf_write(lunit, trim(vn_c_type_use), this%c_type)
257 CALL cdf_write(lunit, trim(vn_s_name_use), this%s_name)
258 CALL cdf_write(lunit, trim(vn_l_name_use), this%l_name)
259 CALL cdf_write(lunit, trim(vn_current_use), this%current)
260 CALL cdf_write(lunit, trim(vn_raux_use), this%raux)
264 SELECT CASE (this%c_type)
266 CASE (
'fil_loop',
'floop')
267 IF (
ASSOCIATED(this%xnod))
THEN
268 CALL cdf_write(lunit, trim(vn_xnod_use), this%xnod)
271 CASE (
'fil_circ',
'fcirc')
272 CALL cdf_write(lunit, trim(vn_rcirc_use), this%rcirc)
273 CALL cdf_write(lunit, trim(vn_xcent_use), this%xcent(1:3))
274 CALL cdf_write(lunit, trim(vn_enhat_use), this%enhat(1:3))
277 IF (
ASSOCIATED(this%xnod))
THEN
278 CALL cdf_write(lunit, trim(vn_xnod_use), this%xnod)
280 CALL cdf_write(lunit, trim(vn_ave_n_area_use),
285 END SUBROUTINE bsc_cdf_write_coil
290 SUBROUTINE bsc_cdf_write_coilcoll(this,lunit)
298 TYPE (bsc_coilcoll),
INTENT (in) :: this
307 INTEGER :: i, n, ncoild
309 CHARACTER(LEN=40) nowname
310 CHARACTER (len=40) :: prefix
317 IF (this%s_name .eq.
' ')
THEN
318 WRITE(*,*)
'this%s_name = one blank. bsc_cdf_write_coilcoll'
319 WRITE(*,*)
' is returning'
328 prefix = this%coils(i)%s_name
329 CALL bsc_cdf_write_coil(this%coils(i),lunit,prefix)
332 END SUBROUTINE bsc_cdf_write_coilcoll
340 SUBROUTINE bsc_cdf_read_coil(this,iou,prefix)
347 TYPE (bsc_coil),
INTENT (inout) :: this
348 INTEGER,
INTENT (in) :: iou
349 CHARACTER (len=*),
INTENT (in),
OPTIONAL :: prefix
358 CHARACTER(len=*),
PARAMETER :: sub_name = &
359 &
'bsc_cdf_read_coil: '
360 CHARACTER(len=32) :: prefix_use
361 INTEGER,
DIMENSION(3) :: dimlens
364 CHARACTER (len=8) :: c_type
365 CHARACTER (len=30) :: s_name
366 CHARACTER (len=80) :: l_name
367 REAL(rprec) :: eps_sq
368 REAL(rprec) :: current
371 REAL(rprec) :: ave_n_area
372 REAL(rprec),
DIMENSION(3) :: xcent, enhat
373 REAL(rprec),
DIMENSION(:,:),
ALLOCATABLE :: xnod
380 IF (
PRESENT(prefix))
THEN
381 prefix_use = trim(adjustl(prefix))
387 CALL bsc_cdf_defvn_coil(prefix_use)
393 CALL cdf_read(iou, trim(vn_c_type_use), c_type)
394 CALL cdf_read(iou, trim(vn_s_name_use),s_name)
395 CALL cdf_read(iou, trim(vn_l_name_use),l_name)
396 CALL cdf_read(iou, trim(vn_current_use),current)
397 CALL cdf_read(iou, trim(vn_raux_use),raux)
399 SELECT CASE (trim(c_type))
401 CASE (
'fil_loop',
'floop')
402 CALL cdf_inquire(iou, trim(vn_xnod_use),dimlens)
403 ALLOCATE(xnod(dimlens(1),dimlens(2)),stat=ier1)
404 CALL assert_eq(0,ier1,sub_name //
'alloc xnod')
405 CALL assert_eq(3,dimlens(1),sub_name //
'bad xnod dim')
406 CALL cdf_read(iou, trim(vn_xnod_use), xnod)
408 IF (dimlens(2) .ge. 4)
THEN
414 & xnod(1:3,1:n2),raux=raux)
416 CASE (
'fil_circ',
'fcirc')
417 CALL cdf_read(iou, trim(vn_rcirc_use),rcirc)
418 CALL cdf_read(iou, trim(vn_xcent_use),xcent)
419 CALL cdf_read(iou, trim(vn_enhat_use),enhat)
421 & rcirc = rcirc,xcent = xcent,enhat = enhat,raux = raux)
424 CALL cdf_inquire(iou, trim(vn_xnod_use),dimlens)
425 ALLOCATE(xnod(dimlens(1),dimlens(2)),stat=ier1)
426 CALL assert_eq(0,ier1,sub_name //
'alloc xnod')
427 CALL cdf_read(iou, trim(vn_xnod_use), xnod)
428 CALL cdf_read(iou, trim(vn_ave_n_area_use),ave_n_area)
430 & xnod,raux = raux,anturns = one,xsarea = ave_n_area)
435 IF (
ALLOCATED(xnod))
THEN
436 DEALLOCATE(xnod,stat=ier1)
437 CALL assert_eq(0,ier1,sub_name //
'dealloc xnod')
442 END SUBROUTINE bsc_cdf_read_coil
450 SUBROUTINE bsc_cdf_defvn_coil(prefix_use)
458 CHARACTER (len=*),
INTENT (in) :: prefix_use
466 CHARACTER(len=*),
PARAMETER :: sub_name = &
467 &
'bsc_cdf_defvn_coil: '
474 vn_c_type_use = bsc_cdf_mknam(prefix_use,vn_c_type)
475 vn_s_name_use = bsc_cdf_mknam(prefix_use,vn_s_name)
476 vn_l_name_use = bsc_cdf_mknam(prefix_use,vn_l_name)
477 vn_current_use = bsc_cdf_mknam(prefix_use,vn_current)
478 vn_raux_use = bsc_cdf_mknam(prefix_use,vn_raux)
479 vn_xnod_use = bsc_cdf_mknam(prefix_use,vn_xnod)
480 vn_rcirc_use = bsc_cdf_mknam(prefix_use,vn_rcirc)
481 vn_xcent_use = bsc_cdf_mknam(prefix_use,vn_xcent)
482 vn_enhat_use = bsc_cdf_mknam(prefix_use,vn_enhat)
483 vn_ave_n_area_use = bsc_cdf_mknam(prefix_use,vn_ave_n_area)
487 END SUBROUTINE bsc_cdf_defvn_coil
492 FUNCTION bsc_cdf_mknam(c1,c2)
498 CHARACTER(LEN=40) bsc_cdf_mknam
503 CHARACTER(LEN=*),
INTENT (in) :: c1,c2
508 IF (len_trim(c1) .eq. 0)
THEN
509 bsc_cdf_mknam = trim(c2)
511 bsc_cdf_mknam = adjustl(trim(c1) //
'_' // trim(c2))
516 END FUNCTION bsc_cdf_mknam