New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
omonainfo.F90 in branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/TOOLS/OBSTOOLS/src – NEMO

source: branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/TOOLS/OBSTOOLS/src/omonainfo.F90 @ 11884

Last change on this file since 11884 was 3000, checked in by djlea, 12 years ago

Updated obstools. Addition of headers to programs which explain what each utility does and how to run it. All the programs now build using the naketools utility.

File size: 45.9 KB
Line 
1#define __MYFILE__ 'omonainfo.F90'
2MODULE omonainfo
3   
4   ! Specific utilities for omona files
5   !
6   ! History
7   ! Original: Magdalena A. Balmaseda
8   !           2010: Split as to remove "scale factor information",
9   !           which is now in auxgrid
10   !
11   
12   
13   USE netcdf
14   USE nctools
15   USE ioncdf
16   USE coords
17!   USE orcagrid
18
19   CHARACTER(len=4)    :: cl_expnam 
20   CHARACTER(len=8)    :: cl_date
21   CHARACTER(len=80)   :: cl_filename_out
22   CHARACTER(len=80)   :: cl_filename2_out 
23   CHARACTER(len=3)    :: cl_code
24   CHARACTER(len=1)    :: cl_grid
25   CHARACTER(len=80)   :: cl_var,cl_var_out
26   CHARACTER(len=80)   :: cl_varname1, cl_varname2, cl_varunit1, cl_varunit2
27   CHARACTER(len=1)    :: sec !o =box average omona
28                              !x =zonal section. Integral along x
29                              !y =meridional section. Integral along y
30
31   CHARACTER(len=1)    :: grid0='?'
32   
33   INTEGER ::  i_nb_dims,i_dp
34   INTEGER ::  i_fill
35   REAL, DIMENSION(:,:),     ALLOCATABLE :: z_var_2d
36   REAL, DIMENSION(:,:,:),   ALLOCATABLE :: z_var_3d
37   REAL, DIMENSION(:),       ALLOCATABLE :: z_dep2
38
39   PUBLIC  :: variable_att, write_omona_netcdf, &
40      &       write_dep_netcdf, create_time_series_netcdf_file
41
42   
43   INTERFACE write_omona_netcdf
44      MODULE PROCEDURE write_omona_netcdf_2d_r, write_omona_netcdf_3d_r
45   END INTERFACE
46   
47CONTAINS
48
49   !
50   !----------------------------------------------------------------------
51   !
52   ! W R I T E _ O M O N A _ N E T C D F
53   !
54   !----------------------------------------------------------------------
55   !
56   SUBROUTINE write_omona_netcdf_2d_r (cl_filename, z_field,i_time, &
57      cl_boxes, z_missing,i_fill)
58      !
59      ! write a 2d array (time_serie) of reals
60      !
61      IMPLICIT NONE
62      !
63      CHARACTER(len=80), INTENT(in)                :: cl_filename
64      INTEGER, DIMENSION(:), INTENT(in)            :: i_time
65      INTEGER, INTENT(inout)                       :: i_fill
66      REAL, DIMENSION(:,:), INTENT(in)             :: z_field
67      REAL, INTENT(in)                             :: z_missing
68      CHARACTER(len=20), DIMENSION(:), INTENT(in)  :: cl_boxes
69     
70      !
71      LOGICAL               :: clbon
72      INTEGER               :: i_var_exist, i_pos
73      INTEGER               :: i_file_id, i_var_id
74      INTEGER               :: i_nb_files,i_z, i_b
75      INTEGER               :: i_tim_id,i_box_id
76      INTEGER               :: i_time_var
77      INTEGER               :: i_file
78      INTEGER, DIMENSION(2) :: i_dim, i_tab_start, i_tab_count
79      INTEGER               :: i_rest_start, i_rest_end
80      INTEGER               :: i_time0, i_time1
81      REAL                  :: z_min, z_max
82      REAL                  :: z_min_old, z_max_old
83      INTEGER, DIMENSION(:), ALLOCATABLE :: i_time_old
84      INTEGER, DIMENSION(:), ALLOCATABLE :: i_time_rest
85      INTEGER               :: i_t
86      REAL, DIMENSION(:,:), ALLOCATABLE :: z_old_2d
87      !
88      i_tab_start(1) = 1
89      i_z=1
90      i_b=SIZE(z_field,1)
91      i_nb_files = SIZE(z_field,2)
92      i_tab_count(1) = i_b
93      i_tab_count(2) = i_nb_files
94      i_rest_start = 0
95      i_rest_end   = 0
96      i_time0      = 0
97      i_time1      = 0
98     
99      WRITE(6,*)' Input time dimensions ',i_nb_files
100      WRITE(6,*)' file for output       ',cl_filename
101      !
102      z_min = MINVAL(z_field, mask = z_field .NE. z_missing )
103      z_max = MAXVAL(z_field, mask = z_field .NE. z_missing )
104      !
105     
106      INQUIRE( FILE=cl_filename_out, EXIST=clbon )
107      WRITE(*,*)' Inquiring clbon ',clbon
108      IF ( .NOT. clbon ) THEN
109         CALL create_time_series_netcdf_file ( cl_filename, cl_boxes)
110      ELSE
111         WRITE(*,*)' Time series file already exists'
112      ENDIF
113      !     
114      WRITE(*,*)' opening file ',cl_filename
115      CALL nchdlerr( nf90_open( cl_filename, nf90_write, i_file_id ) ,__LINE__,__MYFILE__)
116      !
117     
118      WRITE(*,*)' Inquiring var ',cl_var_out
119      i_var_exist = nf90_inq_varid( i_file_id, cl_var_out, i_var_id ) 
120      WRITE(*,*)' i_var_exist ',i_var_exist, i_var_id
121      IF ( i_var_exist .NE. 0 ) THEN
122         CALL nchdlerr( nf90_inq_dimid( i_file_id, 'time', i_tim_id ) ,__LINE__,__MYFILE__)
123         CALL nchdlerr( nf90_inq_dimid( i_file_id, 'box', i_box_id ) ,__LINE__,__MYFILE__)
124         i_dim(1) = i_box_id
125         i_dim(2) = i_tim_id
126         !         write(*,*)' i_dim ',i_dim
127         !
128         CALL nchdlerr( nf90_redef(i_file_id) ,__LINE__,__MYFILE__)
129         CALL nchdlerr( nf90_def_var(i_file_id, cl_var_out, nf90_real, i_dim, i_var_id ) ,__LINE__,__MYFILE__)
130         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'standard_name', cl_varname1 ) ,__LINE__,__MYFILE__)
131         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'long_name', cl_varname2 ) ,__LINE__,__MYFILE__)
132         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'units',cl_varunit1 ) ,__LINE__,__MYFILE__)
133         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'unit_long',cl_varunit2 ) ,__LINE__,__MYFILE__)
134         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'missing_value', z_missing ) ,__LINE__,__MYFILE__)
135         WRITE(*,*)'nf_put valid_min ',z_min
136         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_min', z_min ) ,__LINE__,__MYFILE__)
137         WRITE(*,*)'nf_put valid_max ',z_max
138         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_max', z_max ) ,__LINE__,__MYFILE__)
139         
140         CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
141         
142         CALL nchdlerr( nf90_inq_varid( i_file_id, 'time', i_time_var ) ,__LINE__,__MYFILE__)
143         i_pos = 1 
144         i_tab_start(2)=1
145      ELSE
146         CALL nchdlerr( nf90_get_att( i_file_id, i_var_id, 'valid_min', z_min_old ) ,__LINE__,__MYFILE__)
147         CALL nchdlerr( nf90_get_att( i_file_id, i_var_id, 'valid_max', z_max_old ) ,__LINE__,__MYFILE__)
148         z_min = MIN( z_min, z_min_old )
149         z_max = MAX( z_max, z_max_old )
150         CALL nchdlerr( nf90_redef( i_file_id ) ,__LINE__,__MYFILE__)
151         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_min', z_min ) ,__LINE__,__MYFILE__)
152         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_max', z_max ) ,__LINE__,__MYFILE__)
153         CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
154         
155         CALL nchdlerr( nf90_inq_dimid( i_file_id, 'time', i_tim_id ) ,__LINE__,__MYFILE__)
156 
157         CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_tim_id,len=i_pos ) ,__LINE__,__MYFILE__)
158         ALLOCATE(i_time_old(i_pos))
159         
160         CALL nchdlerr( nf90_inq_varid( i_file_id, 'time', i_time_var ) ,__LINE__,__MYFILE__)
161         
162         CALL nchdlerr( nf90_get_var( i_file_id, i_time_var, i_time_old ) ,__LINE__,__MYFILE__)
163         i_tab_start(2)=i_pos+1
164         DO i_t=i_pos,1,-1
165            IF(i_time_old(i_t).GE.i_time(1)) THEN
166               i_tab_start(2)=i_t
167            ELSE
168               EXIT
169            ENDIF
170         ENDDO
171         WRITE(*,*)' i_tab_start(2)',i_tab_start(2)
172
173         IF (I_FILL == 1 ) THEN
174           DO i_t=1,i_tab_start(2),1
175             IF(i_time_old(i_t).LT.i_time(1)) THEN
176                i_time0=i_t+1
177             ELSE
178                EXIT
179             ENDIF
180          ENDDO
181          WRITE(*,*)' i_tab_start(2), i_time0',i_tab_start(2),i_time0
182          i_time0=min(i_time0,i_tab_start(2))
183          i_tab_start(2)=i_time0
184          i_time1=i_tab_start(2)+i_tab_count(2)-1
185          WRITE(*,*)' Starting at time ',i_time_old(i_tab_start(2)-1),i_time(1)
186          i_rest_start=i_time1+1
187          i_rest_end = i_pos
188          IF ( i_rest_end .gt. i_rest_start ) THEN
189            ALLOCATE( z_old_2d(i_b, i_pos))
190            CALL nchdlerr( nf90_get_var( i_file_id, i_var_id, z_old_2d ) ,__LINE__,__MYFILE__)
191            z_old_2d(:,i_time0:i_time1)=z_field
192            i_time_old(i_time0:i_time1)=i_time
193            i_tab_start(2)=1
194            i_tab_count(2)=i_pos
195            WRITE(*,*)' writing output I_FILL i_time0 ',i_time0
196            WRITE(*,*)' writing output I_FILL i_time1 ',i_time1
197            CALL nchdlerr( nf90_put_var( i_file_id, i_var_id, &
198            & z_old_2d, start=i_tab_start, count=i_tab_count),__LINE__,__MYFILE__)
199            CALL nchdlerr( nf90_put_var( i_file_id, i_time_var, &
200         & i_time_old,start=(/i_tab_start(2)/), count=(/i_tab_count(2)/)),__LINE__,__MYFILE__)
201          ELSE
202            I_FILL = 0
203            DEALLOCATE(i_time_old)
204            DEALLOCATE(i_time_rest)
205            DEALLOCATE(z_old_2d)
206          ENDIF
207         ELSE
208         WRITE(*,*)' Starting at time ',i_time_old(i_tab_start(2)-1),i_time(1)
209         DEALLOCATE(i_time_old)
210         ENDIF
211      ENDIF
212      !
213      IF ( I_FILL == 0 ) THEN
214         WRITE(*,*)' writing output start ',i_tab_start
215    WRITE(*,*)' writing output count ',i_tab_count
216         CALL nchdlerr( nf90_put_var( i_file_id, i_var_id, &
217         & z_field, start=i_tab_start, count=i_tab_count),__LINE__,__MYFILE__)
218
219         CALL nchdlerr( nf90_put_var( i_file_id, i_time_var, &
220         & i_time,start=(/i_tab_start(2)/), count=(/i_tab_count(2)/)),__LINE__,__MYFILE__)
221      ENDIF
222
223      !
224     
225      CALL nchdlerr( nf90_close( i_file_id ) ,__LINE__,__MYFILE__)
226      !
227      RETURN
228      !
229   END SUBROUTINE write_omona_netcdf_2d_r
230   !
231   !----------------------------------------------------------------------
232   !
233   SUBROUTINE write_omona_netcdf_3d_r (cl_filename, z_field,i_time, &
234                                       cl_boxes, z_missing, i_fill)
235!
236! write a 3d array (time_serie) of reals
237!
238      IMPLICIT NONE
239!
240      CHARACTER(len=80), INTENT(in)                :: cl_filename 
241      INTEGER, DIMENSION(:), INTENT(in)            :: i_time
242      INTEGER, INTENT(inout)                       :: i_fill
243      REAL, DIMENSION(:,:,:), INTENT(in)           :: z_field
244      REAL, INTENT(in)                             :: z_missing
245      CHARACTER(len=20), DIMENSION(:), INTENT(in)  :: cl_boxes
246
247!
248      LOGICAL               :: clbon
249      INTEGER               :: i_var_exist, i_pos
250      INTEGER               :: i_file_id, i_var_id
251      INTEGER               :: i_nb_files,i_z,i_b
252      INTEGER               :: i_tim_id,i_box_id,i_z_id
253      INTEGER               :: i_time_var
254      INTEGER               :: i_file
255      INTEGER, DIMENSION(3) :: i_dim, i_tab_start, i_tab_count
256      INTEGER               :: i_rest_start, i_rest_end
257      INTEGER               :: i_time0, i_time1
258      REAL                  :: z_min, z_max
259      REAL                  :: z_min_old, z_max_old
260      INTEGER, DIMENSION(:), ALLOCATABLE :: i_time_old
261      INTEGER, DIMENSION(:), ALLOCATABLE :: i_time_rest
262      INTEGER               :: i_t
263      REAL, DIMENSION(:,:,:), ALLOCATABLE :: z_old_3d
264!
265      i_tab_start(1) = 1
266      i_tab_start(2) = 1
267      i_tab_start(3) = 1
268      i_z=SIZE(z_field,1)   !depth
269      i_b=SIZE(z_field,2)   !nbox
270      i_nb_files = SIZE(z_field,3)
271      i_tab_count(1) = i_z
272      i_tab_count(2) = i_b
273      i_tab_count(3) = i_nb_files
274      i_time0        = 0
275      i_time1        = 0
276      i_rest_start   = 0
277      i_rest_end     = 0
278
279!      write(6,*)' in write_3d ,shape(z_field) ',shape(z_field)
280!      write(6,*)' i_z =',i_z
281!      write(6,*)' i_b =',i_b
282!      write(6,*)' i_nb_files =',i_nb_files
283
284
285!
286      z_min = MINVAL(z_field, mask = z_field .NE. z_missing )
287      z_max = MAXVAL(z_field, mask = z_field .NE. z_missing )
288!
289      INQUIRE( FILE=cl_filename, EXIST=clbon )
290      IF ( .NOT. clbon ) THEN
291         CALL create_time_series_netcdf_file ( cl_filename, cl_boxes)
292      ELSE
293         WRITE(*,*)' Time series file already exists'
294      ENDIF
295!     
296      WRITE(*,*)' opening file ',cl_filename
297      CALL nchdlerr( nf90_open( cl_filename, nf90_write, i_file_id ) ,__LINE__,__MYFILE__)
298!
299      WRITE(*,*)'Inquiring var ',cl_var_out, i_var_id
300      i_var_exist = nf90_inq_varid( i_file_id, cl_var_out, i_var_id)
301      WRITE(*,*)'i_var_exist ',i_var_exist
302
303      IF ( i_var_exist .NE. 0 ) THEN
304!       write(*,*)' Inquiring dimensions'
305       CALL nchdlerr( nf90_inq_dimid( i_file_id, 'depth', i_z_id ) ,__LINE__,__MYFILE__)
306       CALL nchdlerr( nf90_inq_dimid( i_file_id, 'box', i_box_id ) ,__LINE__,__MYFILE__)
307       CALL nchdlerr( nf90_inq_dimid( i_file_id, 'time', i_tim_id ) ,__LINE__,__MYFILE__)
308
309       i_dim(1) = i_z_id
310       i_dim(2) = i_box_id
311       i_dim(3) = i_tim_id
312!       write(*,*)' In write_omona_ncdf_3d: Dimensions: i_dim ',i_dim
313
314
315       CALL nchdlerr( nf90_redef( i_file_id ) ,__LINE__,__MYFILE__)
316       CALL nchdlerr( nf90_def_var( i_file_id, cl_var_out,  nf90_real,i_dim, i_var_id ) ,__LINE__,__MYFILE__)
317        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'standard_name', cl_varname1 ),__LINE__,__MYFILE__ )
318       CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'long_name', cl_varname2 ) ,__LINE__,__MYFILE__)
319        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'units', cl_varunit1 ) ,__LINE__,__MYFILE__)
320        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'unit_long', cl_varunit2 ) ,__LINE__,__MYFILE__)
321        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'missing_value', z_missing ) ,__LINE__,__MYFILE__)
322        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_min', z_min ) ,__LINE__,__MYFILE__)
323        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_max', z_max ) ,__LINE__,__MYFILE__)
324!
325        CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
326
327!       CALL nchdlerr( nf90_inq_dimid( i_file_id, 'time', i_tim_id ) ,__LINE__,__MYFILE__)
328!        write(6,*)' inq_dimid ',i_tim_id
329        CALL nchdlerr( nf90_inq_varid( i_file_id, 'time', i_time_var ) ,__LINE__,__MYFILE__)
330        WRITE(*,*) 'inq_varid i_tim_id for var time ',i_time_var
331        i_pos = 1 
332        i_tab_start(3)=1
333      ELSE
334        !new addition
335!        CALL nchdlerr (nf90_inquire_variable( i_file_id, i_var_id, dimids=i_dim ) ,__LINE__,__MYFILE__)
336!        write(6,*)' after inquire variable i_dim = ',i_dim
337!      CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_dim(1), len=i_pos )  ,__LINE__,__MYFILE__)
338!        write(6,*)' i_dim(1), len(1) ',i_dim(1),i_pos
339!      CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_dim(2), len=i_pos )  ,__LINE__,__MYFILE__)
340!        write(6,*)' i_dim(2), len(2) ',i_dim(2),i_pos
341!      CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_dim(3), len=i_pos )  ,__LINE__,__MYFILE__)
342!        write(6,*)' i_dim(3), len(3) ',i_dim(3),i_pos
343        !!!!
344
345        CALL nchdlerr( nf90_get_att( i_file_id, i_var_id, 'valid_min', z_min_old ) ,__LINE__,__MYFILE__)
346        CALL nchdlerr( nf90_get_att( i_file_id, i_var_id, 'valid_max', z_max_old ) ,__LINE__,__MYFILE__)
347        z_min = MIN( z_min, z_min_old )
348        z_max = MAX( z_max, z_max_old )
349        CALL nchdlerr( nf90_redef( i_file_id ) ,__LINE__,__MYFILE__)
350        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_min', z_min ) ,__LINE__,__MYFILE__)
351        CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_max', z_max ) ,__LINE__,__MYFILE__)
352        CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
353
354
355 
356!        CALL nchdlerr( nf90_inq_varid( i_file_id, 'depth', i_z_id ) ,__LINE__,__MYFILE__)
357!        CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_z_id, len=i_pos ) ,__LINE__,__MYFILE__)
358!        write(*,*)' i_z_id, dim ',i_z_id,i_pos
359
360!        CALL nchdlerr( nf90_inq_varid( i_file_id, 'box', i_box_id ) ,__LINE__,__MYFILE__)
361!        CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_box_id, len=i_pos ) ,__LINE__,__MYFILE__)
362!        write(*,*)' i_box_id, dim ',i_box_id,i_pos
363
364
365 
366       CALL nchdlerr( nf90_inq_dimid( i_file_id, 'time', i_tim_id ) ,__LINE__,__MYFILE__)
367!        write(6,*)' inq_dimid ',i_tim_id
368        CALL nchdlerr( nf90_inquire_dimension( i_file_id, i_tim_id, len=i_pos ) ,__LINE__,__MYFILE__)
369!       write(*,*) 'inq_var_id i_tim_id,dim ',i_tim_id,i_pos
370        ALLOCATE(i_time_old(i_pos))
371        CALL nchdlerr( nf90_inq_varid( i_file_id, 'time', i_time_var ) ,__LINE__,__MYFILE__)
372!        write(*,*) 'inq_var_id time',i_time_var
373        CALL nchdlerr( nf90_get_var( i_file_id, i_time_var, i_time_old ) ,__LINE__,__MYFILE__)
374        i_tab_start(3)=i_pos+1
375        DO i_t=i_pos,1,-1
376          IF(i_time_old(i_t).GE.i_time(1)) THEN
377            i_tab_start(3)=i_t
378          ELSE
379            EXIT
380         ENDIF
381        ENDDO
382
383         WRITE(*,*)'i_tab_start(3)',i_tab_start(3)
384         WRITE(*,*)'i_tab_count(3)',i_tab_count(3)
385
386         IF (I_FILL == 1 ) THEN
387           DO i_t=1,i_tab_start(3),1
388             IF(i_time_old(i_t).LT.i_time(1)) THEN
389                i_time0=i_t+1
390             ELSE
391                EXIT
392             ENDIF
393           ENDDO
394
395           i_time0=min(i_time0,i_tab_start(3))
396           i_tab_start(3)=i_time0
397           i_time1=i_time0+i_tab_count(3)-1
398           WRITE(*,*)'i_time0,i_tab_count(3),i_time1',i_Time0,i_tab_count(3),i_time1
399           WRITE(*,*)' Starting at time ',i_time_old(i_tab_start(3)-1),i_time(1)
400           i_rest_start=i_time1+1
401           i_rest_end = i_pos
402          IF ( i_rest_end .gt. i_rest_start ) THEN
403            ALLOCATE( z_old_3d(i_z,i_b, i_pos))
404            CALL nchdlerr( nf90_get_var( i_file_id, i_var_id, z_old_3d ) ,__LINE__,__MYFILE__)
405            z_old_3d(:,:,i_time0:i_time1)=z_field
406            i_time_old(i_time0:i_time1)=i_time
407            i_tab_start(3)=1
408            i_tab_count(3)=i_pos
409            WRITE(*,*)' writing output I_FILL i_time0 ',i_time0
410            WRITE(*,*)' writing output I_FILL i_time1 ',i_time1
411            CALL nchdlerr( nf90_put_var( i_file_id, i_var_id, &
412            & z_old_3d, start=i_tab_start, count=i_tab_count),__LINE__,__MYFILE__)
413            CALL nchdlerr( nf90_put_var( i_file_id, i_time_var, &
414         & i_time_old,start=(/i_tab_start(3)/), count=(/i_tab_count(3)/)),__LINE__,__MYFILE__)
415          ELSE
416            I_FILL = 0
417            DEALLOCATE(i_time_old)
418            DEALLOCATE(i_time_rest)
419            DEALLOCATE(z_old_3d)
420          ENDIF
421         ELSE
422          WRITE(*,*)' Starting at time ',i_time_old(i_tab_start(3)-1),i_time(1)
423          DEALLOCATE(i_time_old)
424         ENDIF
425      ENDIF
426      !
427      IF ( I_FILL == 0 ) THEN
428         WRITE(*,*)' writing output count ',i_tab_count
429         WRITE(*,*)' writing output start ',i_tab_start
430         CALL nchdlerr( nf90_put_var( i_file_id, i_var_id, &
431           z_field, start=i_tab_start, count=i_tab_count),__LINE__,__MYFILE__)
432         CALL nchdlerr( nf90_put_var( i_file_id, i_time_var, &
433           i_time,start=(/i_tab_start(3)/), count=(/i_tab_count(3)/) ),__LINE__,__MYFILE__)
434      ENDIF
435!
436      CALL nchdlerr( nf90_close( i_file_id ),__LINE__,__MYFILE__ )
437!
438      RETURN
439      !
440   END SUBROUTINE write_omona_netcdf_3d_r
441   !!----------------------------------------------------------------------
442   !
443   SUBROUTINE write_dep_netcdf ( cl_filename, cl_boxes, z_dep )
444      !
445      ! write a 2d array (map) of reals
446      !
447      IMPLICIT NONE
448      !
449      CHARACTER(len=80), INTENT(in)    :: cl_filename
450      CHARACTER(len=20), DIMENSION(:), INTENT(in)  :: cl_boxes
451      REAL, DIMENSION(:),   INTENT(in) :: z_dep
452      !
453      LOGICAL               :: clbon
454      INTEGER               :: i_file_id, i_var_id
455      INTEGER               :: i_dim_z_id
456      INTEGER               :: i_dimz, i_var_exist
457      INTEGER, DIMENSION(1) :: i_dim
458      REAL                  :: z_min, z_max
459      !
460      i_dimz = i_dp
461      !
462      z_min = MINVAL(z_dep)
463      z_max = MAXVAL(z_dep)
464      !
465      INQUIRE( FILE=cl_filename, EXIST=clbon )
466      IF ( .NOT. clbon ) THEN
467         CALL create_time_series_netcdf_file ( cl_filename, cl_boxes )
468      ELSE
469         WRITE(*,*)' Time series file already exists'
470      ENDIF
471      !     
472      CALL nchdlerr( nf90_open( cl_filename, nf90_write, i_file_id ) ,__LINE__,__MYFILE__)
473      !
474      CALL nchdlerr( nf90_inq_dimid( i_file_id, 'depth', i_dim_z_id ) ,__LINE__,__MYFILE__)
475      i_dim(1) = i_dim_z_id
476      !      write(6,*)' defining depth axis : i_dim(1)= ',i_dim(1)
477      !
478      i_var_exist = nf90_inq_varid( i_file_id, "depth", i_var_id ) 
479      IF ( i_var_exist .NE. 0 ) THEN
480         CALL nchdlerr( nf90_redef( i_file_id ) ,__LINE__,__MYFILE__)
481         CALL nchdlerr( nf90_def_var( i_file_id, "depth", nf90_real,i_dim, i_var_id ) ,__LINE__,__MYFILE__)
482         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'standard_name','depth') ,__LINE__,__MYFILE__) 
483         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'long_name', 'depth below the surface') ,__LINE__,__MYFILE__) 
484         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'units', 'm' ) ,__LINE__,__MYFILE__)
485         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'unit_long','meter' ) ,__LINE__,__MYFILE__)
486         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_min', z_min ) ,__LINE__,__MYFILE__)
487         CALL nchdlerr( nf90_put_att( i_file_id, i_var_id, 'valid_max', z_max ) ,__LINE__,__MYFILE__)
488         CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
489      ENDIF
490      !
491      CALL nchdlerr( nf90_put_var( i_file_id, i_var_id, z_dep) ,__LINE__,__MYFILE__)
492      !
493      CALL nchdlerr( nf90_close( i_file_id ) ,__LINE__,__MYFILE__)
494      !
495      RETURN
496      !
497   END SUBROUTINE write_dep_netcdf
498   !
499   !
500   !----------------------------------------------------------------------
501   !
502   ! C R E A T E _ T I M E _ S E R I E S _ N E T C D F _ F I L E
503   !
504   !----------------------------------------------------------------------
505   !
506   SUBROUTINE create_time_series_netcdf_file ( cl_filename,cl_boxes)
507      !
508      ! create time_series netcdf file
509      !
510      IMPLICIT NONE
511      !
512
513      CHARACTER(len=80), INTENT(in)         :: cl_filename
514      CHARACTER(len=20), DIMENSION(:)       :: cl_boxes
515      !
516      LOGICAL               :: clbon
517      INTEGER               :: i_file_id, i_dim_z_id, i_dim_box_id, &
518         i_dim_len_id, i_dim_t_id
519      INTEGER               :: i_box_id, i_tim_id
520      INTEGER               :: i_nbox
521      !
522      i_nbox = SIZE(cl_boxes,1)
523      !
524     
525      WRITE(*,*)' create_time_series',cl_filename
526      CALL nchdlerr( nf90_create( cl_filename, nf90_clobber, i_file_id ) ,__LINE__,__MYFILE__)
527      !
528      CALL nchdlerr( nf90_def_dim( i_file_id, 'len', 20, i_dim_len_id ) ,__LINE__,__MYFILE__)
529      CALL nchdlerr( nf90_def_dim( i_file_id, 'depth',i_dp, i_dim_z_id ) ,__LINE__,__MYFILE__)
530      CALL nchdlerr( nf90_def_dim( i_file_id, 'box', i_nbox, i_dim_box_id ) ,__LINE__,__MYFILE__)
531      CALL nchdlerr( nf90_def_dim( i_file_id, 'time', nf90_unlimited, i_dim_t_id ) ,__LINE__,__MYFILE__)
532
533
534      WRITE(*,*)' In create_time_series_ntcdf'
535      WRITE(*,*)' z,box,time:       ',i_dim_z_id,i_dim_box_id, i_dim_t_id
536
537      WRITE(*,*)' Definining box var '
538      CALL nchdlerr( nf90_def_var( i_file_id, 'box', nf90_char, &
539         (/i_dim_len_id,i_dim_box_id/), i_box_id ),__LINE__,__MYFILE__)
540      CALL nchdlerr( nf90_put_att( i_file_id, i_box_id, &
541         'long_name', 'Name of the box' ) ,__LINE__,__MYFILE__)
542
543      WRITE(*,*)' Definining time var'
544      CALL nchdlerr( nf90_def_var( i_file_id, 'time', nf90_int, &
545         (/i_dim_t_id/),i_tim_id ) ,__LINE__,__MYFILE__)
546      CALL nchdlerr( nf90_put_att( i_file_id, i_tim_id, 'standard_name','time') ,__LINE__,__MYFILE__)
547      CALL nchdlerr( nf90_put_att( i_file_id, i_tim_id, 'long_name','time') ,__LINE__,__MYFILE__)
548      CALL nchdlerr( nf90_put_att( i_file_id, i_tim_id, 'unit','days as %Y%m%d') ,__LINE__,__MYFILE__)
549      CALL nchdlerr( nf90_put_att( i_file_id, i_tim_id, 'unit_long','days as %Y%m%d') ,__LINE__,__MYFILE__)
550      !
551      CALL nchdlerr( nf90_enddef( i_file_id ) ,__LINE__,__MYFILE__)
552
553      CALL nchdlerr( nf90_put_var( i_file_id, i_box_id, cl_boxes &
554         ),__LINE__,__MYFILE__ )
555      !
556      CALL nchdlerr( nf90_close( i_file_id ),__LINE__,__MYFILE__ )
557      !
558      RETURN
559      !
560   END SUBROUTINE create_time_series_netcdf_file
561
562
563   !-----------------------------------------------------------------------
564   SUBROUTINE variable_att
565      !-----------------------------------------------------------------------
566      !
567      !                       ROUTINE variable_att
568      !                     **********************
569      !
570      !  Purpose :
571      !  -------
572      !    set attributes for a given variable name
573      !
574      !  Original :  M. Balmaseda
575      IMPLICIT NONE
576      !-----------------------------------------------------------------------
577      !   Different variables
578      !-----------------------------------------------------------------------
579      !
580      INTEGER:: ji,jj,jk
581      REAL   :: dx0    !nominal longitudinal resolution in deg
582      REAL   :: alat, alon,aux
583      INTEGER,DIMENSION(:,:), ALLOCATABLE:: iaux
584
585      SELECT CASE ( TRIM(cl_var) )
586      CASE ('sosstsst')
587         i_nb_dims=2
588         cl_var_out='specified_sea_surface_temperature'
589         cl_varname1='Sea_Surface_Temperature'
590         cl_varname2='Sea Surface Temperature'
591         cl_varunit1='C'
592         cl_varunit2='degrees C'
593         cl_code='159'
594         cl_grid='t'
595      CASE ('somxl010')
596         i_nb_dims=2
597         cl_var_out='ocean_mixed_layer_thickness'
598         cl_varname1='ocean_mixed_layer_thickness'
599         cl_varname2='depth of the ocean mixed layer from the surface'
600         cl_varunit1='m'
601         cl_varunit2='meter'
602         cl_code='148'
603         cl_grid='t'
604      CASE ('somixhgt')
605         i_nb_dims=2
606         cl_var_out='turbocline_depth'
607         cl_varname1='turbocline_depth'
608         cl_varname2='turbocline depth'
609         cl_varunit1='m'
610         cl_varunit2='meter'
611         cl_code='248'
612         cl_grid='t'
613      CASE ('somxlt05')
614         i_nb_dims=2
615         cl_var_out='ocean_mixed_layer_depth'
616         cl_varname1='ocean_mixed_layer_depth'
617         cl_varname2='depth of the ocean mixed layer T 0.5 criteria'
618         cl_varunit1='m'
619         cl_varunit2='meter'
620         cl_code='348'
621         cl_grid='t'
622      CASE ('sohtc300')
623         i_nb_dims=2
624         cl_var_out='hc300'
625         cl_varname1='300m_ocean_heat_content'
626         cl_varname2='ocean heat content over the first 300m'
627         cl_varunit1='J/m2'
628         cl_varunit2='J/m2'
629         cl_code='164'
630         cl_grid='t'
631      CASE ('sohtc700')
632         i_nb_dims=2
633         cl_var_out='hc700'
634         cl_varname1='700m_ocean_heat_content'
635         cl_varname2='ocean heat content over the first 700m'
636         cl_varunit1='J/m2'
637         cl_varunit2='J/m2'
638         cl_code='264'
639         cl_grid='t'
640      CASE ('sohtcbtm')
641         i_nb_dims=2
642         cl_var_out='hcbtm'
643         cl_varname1='Column_ocean_heat_content'
644         cl_varname2='ocean heat content over the whole column'
645         cl_varunit1='J/m2'
646         cl_varunit2='J/m2'
647         cl_code='364'
648         cl_grid='t'
649      CASE ('sosal300')
650         i_nb_dims=2
651         cl_var_out='sal300'
652         cl_varname1='300m_integrated salinity'
653         cl_varname2='salinity integrated over the first 300m'
654         cl_varunit1='psu*m'
655         cl_varunit2='psu*m'
656         cl_code='175'
657         cl_grid='t'
658      CASE ('sosal700')
659         i_nb_dims=2
660         cl_var_out='sal700'
661         cl_varname1='700m_integrated salinity'
662         cl_varname2='salinity integrated over the first 700m'
663         cl_varunit1='psu*m'
664         cl_varunit2='psu*m'
665         cl_code='275'
666         cl_grid='t'
667      CASE ('sosalbtm')
668         i_nb_dims=2
669         cl_var_out='salbtm'
670         cl_varname1='Column_integrate_salinity'
671         cl_varname2='Integrated Salinity over the whole column'
672         cl_varunit1='psu*m'
673         cl_varunit2='psu*m'
674         cl_code='375'
675         cl_grid='t'
676      CASE ('so20chgt')
677         i_nb_dims=2
678         cl_var_out='d20_isotherm_depth'
679         cl_varname1='depth'
680         cl_varname2='depth of the D20 isotherm'
681         cl_varunit1='m'
682         cl_varunit2='meter'
683         cl_code='163'
684         cl_grid='t'
685      CASE ('so28chgt')
686         i_nb_dims=2
687         cl_var_out='d28_isotherm_depth'
688         cl_varname1='28I_depth'
689         cl_varname2='depth of the D28 isotherm'
690         cl_varunit1='m'
691         cl_varunit2='meter'
692         cl_code='263'
693         cl_grid='t'
694      CASE ('so26chgt')
695         i_nb_dims=2
696         cl_var_out='d26_isotherm_depth'
697         cl_varname1='26I_depth'
698         cl_varname2='depth of the D26 isotherm'
699         cl_varunit1='m'
700         cl_varunit2='meter'
701         cl_code='463'
702         cl_grid='t'
703      CASE ('sothedep')
704         i_nb_dims=2
705         cl_var_out='thermocline_depth'
706         cl_varname1='thermocline_depth'
707         cl_varname2='thermocline depth'
708         cl_varunit1='m'
709         cl_varunit2='meter'
710         cl_code='363'
711         cl_grid='t'
712      CASE ('sossheig')
713         i_nb_dims=2
714         cl_var_out='sea_surface_height_above_geoid'
715         cl_varname1='sea_surface_height_above_geoid'
716         cl_varname2='sea_surface_height_above_geoid'
717         cl_varunit1='m'
718         cl_varunit2='meter'
719         cl_code='145'     
720         cl_grid='t'
721      CASE ('sostheig')
722         i_nb_dims=2
723         cl_var_out='steric_height'
724         cl_varname1='steric_height'
725         cl_varname2='steric_height'
726         cl_varunit1='m'
727         cl_varunit2='meter'
728         cl_code='150'     
729         cl_grid='t'
730      CASE ('sobpheig')
731         i_nb_dims=2
732         cl_var_out='bottom_pressure_equivalent_height'
733         cl_varname1='Bottom Pressure'
734         cl_varname2='Bottom Pressure'
735         cl_varunit1='m'
736         cl_varunit2='meter'
737         cl_code='149'     
738         cl_grid='t'
739      CASE ('sohefldo')
740         i_nb_dims=2
741         cl_var_out='specified_surface_heat_flux'
742         cl_varname1='Net Downward Heat Flux'
743         cl_varname2='Net Downward Heat Flux'
744         cl_varunit1='W/m2'
745         cl_varunit2='Watt_per_square_meter'
746         cl_code='160'     
747         cl_grid='t'
748      CASE ('sohefldp')
749         i_nb_dims=2
750         cl_var_out='heat_flux_correction'
751         cl_varname1='Surface_Heat_Flux_Damping'
752         cl_varname2='Surface Heat Flux: Damping'
753         cl_varunit1='W/m2'
754         cl_varunit2='Watt_per_square_meter'
755         cl_code='162'     
756         cl_grid='t'
757      CASE ('soshfldo')
758         i_nb_dims=2
759         cl_var_out='absorbed_solar_radiation'
760         cl_varname1='Shortwave_Radiation'
761         cl_varname2='Shortwave Radiation'
762         cl_varunit1='W/m2'
763         cl_varunit2='Watt_per_square_meter'
764         cl_code='157'     
765         cl_grid='t'
766      CASE ('sosalflx')
767         i_nb_dims=2
768         cl_var_out='Surface_Salt_Flux'
769         cl_varname1='Surface_Salt_Flux'
770         cl_varname2='Surface Salt Flux'
771         cl_varunit1='Kg/m2/s'
772         cl_varunit2='Kg/m2/s'
773         cl_code='260'     
774         cl_grid='t'
775      CASE ('sosafldp')
776         i_nb_dims=2
777         cl_var_out='Surface_salt_flux_damping'
778         cl_varname1=cl_var_out
779         cl_varname2='Surface salt flux: damping'
780         cl_varunit1='Kg/m2/s'
781         cl_varunit2='Kg/m2/s'
782         cl_code='261'     
783         cl_grid='t'
784      CASE ('sowaflup')
785         i_nb_dims=2
786         cl_var_out='Net_Upward_Water_Flux'
787         cl_varname1=cl_var_out
788         cl_varname2=cl_var_out
789         cl_varunit1='Kg/m2/s'
790         cl_varunit2='Kg/m2/s'
791         cl_code='258'     
792         cl_grid='t'
793      CASE ('sowafldp')
794         i_nb_dims=2
795         cl_var_out='Surface_Water_Flux_Damping'
796         cl_varname1=cl_var_out
797         cl_varname2=cl_var_out
798         cl_varunit1='Kg/m2/s'
799         cl_varunit2='Kg/m2/s'
800         cl_code='262'     
801         cl_grid='t'
802      CASE ('soicetem')
803         i_nb_dims=2
804         cl_var_out='Ice_Surface_Temperature'
805         cl_varname1=cl_var_out
806         cl_varname2=cl_var_out
807         cl_varunit1='K'
808         cl_varunit2='Kelvin'
809         cl_code='429'     
810         cl_grid='t'
811      CASE ('soicealb')
812         i_nb_dims=2
813         cl_var_out='Ice_Albedo'
814         cl_varname1=cl_var_out
815         cl_varname2=cl_var_out
816         cl_varunit1='dl'
817         cl_varunit2='dimensionless'
818         cl_code='430'     
819         cl_grid='t'
820      CASE ('soicecov')
821         i_nb_dims=2
822         cl_var_out='Ice_Fraction'
823         cl_varname1=cl_var_out
824         cl_varname2=cl_var_out
825         cl_varunit1='dl'
826         cl_varunit2='dimensionless'
827         cl_code='431'     
828         cl_grid='t'
829      CASE ('votemper')
830         i_nb_dims=3
831         cl_var_out='sea_water_potential_temperature'
832         cl_varname1='sea_water_potential_temperature'
833         cl_varname2='Potential temperature ref to surface C'
834         cl_varunit1='C'
835         cl_varunit2='degree_Celcius'
836         cl_code='129'
837         cl_grid='t'
838      CASE ('vosaline')
839         i_nb_dims=3
840         cl_var_out='sea_water_salinity'
841         cl_varname1='sea_water_salinity'
842         cl_varname2='sea water salinity'
843         cl_varunit1='PSU'
844         cl_varunit2='practical_salinity_scale'
845         cl_code='130'
846         cl_grid='t'
847      CASE ('vosigmat')
848         i_nb_dims=3
849         cl_var_out='sigmat'
850         cl_varname1='sigmat'
851         cl_varname2='sigmat'
852         cl_varunit1='C'
853         cl_varunit2='NA'
854         cl_code='138'
855         cl_grid='t'
856      CASE ('vottrdmp')
857         i_nb_dims=3
858         cl_var_out='Damping_T_3D'
859         cl_varname1='Damping_T_3D'
860         cl_varname2='Damping T 3D'
861         cl_varunit1='C/s'
862         cl_varunit2='degree_Celsius/second'
863         cl_code='201'
864         cl_grid='t'
865      CASE ('vostrdmp')
866         i_nb_dims=3
867         cl_var_out='Damping_S_3D'
868         cl_varname1='Damping_S_3D'
869         cl_varname2='Damping S_3D'
870         cl_varunit1='psu/s'
871         cl_varunit2='psu/second'
872         cl_code='202'
873         cl_grid='t'
874      CASE ('votbiasd')
875         i_nb_dims=3
876         cl_var_out='Bias_T_direct'
877         cl_varname1='Bias_T_direct'
878         cl_varname2='Bias_T_direct'
879         cl_varunit1='C'
880         cl_varunit2='degree_Celsius'
881         cl_code='203'
882         cl_grid='t'
883      CASE ('vosbiasd')
884         i_nb_dims=3
885         cl_var_out='Bias_S_direct'
886         cl_varname1='Bias_S_direct'
887         cl_varname2='Bias_S_direct'
888         cl_varunit1='psu'
889         cl_varunit2='psu'
890         cl_code='204'
891         cl_grid='t'
892      CASE ('votbiasp')
893         i_nb_dims=3
894         cl_var_out='Bias_T_pressure'
895         cl_varname1='Bias_T_pressure'
896         cl_varname2='Bias_T_pressure'
897         cl_varunit1='C'
898         cl_varunit2='degree_Celsius'
899         cl_code='205'
900         cl_grid='t'
901      CASE ('vosbiasp')
902         i_nb_dims=3
903         cl_var_out='Bias_S_pressure'
904         cl_varname1='Bias_S_pressure'
905         cl_varname2='Bias_S_pressure'
906         cl_varunit1='psu'
907         cl_varunit2='psu'
908         cl_code='206'
909         cl_grid='t'
910      CASE ('vorbiasp')
911         i_nb_dims=3
912         cl_var_out='Bias_rho_pressure'
913         cl_varname1='Bias_rho_pressure'
914         cl_varname2='Bias_rho_pressure'
915         cl_varunit1='kg/m3/s'
916         cl_varunit2='kg/m3/s'
917         cl_code='207'
918         cl_grid='t'
919      CASE ('sozotaux')
920         i_nb_dims=2
921         cl_var_out='surface_downward_eastward_stress'
922         cl_varname1='Wind_Stress_along_i-axis'
923         cl_varname2=cl_var_out
924         cl_varunit1='N/m2'
925         cl_varunit2='N/m2'
926         cl_code='153'     
927         cl_grid='u'
928         if (sec .eq. 'v') then
929            cl_varname2='taux*x*z'
930            cl_varunit1='Sv'
931            cl_varunit2='Sv'
932         endif
933         if (sec .eq. 'u') then
934            cl_varname2='taux*y*z'
935            cl_varunit1='Sv'
936            cl_varunit2='Sv'
937         endif
938      CASE ('vozocrtx')
939         i_nb_dims=3
940         cl_var_out='sea_water_x_velocity'
941         cl_varname1='sea_water_x_velocity'
942         cl_varname2='U zonal current m/s'
943         cl_varunit1='m/s'
944         cl_varunit2='meter_per_second'
945         cl_code='131'
946         cl_grid='u'
947         if (sec .eq. 'u') then
948            cl_var_out='zonal_transport'
949            cl_varname1='zonal_transport'
950            cl_varname2='zonal_transport'
951            cl_varunit1='Sv'
952            cl_varunit2='Sv'
953         endif
954      CASE ('vozout')
955         i_nb_dims=3
956         cl_var_out='UT'
957         cl_varname1='UT'
958         cl_varname2='UT'
959         cl_varunit1='K*m/s'
960         cl_varunit2='K*m/s'
961         cl_code='169'
962         cl_grid='t'
963         if (sec .eq. 'u') then
964          cl_var_out='zonal_H_transport'
965          cl_varname1='zonal_H_transport'
966          cl_varname2='zonal_H_transport'
967          cl_varunit1='PW'
968          cl_varunit2='PW'
969         endif
970      CASE ('vozous')
971         i_nb_dims=3
972         cl_var_out='US'
973         cl_varname1='US'
974         cl_varname2='US'
975         cl_varunit1='psu*m/s'
976         cl_varunit2='psu*m/s'
977         cl_code='171'
978         cl_grid='t'
979         if (sec .eq. 'u') then
980          cl_var_out='zonal_S_transport'
981          cl_varname1='zonal_S_transport'
982          cl_varname2='zonal_S_transport'
983          cl_varunit1='kT/s'
984          cl_varunit2='kT/s'
985         endif
986      CASE ('vomecrty')
987         i_nb_dims=3
988         cl_var_out='sea_water_y_velocity'
989         cl_varname1='sea_water_y_velocity'
990         cl_varname2='V meridional current m/s'
991         cl_varunit1='m/s'
992         cl_varunit2='meter_per_second'
993         cl_code='132'
994         cl_grid='v'
995         if (sec .eq. 'v') then
996            cl_var_out='meridional_transport'
997            cl_varname1='meridional_transport'
998            cl_varname2='meridional_transport'
999            cl_varunit1='Sv'
1000            cl_varunit2='Sv'
1001         endif
1002      CASE ('sometauy')
1003         i_nb_dims=2
1004         cl_var_out='surface_downward_northward_stress'
1005         cl_varname1='Wind_Stress_along_j-axis'
1006         cl_varname2=cl_var_out
1007         cl_varunit1='N/m2'
1008         cl_varunit2='N/m2'
1009         cl_code='154'     
1010         cl_grid='v'
1011         if (sec .eq. 'v') then
1012            cl_varname2='tauy*x*z'
1013            cl_varunit1='Sv'
1014            cl_varunit2='Sv'
1015         endif
1016         if (sec .eq. 'u') then
1017            cl_varname2='tauy*y*z'
1018            cl_varunit1='Sv'
1019            cl_varunit2='Sv'
1020         endif
1021      CASE ('vomevt')
1022         i_nb_dims=3
1023         cl_var_out='VT'
1024         cl_varname1='VT'
1025         cl_varname2='VT'
1026         cl_varunit1='K*m/s'
1027         cl_varunit2='K*m/s'
1028         cl_code='170'
1029         cl_grid='t'
1030         if (sec .eq. 'v') then
1031          cl_var_out='meridional_H_transport'
1032          cl_varname1='meridional_H_transport'
1033          cl_varname2='meridional_H_transport'
1034          cl_varunit1='PW'
1035          cl_varunit2='PW'
1036         endif
1037      CASE ('vomevs')
1038         i_nb_dims=3
1039         cl_var_out='VS'
1040         cl_varname1='VS'
1041         cl_varname2='VS'
1042         cl_varunit1='psu*m/s'
1043         cl_varunit2='psu*m/s'
1044         cl_code='172'
1045         cl_grid='t'
1046         if (sec .eq. 'v') then
1047          cl_var_out='meridional_S_transport'
1048          cl_varname1='meridional_S_transport'
1049          cl_varname2='meridional_S_transport'
1050          cl_varunit1='kT/s'
1051          cl_varunit2='kT/s'
1052         endif
1053      CASE ('vovecrtz')
1054         i_nb_dims=3
1055         cl_var_out='upward_sea_water_velocity'
1056         cl_varname1='upward_sea_water_velocity'
1057         cl_varname2='W vertical current m/s'
1058         cl_varunit1='m/s'
1059         cl_varunit2='meter_per_second'
1060         cl_code='133'
1061         cl_grid='f'
1062      CASE ('votkeavm')
1063         i_nb_dims=3
1064         cl_var_out='vertical_eddy_viscosity'
1065         cl_varname1='vertical_eddy_viscosity'
1066         cl_varname2='vertical eddy viscosity'
1067         cl_varunit1='m2/s'
1068         cl_varunit2='square_meter_per_second'
1069         cl_code='135'
1070         cl_grid='f'
1071      CASE ('votkeavt')
1072         i_nb_dims=3
1073         cl_var_out='vertical_eddy_diffusivity'
1074         cl_varname1='vertical_eddy_diffusivity'
1075         cl_varname2='vertical eddy diffusivity'
1076         cl_varunit1='m2/s'
1077         cl_varunit2='square_meter_per_second'
1078         cl_code='136'
1079         cl_grid='f'
1080      CASE ('votkeevm')
1081         i_nb_dims=3
1082         cl_var_out='enhanced_vertical_eddy_viscosity'
1083         cl_varname1='enhanced_vertical_eddy_viscosity'
1084         cl_varname2='enhanced vertical eddy viscosity'
1085         cl_varunit1='m2/s'
1086         cl_varunit2='square_meter_per_second'
1087         cl_code='235'
1088         cl_grid='f'
1089      CASE ('votkeevd')
1090         i_nb_dims=3
1091         cl_var_out='enhanced_vertical_eddy_diffusivity'
1092         cl_varname1='enhanced_vertical_eddy_diffusivity'
1093         cl_varname2='enhanced vertical eddy diffusivity'
1094         cl_varunit1='m2/s'
1095         cl_varunit2='square_meter_per_second'
1096         cl_code='236'
1097         cl_grid='f'
1098      CASE ('voddmavs')
1099         i_nb_dims=3
1100         cl_var_out='salt_vertical_eddy_diffusivity'
1101         cl_varname1='salt_vertical_eddy_diffusivity'
1102         cl_varname2='salt vertical eddy diffusivity'
1103         cl_varunit1='m2/s'
1104         cl_varunit2='square_meter_per_second'
1105         cl_code='237'
1106         cl_grid='f'
1107      CASE ('bckint')
1108         i_nb_dims=3
1109         cl_var_out='assim_incr_temperature'
1110         cl_varname1='assim_incr_temperature'
1111         cl_varname2='assim_incr_temperature'
1112         cl_varunit1='K/s'
1113         cl_varunit2='Kelvin_per_second'
1114         cl_code='178'
1115         cl_grid='t'
1116      CASE ('bckins')
1117         i_nb_dims=3
1118         cl_var_out='assim_incr_salinity'
1119         cl_varname1='assim_incr_salinity'
1120         cl_varname2='assim_incr_salinity'
1121         cl_varunit1='psu/s'
1122         cl_varunit2='psu_per_second'
1123         cl_code='184'
1124         cl_grid='t'
1125      CASE ('bckinu')
1126         i_nb_dims=3
1127         cl_var_out='assim_incr_uvel'
1128         cl_varname1='assim_incr_uvel'
1129         cl_varname2='assim_incr_uvel'
1130         cl_varunit1='m/s2'
1131         cl_varunit2='meter_per_square_second'
1132         cl_code='179'
1133         cl_grid='u'
1134      CASE ('bckinv')
1135         i_nb_dims=3
1136         cl_var_out='assim_incr_vvel'
1137         cl_varname1='assim_incr_vvel'
1138         cl_varname2='assim_incr_vvel'
1139         cl_varunit1='m/s2'
1140         cl_varunit2='meter_per_square_second'
1141         cl_code='180'
1142         cl_grid='v'
1143      CASE ('bckineta')
1144         i_nb_dims=2
1145         cl_var_out='assim_incr_eta'
1146         cl_varname1='assim_incr_eta'
1147         cl_varname2='assim_incr_eta'
1148         cl_varunit1='m/s'
1149         cl_varunit2='meter_per_second'
1150         cl_code='181'
1151         cl_grid='t'
1152      CASE ('vozoeivu')
1153         i_nb_dims=3
1154         cl_var_out='vozoeivu'
1155         cl_varname1='vozoeivu'
1156         cl_varname2='eddy U velocity m/s'
1157         cl_varunit1='m/s'
1158         cl_varunit2='meter_per_second'
1159         cl_code='231'
1160      CASE ('vomeeivv')
1161         i_nb_dims=3
1162         cl_var_out='vomeeivv'
1163         cl_varname1='vomeeivv'
1164         cl_varname2='eddy V velocity m/s'
1165         cl_varunit1='m/s'
1166         cl_varunit2='meter_per_second'
1167         cl_code='232'
1168      CASE default
1169         WRITE(*,*)'Variables not defined' 
1170         CALL ABORT
1171      END SELECT
1172      cl_var_out  = TRIM(cl_var_out) 
1173      cl_varname1 = TRIM(cl_varname1) 
1174      cl_varname2 = TRIM(cl_varname2) 
1175      cl_varunit1 = TRIM(cl_varunit1) 
1176      cl_varunit2 = TRIM(cl_varunit2)
1177      cl_code     = TRIM(cl_code)
1178      cl_grid     = TRIM(cl_grid) 
1179
1180      cl_filename_out = TRIM(cl_expnam) // TRIM(cl_date) // '_' // TRIM(cl_code) //sec//'mona.nc'
1181      cl_filename2_out = TRIM(cl_expnam) // TRIM(cl_date) // '_' // TRIM(cl_code) // 'xy' //sec//'mona.nc'
1182!      IF ( i_nb_dims .EQ. 2 ) THEN
1183!         i_dp=1
1184!      ELSE
1185!         i_dp=jpk
1186!      ENDIF
1187      WRITE(*,*)'Variable Attributes: '
1188      WRITE(*,*)'   cl_var_out = ',cl_var_out
1189!      WRITE(*,*)'   i_dp       = ',i_dp
1190      WRITE(*,*)'   cl_grid    = ',cl_grid
1191      WRITE(*,*)'   cl_code    = ',cl_code
1192      WRITE(*,*)'   i_nb_dims  = ',i_nb_dims
1193      WRITE(*,*)'------------------------------------ '
1194
1195      RETURN
1196   END SUBROUTINE variable_att
1197   !-----------------------------------------------------------------------
1198   SUBROUTINE obs_variable_att(cl_type)
1199      !-----------------------------------------------------------------------
1200      !
1201      !                       ROUTINE obs_variable_att
1202      !                     ****************************
1203      !
1204      !  Purpose :
1205      !  -------
1206      !    set attributes for a given variable name (feedback version)
1207      !
1208      !  Original :  K. Mogensen
1209      IMPLICIT NONE
1210      !-----------------------------------------------------------------------
1211      !   Different variables
1212      !-----------------------------------------------------------------------
1213      CHARACTER(len=*) :: cl_type
1214      !
1215      SELECT CASE ( TRIM(cl_var) )
1216      CASE ('sossheig')
1217         i_nb_dims=2
1218         cl_var_out='sea_surface_height_above_geoid'
1219         cl_varname1='sea_surface_height_above_geoid'
1220         cl_varname2='sea_surface_height_above_geoid'
1221         cl_varunit1='m'
1222         cl_varunit2='meter'
1223         cl_code='145' 
1224      CASE ('sosstsst')
1225         i_nb_dims=2
1226         cl_var_out='sea_surface_temperature'
1227         cl_varname1='sea_surface_temperature'
1228         cl_varname2='sea_surface_temperature'
1229         cl_varunit1='K'
1230         cl_varunit2='Kelvin'
1231         cl_code='159'
1232      CASE ('votemper')
1233         i_nb_dims=3
1234         cl_var_out='sea_water_potential_temperature'
1235         cl_varname1='sea_water_potential_temperature'
1236         cl_varname2='Potential temperature ref to surface C'
1237         cl_varunit1='C'
1238         cl_varunit2='degree_Celcius'
1239         cl_code='129'
1240      CASE ('vosaline')
1241         i_nb_dims=3
1242         cl_var_out='sea_water_salinity'
1243         cl_varname1='sea_water_salinity'
1244         cl_varname2='sea water salinity'
1245         cl_varunit1='PSU'
1246         cl_varunit2='practical_salinity_scale'
1247         cl_code='130'
1248      CASE ('vozocrtx')
1249         i_nb_dims=3
1250         cl_var_out='sea_water_x_velocity'
1251         cl_varname1='sea_water_x_velocity'
1252         cl_varname2='U zonal current m/s'
1253         cl_varunit1='m/s'
1254         cl_varunit2='meter_per_second'
1255         cl_code='131'
1256      CASE ('vomecrty')
1257         i_nb_dims=3
1258         cl_var_out='sea_water_y_velocity'
1259         cl_varname1='sea_water_y_velocity'
1260         cl_varname2='V meridional current m/s'
1261         cl_varunit1='m/s'
1262         cl_varunit2='meter_per_second'
1263         cl_code='132'
1264      CASE default
1265         WRITE(*,*)'Variables not defined' 
1266         CALL ABORT
1267      END SELECT
1268      cl_var_out  = TRIM(cl_var_out) 
1269      cl_varname1 = TRIM(cl_varname1) 
1270      cl_varname2 = TRIM(cl_varname2) 
1271      cl_varunit1 = TRIM(cl_varunit1) 
1272      cl_varunit2 = TRIM(cl_varunit2)
1273      cl_code     = TRIM(cl_code)
1274      cl_filename_out = TRIM(cl_expnam) // TRIM(cl_date) // '_' // &
1275         & TRIM(cl_code) // '_'//TRIM(cl_type)//'_'//'fbmona.nc'
1276      cl_filename2_out = TRIM(cl_expnam) // TRIM(cl_date) // '_' // &
1277         & TRIM(cl_code) // '_'//TRIM(cl_type)//'_'// 'xy' //'_'//'fbmona.nc'
1278     
1279      RETURN
1280   END SUBROUTINE obs_variable_att
1281
1282
1283END MODULE omonainfo
Note: See TracBrowser for help on using the repository browser.