2
!!======================================================================
3
!! *** PROGRAM cdfconvert ***
4
!!=====================================================================
5
!! ** Purpose : Convert a set of dimgfile (Clipper like)
6
!! to a set of CDF files (Drakkar like )
8
!! ** Method : Read tag then open the respective T S 2D U V files to create
9
!! gridT, gridU and gridV files.
10
!! Requires mesh_hgr.nc and mesh_zgr.nc files
12
!! History : 2.1 : 01/2007 : J.M. Molines : Original code
13
!! 3.0 : 05/2011 : J.M. Molines : Doctor norm + Lic.
14
!!----------------------------------------------------------------------
15
!!----------------------------------------------------------------------
16
!! routines : description
17
!! isdirect : integer function which return the record length
18
!! of the file in argument if a dimgfile, 0 else.
20
!!----------------------------------------------------------------------
23
!!----------------------------------------------------------------------
24
!! CDFTOOLS_3.0 , MEOM 2011
26
!! Copyright (c) 2011, J.-M. Molines
27
!! Software governed by the CeCILL licence (Licence/CDFTOOLSCeCILL.txt)
28
!!----------------------------------------------------------------------
31
INTEGER(KIND=4) :: ji, jj, jk ! dummy loop index
32
INTEGER(KIND=4) :: jt, jvar ! dummy loop index
33
INTEGER(KIND=4) :: narg, iargc ! command line
34
INTEGER(KIND=4) :: nvar ! number of output variables
35
INTEGER(KIND=4) :: npiglo, npjglo ! size of the domain
36
INTEGER(KIND=4) :: npk, npt ! size of the domain
37
INTEGER(KIND=4) :: irecl, ii, ndim ! dimg stuff variables
38
INTEGER(KIND=4) :: numu=10 ! logical id for input dimg file
39
INTEGER(KIND=4) :: numv=11 ! " "
40
INTEGER(KIND=4) :: numt=12 ! " "
41
INTEGER(KIND=4) :: nums=14 ! " "
42
INTEGER(KIND=4) :: num2d=15 ! " "
43
INTEGER(KIND=4) :: numssh=16 ! " "
44
INTEGER(KIND=4) :: numuu=17 ! " "
45
INTEGER(KIND=4) :: numvv=18 ! " "
46
INTEGER(KIND=4) :: ncout ! ncid of output netcdf file
47
INTEGER(KIND=4) :: ierr ! error status
48
INTEGER(KIND=4), DIMENSION(:), ALLOCATABLE :: ipk, id_varout ! outpur variables levels and id's
50
REAL(KIND=4) :: x1, y1 ! dimg header ( SW corner)
51
REAL(KIND=4) :: dx, dy ! dimg header ( x,y step)
52
REAL(KIND=4) :: zspval ! dimg header ( special value)
53
REAL(KIND=4), DIMENSION(:,:), ALLOCATABLE :: v2d, glam, gphi ! working arrays
54
REAL(KIND=4), DIMENSION(:), ALLOCATABLE :: zdep ! depth
55
REAL(KIND=4), DIMENSION(:), ALLOCATABLE :: tim ! time counter
57
CHARACTER(LEN=256) :: cf_ufil ! output gridU file
58
CHARACTER(LEN=256) :: cf_vfil ! output gridV file
59
CHARACTER(LEN=256) :: cf_tfil ! output gridT file
60
CHARACTER(LEN=256) :: cf_bsfil ! output BSF file
61
CHARACTER(LEN=256) :: cf_dimgu ! input dimg U file
62
CHARACTER(LEN=256) :: cf_dimgv ! input dimg V file
63
CHARACTER(LEN=256) :: cf_dimgt ! input dimg T file
64
CHARACTER(LEN=256) :: cf_dimgs ! input dimg S file
65
CHARACTER(LEN=256) :: cf_dimg2d ! input dimg 2D file
66
CHARACTER(LEN=256) :: cf_dimguu ! input dimg U2 file
67
CHARACTER(LEN=256) :: cf_dimgvv ! input dimg V2 file
68
CHARACTER(LEN=256) :: cf_dimgssh ! input dimg SSH file
69
CHARACTER(LEN=256) :: ctag ! time tag
70
CHARACTER(LEN=256) :: confcase ! config-case
71
CHARACTER(LEN=80 ) :: cheader ! comment in header of dimg file
72
CHARACTER(LEN=4 ) :: cver ! dimg version
74
TYPE(variable), DIMENSION(:), ALLOCATABLE :: stypvar ! output data structure
76
LOGICAL :: lexist ! flag for existing file
77
LOGICAL :: lchk = .FALSE. ! flag for missing files
78
!!----------------------------------------------------------------------
83
PRINT *,' usage : cdfconvert CLIPPER_tag CLIPPER_Confcase'
86
PRINT *,' Convert dimg files (CLIPPER like) to netcdf (DRAKKAR like).'
88
PRINT *,' ARGUMENTS :'
89
PRINT *,' CLIPPER_tag : a string such as y2000m01d15 for time identification.'
90
PRINT *,' CLIPPER_confcase : CONFIG-CASE of the files to be converted (eg ATL6-V6)'
92
PRINT *,' REQUIRED FILES :'
93
PRINT *,' ',TRIM(cn_fhgr),' and ', TRIM(cn_fzgr)
96
PRINT *,' netcdf file : gridT, gridU, gridV files'
97
PRINT *,' variables : same as in standard NEMO output'
100
PRINT *,' cdfflxconv, cdfsstconv, cdfstrconv'
105
CALL getarg (1, ctag)
106
CALL getarg (2, confcase)
108
lchk = lchk .OR. chkfile( cn_fhgr )
109
lchk = lchk .OR. chkfile (cn_fzgr )
111
!! Build dimg file names
112
cf_dimgu = TRIM(confcase)//'_U_' //TRIM(ctag)//'.dimg' ; lchk = lchk .OR. chkfile(cf_dimgu )
113
cf_dimgv = TRIM(confcase)//'_V_' //TRIM(ctag)//'.dimg' ; lchk = lchk .OR. chkfile(cf_dimgv )
114
cf_dimgt = TRIM(confcase)//'_T_' //TRIM(ctag)//'.dimg' ; lchk = lchk .OR. chkfile(cf_dimgt )
115
cf_dimgs = TRIM(confcase)//'_S_' //TRIM(ctag)//'.dimg' ; lchk = lchk .OR. chkfile(cf_dimgs )
116
cf_dimg2d = TRIM(confcase)//'_2D_' //TRIM(ctag)//'.dimg' ; lchk = lchk .OR. chkfile(cf_dimg2d)
117
IF ( lchk ) STOP ! missing file
119
cf_dimgssh = TRIM(confcase)//'_SSH_'//TRIM(ctag)//'.dimg'
120
cf_dimguu = TRIM(confcase)//'_UU_' //TRIM(ctag)//'.dimg'
121
cf_dimgvv = TRIM(confcase)//'_VV_' //TRIM(ctag)//'.dimg'
123
cf_ufil = TRIM(confcase)//'_' //TRIM(ctag)//'_gridU.nc'
124
cf_vfil = TRIM(confcase)//'_' //TRIM(ctag)//'_gridV.nc'
125
cf_tfil = TRIM(confcase)//'_' //TRIM(ctag)//'_gridT.nc'
126
cf_bsfil = TRIM(confcase)//'_' //TRIM(ctag)//'_PSI.nc'
128
! open (and check ?? if they exists )
129
irecl=isdirect(cf_dimgu ) ; OPEN( numu, FILE=cf_dimgu, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
130
irecl=isdirect(cf_dimgv ) ; OPEN( numv, FILE=cf_dimgv, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
131
irecl=isdirect(cf_dimgt ) ; OPEN( numt, FILE=cf_dimgt, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
132
irecl=isdirect(cf_dimgs ) ; OPEN( nums, FILE=cf_dimgs, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
133
irecl=isdirect(cf_dimg2d) ; OPEN( num2d, FILE=cf_dimg2d, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
135
READ(numt,REC=1) cver, cheader, ii, npiglo, npjglo, npk, npt
137
ALLOCATE (v2d(npiglo, npjglo), glam(npiglo,npjglo), gphi(npiglo,npjglo), zdep(npk), tim(npt) )
139
READ(numt,REC=1) cver, cheader, ii, npiglo, npjglo, npk, npt, ndim, &
140
& x1,y1,dx,dy,zspval, &
141
& ( zdep(jk),jk=1,npk), &
144
! transform Clipper days to drakkar seconds ...
150
! Build gridT file with votemper, vosaline, sossheig, ... fluxes ...
151
INQUIRE(FILE=cf_dimgssh, EXIST=lexist)
153
irecl = isdirect(cf_dimgssh)
154
OPEN( numssh,FILE=cf_dimgssh, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
160
ALLOCATE ( stypvar(nvar), ipk(nvar), id_varout(nvar) )
163
stypvar(jvar)%cname = cn_votemper
164
stypvar(jvar)%cunits = 'C'
165
stypvar(jvar)%rmissing_value = 0.
166
stypvar(jvar)%valid_min = -2.
167
stypvar(jvar)%valid_max = 40.
168
stypvar(jvar)%clong_name = 'Potential Temperature'
169
stypvar(jvar)%cshort_name = cn_votemper
170
stypvar(jvar)%conline_operation = 'N/A'
171
stypvar(jvar)%caxis = 'TZYX'
175
stypvar(jvar)%cname = cn_vosaline
176
stypvar(jvar)%cunits = 'PSU'
177
stypvar(jvar)%rmissing_value = 0.
178
stypvar(jvar)%valid_min = 0.
179
stypvar(jvar)%valid_max = 45.
180
stypvar(jvar)%clong_name = 'Salinity'
181
stypvar(jvar)%cshort_name = cn_vosaline
182
stypvar(jvar)%conline_operation = 'N/A'
183
stypvar(jvar)%caxis = 'TZYX'
188
stypvar(jvar)%cname = cn_sossheig
189
stypvar(jvar)%cunits = 'm'
190
stypvar(jvar)%rmissing_value = 0.
191
stypvar(jvar)%valid_min = -10.
192
stypvar(jvar)%valid_max = 10.
193
stypvar(jvar)%clong_name = 'Sea_Surface_height'
194
stypvar(jvar)%cshort_name = cn_sossheig
195
stypvar(jvar)%conline_operation = 'N/A'
196
stypvar(jvar)%caxis = 'TYX'
201
stypvar(jvar)%cname = cn_somxl010 ! rec 12 of dimg file 2D
202
stypvar(jvar)%cunits = 'm'
203
stypvar(jvar)%rmissing_value = 0.
204
stypvar(jvar)%valid_min = 0.
205
stypvar(jvar)%valid_max = 7000.
206
stypvar(jvar)%clong_name = 'Mixed_Layer_Depth_on_0.01_rho_crit'
207
stypvar(jvar)%cshort_name = cn_somxl010
208
stypvar(jvar)%conline_operation = 'N/A'
209
stypvar(jvar)%caxis = 'TYX'
213
stypvar(jvar)%cname = 'sohefldo' ! rec 4 of dimg file 2D
214
stypvar(jvar)%cunits = 'W/m2'
215
stypvar(jvar)%rmissing_value = 0.
216
stypvar(jvar)%valid_min = -1000.
217
stypvar(jvar)%valid_max = 1000.
218
stypvar(jvar)%clong_name = 'Net_Downward_Heat_Flux'
219
stypvar(jvar)%cshort_name = 'sohefldo'
220
stypvar(jvar)%conline_operation = 'N/A'
221
stypvar(jvar)%caxis = 'TYX'
225
stypvar(jvar)%cname = cn_soshfldo ! rec 8 of dimg file 2D (qsr)
226
stypvar(jvar)%cunits = 'W/m2'
227
stypvar(jvar)%rmissing_value = 0.
228
stypvar(jvar)%valid_min = -1000.
229
stypvar(jvar)%valid_max = 1000.
230
stypvar(jvar)%clong_name = 'Short_Wave_Radiation'
231
stypvar(jvar)%cshort_name = cn_soshfldo
232
stypvar(jvar)%conline_operation = 'N/A'
233
stypvar(jvar)%caxis = 'TYX'
237
stypvar(jvar)%cname = cn_sowaflup ! rec 5 of dimg file 2D (emp)
238
stypvar(jvar)%cunits = 'kg/m2/s' ! conversion required from CLIPPER /86400.
239
stypvar(jvar)%rmissing_value = 0.
240
stypvar(jvar)%valid_min = -1000.
241
stypvar(jvar)%valid_max = 1000.
242
stypvar(jvar)%clong_name = 'Net_Upward_Water_Flux'
243
stypvar(jvar)%cshort_name = cn_sowaflup
244
stypvar(jvar)%conline_operation = 'N/A'
245
stypvar(jvar)%caxis = 'TYX'
249
stypvar(jvar)%cname = 'sowafldp' ! rec 10 of dimg file 2D (erp)
250
stypvar(jvar)%cunits = 'kg/m2/s' ! conversion required from CLIPPER /jvar.
251
stypvar(jvar)%rmissing_value = 0.
252
stypvar(jvar)%valid_min = -1000.
253
stypvar(jvar)%valid_max = 1000.
254
stypvar(jvar)%clong_name = 'Surface_Water_Flux:Damping'
255
stypvar(jvar)%cshort_name = 'sowafldp'
256
stypvar(jvar)%conline_operation = 'N/A'
257
stypvar(jvar)%caxis = 'TYX'
261
stypvar(jvar)%cname = cn_soicecov ! rec 13 of dimg file 2D (erp)
262
stypvar(jvar)%cunits = '%'
263
stypvar(jvar)%rmissing_value = 0.
264
stypvar(jvar)%valid_min = 0.
265
stypvar(jvar)%valid_max = 1.
266
stypvar(jvar)%clong_name = 'Ice Cover'
267
stypvar(jvar)%cshort_name = cn_soicecov
268
stypvar(jvar)%conline_operation = 'N/A'
269
stypvar(jvar)%caxis = 'TYX'
273
stypvar(jvar)%cname = 'sohefldp' ! rec 9 of dimg file 2D (erp)
274
stypvar(jvar)%cunits = 'W/m2'
275
stypvar(jvar)%rmissing_value = 0.
276
stypvar(jvar)%valid_min = -10.
277
stypvar(jvar)%valid_max = 10.
278
stypvar(jvar)%clong_name = 'Surface Heat Flux: Damping'
279
stypvar(jvar)%cshort_name = 'sohefldp'
280
stypvar(jvar)%conline_operation = 'N/A'
281
stypvar(jvar)%caxis = 'TYX'
283
glam = getvar (cn_fhgr, cn_glamt, 1, npiglo, npjglo)
284
gphi = getvar (cn_fhgr, cn_gphit, 1, npiglo, npjglo)
285
zdep = getvare3(cn_fzgr, cn_gdept, npk )
287
ncout = create (cf_tfil, 'none', npiglo, npjglo, npk, cdep=cn_vdeptht )
288
ierr = createvar (ncout, stypvar, nvar, ipk, id_varout )
289
ierr = putheadervar(ncout, 'none', npiglo, npjglo, npk, pnavlon=glam, pnavlat=gphi, pdep=zdep )
294
READ(numt,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
295
ierr = putvar(ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
298
PRINT *, 'Done for T'
302
READ(nums,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
303
ierr = putvar(ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
306
PRINT *, 'Done for S'
310
READ(numssh,REC=2) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
311
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
313
PRINT *, 'Done for SSH'
317
READ(num2d,REC=12) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
318
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
320
PRINT *, 'Done for MXL'
323
READ(num2d,REC=4 ) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
324
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
326
PRINT *, 'Done for QNET'
329
READ(num2d,REC=8) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
330
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
332
PRINT *, 'Done for QSR'
335
READ(num2d,REC=5) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
336
v2d = v2d/86400. ! to change units
337
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
339
PRINT *, 'Done for EMP'
342
READ(num2d,REC=10) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
343
v2d = v2d/86400. ! to change units
344
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
346
PRINT *, 'Done for ERP'
349
READ(num2d,REC=13) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
350
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
352
PRINT *, 'Done for FREEZE'
355
READ(num2d,REC=9) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
356
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
358
PRINT *, 'Done for QRP'
360
ierr = putvar1d(ncout, tim, npt, 'T')
361
ierr = closeout(ncout)
362
DEALLOCATE ( stypvar, ipk, id_varout )
368
! Build gridU file with vozocrtx, sozotaux
369
INQUIRE(FILE=cf_dimguu, EXIST=lexist)
371
irecl = isdirect(cf_dimguu)
372
OPEN( numuu, FILE=cf_dimguu, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
378
ALLOCATE ( stypvar(nvar), ipk(nvar), id_varout(nvar) )
382
stypvar(jvar)%cname = cn_vozocrtx
383
stypvar(jvar)%cunits = 'm/s'
384
stypvar(jvar)%rmissing_value = 0.
385
stypvar(jvar)%valid_min = 0.
386
stypvar(jvar)%valid_max = 20.
387
stypvar(jvar)%clong_name = 'Zonal Velocity '
388
stypvar(jvar)%cshort_name = cn_vozocrtx
389
stypvar(jvar)%conline_operation = 'N/A'
390
stypvar(jvar)%caxis = 'TZYX'
394
stypvar(jvar)%cname = 'sozotaux'
395
stypvar(jvar)%cunits = 'N/m2'
396
stypvar(jvar)%rmissing_value = 0.
397
stypvar(jvar)%valid_min = 0.
398
stypvar(jvar)%valid_max = 20.
399
stypvar(jvar)%clong_name = 'Zonal Wind Stress'
400
stypvar(jvar)%cshort_name = 'sozotaux'
401
stypvar(jvar)%conline_operation = 'N/A'
402
stypvar(jvar)%caxis = 'TYX'
407
stypvar(jvar)%cname = TRIM(cn_vozocrtx)//'_sqd'
408
stypvar(jvar)%cunits = 'm2/s2'
409
stypvar(jvar)%rmissing_value = 0.
410
stypvar(jvar)%valid_min = 0.
411
stypvar(jvar)%valid_max = 100.
412
stypvar(jvar)%clong_name = 'MS_Zonal_Velocity'
413
stypvar(jvar)%cshort_name = TRIM(cn_vozocrtx)//'_sqd'
414
stypvar(jvar)%conline_operation = 'N/A'
415
stypvar(jvar)%caxis = 'TZYX'
418
glam = getvar (cn_fhgr, cn_glamu, 1, npiglo, npjglo)
419
gphi = getvar (cn_fhgr, cn_gphiu, 1, npiglo, npjglo)
420
zdep = getvare3(cn_fzgr, cn_gdept, npk )
422
ncout = create (cf_ufil, 'none', npiglo, npjglo, npk, cdep=cn_vdepthu )
423
ierr = createvar (ncout, stypvar, nvar, ipk, id_varout )
424
ierr = putheadervar(ncout, 'none', npiglo, npjglo, npk, pnavlon=glam, pnavlat=gphi, pdep=zdep )
428
READ(numu,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
429
ierr = putvar(ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
432
PRINT *, 'Done for U'
434
READ(num2d, REC=2 ) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
435
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
437
PRINT *, 'Done for TAUX'
441
READ(numuu,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
442
ierr = putvar(ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
444
PRINT *, 'Done for UU'
447
ierr = putvar1d(ncout, tim, npt, 'T')
448
ierr = closeout(ncout )
450
DEALLOCATE ( stypvar, ipk, id_varout )
455
! Build gridV file with vomecrty, sometauy
456
INQUIRE(FILE=cf_dimgvv, EXIST=lexist)
458
irecl = isdirect(cf_dimgvv)
459
OPEN( numvv, FILE=cf_dimgvv, FORM='UNFORMATTED', ACCESS='DIRECT', RECL=irecl )
464
ALLOCATE ( stypvar(nvar), ipk(nvar), id_varout(nvar) )
468
stypvar(jvar)%cname = cn_vomecrty
469
stypvar(jvar)%cunits = 'm/s'
470
stypvar(jvar)%rmissing_value = 0.
471
stypvar(jvar)%valid_min = 0.
472
stypvar(jvar)%valid_max = 20.
473
stypvar(jvar)%clong_name = 'Meridinal Velocity '
474
stypvar(jvar)%cshort_name = cn_vomecrty
475
stypvar(jvar)%conline_operation = 'N/A'
476
stypvar(jvar)%caxis = 'TZYX'
480
stypvar(jvar)%cname = 'sometauy'
481
stypvar(jvar)%cunits = 'N/m2'
482
stypvar(jvar)%rmissing_value = 0.
483
stypvar(jvar)%valid_min = 0.
484
stypvar(jvar)%valid_max = 20.
485
stypvar(jvar)%clong_name = 'Meridional Wind Stress'
486
stypvar(jvar)%cshort_name = 'sometauy'
487
stypvar(jvar)%conline_operation = 'N/A'
488
stypvar(jvar)%caxis = 'TYX'
493
stypvar(jvar)%cname = TRIM(cn_vomecrty)//'_sqd'
494
stypvar(jvar)%cunits = 'm2/s2'
495
stypvar(jvar)%rmissing_value = 0.
496
stypvar(jvar)%valid_min = 0.
497
stypvar(jvar)%valid_max = 100.
498
stypvar(jvar)%clong_name = 'MS_Meridional_Velocity'
499
stypvar(jvar)%cshort_name = TRIM(cn_vomecrty)//'_sqd'
500
stypvar(jvar)%conline_operation = 'N/A'
501
stypvar(jvar)%caxis = 'TZYX'
505
glam = getvar (cn_fhgr, cn_glamv, 1, npiglo, npjglo)
506
gphi = getvar (cn_fhgr, cn_gphiv, 1, npiglo, npjglo)
507
zdep = getvare3(cn_fzgr, cn_gdept, npk )
509
ncout = create (cf_vfil, 'none', npiglo, npjglo, npk, cdep=cn_vdepthv )
510
ierr = createvar (ncout, stypvar, nvar, ipk, id_varout )
511
ierr = putheadervar(ncout, 'none', npiglo, npjglo, npk, pnavlon=glam, pnavlat=gphi, pdep=zdep )
515
READ(numv,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
516
ierr = putvar (ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
519
PRINT *, 'Done for V'
521
READ(num2d, REC=3) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
522
ierr = putvar(ncout, id_varout(jvar), v2d, 1, npiglo, npjglo)
524
PRINT *, 'Done for TAUY'
528
READ(numvv,REC=jk+1) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
529
ierr = putvar(ncout, id_varout(jvar), v2d, jk, npiglo, npjglo)
531
PRINT *, 'Done for VV'
534
ierr = putvar1d(ncout, tim, npt, 'T')
535
ierr = closeout(ncout )
537
DEALLOCATE ( stypvar, ipk, id_varout )
542
! Build PSI file with sobarstf
544
ALLOCATE ( stypvar(nvar), ipk(nvar), id_varout(nvar) )
546
stypvar(1)%cname = 'sobarstf'
547
stypvar(1)%cunits = 'm3/s'
548
stypvar(1)%rmissing_value = 0.
549
stypvar(1)%valid_min = -3.e8
550
stypvar(1)%valid_max = 3.e8
551
stypvar(1)%clong_name = 'Barotropic_Stream_Function'
552
stypvar(1)%cshort_name = 'sobarstf'
553
stypvar(1)%conline_operation = 'N/A'
554
stypvar(1)%caxis = 'TYX'
556
glam = getvar (cn_fhgr, cn_glamf, 1, npiglo, npjglo)
557
gphi = getvar (cn_fhgr, cn_gphif, 1, npiglo, npjglo)
558
zdep = getvare3(cn_fzgr, cn_gdept, 1 )
560
ncout = create (cf_bsfil, 'none', npiglo, npjglo, 1, cdep=cn_vdepthu )
561
ierr = createvar (ncout, stypvar, nvar, ipk, id_varout )
562
ierr = putheadervar(ncout, 'none', npiglo, npjglo, 1, pnavlon=glam, pnavlat=gphi, pdep=zdep )
565
READ(num2d,REC=7) (( v2d(ji,jj), ji=1, npiglo), jj=1,npjglo)
566
ierr = putvar(ncout, id_varout(jvar),v2d, 1, npiglo, npjglo)
567
PRINT *, 'Done for PSI'
569
ierr = putvar1d(ncout, tim, npt, 'T')
570
ierr = closeout(ncout )
572
DEALLOCATE ( stypvar, ipk, id_varout )
576
INTEGER(KIND=4) FUNCTION isdirect(cdname)
577
!!---------------------------------------------------------------------
578
!! *** FUNCTION isdirect ***
580
!! ** Purpose : This integer function returns the record length if cdname
581
!! is a valid dimg file, it returns 0 either.
583
!! ** Method : Open the file and look for the key characters (@!01) for
585
!!----------------------------------------------------------------------
586
CHARACTER(LEN=*), INTENT(in) :: cdname
589
INTEGER(KIND=4) :: irecl
590
INTEGER(KIND=4) :: inum = 100
592
CHARACTER(LEN=4) :: clver
593
CHARACTER(LEN=80) :: clheader
594
!!----------------------------------------------------------------------
597
OPEN(inum,FILE=cdname, FORM = 'UNFORMATTED', ACCESS = 'DIRECT', RECL = 88)
598
READ(inum,REC=1) clver ,clheader, irecl
601
IF (clver == '@!01' ) THEN
607
END FUNCTION isdirect
608
END PROGRAM cdfconvert