65 USE stel_kinds,
only : rprec, iprec, cprec
66 USE stel_constants,
only : pi, twopi, one, zero
86 PRIVATE rprec, iprec, cprec, pi, twopi, one, zero
92 CHARACTER (LEN=*),
PRIVATE,
PARAMETER ::
93 'diagnostic_desc_d_type',
94 'diagnostic_desc_s_name',
95 & vn_l_name =
'diagnostic_desc_l_name',
96 & vn_units =
'diagnostic_desc_units',
97 & vn_sigma_default =
'diagnostic_desc_sigma_default'
99 CHARACTER (LEN=64),
PRIVATE ::
106 CHARACTER (LEN=*),
PRIVATE,
PARAMETER ::
107 'diagnostic_data_desc_s_name'
109 CHARACTER (LEN=64),
PRIVATE ::
115 INTEGER,
PARAMETER,
PRIVATE :: type_len=10
116 INTEGER,
PARAMETER,
PRIVATE :: sn_len=30
117 INTEGER,
PARAMETER,
PRIVATE :: ln_len=80
118 INTEGER,
PARAMETER,
PRIVATE :: units_len=30
131 MODULE PROCEDURE diagnostic_cdf_define_desc
138 MODULE PROCEDURE diagnostic_cdf_write_desc
145 MODULE PROCEDURE diagnostic_cdf_read_desc
156 SUBROUTINE diagnostic_cdf_define_desc(this,iou,prefix)
162 TYPE (diagnostic_desc),
INTENT (in) :: this
163 INTEGER,
INTENT(in) :: iou
164 CHARACTER (len=*),
INTENT(in),
OPTIONAL :: prefix
173 CHARACTER(len=*),
PARAMETER :: sub_name = &
174 &
'diagnostic_cdf_define_desc: '
175 CHARACTER(len=32) :: prefix_use
182 IF (
PRESENT(prefix))
THEN
183 prefix_use = trim(adjustl(prefix))
189 CALL diagnostic_cdf_defvn_desc(prefix_use)
192 CALL cdf_define(iou, trim(vn_d_type_use), this % d_type)
193 CALL cdf_define(iou, trim(vn_s_name_use), this % s_name)
194 CALL cdf_define(iou, trim(vn_l_name_use), this % l_name)
195 CALL cdf_define(iou, trim(vn_units_use), this % units)
196 CALL cdf_define(iou, trim(vn_sigma_default_use),
197 & this % sigma_default)
201 SELECT CASE (this % d_type)
207 CALL err_fatal(sub_name //
'unrecognized d_type: ',
208 & char = this % d_type)
214 END SUBROUTINE diagnostic_cdf_define_desc
222 SUBROUTINE diagnostic_cdf_write_desc(this,iou,prefix)
228 TYPE (diagnostic_desc),
INTENT (in) :: this
229 INTEGER,
INTENT (in) :: iou
230 CHARACTER (len=*),
INTENT (in),
OPTIONAL :: prefix
239 CHARACTER(len=*),
PARAMETER :: sub_name = &
240 &
'diagnostic_cdf_write_desc: '
241 CHARACTER(len=32) :: prefix_use
247 IF (
PRESENT(prefix))
THEN
248 prefix_use = trim(adjustl(prefix))
254 CALL diagnostic_cdf_defvn_desc(prefix_use)
257 CALL cdf_write(iou, trim(vn_d_type_use), this % d_type)
258 CALL cdf_write(iou, trim(vn_s_name_use), this % s_name)
259 CALL cdf_write(iou, trim(vn_l_name_use), this % l_name)
260 CALL cdf_write(iou, trim(vn_units_use), this % units)
261 CALL cdf_write(iou, trim(vn_sigma_default_use),
262 & this % sigma_default)
266 SELECT CASE (this % d_type)
272 CALL err_fatal(sub_name //
'unrecognized d_type: ',
273 & char = this % d_type)
279 END SUBROUTINE diagnostic_cdf_write_desc
287 SUBROUTINE diagnostic_cdf_read_desc(this,iou,prefix)
293 TYPE (diagnostic_desc),
INTENT (inout) :: this
294 INTEGER,
INTENT (in) :: iou
295 CHARACTER (len=*),
INTENT (in),
OPTIONAL :: prefix
304 CHARACTER(len=*),
PARAMETER :: sub_name = &
305 &
'diagnostic_cdf_read_desc: '
306 CHARACTER(len=32) :: prefix_use
307 INTEGER,
DIMENSION(3) :: dimlens
309 CHARACTER (len=type_len) :: d_type
310 CHARACTER (len=sn_len) :: s_name
311 CHARACTER (len=ln_len) :: l_name
312 CHARACTER (len=units_len) :: units
313 REAL(rprec) :: sigma_default
314 TYPE (mddc_desc) :: mddc
321 IF (
PRESENT(prefix))
THEN
322 prefix_use = trim(adjustl(prefix))
328 CALL diagnostic_cdf_defvn_desc(prefix_use)
332 CALL cdf_read(iou, trim(vn_d_type_use), d_type)
333 CALL cdf_read(iou, trim(vn_s_name_use), s_name)
334 CALL cdf_read(iou, trim(vn_l_name_use), l_name)
335 CALL cdf_read(iou, trim(vn_units_use), units)
336 CALL cdf_read(iou, trim(vn_sigma_default_use),
347 & units,sigma_default,mddc)
350 CALL err_fatal(sub_name //
'unrecognized d_type: ',
362 END SUBROUTINE diagnostic_cdf_read_desc
370 SUBROUTINE diagnostic_cdf_defvn_desc(prefix_use)
378 CHARACTER (len=*),
INTENT (in) :: prefix_use
386 CHARACTER(len=*),
PARAMETER :: sub_name = &
387 &
'diagnostic_cdf_defvn_desc: '
394 vn_d_type_use = diagnostic_cdf_mknam(prefix_use,vn_d_type)
395 vn_s_name_use = diagnostic_cdf_mknam(prefix_use,vn_s_name)
396 vn_l_name_use = diagnostic_cdf_mknam(prefix_use,vn_l_name)
397 vn_units_use = diagnostic_cdf_mknam(prefix_use,vn_units)
398 vn_sigma_default_use = diagnostic_cdf_mknam(prefix_use,
403 END SUBROUTINE diagnostic_cdf_defvn_desc
408 FUNCTION diagnostic_cdf_mknam(c1,c2)
414 CHARACTER(LEN=64) diagnostic_cdf_mknam
419 CHARACTER(LEN=*),
INTENT (in) :: c1,c2
424 IF (len_trim(c1) .eq. 0)
THEN
425 diagnostic_cdf_mknam = trim(c2)
427 diagnostic_cdf_mknam = adjustl(trim(c1) //
'_' // trim(c2))
432 END FUNCTION diagnostic_cdf_mknam
456 END MODULE diagnostic_cdf