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.
limwri.F90 in branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90 @ 8172

Last change on this file since 8172 was 8172, checked in by vancop, 7 years ago

SIMIP branch, generic 2D transport fluxes

  • Property svn:keywords set to Id
File size: 41.3 KB
Line 
1MODULE limwri
2   !!======================================================================
3   !!                     ***  MODULE  limwri  ***
4   !!         Ice diagnostics :  write ice output files
5   !!======================================================================
6#if defined key_lim3
7   !!----------------------------------------------------------------------
8   !!   'key_lim3'                                      LIM3 sea-ice model
9   !!----------------------------------------------------------------------
10   !!   lim_wri      : write of the diagnostics variables in ouput file
11   !!   lim_wri_state : write for initial state or/and abandon
12   !!----------------------------------------------------------------------
13   USE ioipsl
14   USE dianam          ! build name of file (routine)
15   USE phycst
16   USE dom_oce
17   USE sbc_oce         ! Surface boundary condition: ocean fields
18   USE sbc_ice         ! Surface boundary condition: ice fields
19   USE ice
20   USE dom_ice
21   USE limvar
22   USE in_out_manager
23   USE lbclnk
24   USE lib_mpp         ! MPP library
25   USE wrk_nemo        ! work arrays
26   USE iom
27   USE timing          ! Timing
28   USE lib_fortran     ! Fortran utilities
29
30   IMPLICIT NONE
31   PRIVATE
32
33   PUBLIC lim_wri        ! routine called by lim_step.F90
34   PUBLIC lim_wri_state  ! called by dia_wri_state
35
36   !!----------------------------------------------------------------------
37   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
38   !! $Id$
39   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
40   !!----------------------------------------------------------------------
41CONTAINS
42
43   SUBROUTINE lim_wri( kindic )
44      !!-------------------------------------------------------------------
45      !!  This routine computes the average of some variables and write it
46      !!  on the ouput files.
47      !!  ATTENTION cette routine n'est valable que si le pas de temps est
48      !!  egale a une fraction entiere de 1 jours.
49      !!  Diff 1-D 3-D : suppress common also included in etat
50      !!                 suppress cmoymo 11-18
51      !!  modif : 03/06/98
52      !!-------------------------------------------------------------------
53      INTEGER, INTENT(in) ::   kindic   ! if kindic < 0 there has been an error somewhere
54      !
55      INTEGER  ::  ii, ji, jj, jk, jl  ! dummy loop indices
56      REAL(wp) ::  z2da, z2db, ztmp, zrho1, zrho2
57      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zswi2
58      REAL(wp), POINTER, DIMENSION(:,:)   ::  z2d, zswi    ! 2D workspace
59      REAL(wp), POINTER, DIMENSION(:,:)   ::  zfb          ! ice freeboard
60      REAL(wp), POINTER, DIMENSION(:,:)   ::  zamask, zamask15 ! 15% concentration mask
61
62      ! Global ice diagnostics (SIMIP)
63      REAL(wp) ::  zdiag_area_nh, &   ! area, extent, volume
64         &         zdiag_extt_nh, &
65         &         zdiag_area_sh, & 
66         &         zdiag_extt_sh, & 
67         &         zdiag_volu_nh, & 
68         &         zdiag_volu_sh 
69
70!     ! Strait / passage fluxes (SIMIP)
71!     REAL(wp), DIMENSION(4) ::  &                                    ! Strait fluxes for output
72!        &         zdiag_area_strait  ,   &                                    ! 1=Fram Strait, 2=CAA, 3= Barents, 4 = Bering
73!        &         zdiag_mice_strait  ,   &
74!        &         zdiag_msno_strait
75
76!     REAL(wp) :: zfarea_u, zfmice_u, zfmsno_u, zfarea_v, zfmice_v, zfmsno_v   ! dummy fluxes
77
78!     REAL(wp), DIMENSION(11) :: &
79!        &         zui, zuj, zvi, zvj                                          ! strait addresses
80
81!     INTEGER  :: Nu, Nv, &                                                    ! passage size
82!                 i_strait                                                     ! strait number
83
84!     INTEGER, DIMENSION(4)  :: ji0, ji1, jj0, jj1
85     
86      !!-------------------------------------------------------------------
87
88      IF( nn_timing == 1 )  CALL timing_start('limwri')
89
90      CALL wrk_alloc( jpi, jpj, jpl, zswi2 )
91      CALL wrk_alloc( jpi, jpj     , z2d, zswi )
92      CALL wrk_alloc( jpi, jpj     , zfb, zamask, zamask15 )
93
94      !-----------------------------
95      ! Mean category values
96      !-----------------------------
97
98      ! brine volume
99      CALL lim_var_bv 
100
101      ! tresholds for outputs
102      DO jj = 1, jpj
103         DO ji = 1, jpi
104            zswi(ji,jj)  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) ! 1 if ice, 0 if no ice
105         END DO
106      END DO
107      DO jj = 1, jpj
108         DO ji = 1, jpi
109            zamask(ji,jj)  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.05 ) )   ! 1 if 5% ice, 0 if less - required to mask thickness and snow depth
110            zamask15(ji,jj)  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.15 ) ) ! 1 if 15% ice, 0 if less
111         END DO
112      END DO
113      DO jl = 1, jpl
114         DO jj = 1, jpj
115            DO ji = 1, jpi
116               zswi2(ji,jj,jl)  = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) )
117            END DO
118         END DO
119      END DO
120      !
121      ! fluxes
122      ! pfrld is the lead fraction at the previous time step (actually between TRP and THD)
123      IF( iom_use('qsr_oce') )   CALL iom_put( "qsr_oce" , qsr_oce(:,:) * pfrld(:,:) )                                   !     solar flux at ocean surface
124      IF( iom_use('qns_oce') )   CALL iom_put( "qns_oce" , qns_oce(:,:) * pfrld(:,:) + qemp_oce(:,:) )                   ! non-solar flux at ocean surface
125      IF( iom_use('qsr_ice') )   CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) )                 !     solar flux at ice surface
126      IF( iom_use('qns_ice') )   CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) + qemp_ice(:,:) ) ! non-solar flux at ice surface
127      IF( iom_use('qtr_ice') )   CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) )                 !     solar flux transmitted thru ice
128      IF( iom_use('qt_oce' ) )   CALL iom_put( "qt_oce"  , ( qsr_oce(:,:) + qns_oce(:,:) ) * pfrld(:,:) + qemp_oce(:,:) ) 
129      IF( iom_use('qt_ice' ) )   CALL iom_put( "qt_ice"  , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) )   &
130         &                                                      * a_i_b(:,:,:),dim=3 ) + qemp_ice(:,:) )
131      IF( iom_use('qemp_oce') )  CALL iom_put( "qemp_oce" , qemp_oce(:,:) ) 
132      IF( iom_use('qemp_ice') )  CALL iom_put( "qemp_ice" , qemp_ice(:,:) ) 
133      IF( iom_use('emp_oce' ) )  CALL iom_put( "emp_oce"  , emp_oce(:,:) )   !emp over ocean (taking into account the snow blown away from the ice)
134      IF( iom_use('emp_ice' ) )  CALL iom_put( "emp_ice"  , emp_ice(:,:) )   !emp over ice   (taking into account the snow blown away from the ice)
135
136      ! velocity
137      IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" ) ) THEN
138         DO jj = 2 , jpjm1
139            DO ji = 2 , jpim1
140               z2da  = ( u_ice(ji,jj) * umask(ji,jj,1) + u_ice(ji-1,jj) * umask(ji-1,jj,1) ) * 0.5_wp
141               z2db  = ( v_ice(ji,jj) * vmask(ji,jj,1) + v_ice(ji,jj-1) * vmask(ji,jj-1,1) ) * 0.5_wp
142               z2d(ji,jj) = SQRT( z2da * z2da + z2db * z2db )
143           END DO
144         END DO
145         CALL lbc_lnk( z2d, 'T', 1. )
146         CALL iom_put( "uice_ipa"     , u_ice      )       ! ice velocity u component
147         CALL iom_put( "vice_ipa"     , v_ice      )       ! ice velocity v component
148         CALL iom_put( "icevel"       , z2d        )       ! ice velocity module
149      ENDIF
150      !
151      IF ( iom_use( "miceage" ) )       CALL iom_put( "miceage"     , om_i * zswi * zamask15 )  ! mean ice age
152      IF ( iom_use( "micet" ) )         CALL iom_put( "micet"       , ( tm_i  - rt0 ) * zswi )  ! ice mean    temperature
153      IF ( iom_use( "icest" ) )         CALL iom_put( "icest"       , ( tm_su - rt0 ) * zswi )  ! ice surface temperature
154      IF ( iom_use( "icecolf" ) )       CALL iom_put( "icecolf"     , hicol                  )  ! frazil ice collection thickness
155      !
156      CALL iom_put( "isst"        , sst_m               )        ! sea surface temperature
157      CALL iom_put( "isss"        , sss_m               )        ! sea surface salinity
158      CALL iom_put( "iceconc"     , at_i  * zswi        )        ! ice concentration
159      CALL iom_put( "icevolu"     , vt_i  * zswi        )        ! ice volume = mean ice thickness over the cell
160      CALL iom_put( "icehc"       , et_i  * zswi        )        ! ice total heat content
161      CALL iom_put( "isnowhc"     , et_s  * zswi        )        ! snow total heat content
162      CALL iom_put( "ibrinv"      , bvm_i * zswi * 100. )        ! brine volume
163      CALL iom_put( "utau_ice"    , utau_ice*zswi       )        ! wind stress over ice along i-axis at I-point
164      CALL iom_put( "vtau_ice"    , vtau_ice*zswi       )        ! wind stress over ice along j-axis at I-point
165      CALL iom_put( "snowpre"     , sprecip * 86400.    )        ! snow precipitation
166      CALL iom_put( "micesalt"    , smt_i   * zswi      )        ! mean ice salinity
167
168      CALL iom_put( "icestr"      , strength * zswi )            ! ice strength
169      CALL iom_put( "idive"       , divu_i              )        ! divergence
170      CALL iom_put( "ishear"      , shear_i             )        ! shear
171      CALL iom_put( "snowvol"     , vt_s   * zswi       )        ! snow volume
172     
173      CALL iom_put( "icetrp"      , diag_trp_vi * rday  )        ! ice volume transport
174      CALL iom_put( "snwtrp"      , diag_trp_vs * rday  )        ! snw volume transport
175      CALL iom_put( "saltrp"      , diag_trp_smv * rday * rhoic ) ! salt content transport
176      CALL iom_put( "deitrp"      , diag_trp_ei         )        ! advected ice enthalpy (W/m2)
177      CALL iom_put( "destrp"      , diag_trp_es         )        ! advected snw enthalpy (W/m2)
178
179      CALL iom_put( "sfxbog"      , sfx_bog * rday      )        ! salt flux from bottom growth
180      CALL iom_put( "sfxbom"      , sfx_bom * rday      )        ! salt flux from bottom melting
181      CALL iom_put( "sfxsum"      , sfx_sum * rday      )        ! salt flux from surface melting
182      CALL iom_put( "sfxsni"      , sfx_sni * rday      )        ! salt flux from snow ice formation
183      CALL iom_put( "sfxopw"      , sfx_opw * rday      )        ! salt flux from open water formation
184      CALL iom_put( "sfxdyn"      , sfx_dyn * rday      )        ! salt flux from ridging rafting
185      CALL iom_put( "sfxres"      , sfx_res * rday      )        ! salt flux from limupdate (resultant)
186      CALL iom_put( "sfxbri"      , sfx_bri * rday      )        ! salt flux from brines
187      CALL iom_put( "sfxsub"      , sfx_sub * rday      )        ! salt flux from sublimation
188      CALL iom_put( "sfx"         , sfx     * rday      )        ! total salt flux
189
190      ztmp = rday / rhoic
191      CALL iom_put( "vfxres"     , wfx_res * ztmp       )        ! daily prod./melting due to limupdate
192      CALL iom_put( "vfxopw"     , wfx_opw * ztmp       )        ! daily lateral thermodynamic ice production
193      CALL iom_put( "vfxsni"     , wfx_sni * ztmp       )        ! daily snowice ice production
194      CALL iom_put( "vfxbog"     , wfx_bog * ztmp       )        ! daily bottom thermodynamic ice production
195      CALL iom_put( "vfxdyn"     , wfx_dyn * ztmp       )        ! daily dynamic ice production (rid/raft)
196      CALL iom_put( "vfxsum"     , wfx_sum * ztmp       )        ! surface melt
197      CALL iom_put( "vfxbom"     , wfx_bom * ztmp       )        ! bottom melt
198      CALL iom_put( "vfxice"     , wfx_ice * ztmp       )        ! total ice growth/melt
199
200      IF ( iom_use( "vfxthin" ) ) THEN   ! ice production for open water + thin ice (<20cm) => comparable to observations 
201         WHERE( htm_i(:,:) < 0.2 .AND. htm_i(:,:) > 0. ) ; z2d = wfx_bog
202         ELSEWHERE                                       ; z2d = 0._wp
203         END WHERE
204         CALL iom_put( "vfxthin", ( wfx_opw + z2d ) * ztmp )
205      ENDIF
206
207      ztmp = rday / rhosn
208      CALL iom_put( "vfxspr"     , wfx_spr * ztmp       )        ! precip (snow)
209      CALL iom_put( "vfxsnw"     , wfx_snw * ztmp       )        ! total snw growth/melt
210      CALL iom_put( "vfxsub"     , wfx_sub * ztmp       )        ! sublimation (snow/ice)
211      CALL iom_put( "vfxsub_err" , wfx_err_sub * ztmp   )        ! "excess" of sublimation sent to ocean     
212 
213      CALL iom_put( "afxtot"     , afx_tot              )        ! concentration tendency (total)
214      CALL iom_put( "afxdyn"     , afx_dyn              )        ! concentration tendency (dynamics)
215      CALL iom_put( "afxthd"     , afx_thd              )        ! concentration tendency (thermo)
216
217      CALL iom_put ('hfxthd'     , hfx_thd(:,:)         )   
218      CALL iom_put ('hfxdyn'     , hfx_dyn(:,:)         )   
219      CALL iom_put ('hfxres'     , hfx_res(:,:)         )   
220      CALL iom_put ('hfxout'     , hfx_out(:,:)         )   
221      CALL iom_put ('hfxin'      , hfx_in(:,:)          )   
222      CALL iom_put ('hfxsnw'     , hfx_snw(:,:)         )   
223      CALL iom_put ('hfxsub'     , hfx_sub(:,:)         )   
224      CALL iom_put ('hfxerr'     , hfx_err(:,:)         )   
225      CALL iom_put ('hfxerr_rem' , hfx_err_rem(:,:)     )   
226     
227      CALL iom_put ('hfxsum'     , hfx_sum(:,:)         )   
228      CALL iom_put ('hfxbom'     , hfx_bom(:,:)         )   
229      CALL iom_put ('hfxbog'     , hfx_bog(:,:)         )   
230      CALL iom_put ('hfxdif'     , hfx_dif(:,:)         )   
231      CALL iom_put ('hfxopw'     , hfx_opw(:,:)         )   
232      CALL iom_put ('hfxtur'     , fhtur(:,:) * SUM( a_i_b(:,:,:), dim=3 ) ) ! turbulent heat flux at ice base
233      CALL iom_put ('hfxdhc'     , diag_heat(:,:)       )   ! Heat content variation in snow and ice
234      CALL iom_put ('hfxspr'     , hfx_spr(:,:)         )   ! Heat content of snow precip
235
236      !----------------------------------
237      ! Output category-dependent fields
238      !----------------------------------
239      IF ( iom_use( "iceconc_cat"  ) )  CALL iom_put( "iceconc_cat"      , a_i   * zswi2   )        ! area for categories
240      IF ( iom_use( "icethic_cat"  ) )  CALL iom_put( "icethic_cat"      , ht_i  * zswi2   )        ! thickness for categories
241      IF ( iom_use( "snowthic_cat" ) )  CALL iom_put( "snowthic_cat"     , ht_s  * zswi2   )        ! snow depth for categories
242      IF ( iom_use( "salinity_cat" ) )  CALL iom_put( "salinity_cat"     , sm_i  * zswi2   )        ! salinity for categories
243      ! ice temperature
244      IF ( iom_use( "icetemp_cat"  ) )  CALL iom_put( "icetemp_cat", ( SUM( t_i(:,:,:,:), dim=3 ) * r1_nlay_i - rt0 ) * zswi2 )
245      ! snow temperature
246      IF ( iom_use( "snwtemp_cat"  ) )  CALL iom_put( "snwtemp_cat", ( SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s - rt0 ) * zswi2 )
247      ! ice age
248      IF ( iom_use( "iceage_cat"   ) )  CALL iom_put( "iceage_cat" , o_i * zswi2 ) 
249      ! brine volume
250      IF ( iom_use( "brinevol_cat" ) )  CALL iom_put( "brinevol_cat", bv_i * 100. * zswi2 )
251
252      !--------------------------------
253      ! Add-ons for SIMIP
254      !--------------------------------
255      zrho1 = ( rau0 - rhoic ) / rau0; zrho2 = rhosn / rau0
256
257      IF  ( iom_use( "icethic"  ) ) CALL iom_put( "icethic"     , htm_i * zamask             )          ! Ice thickness
258      IF  ( iom_use( "icepres"  ) ) CALL iom_put( "icepres"     , zswi                       )          ! Ice presence (1 or 0)
259      IF  ( iom_use( "snowthic" ) ) CALL iom_put( "snowthic"    , htm_s * zamask             )          ! Snow thickness       
260      IF  ( iom_use( "icemass"  ) ) CALL iom_put( "icemass"     , rhoic * vt_i(:,:) * zswi   )          ! Ice mass per cell area
261      IF  ( iom_use( "snomass"  ) ) CALL iom_put( "snomass"     , rhosn * vt_s(:,:) * zswi   )          ! Snow mass per cell area
262      IF  ( iom_use( "icesnt"   ) ) CALL iom_put( "icesnt"      , ( tm_si - rt0 ) * zswi     )          ! Snow-ice interface temperature
263      IF  ( iom_use( "icebot"   ) ) CALL iom_put( "icebot"      , ( t_bo  - rt0 ) * zswi     )          ! Ice bottom temperature
264      IF  ( iom_use( "icesmass" ) ) CALL iom_put( "icesmass"    , SUM( smv_i, DIM = 3 ) * rhoic * 1.0e-3 * zswi )   ! Mass of salt in sea ice per cell area
265      IF  ( iom_use( "icefb"    ) ) THEN
266         zfb(:,:) = ( zrho1 * htm_i(:,:) - zrho2 * htm_s(:,:) ) * zswi(:,:)                             
267         WHERE( zfb < 0._wp ) ;   zfb = 0._wp ;   END WHERE
268                                    CALL iom_put( "icefb"       , zfb                        )          ! Ice freeboard
269      ENDIF
270      IF  ( iom_use( "dmithd"   ) ) CALL iom_put( "dmithd"      , - wfx_bog - wfx_bom - wfx_sum   &     ! Sea-ice mass change from thermodynamics
271              &                     - wfx_sni - wfx_opw - wfx_res )
272      IF  ( iom_use( "dmidyn"   ) ) CALL iom_put( "dmidyn"      ,   diag_dmi_dyn             )          ! Sea-ice mass change from dynamics
273      IF  ( iom_use( "dmiopw"   ) ) CALL iom_put( "dmiopw"      , - wfx_opw                  )          ! Sea-ice mass change through growth in open water
274      IF  ( iom_use( "dmibog"   ) ) CALL iom_put( "dmibog"      , - wfx_bog                  )          ! Sea-ice mass change through basal growth
275      IF  ( iom_use( "dmisni"   ) ) CALL iom_put( "dmisni"      , - wfx_sni                  )          ! Sea-ice mass change through snow-to-ice conversion
276      IF  ( iom_use( "dmisum"   ) ) CALL iom_put( "dmisum"      , - wfx_sum                  )          ! Sea-ice mass change through surface melting
277      IF  ( iom_use( "dmibom"   ) ) CALL iom_put( "dmibom"      , - wfx_bom                  )          ! Sea-ice mass change through bottom melting
278
279      IF  ( iom_use( "dmtsub"   ) ) CALL iom_put( "dmtsub"      , - wfx_sub                  )          ! Sea-ice mass change through evaporation and sublimation
280      IF  ( iom_use( "dmssub"   ) ) CALL iom_put( "dmssub"      , - wfx_snw_sub              )          ! Snow mass change through sublimation
281      IF  ( iom_use( "dmisub"   ) ) CALL iom_put( "dmisub"      , - wfx_ice_sub              )          ! Sea-ice mass change through sublimation
282
283      IF  ( iom_use( "dmsspr"   ) ) CALL iom_put( "dmsspr"      , - wfx_spr                  )          ! Snow mass change through snow fall
284      IF  ( iom_use( "dmsssi"   ) ) CALL iom_put( "dmsssi"      ,   wfx_sni*rhosn/rhoic      )          ! Snow mass change through snow-to-ice conversion
285
286      IF  ( iom_use( "dmsmel"   ) ) CALL iom_put( "dmsmel"      , - wfx_snw_sum              )          ! Snow mass change through melt
287      IF  ( iom_use( "dmsdyn"   ) ) CALL iom_put( "dmsdyn"      ,   diag_dms_dyn             )          ! Snow mass change through dynamics
288
289      IF  ( iom_use( "hfxconbo" ) ) CALL iom_put( "hfxconbo"    ,   diag_fc_bo               )          ! Bottom conduction flux
290      IF  ( iom_use( "hfxconsu" ) ) CALL iom_put( "hfxconsu"    ,   diag_fc_su               )          ! Surface conduction flux
291
292      IF  ( iom_use( "wfxtot"   ) ) CALL iom_put( "wfxtot"      ,   wfx_ice                  )          ! Total freshwater flux from sea ice
293      IF  ( iom_use( "wfxsum"   ) ) CALL iom_put( "wfxsum"      ,   wfx_sum                  )          ! Freshwater flux from sea-ice surface
294
295      IF  ( iom_use( "utau_oi"  ) ) CALL iom_put( "utau_oi"     ,   diag_utau_oi*zswi        )          ! X-component of ocean stress on sea ice
296      IF  ( iom_use( "vtau_oi"  ) ) CALL iom_put( "vtau_oi"     ,   diag_vtau_oi*zswi        )          ! Y-component of ocean stress on sea ice
297
298      IF  ( iom_use( "dssh_dx"  ) ) CALL iom_put( "dssh_dx"     ,   diag_dssh_dx*zswi        )          ! Sea-surface tilt term in force balance (x-component)
299      IF  ( iom_use( "dssh_dy"  ) ) CALL iom_put( "dssh_dy"     ,   diag_dssh_dy*zswi        )          ! Sea-surface tilt term in force balance (y-component)
300
301      IF  ( iom_use( "corstrx"  ) ) CALL iom_put( "corstrx"     ,   diag_corstrx*zswi        )          ! Coriolis force term in force balance (x-component)
302      IF  ( iom_use( "corstry"  ) ) CALL iom_put( "corstry"     ,   diag_corstry*zswi        )          ! Coriolis force term in force balance (y-component)
303
304      IF  ( iom_use( "intstrx"  ) ) CALL iom_put( "intstrx"     ,   diag_intstrx*zswi        )          ! Internal force term in force balance (x-component)
305      IF  ( iom_use( "intstry"  ) ) CALL iom_put( "intstry"     ,   diag_intstry*zswi        )          ! Internal force term in force balance (y-component)
306
307      IF  ( iom_use( "normstr"  ) ) CALL iom_put( "normstr"     ,   diag_sig1   *zswi        )          ! Normal stress
308      IF  ( iom_use( "sheastr"  ) ) CALL iom_put( "sheastr"     ,   diag_sig2   *zswi        )          ! Shear stress
309
310      IF  ( iom_use( "xmtrpice" ) ) CALL iom_put( "xmtrpice"     ,  diag_xmtrp_ice           )          ! X-component of sea-ice mass transport
311      IF  ( iom_use( "ymtrpice" ) ) CALL iom_put( "ymtrpice"     ,  diag_ymtrp_ice           )          ! Y-component of sea-ice mass transport
312
313      IF  ( iom_use( "xmtrpsnw" ) ) CALL iom_put( "xmtrpsnw"     ,  diag_xmtrp_snw           )          ! X-component of snow mass transport
314      IF  ( iom_use( "ymtrpsnw" ) ) CALL iom_put( "ymtrpsnw"     ,  diag_ymtrp_snw           )          ! Y-component of snow mass transport
315
316      IF  ( iom_use( "xatrp"    ) ) CALL iom_put( "xatrp"        ,  diag_xatrp               )          ! X-component of ice area transport
317      IF  ( iom_use( "yatrp"    ) ) CALL iom_put( "yatrp"        ,  diag_yatrp               )          ! Y-component of ice area transport
318
319      !--------------------------------
320      ! Global ice diagnostics (SIMIP)
321      !--------------------------------
322
323      IF ( iom_use( "NH_icearea" ) .OR. iom_use( "NH_icevolu" ) .OR. iom_use( "NH_iceextt" ) )   THEN   ! NH integrated diagnostics
324 
325         WHERE( fcor > 0._wp ); zswi(:,:) = 1.0e-12
326         ELSEWHERE            ; zswi(:,:) = 0.
327         END WHERE
328
329         zdiag_area_nh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) )
330         zdiag_volu_nh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) )
331
332         WHERE( fcor > 0._wp .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12
333         ELSEWHERE                              ; zswi(:,:) = 0.
334         END WHERE
335
336         zdiag_extt_nh = glob_sum( zswi(:,:) * e12t(:,:) )
337
338         IF ( iom_use( "NH_icearea" ) ) CALL iom_put( "NH_icearea" ,  zdiag_area_nh  )
339         IF ( iom_use( "NH_icevolu" ) ) CALL iom_put( "NH_icevolu" ,  zdiag_volu_nh  )
340         IF ( iom_use( "NH_iceextt" ) ) CALL iom_put( "NH_iceextt" ,  zdiag_extt_nh  )
341
342      ENDIF
343
344      IF ( iom_use( "SH_icearea" ) .OR. iom_use( "SH_icevolu" ) .OR. iom_use( "SH_iceextt" ) )   THEN   ! SH integrated diagnostics
345
346         WHERE( fcor < 0._wp ); zswi(:,:) = 1.0e-12; 
347         ELSEWHERE            ; zswi(:,:) = 0.
348         END WHERE
349
350         zdiag_area_sh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) ) 
351         zdiag_volu_sh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) )
352
353         WHERE( fcor < 0._wp .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12
354         ELSEWHERE                              ; zswi(:,:) = 0.
355         END WHERE
356
357         zdiag_extt_sh = glob_sum( zswi(:,:) * e12t(:,:) )
358
359         IF ( iom_use( "SH_icearea" ) ) CALL iom_put( "SH_icearea", zdiag_area_sh )
360         IF ( iom_use( "SH_icevolu" ) ) CALL iom_put( "SH_icevolu", zdiag_volu_sh )
361         IF ( iom_use( "SH_iceextt" ) ) CALL iom_put( "SH_iceextt", zdiag_extt_sh )
362
363      ENDIF 
364!      !-------------------------------------
365!      ! Area, ice mass and snow mass fluxes
366!      !-------------------------------------
367!      ! SIMIP requires fluxes through passages and straits
368!      ! Easiest implementation is via offline python script
369!      ! strait_ar_x
370!
371!      !--------------------------------
372!      ! Fluxes through straits (SIMIP)
373!      !--------------------------------
374!      !
375!      ! Valid only for ORCA-like grids
376!      !
377!      ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions)
378!      !
379!      ! Fram and Bering  straits are easy because they follow parallels
380!      ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful.
381!      !
382!
383!      IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN
384!
385!         zdiag_area_strait(:) = 0._wp   ;   zdiag_mice_strait(:) = 0._wp   ;   zdiag_msno_strait(:) = 0._wp
386!   
387!         !------------------------------
388!         ! === Fram & Bering Straits ===
389!         !------------------------------
390!         
391!         SELECT CASE ( jp_cfg )
392!         
393!         CASE ( 2 )   ! --- ORCA2
394!         
395!            ! Fram Strait   (i_strait = 1)
396!            ji0(1) = 133   ;   ji1(1) = 136
397!            jj0(1) = 136
398!
399!            ! Bering Strait (i_strait = 4)
400!            ji0(4) = 55    ;   ji1(4) = 56
401!            jj0(4) = 122
402!         
403!         CASE ( 1 )   ! --- eORCA1
404!         
405!            ! Fram Strait
406!            ji0(1) = 268   ;   ji1(1) = 277
407!            jj0(1) = 311
408!
409!            ! Bering Strait
410!            ji0(4) = 113   ;   jj1(4) = 115
411!            jj0(4) = 285
412!           
413!         END SELECT
414!         
415!         DO i_strait = 1, 4, 3
416!
417!            DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) )
418!               jj = mj0( jj0(i_strait) )
419!   
420!               zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait)                                 &     ! --- ice area flux ---
421!                   &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &     ! northwards (positive) flow
422!                   &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )               ! southwards (negative) flow
423!     
424!               zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic *                       &     ! --- ice mass flux  ---
425!                   &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &
426!                   &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )         
427!     
428!               zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn *                       &     ! --- snow mass flux ---
429!                   &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &
430!                   &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) ) 
431!   
432!            END DO
433!
434!         END DO
435!
436!         !---------------------
437!         ! === Barents opening
438!         !---------------------
439!   
440!         SELECT CASE ( jp_cfg )
441!
442!            CASE ( 1 )   ! 'eORCA1'
443!
444!               Nu = 11   ! U-Flow
445!               zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/)
446!               zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/)
447!
448!               Nv = 9    ! V-Flow
449!               zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/)
450!               zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/)
451!
452!            CASE ( 2 )   ! 'ORCA2'
453!
454!               Nu = 5    ! U-Flow
455!               zui(1:Nu) = (/ 141,142,142,143,144 /)
456!               zuj(1:Nu) = (/ 134,133,132,131,130 /)
457!
458!               Nv = 4    ! V-Flow
459!               zvi(1:Nv) = (/ 140,141,142,143 /)
460!               zvj(1:Nv) = (/ 135,134,132,131 /)
461!
462!         END SELECT
463!
464!         ! Barents U-flow
465!         zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
466!   
467!         DO ii = 1, Nu
468!
469!            ji = mi0(zui(ii))
470!            jj = mj0(zuj(ii))
471!
472!            zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux ---
473!                &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- northward
474!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- southward
475!            zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---
476!                &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
477!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
478!            zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---
479!                &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
480!                &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
481!         END DO
482!   
483!         ! Barents V-flow
484!         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp
485!
486!         DO ii  = 1, Nv 
487!
488!            ji = mi0(zvi(ii))
489!            jj = mj0(zvj(ii))
490!
491!            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux ---
492!                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward
493!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward
494!            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux ---
495!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
496!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
497!            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux ---
498!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
499!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
500!         END DO
501!   
502!         ! Sum Barents U-/V- contributions
503!         zdiag_area_strait(3) = zfarea_u + zfarea_v
504!         zdiag_mice_strait(3) = zfmice_u + zfmice_v
505!         zdiag_msno_strait(3) = zfmsno_u + zfmsno_v
506!
507!         !---------------------
508!         ! === CAA throughflow
509!         !---------------------
510!   
511!         SELECT CASE ( jp_cfg )
512!
513!            CASE ( 1 )   ! eORCA1
514!
515!               ! V-flow through Nares Strait
516!               Nv = 4
517!               zvi(1:Nv) = (/ 254,255,256,257 /)
518!               zvj(1:Nv) = (/ 317,317,317,317 /)
519!
520!               ! U-flow through Queen Elisabeth Islands and McClure straits
521!               Nu = 8
522!               zui(1:Nu) = (/ 231,231,231,  132,132,132,132,132  /)
523!               zuj(1:Nu) = (/ 328,329,330,  318,319,320,321,322  /)
524!
525!               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
526!
527!               DO ii = 1, Nu
528!
529!                  ji = mi0(zui(ii))
530!                  jj = mj0(zuj(ii))
531!
532!                  zfarea_u          = zfarea_u                                                           & ! --- ice area zonal flux ---
533!                      &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward
534!                      &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward
535!                  zfmice_u          = zfmice_u + rhoic *                                                 & ! --- ice mass zonal flux ---
536!                      &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
537!                      &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
538!                  zfmsno_u          = zfmsno_u + rhosn *                                                 & ! --- snow mass zonal flux ---
539!                      &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
540!                      &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
541!
542!               END DO
543!
544!
545!            CASE ( 2 )   ! ORCA2
546!
547!               ! V-flow through Nares Strait
548!               Nv = 2
549!               zvi(1:Nv) = (/ 117,118 /)
550!               zvj(1:Nv) = (/ 145,145 /)
551!
552!               ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2)
553!               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
554!
555!            END SELECT
556!   
557!         ! V-flow through Nares Strait
558!         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp
559!   
560!         DO ii = 1, Nv 
561!
562!            ji = mi0(zvi(ii))
563!            jj = mj0(zvj(ii))
564!
565!            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux ---
566!                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward
567!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward
568!            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux ---
569!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
570!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
571!            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux ---
572!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
573!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
574!
575!         END DO
576!
577!         ! Sum U/V contributions
578!         zdiag_area_strait(2) = zfarea_u + zfarea_v
579!         zdiag_mice_strait(2) = zfmice_u + zfmice_v
580!         zdiag_msno_strait(2) = zfmsno_u + zfmsno_v
581!   
582!         ! === Ncdf output
583!         IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait )
584!         IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait )
585!         IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait )
586!
587!         WRITE(numout,*) " area flx ", zdiag_area_strait(:)
588!         WRITE(numout,*) " mice flx ", zdiag_mice_strait(:)
589!         WRITE(numout,*) " msno flx ", zdiag_msno_strait(:)
590!
591!      ENDIF
592
593      !     !  Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s
594      !     IF( kindic < 0 )   CALL lim_wri_state( 'output.abort' )
595      !     not yet implemented
596     
597      CALL wrk_dealloc( jpi, jpj, jpl, zswi2 )
598      CALL wrk_dealloc( jpi, jpj     , z2d, zswi )
599      CALL wrk_dealloc( jpi, jpj     , zfb, zamask, zamask15 )
600
601      IF( nn_timing == 1 )  CALL timing_stop('limwri')
602     
603   END SUBROUTINE lim_wri
604
605 
606   SUBROUTINE lim_wri_state( kt, kid, kh_i )
607      !!---------------------------------------------------------------------
608      !!                 ***  ROUTINE lim_wri_state  ***
609      !!       
610      !! ** Purpose :   create a NetCDF file named cdfile_name which contains
611      !!      the instantaneous ice state and forcing fields for ice model
612      !!        Used to find errors in the initial state or save the last
613      !!      ocean state in case of abnormal end of a simulation
614      !!
615      !! History :
616      !!   4.0  !  2013-06  (C. Rousset)
617      !!----------------------------------------------------------------------
618      INTEGER, INTENT( in )   ::   kt               ! ocean time-step index)
619      INTEGER, INTENT( in )   ::   kid , kh_i
620      INTEGER                 ::   nz_i, jl
621      REAL(wp), DIMENSION(jpl) :: jcat
622      !!----------------------------------------------------------------------
623      DO jl = 1, jpl
624         jcat(jl) = REAL(jl)
625      ENDDO
626     
627      CALL histvert( kid, "ncatice", "Ice Categories","", jpl, jcat, nz_i, "up")
628
629      CALL histdef( kid, "sithic", "Ice thickness"           , "m"      ,   &
630      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
631      CALL histdef( kid, "siconc", "Ice concentration"       , "%"      ,   &
632      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
633      CALL histdef( kid, "sitemp", "Ice temperature"         , "C"      ,   &
634      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
635      CALL histdef( kid, "sivelu", "i-Ice speed "            , "m/s"    ,   &
636      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
637      CALL histdef( kid, "sivelv", "j-Ice speed "            , "m/s"    ,   &
638      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
639      CALL histdef( kid, "sistru", "i-Wind stress over ice " , "Pa"     ,   &
640      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
641      CALL histdef( kid, "sistrv", "j-Wind stress over ice " , "Pa"     ,   &
642      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
643      CALL histdef( kid, "sisflx", "Solar flux over ocean"     , "w/m2" ,   &
644      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
645      CALL histdef( kid, "sinflx", "Non-solar flux over ocean" , "w/m2" ,   &
646      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
647      CALL histdef( kid, "isnowpre", "Snow precipitation"      , "kg/m2/s",   &
648      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
649      CALL histdef( kid, "sisali", "Ice salinity"            , "PSU"    ,   &
650      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
651      CALL histdef( kid, "sivolu", "Ice volume"              , "m"      ,   &
652      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
653      CALL histdef( kid, "sidive", "Ice divergence"          , "10-8s-1",   &
654      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
655
656      CALL histdef( kid, "vfxbog", "Ice bottom production"   , "m/s"    ,   &
657      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
658      CALL histdef( kid, "vfxdyn", "Ice dynamic production"  , "m/s"    ,   &
659      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
660      CALL histdef( kid, "vfxopw", "Ice open water prod"     , "m/s"    ,   &
661      &       jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
662      CALL histdef( kid, "vfxsni", "Snow ice production "    , "m/s"    ,   &
663      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
664      CALL histdef( kid, "vfxres", "Ice prod from limupdate" , "m/s"    ,   &
665      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
666      CALL histdef( kid, "vfxbom", "Ice bottom melt"         , "m/s"    ,   &
667      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
668      CALL histdef( kid, "vfxsum", "Ice surface melt"        , "m/s"    ,   &
669      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
670
671      CALL histdef( kid, "sithicat", "Ice thickness"         , "m"      ,   &
672      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
673      CALL histdef( kid, "siconcat", "Ice concentration"     , "%"      ,   &
674      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
675      CALL histdef( kid, "sisalcat", "Ice salinity"           , ""      ,   &
676      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
677      CALL histdef( kid, "sitemcat", "Ice temperature"       , "C"      ,   &
678      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
679      CALL histdef( kid, "snthicat", "Snw thickness"         , "m"      ,   &
680      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
681      CALL histdef( kid, "sntemcat", "Snw temperature"       , "C"      ,   &
682      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
683
684      CALL histend( kid, snc4set )   ! end of the file definition
685
686      CALL histwrite( kid, "sithic", kt, htm_i         , jpi*jpj, (/1/) )   
687      CALL histwrite( kid, "siconc", kt, at_i          , jpi*jpj, (/1/) )
688      CALL histwrite( kid, "sitemp", kt, tm_i - rt0    , jpi*jpj, (/1/) )
689      CALL histwrite( kid, "sivelu", kt, u_ice          , jpi*jpj, (/1/) )
690      CALL histwrite( kid, "sivelv", kt, v_ice          , jpi*jpj, (/1/) )
691      CALL histwrite( kid, "sistru", kt, utau_ice       , jpi*jpj, (/1/) )
692      CALL histwrite( kid, "sistrv", kt, vtau_ice       , jpi*jpj, (/1/) )
693      CALL histwrite( kid, "sisflx", kt, qsr , jpi*jpj, (/1/) )
694      CALL histwrite( kid, "sinflx", kt, qns , jpi*jpj, (/1/) )
695      CALL histwrite( kid, "isnowpre", kt, sprecip        , jpi*jpj, (/1/) )
696      CALL histwrite( kid, "sisali", kt, smt_i          , jpi*jpj, (/1/) )
697      CALL histwrite( kid, "sivolu", kt, vt_i           , jpi*jpj, (/1/) )
698      CALL histwrite( kid, "sidive", kt, divu_i*1.0e8   , jpi*jpj, (/1/) )
699
700      CALL histwrite( kid, "vfxbog", kt, wfx_bog        , jpi*jpj, (/1/) )
701      CALL histwrite( kid, "vfxdyn", kt, wfx_dyn        , jpi*jpj, (/1/) )
702      CALL histwrite( kid, "vfxopw", kt, wfx_opw        , jpi*jpj, (/1/) )
703      CALL histwrite( kid, "vfxsni", kt, wfx_sni        , jpi*jpj, (/1/) )
704      CALL histwrite( kid, "vfxres", kt, wfx_res        , jpi*jpj, (/1/) )
705      CALL histwrite( kid, "vfxbom", kt, wfx_bom        , jpi*jpj, (/1/) )
706      CALL histwrite( kid, "vfxsum", kt, wfx_sum        , jpi*jpj, (/1/) )
707
708      CALL histwrite( kid, "sithicat", kt, ht_i        , jpi*jpj*jpl, (/1/) )   
709      CALL histwrite( kid, "siconcat", kt, a_i         , jpi*jpj*jpl, (/1/) )   
710      CALL histwrite( kid, "sisalcat", kt, sm_i        , jpi*jpj*jpl, (/1/) )   
711      CALL histwrite( kid, "sitemcat", kt, tm_i - rt0  , jpi*jpj*jpl, (/1/) )   
712      CALL histwrite( kid, "snthicat", kt, ht_s        , jpi*jpj*jpl, (/1/) )   
713      CALL histwrite( kid, "sntemcat", kt, tm_su - rt0 , jpi*jpj*jpl, (/1/) )   
714
715      ! Close the file
716      ! -----------------
717      !CALL histclo( kid )
718
719    END SUBROUTINE lim_wri_state
720
721#else
722   !!----------------------------------------------------------------------
723   !!   Default option :         Empty module          NO LIM sea-ice model
724   !!----------------------------------------------------------------------
725CONTAINS
726   SUBROUTINE lim_wri          ! Empty routine
727   END SUBROUTINE lim_wri
728#endif
729
730   !!======================================================================
731END MODULE limwri
Note: See TracBrowser for help on using the repository browser.