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.
diawri.F90 in branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DIA – NEMO

source: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 @ 3186

Last change on this file since 3186 was 3186, checked in by smasson, 13 years ago

dev_NEMO_MERGE_2011: replace the old wrk_nemo with the new wrk_nemo

  • Property svn:keywords set to Id
File size: 39.9 KB
Line 
1MODULE diawri
2   !!======================================================================
3   !!                     ***  MODULE  diawri  ***
4   !! Ocean diagnostics :  write ocean output files
5   !!=====================================================================
6   !! History :  OPA  ! 1991-03  (M.-A. Foujols)  Original code
7   !!            4.0  ! 1991-11  (G. Madec)
8   !!                 ! 1992-06  (M. Imbard)  correction restart file
9   !!                 ! 1992-07  (M. Imbard)  split into diawri and rstwri
10   !!                 ! 1993-03  (M. Imbard)  suppress writibm
11   !!                 ! 1998-01  (C. Levy)  NETCDF format using ioipsl INTERFACE
12   !!                 ! 1999-02  (E. Guilyardi)  name of netCDF files + variables
13   !!            8.2  ! 2000-06  (M. Imbard)  Original code (diabort.F)
14   !!   NEMO     1.0  ! 2002-06  (A.Bozec, E. Durand)  Original code (diainit.F)
15   !!             -   ! 2002-09  (G. Madec)  F90: Free form and module
16   !!             -   ! 2002-12  (G. Madec)  merge of diabort and diainit, F90
17   !!                 ! 2005-11  (V. Garnier) Surface pressure gradient organization
18   !!            3.2  ! 2008-11  (B. Lemaire) creation from old diawri
19   !!----------------------------------------------------------------------
20
21   !!----------------------------------------------------------------------
22   !!   dia_wri       : create the standart output files
23   !!   dia_wri_state : create an output NetCDF file for a single instantaeous ocean state and forcing fields
24   !!----------------------------------------------------------------------
25   USE oce             ! ocean dynamics and tracers
26   USE dom_oce         ! ocean space and time domain
27   USE zdf_oce         ! ocean vertical physics
28   USE ldftra_oce      ! ocean active tracers: lateral physics
29   USE ldfdyn_oce      ! ocean dynamics: lateral physics
30   USE sol_oce         ! solver variables
31   USE sbc_oce         ! Surface boundary condition: ocean fields
32   USE sbc_ice         ! Surface boundary condition: ice fields
33   USE sbcssr          ! restoring term toward SST/SSS climatology
34   USE phycst          ! physical constants
35   USE zdfmxl          ! mixed layer
36   USE dianam          ! build name of file (routine)
37   USE zdfddm          ! vertical  physics: double diffusion
38   USE diahth          ! thermocline diagnostics
39   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
40   USE in_out_manager  ! I/O manager
41   USE diadimg         ! dimg direct access file format output
42   USE diaar5, ONLY :   lk_diaar5
43   USE iom
44   USE ioipsl
45#if defined key_lim2
46   USE limwri_2 
47#endif
48   USE lib_mpp         ! MPP library
49   USE timing          ! preformance summary
50   USE wrk_nemo        ! working array
51
52   IMPLICIT NONE
53   PRIVATE
54
55   PUBLIC   dia_wri                 ! routines called by step.F90
56   PUBLIC   dia_wri_state
57   PUBLIC   dia_wri_alloc           ! Called by nemogcm module
58
59   INTEGER ::   nid_T, nz_T, nh_T, ndim_T, ndim_hT   ! grid_T file
60   INTEGER ::   nid_U, nz_U, nh_U, ndim_U, ndim_hU   ! grid_U file
61   INTEGER ::   nid_V, nz_V, nh_V, ndim_V, ndim_hV   ! grid_V file
62   INTEGER ::   nid_W, nz_W, nh_W                    ! grid_W file
63   INTEGER ::   ndex(1)                              ! ???
64   INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_hT, ndex_hU, ndex_hV
65   INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_T, ndex_U, ndex_V
66
67   !! * Substitutions
68#  include "zdfddm_substitute.h90"
69#  include "domzgr_substitute.h90"
70#  include "vectopt_loop_substitute.h90"
71   !!----------------------------------------------------------------------
72   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
73   !! $Id $
74   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
75   !!----------------------------------------------------------------------
76CONTAINS
77
78   INTEGER FUNCTION dia_wri_alloc()
79      !!----------------------------------------------------------------------
80      INTEGER, DIMENSION(2) :: ierr
81      !!----------------------------------------------------------------------
82      !
83      ierr = 0
84      !
85      ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) ,     &
86         &      ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) ,     &
87         &      ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) )
88         !
89      dia_wri_alloc = MAXVAL(ierr)
90      IF( lk_mpp )   CALL mpp_sum( dia_wri_alloc )
91      !
92  END FUNCTION dia_wri_alloc
93
94#if defined key_dimgout
95   !!----------------------------------------------------------------------
96   !!   'key_dimgout'                                      DIMG output file
97   !!----------------------------------------------------------------------
98#   include "diawri_dimg.h90"
99
100#else
101   !!----------------------------------------------------------------------
102   !!   Default option                                   NetCDF output file
103   !!----------------------------------------------------------------------
104# if defined key_iomput
105   !!----------------------------------------------------------------------
106   !!   'key_iomput'                                        use IOM library
107   !!----------------------------------------------------------------------
108
109   SUBROUTINE dia_wri( kt )
110      !!---------------------------------------------------------------------
111      !!                  ***  ROUTINE dia_wri  ***
112      !!                   
113      !! ** Purpose :   Standard output of opa: dynamics and tracer fields
114      !!      NETCDF format is used by default
115      !!
116      !! ** Method  :  use iom_put
117      !!----------------------------------------------------------------------
118      !!
119      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index
120      !!
121      INTEGER                      ::   ji, jj, jk              ! dummy loop indices
122      REAL(wp)                     ::   zztmp, zztmpx, zztmpy   !
123      !!
124      REAL(wp), POINTER, DIMENSION(:,:)   :: z2d       ! 2D workspace
125      REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d      ! 3D workspace
126      !!----------------------------------------------------------------------
127      !
128      IF( nn_timing == 1 )   CALL timing_start('dia_wri')
129      !
130      CALL wrk_alloc( jpi , jpj      , z2d )
131      CALL wrk_alloc( jpi , jpj, jpk , z3d )
132      !
133      ! Output the initial state and forcings
134      IF( ninist == 1 ) THEN                       
135         CALL dia_wri_state( 'output.init', kt )
136         ninist = 0
137      ENDIF
138
139      CALL iom_put( "toce"   , tsn(:,:,:,jp_tem)                     )    ! temperature
140      CALL iom_put( "soce"   , tsn(:,:,:,jp_sal)                     )    ! salinity
141      CALL iom_put( "sst"    , tsn(:,:,1,jp_tem)                     )    ! sea surface temperature
142      CALL iom_put( "sst2"   , tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) )    ! square of sea surface temperature
143      CALL iom_put( "sss"    , tsn(:,:,1,jp_sal)                     )    ! sea surface salinity
144      CALL iom_put( "sss2"   , tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) )    ! square of sea surface salinity
145      CALL iom_put( "uoce"   , un                                    )    ! i-current     
146      CALL iom_put( "voce"   , vn                                    )    ! j-current
147     
148      CALL iom_put( "avt"    , avt                                   )    ! T vert. eddy diff. coef.
149      CALL iom_put( "avm"    , avmu                                  )    ! T vert. eddy visc. coef.
150      IF( lk_zdfddm ) THEN
151         CALL iom_put( "avs" , fsavs(:,:,:)                          )    ! S vert. eddy diff. coef.
152      ENDIF
153
154      DO jj = 2, jpjm1                                    ! sst gradient
155         DO ji = fs_2, fs_jpim1   ! vector opt.
156            zztmp      = tsn(ji,jj,1,jp_tem)
157            zztmpx     = ( tsn(ji+1,jj  ,1,jp_tem) - zztmp ) / e1u(ji,jj) + ( zztmp - tsn(ji-1,jj  ,1,jp_tem) ) / e1u(ji-1,jj  )
158            zztmpy     = ( tsn(ji  ,jj+1,1,jp_tem) - zztmp ) / e2v(ji,jj) + ( zztmp - tsn(ji  ,jj-1,1,jp_tem) ) / e2v(ji  ,jj-1)
159            z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy )   &
160               &              * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1)
161         END DO
162      END DO
163      CALL lbc_lnk( z2d, 'T', 1. )
164      CALL iom_put( "sstgrad2",  z2d               )    ! square of module of sst gradient
165!CDIR NOVERRCHK
166      z2d(:,:) = SQRT( z2d(:,:) )
167      CALL iom_put( "sstgrad" ,  z2d               )    ! module of sst gradient
168
169      IF( lk_diaar5 ) THEN
170         z3d(:,:,jpk) = 0.e0
171         DO jk = 1, jpkm1
172            z3d(:,:,jk) = rau0 * un(:,:,jk) * e1u(:,:) * fse3u(:,:,jk)
173         END DO
174         CALL iom_put( "u_masstr", z3d )                  ! mass transport in i-direction
175         zztmp = 0.5 * rcp
176         z2d(:,:) = 0.e0 
177         DO jk = 1, jpkm1
178            DO jj = 2, jpjm1
179               DO ji = fs_2, fs_jpim1   ! vector opt.
180                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) )
181               END DO
182            END DO
183         END DO
184         CALL lbc_lnk( z2d, 'U', -1. )
185         CALL iom_put( "u_heattr", z2d )                  ! heat transport in i-direction
186         DO jk = 1, jpkm1
187            z3d(:,:,jk) = rau0 * vn(:,:,jk) * e2v(:,:) * fse3v(:,:,jk)
188         END DO
189         CALL iom_put( "v_masstr", z3d )                  ! mass transport in j-direction
190         z2d(:,:) = 0.e0 
191         DO jk = 1, jpkm1
192            DO jj = 2, jpjm1
193               DO ji = fs_2, fs_jpim1   ! vector opt.
194                  z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) )
195               END DO
196            END DO
197         END DO
198         CALL lbc_lnk( z2d, 'V', -1. )
199         CALL iom_put( "v_heattr", z2d )                  !  heat transport in i-direction
200      ENDIF
201      !
202      CALL wrk_dealloc( jpi , jpj      , z2d )
203      CALL wrk_dealloc( jpi , jpj, jpk , z3d )
204      !
205      IF( nn_timing == 1 )   CALL timing_stop('dia_wri')
206      !
207   END SUBROUTINE dia_wri
208
209#else
210   !!----------------------------------------------------------------------
211   !!   Default option                                  use IOIPSL  library
212   !!----------------------------------------------------------------------
213
214   SUBROUTINE dia_wri( kt )
215      !!---------------------------------------------------------------------
216      !!                  ***  ROUTINE dia_wri  ***
217      !!                   
218      !! ** Purpose :   Standard output of opa: dynamics and tracer fields
219      !!      NETCDF format is used by default
220      !!
221      !! ** Method  :   At the beginning of the first time step (nit000),
222      !!      define all the NETCDF files and fields
223      !!      At each time step call histdef to compute the mean if ncessary
224      !!      Each nwrite time step, output the instantaneous or mean fields
225      !!----------------------------------------------------------------------
226      !!
227      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index
228      !!
229      LOGICAL ::   ll_print = .FALSE.                        ! =T print and flush numout
230      CHARACTER (len=40) ::   clhstnam, clop, clmx           ! local names
231      INTEGER  ::   inum = 11                                ! temporary logical unit
232      INTEGER  ::   iimi, iima, ipk, it, itmod, ijmi, ijma   ! local integers
233      REAL(wp) ::   zsto, zout, zmax, zjulian, zdt           ! local scalars
234      !!
235      REAL(wp), POINTER, DIMENSION(:,:)   :: zw2d       ! 2D workspace
236      !!----------------------------------------------------------------------
237      !
238      IF( nn_timing == 1 )   CALL timing_start('dia_wri')
239      !
240      CALL wrk_alloc( jpi , jpj      , zw2d )
241      !
242      ! Output the initial state and forcings
243      IF( ninist == 1 ) THEN                       
244         CALL dia_wri_state( 'output.init', kt )
245         ninist = 0
246      ENDIF
247      !
248      ! 0. Initialisation
249      ! -----------------
250
251      ! local variable for debugging
252      ll_print = .FALSE.
253      ll_print = ll_print .AND. lwp
254
255      ! Define frequency of output and means
256      zdt = rdt
257      IF( nacc == 1 ) zdt = rdtmin
258      IF( ln_mskland )   THEN   ;   clop = "only(x)"   ! put 1.e+20 on land (very expensive!!)
259      ELSE                      ;   clop = "x"         ! no use of the mask value (require less cpu time)
260      ENDIF
261#if defined key_diainstant
262      zsto = nwrite * zdt
263      clop = "inst("//TRIM(clop)//")"
264#else
265      zsto=zdt
266      clop = "ave("//TRIM(clop)//")"
267#endif
268      zout = nwrite * zdt
269      zmax = ( nitend - nit000 + 1 ) * zdt
270
271      ! Define indices of the horizontal output zoom and vertical limit storage
272      iimi = 1      ;      iima = jpi
273      ijmi = 1      ;      ijma = jpj
274      ipk = jpk
275
276      ! define time axis
277      it = kt
278      itmod = kt - nit000 + 1
279
280
281      ! 1. Define NETCDF files and fields at beginning of first time step
282      ! -----------------------------------------------------------------
283
284      IF( kt == nit000 ) THEN
285
286         ! Define the NETCDF files (one per grid)
287
288         ! Compute julian date from starting date of the run
289         CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian )
290         zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment
291         IF(lwp)WRITE(numout,*)
292         IF(lwp)WRITE(numout,*) 'Date 0 used :', nit000, ' YEAR ', nyear,   &
293            &                    ' MONTH ', nmonth, ' DAY ', nday, 'Julian day : ', zjulian
294         IF(lwp)WRITE(numout,*) ' indexes of zoom = ', iimi, iima, ijmi, ijma,   &
295                                 ' limit storage in depth = ', ipk
296
297         ! WRITE root name in date.file for use by postpro
298         IF(lwp) THEN
299            CALL dia_nam( clhstnam, nwrite,' ' )
300            CALL ctl_opn( inum, 'date.file', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, narea )
301            WRITE(inum,*) clhstnam
302            CLOSE(inum)
303         ENDIF
304
305         ! Define the T grid FILE ( nid_T )
306
307         CALL dia_nam( clhstnam, nwrite, 'grid_T' )
308         IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam    ! filename
309         CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,           &  ! Horizontal grid: glamt and gphit
310            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       &
311            &          nit000-1, zjulian, zdt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set )
312         CALL histvert( nid_T, "deptht", "Vertical T levels",      &  ! Vertical grid: gdept
313            &           "m", ipk, gdept_0, nz_T, "down" )
314         !                                                            ! Index of ocean points
315         CALL wheneq( jpi*jpj*ipk, tmask, 1, 1., ndex_T , ndim_T  )      ! volume
316         CALL wheneq( jpi*jpj    , tmask, 1, 1., ndex_hT, ndim_hT )      ! surface
317
318         ! Define the U grid FILE ( nid_U )
319
320         CALL dia_nam( clhstnam, nwrite, 'grid_U' )
321         IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam    ! filename
322         CALL histbeg( clhstnam, jpi, glamu, jpj, gphiu,           &  ! Horizontal grid: glamu and gphiu
323            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       &
324            &          nit000-1, zjulian, zdt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set )
325         CALL histvert( nid_U, "depthu", "Vertical U levels",      &  ! Vertical grid: gdept
326            &           "m", ipk, gdept_0, nz_U, "down" )
327         !                                                            ! Index of ocean points
328         CALL wheneq( jpi*jpj*ipk, umask, 1, 1., ndex_U , ndim_U  )      ! volume
329         CALL wheneq( jpi*jpj    , umask, 1, 1., ndex_hU, ndim_hU )      ! surface
330
331         ! Define the V grid FILE ( nid_V )
332
333         CALL dia_nam( clhstnam, nwrite, 'grid_V' )                   ! filename
334         IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam
335         CALL histbeg( clhstnam, jpi, glamv, jpj, gphiv,           &  ! Horizontal grid: glamv and gphiv
336            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       &
337            &          nit000-1, zjulian, zdt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set )
338         CALL histvert( nid_V, "depthv", "Vertical V levels",      &  ! Vertical grid : gdept
339            &          "m", ipk, gdept_0, nz_V, "down" )
340         !                                                            ! Index of ocean points
341         CALL wheneq( jpi*jpj*ipk, vmask, 1, 1., ndex_V , ndim_V  )      ! volume
342         CALL wheneq( jpi*jpj    , vmask, 1, 1., ndex_hV, ndim_hV )      ! surface
343
344         ! Define the W grid FILE ( nid_W )
345
346         CALL dia_nam( clhstnam, nwrite, 'grid_W' )                   ! filename
347         IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam
348         CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,           &  ! Horizontal grid: glamt and gphit
349            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       &
350            &          nit000-1, zjulian, zdt, nh_W, nid_W, domain_id=nidom, snc4chunks=snc4set )
351         CALL histvert( nid_W, "depthw", "Vertical W levels",      &  ! Vertical grid: gdepw
352            &          "m", ipk, gdepw_0, nz_W, "down" )
353
354
355         ! Declare all the output fields as NETCDF variables
356
357         !                                                                                      !!! nid_T : 3D
358         CALL histdef( nid_T, "votemper", "Temperature"                        , "C"      ,   &  ! tn
359            &          jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout )
360         CALL histdef( nid_T, "vosaline", "Salinity"                           , "PSU"    ,   &  ! sn
361            &          jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout )
362         !                                                                                      !!! nid_T : 2D
363         CALL histdef( nid_T, "sosstsst", "Sea Surface temperature"            , "C"      ,   &  ! sst
364            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
365         CALL histdef( nid_T, "sosaline", "Sea Surface Salinity"               , "PSU"    ,   &  ! sss
366            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
367         CALL histdef( nid_T, "sossheig", "Sea Surface Height"                 , "m"      ,   &  ! ssh
368            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
369!!$#if defined key_lim3 || defined key_lim2
370!!$         ! sowaflup = sowaflep + sorunoff + sowafldp + a term associated to
371!!$         !    internal damping to Levitus that can be diagnosed from others
372!!$         ! sowaflcd = sowaflep + sorunoff + sowafldp + iowaflup
373!!$         CALL histdef( nid_T, "iowaflup", "Ice=>ocean net freshwater"          , "kg/m2/s",   &  ! fsalt
374!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
375!!$         CALL histdef( nid_T, "sowaflep", "atmos=>ocean net freshwater"        , "kg/m2/s",   &  ! fmass
376!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
377!!$#endif
378         CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! (emp-rnf)
379            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
380!!$         CALL histdef( nid_T, "sorunoff", "Runoffs"                            , "Kg/m2/s",   &  ! runoffs
381!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
382         CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux"  , "kg/m2/s",   &  ! (emps-rnf)
383            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
384         CALL histdef( nid_T, "sosalflx", "Surface Salt Flux"                  , "Kg/m2/s",   &  ! (emps-rnf) * sn
385            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
386         CALL histdef( nid_T, "sohefldo", "Net Downward Heat Flux"             , "W/m2"   ,   &  ! qns + qsr
387            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
388         CALL histdef( nid_T, "soshfldo", "Shortwave Radiation"                , "W/m2"   ,   &  ! qsr
389            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
390         CALL histdef( nid_T, "somixhgt", "Turbocline Depth"                   , "m"      ,   &  ! hmld
391            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
392         CALL histdef( nid_T, "somxl010", "Mixed Layer Depth 0.01"             , "m"      ,   &  ! hmlp
393            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
394         CALL histdef( nid_T, "soicecov", "Ice fraction"                       , "[0,1]"  ,   &  ! fr_i
395            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
396         CALL histdef( nid_T, "sowindsp", "wind speed at 10m"                  , "m/s"    ,   &  ! wndm
397            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
398#if ! defined key_coupled
399         CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping"         , "W/m2"   ,   &  ! qrp
400            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
401         CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping"        , "Kg/m2/s",   &  ! erp
402            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
403         CALL histdef( nid_T, "sosafldp", "Surface salt flux: damping"         , "Kg/m2/s",   &  ! erp * sn
404            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
405#endif
406
407
408
409#if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 )
410         CALL histdef( nid_T, "sohefldp", "Surface Heat Flux: Damping"         , "W/m2"   ,   &  ! qrp
411            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
412         CALL histdef( nid_T, "sowafldp", "Surface Water Flux: Damping"        , "Kg/m2/s",   &  ! erp
413            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
414         CALL histdef( nid_T, "sosafldp", "Surface salt flux: Damping"         , "Kg/m2/s",   &  ! erp * sn
415            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
416#endif
417         clmx ="l_max(only(x))"    ! max index on a period
418         CALL histdef( nid_T, "sobowlin", "Bowl Index"                         , "W-point",   &  ! bowl INDEX
419            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clmx, zsto, zout )
420#if defined key_diahth
421         CALL histdef( nid_T, "sothedep", "Thermocline Depth"                  , "m"      ,   & ! hth
422            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
423         CALL histdef( nid_T, "so20chgt", "Depth of 20C isotherm"              , "m"      ,   & ! hd20
424            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
425         CALL histdef( nid_T, "so28chgt", "Depth of 28C isotherm"              , "m"      ,   & ! hd28
426            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
427         CALL histdef( nid_T, "sohtc300", "Heat content 300 m"                 , "W"      ,   & ! htc3
428            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
429#endif
430
431#if defined key_coupled 
432# if defined key_lim3
433         Must be adapted to LIM3
434# else
435         CALL histdef( nid_T,"soicetem" , "Ice Surface Temperature"            , "K"      ,   &  ! tn_ice
436            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
437         CALL histdef( nid_T,"soicealb" , "Ice Albedo"                         , "[0,1]"  ,   &  ! alb_ice
438            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
439# endif 
440#endif
441
442         CALL histend( nid_T, snc4chunks=snc4set )
443
444         !                                                                                      !!! nid_U : 3D
445         CALL histdef( nid_U, "vozocrtx", "Zonal Current"                      , "m/s"    ,   &  ! un
446            &          jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )
447#if defined key_diaeiv
448         CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current"                  , "m/s"    ,   &  ! u_eiv
449            &          jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )
450#endif
451         !                                                                                      !!! nid_U : 2D
452         CALL histdef( nid_U, "sozotaux", "Wind Stress along i-axis"           , "N/m2"   ,   &  ! utau
453            &          jpi, jpj, nh_U, 1  , 1, 1  , - 99, 32, clop, zsto, zout )
454
455         CALL histend( nid_U, snc4chunks=snc4set )
456
457         !                                                                                      !!! nid_V : 3D
458         CALL histdef( nid_V, "vomecrty", "Meridional Current"                 , "m/s"    ,   &  ! vn
459            &          jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )
460#if defined key_diaeiv
461         CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current"             , "m/s"    ,   &  ! v_eiv
462            &          jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )
463#endif
464         !                                                                                      !!! nid_V : 2D
465         CALL histdef( nid_V, "sometauy", "Wind Stress along j-axis"           , "N/m2"   ,   &  ! vtau
466            &          jpi, jpj, nh_V, 1  , 1, 1  , - 99, 32, clop, zsto, zout )
467
468         CALL histend( nid_V, snc4chunks=snc4set )
469
470         !                                                                                      !!! nid_W : 3D
471         CALL histdef( nid_W, "vovecrtz", "Vertical Velocity"                  , "m/s"    ,   &  ! wn
472            &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )
473#if defined key_diaeiv
474         CALL histdef( nid_W, "voveeivw", "Vertical EIV Velocity"              , "m/s"    ,   &  ! w_eiv
475            &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )
476#endif
477         CALL histdef( nid_W, "votkeavt", "Vertical Eddy Diffusivity"          , "m2/s"   ,   &  ! avt
478            &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )
479         CALL histdef( nid_W, "votkeavm", "Vertical Eddy Viscosity"             , "m2/s"  ,   &  ! avmu
480            &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )
481
482         IF( lk_zdfddm ) THEN
483            CALL histdef( nid_W,"voddmavs","Salt Vertical Eddy Diffusivity"    , "m2/s"   ,   &  ! avs
484               &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )
485         ENDIF
486         !                                                                                      !!! nid_W : 2D
487#if defined key_traldf_c2d
488         CALL histdef( nid_W, "soleahtw", "lateral eddy diffusivity"           , "m2/s"   ,   &  ! ahtw
489            &          jpi, jpj, nh_W, 1  , 1, 1  , - 99, 32, clop, zsto, zout )
490# if defined key_traldf_eiv 
491            CALL histdef( nid_W, "soleaeiw", "eddy induced vel. coeff. at w-point", "m2/s",   &  ! aeiw
492               &       jpi, jpj, nh_W, 1  , 1, 1  , - 99, 32, clop, zsto, zout )
493# endif
494#endif
495
496         CALL histend( nid_W, snc4chunks=snc4set )
497
498         IF(lwp) WRITE(numout,*)
499         IF(lwp) WRITE(numout,*) 'End of NetCDF Initialization'
500         IF(ll_print) CALL FLUSH(numout )
501
502      ENDIF
503
504      ! 2. Start writing data
505      ! ---------------------
506
507      ! ndex(1) est utilise ssi l'avant dernier argument est diffferent de
508      ! la taille du tableau en sortie. Dans ce cas , l'avant dernier argument
509      ! donne le nombre d'elements, et ndex la liste des indices a sortir
510
511      IF( lwp .AND. MOD( itmod, nwrite ) == 0 ) THEN
512         WRITE(numout,*) 'dia_wri : write model outputs in NetCDF files at ', kt, 'time-step'
513         WRITE(numout,*) '~~~~~~ '
514      ENDIF
515
516      ! Write fields on T grid
517      CALL histwrite( nid_T, "votemper", it, tsn(:,:,:,jp_tem), ndim_T , ndex_T  )   ! temperature
518      CALL histwrite( nid_T, "vosaline", it, tsn(:,:,:,jp_sal), ndim_T , ndex_T  )   ! salinity
519      CALL histwrite( nid_T, "sosstsst", it, tsn(:,:,1,jp_tem), ndim_hT, ndex_hT )   ! sea surface temperature
520      CALL histwrite( nid_T, "sosaline", it, tsn(:,:,1,jp_sal), ndim_hT, ndex_hT )   ! sea surface salinity
521      CALL histwrite( nid_T, "sossheig", it, sshn          , ndim_hT, ndex_hT )   ! sea surface height
522!!$#if  defined key_lim3 || defined key_lim2
523!!$      CALL histwrite( nid_T, "iowaflup", it, fsalt(:,:)    , ndim_hT, ndex_hT )   ! ice=>ocean water flux
524!!$      CALL histwrite( nid_T, "sowaflep", it, fmass(:,:)    , ndim_hT, ndex_hT )   ! atmos=>ocean water flux
525!!$#endif
526      CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf )   , ndim_hT, ndex_hT )   ! upward water flux
527!!$      CALL histwrite( nid_T, "sorunoff", it, runoff        , ndim_hT, ndex_hT )   ! runoff
528      CALL histwrite( nid_T, "sowaflcd", it, ( emps-rnf )  , ndim_hT, ndex_hT )   ! c/d water flux
529      zw2d(:,:) = ( emps(:,:) - rnf(:,:) ) * tsn(:,:,1,jp_sal) * tmask(:,:,1)
530      CALL histwrite( nid_T, "sosalflx", it, zw2d          , ndim_hT, ndex_hT )   ! c/d salt flux
531      CALL histwrite( nid_T, "sohefldo", it, qns + qsr     , ndim_hT, ndex_hT )   ! total heat flux
532      CALL histwrite( nid_T, "soshfldo", it, qsr           , ndim_hT, ndex_hT )   ! solar heat flux
533      CALL histwrite( nid_T, "somixhgt", it, hmld          , ndim_hT, ndex_hT )   ! turbocline depth
534      CALL histwrite( nid_T, "somxl010", it, hmlp          , ndim_hT, ndex_hT )   ! mixed layer depth
535      CALL histwrite( nid_T, "soicecov", it, fr_i          , ndim_hT, ndex_hT )   ! ice fraction   
536      CALL histwrite( nid_T, "sowindsp", it, wndm          , ndim_hT, ndex_hT )   ! wind speed   
537#if ! defined key_coupled
538      CALL histwrite( nid_T, "sohefldp", it, qrp           , ndim_hT, ndex_hT )   ! heat flux damping
539      CALL histwrite( nid_T, "sowafldp", it, erp           , ndim_hT, ndex_hT )   ! freshwater flux damping
540      IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1)
541      CALL histwrite( nid_T, "sosafldp", it, zw2d          , ndim_hT, ndex_hT )   ! salt flux damping
542#endif
543#if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 )
544      CALL histwrite( nid_T, "sohefldp", it, qrp           , ndim_hT, ndex_hT )   ! heat flux damping
545      CALL histwrite( nid_T, "sowafldp", it, erp           , ndim_hT, ndex_hT )   ! freshwater flux damping
546         IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1)
547      CALL histwrite( nid_T, "sosafldp", it, zw2d          , ndim_hT, ndex_hT )   ! salt flux damping
548#endif
549      zw2d(:,:) = FLOAT( nmln(:,:) ) * tmask(:,:,1)
550      CALL histwrite( nid_T, "sobowlin", it, zw2d          , ndim_hT, ndex_hT )   ! ???
551
552#if defined key_diahth
553      CALL histwrite( nid_T, "sothedep", it, hth           , ndim_hT, ndex_hT )   ! depth of the thermocline
554      CALL histwrite( nid_T, "so20chgt", it, hd20          , ndim_hT, ndex_hT )   ! depth of the 20 isotherm
555      CALL histwrite( nid_T, "so28chgt", it, hd28          , ndim_hT, ndex_hT )   ! depth of the 28 isotherm
556      CALL histwrite( nid_T, "sohtc300", it, htc3          , ndim_hT, ndex_hT )   ! first 300m heaat content
557#endif
558
559#if defined key_coupled 
560# if defined key_lim3
561      Must be adapted for LIM3
562      CALL histwrite( nid_T, "soicetem", it, tn_ice        , ndim_hT, ndex_hT )   ! surf. ice temperature
563      CALL histwrite( nid_T, "soicealb", it, alb_ice       , ndim_hT, ndex_hT )   ! ice albedo
564# else
565      CALL histwrite( nid_T, "soicetem", it, tn_ice(:,:,1) , ndim_hT, ndex_hT )   ! surf. ice temperature
566      CALL histwrite( nid_T, "soicealb", it, alb_ice(:,:,1), ndim_hT, ndex_hT )   ! ice albedo
567# endif
568#endif
569         ! Write fields on U grid
570      CALL histwrite( nid_U, "vozocrtx", it, un            , ndim_U , ndex_U )    ! i-current
571#if defined key_diaeiv
572      CALL histwrite( nid_U, "vozoeivu", it, u_eiv         , ndim_U , ndex_U )    ! i-eiv current
573#endif
574      CALL histwrite( nid_U, "sozotaux", it, utau          , ndim_hU, ndex_hU )   ! i-wind stress
575
576         ! Write fields on V grid
577      CALL histwrite( nid_V, "vomecrty", it, vn            , ndim_V , ndex_V  )   ! j-current
578#if defined key_diaeiv
579      CALL histwrite( nid_V, "vomeeivv", it, v_eiv         , ndim_V , ndex_V  )   ! j-eiv current
580#endif
581      CALL histwrite( nid_V, "sometauy", it, vtau          , ndim_hV, ndex_hV )   ! j-wind stress
582
583         ! Write fields on W grid
584      CALL histwrite( nid_W, "vovecrtz", it, wn             , ndim_T, ndex_T )    ! vert. current
585#   if defined key_diaeiv
586      CALL histwrite( nid_W, "voveeivw", it, w_eiv          , ndim_T, ndex_T )    ! vert. eiv current
587#   endif
588      CALL histwrite( nid_W, "votkeavt", it, avt            , ndim_T, ndex_T )    ! T vert. eddy diff. coef.
589      CALL histwrite( nid_W, "votkeavm", it, avmu           , ndim_T, ndex_T )    ! T vert. eddy visc. coef.
590      IF( lk_zdfddm ) THEN
591         CALL histwrite( nid_W, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T )    ! S vert. eddy diff. coef.
592      ENDIF
593#if defined key_traldf_c2d
594      CALL histwrite( nid_W, "soleahtw", it, ahtw          , ndim_hT, ndex_hT )   ! lateral eddy diff. coef.
595# if defined key_traldf_eiv
596         CALL histwrite( nid_W, "soleaeiw", it, aeiw       , ndim_hT, ndex_hT )   ! EIV coefficient at w-point
597# endif
598#endif
599
600      ! 3. Close all files
601      ! ---------------------------------------
602      IF( kt == nitend ) THEN
603         CALL histclo( nid_T )
604         CALL histclo( nid_U )
605         CALL histclo( nid_V )
606         CALL histclo( nid_W )
607      ENDIF
608      !
609      CALL wrk_dealloc( jpi , jpj      , zw2d )
610      !
611      IF( nn_timing == 1 )   CALL timing_stop('dia_wri')
612      !
613   END SUBROUTINE dia_wri
614# endif
615
616#endif
617
618   SUBROUTINE dia_wri_state( cdfile_name, kt )
619      !!---------------------------------------------------------------------
620      !!                 ***  ROUTINE dia_wri_state  ***
621      !!       
622      !! ** Purpose :   create a NetCDF file named cdfile_name which contains
623      !!      the instantaneous ocean state and forcing fields.
624      !!        Used to find errors in the initial state or save the last
625      !!      ocean state in case of abnormal end of a simulation
626      !!
627      !! ** Method  :   NetCDF files using ioipsl
628      !!      File 'output.init.nc'  is created if ninist = 1 (namelist)
629      !!      File 'output.abort.nc' is created in case of abnormal job end
630      !!----------------------------------------------------------------------
631      CHARACTER (len=* ), INTENT( in ) ::   cdfile_name      ! name of the file created
632      INTEGER           , INTENT( in ) ::   kt               ! ocean time-step index
633      !!
634      CHARACTER (len=32) :: clname
635      CHARACTER (len=40) :: clop
636      INTEGER  ::   id_i , nz_i, nh_i       
637      INTEGER, DIMENSION(1) ::   idex             ! local workspace
638      REAL(wp) ::   zsto, zout, zmax, zjulian, zdt
639      !!----------------------------------------------------------------------
640      !
641      IF( nn_timing == 1 )   CALL timing_start('dia_wri_state')
642
643      ! 0. Initialisation
644      ! -----------------
645
646      ! Define name, frequency of output and means
647      clname = cdfile_name
648      IF( .NOT. Agrif_Root() ) clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname)
649      zdt  = rdt
650      zsto = rdt
651      clop = "inst(x)"           ! no use of the mask value (require less cpu time)
652      zout = rdt
653      zmax = ( nitend - nit000 + 1 ) * zdt
654
655      IF(lwp) WRITE(numout,*)
656      IF(lwp) WRITE(numout,*) 'dia_wri_state : single instantaneous ocean state'
657      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~   and forcing fields file created '
658      IF(lwp) WRITE(numout,*) '                and named :', clname, '.nc'
659
660
661      ! 1. Define NETCDF files and fields at beginning of first time step
662      ! -----------------------------------------------------------------
663
664      ! Compute julian date from starting date of the run
665      CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian )         ! time axis
666      zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment
667      CALL histbeg( clname, jpi, glamt, jpj, gphit,   &
668          1, jpi, 1, jpj, nit000-1, zjulian, zdt, nh_i, id_i, domain_id=nidom, snc4chunks=snc4set ) ! Horizontal grid : glamt and gphit
669      CALL histvert( id_i, "deptht", "Vertical T levels",   &    ! Vertical grid : gdept
670          "m", jpk, gdept_0, nz_i, "down")
671
672      ! Declare all the output fields as NetCDF variables
673
674      CALL histdef( id_i, "vosaline", "Salinity"              , "PSU"    ,   &   ! salinity
675         &          jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout )
676      CALL histdef( id_i, "votemper", "Temperature"           , "C"      ,   &   ! temperature
677         &          jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout )
678      CALL histdef( id_i, "sossheig", "Sea Surface Height"    , "m"      ,   &  ! ssh
679         &          jpi, jpj, nh_i, 1  , 1, 1  , nz_i, 32, clop, zsto, zout )
680      CALL histdef( id_i, "vozocrtx", "Zonal Current"         , "m/s"    ,   &   ! zonal current
681         &          jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout )
682      CALL histdef( id_i, "vomecrty", "Meridional Current"    , "m/s"    ,   &   ! meridonal current
683         &          jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 
684      CALL histdef( id_i, "vovecrtz", "Vertical Velocity"     , "m/s"    ,   &   ! vertical current
685         &          jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 
686      CALL histdef( id_i, "sowaflup", "Net Upward Water Flux" , "Kg/m2/S",   &   ! net freshwater
687         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
688      CALL histdef( id_i, "sohefldo", "Net Downward Heat Flux", "W/m2"   ,   &   ! net heat flux
689         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
690      CALL histdef( id_i, "soshfldo", "Shortwave Radiation"   , "W/m2"   ,   &   ! solar flux
691         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
692      CALL histdef( id_i, "soicecov", "Ice fraction"          , "[0,1]"  ,   &   ! fr_i
693         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
694      CALL histdef( id_i, "sozotaux", "Zonal Wind Stress"     , "N/m2"   ,   &   ! i-wind stress
695         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
696      CALL histdef( id_i, "sometauy", "Meridional Wind Stress", "N/m2"   ,   &   ! j-wind stress
697         &          jpi, jpj, nh_i, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
698
699#if defined key_lim2
700      CALL lim_wri_state_2( kt, id_i, nh_i )
701#else
702      CALL histend( id_i, snc4chunks=snc4set )
703#endif
704
705      ! 2. Start writing data
706      ! ---------------------
707      ! idex(1) est utilise ssi l'avant dernier argument est diffferent de
708      ! la taille du tableau en sortie. Dans ce cas , l'avant dernier argument
709      ! donne le nombre d'elements, et idex la liste des indices a sortir
710      idex(1) = 1   ! init to avoid compil warning
711
712      ! Write all fields on T grid
713      CALL histwrite( id_i, "votemper", kt, tsn(:,:,:,jp_tem), jpi*jpj*jpk, idex )    ! now temperature
714      CALL histwrite( id_i, "vosaline", kt, tsn(:,:,:,jp_sal), jpi*jpj*jpk, idex )    ! now salinity
715      CALL histwrite( id_i, "sossheig", kt, sshn             , jpi*jpj    , idex )    ! sea surface height
716      CALL histwrite( id_i, "vozocrtx", kt, un               , jpi*jpj*jpk, idex )    ! now i-velocity
717      CALL histwrite( id_i, "vomecrty", kt, vn               , jpi*jpj*jpk, idex )    ! now j-velocity
718      CALL histwrite( id_i, "vovecrtz", kt, wn               , jpi*jpj*jpk, idex )    ! now k-velocity
719      CALL histwrite( id_i, "sowaflup", kt, (emp-rnf )       , jpi*jpj    , idex )    ! freshwater budget
720      CALL histwrite( id_i, "sohefldo", kt, qsr + qns        , jpi*jpj    , idex )    ! total heat flux
721      CALL histwrite( id_i, "soshfldo", kt, qsr              , jpi*jpj    , idex )    ! solar heat flux
722      CALL histwrite( id_i, "soicecov", kt, fr_i             , jpi*jpj    , idex )    ! ice fraction
723      CALL histwrite( id_i, "sozotaux", kt, utau             , jpi*jpj    , idex )    ! i-wind stress
724      CALL histwrite( id_i, "sometauy", kt, vtau             , jpi*jpj    , idex )    ! j-wind stress
725
726      ! 3. Close the file
727      ! -----------------
728      CALL histclo( id_i )
729#if ! defined key_iomput && ! defined key_dimgout
730      IF( ninist /= 1  ) THEN
731         CALL histclo( nid_T )
732         CALL histclo( nid_U )
733         CALL histclo( nid_V )
734         CALL histclo( nid_W )
735      ENDIF
736#endif
737       
738      IF( nn_timing == 1 )   CALL timing_stop('dia_wri_state')
739      !
740
741   END SUBROUTINE dia_wri_state
742   !!======================================================================
743END MODULE diawri
Note: See TracBrowser for help on using the repository browser.