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_LOCEAN_2011/NEMOGCM/NEMO/OPA_SRC/DIA – NEMO

source: branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 @ 3115

Last change on this file since 3115 was 2977, checked in by cetlod, 13 years ago

Add in branch 2011/dev_LOCEAN_2011 changes from 2011/dev_r2787_PISCES_improvment, 2011/dev_r2787_LOCEAN_offline_fldread and 2011/dev_r2787_LOCEAN3_TRA_TRP branches, see ticket #877

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