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 @ 8156

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

SIMIP outputs, phase 2, commit #4

  • Property svn:keywords set to Id
File size: 39.9 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      IF  ( iom_use( "dmtsub"   ) ) CALL iom_put( "dmtsub"      , - wfx_sub                  )          ! Sea-ice mass change through evaporation and sublimation
279      IF  ( iom_use( "dmsspr"   ) ) CALL iom_put( "dmsspr"      , - wfx_spr                  )          ! Snow mass change through snow fall
280      IF  ( iom_use( "dmsssi"   ) ) CALL iom_put( "dmsssi"      ,   wfx_sni*rhosn/rhoic      )          ! Snow mass change through snow-to-ice conversion
281
282      IF  ( iom_use( "dmsmel"   ) ) CALL iom_put( "dmsmel"      , - wfx_snw_sum              )          ! Snow mass change through melt
283      IF  ( iom_use( "dmsdyn"   ) ) CALL iom_put( "dmsdyn"      ,   diag_dms_dyn             )          ! Snow mass change through dynamics
284
285      IF  ( iom_use( "hfxconbo" ) ) CALL iom_put( "hfxconbo"    ,   diag_fc_bo               )          ! Bottom conduction flux
286      IF  ( iom_use( "hfxconsu" ) ) CALL iom_put( "hfxconsu"    ,   diag_fc_su               )          ! Surface conduction flux
287
288      IF  ( iom_use( "wfxtot"   ) ) CALL iom_put( "wfxtot"      ,   wfx_ice                  )          ! Total freshwater flux from sea ice
289      IF  ( iom_use( "wfxsum"   ) ) CALL iom_put( "wfxsum"      ,   wfx_sum                  )          ! Freshwater flux from sea-ice surface
290
291      IF  ( iom_use( "dmtxdyn"  ) ) CALL iom_put( "dmtxdyn"     ,   diag_dmtx_dyn            )          ! X-component of sea-ice mass transport
292      IF  ( iom_use( "dmtydyn"  ) ) CALL iom_put( "dmtydyn"     ,   diag_dmty_dyn            )          ! Y-component of sea-ice mass transport
293
294      IF  ( iom_use( "utau_oi"  ) ) CALL iom_put( "utau_oi"     ,   diag_utau_oi*zswi        )          ! X-component of ocean stress on sea ice
295      IF  ( iom_use( "vtau_oi"  ) ) CALL iom_put( "vtau_oi"     ,   diag_vtau_oi*zswi        )          ! Y-component of ocean stress on sea ice
296
297      IF  ( iom_use( "dssh_dx"  ) ) CALL iom_put( "dssh_dx"     ,   diag_dssh_dx*zswi        )          ! Sea-surface tilt term in force balance (x-component)
298      IF  ( iom_use( "dssh_dy"  ) ) CALL iom_put( "dssh_dy"     ,   diag_dssh_dy*zswi        )          ! Sea-surface tilt term in force balance (y-component)
299
300      IF  ( iom_use( "corstrx"  ) ) CALL iom_put( "corstrx"     ,   diag_corstrx*zswi        )          ! Coriolis force term in force balance (x-component)
301      IF  ( iom_use( "corstry"  ) ) CALL iom_put( "corstry"     ,   diag_corstry*zswi        )          ! Coriolis force term in force balance (y-component)
302
303      IF  ( iom_use( "intstrx"  ) ) CALL iom_put( "intstrx"     ,   diag_intstrx*zswi        )          ! Internal force term in force balance (x-component)
304      IF  ( iom_use( "intstry"  ) ) CALL iom_put( "intstry"     ,   diag_intstry*zswi        )          ! Internal force term in force balance (y-component)
305
306      IF  ( iom_use( "normstr"  ) ) CALL iom_put( "normstr"     ,   diag_sig1   *zswi        )          ! Normal stress
307      IF  ( iom_use( "sheastr"  ) ) CALL iom_put( "sheastr"     ,   diag_sig2   *zswi        )          ! Shear stress
308
309      !--------------------------------
310      ! Global ice diagnostics (SIMIP)
311      !--------------------------------
312
313      IF ( iom_use( "NH_icearea" ) .OR. iom_use( "NH_icevolu" ) .OR. iom_use( "NH_iceextt" ) )   THEN   ! NH integrated diagnostics
314 
315         WHERE( fcor > 0._wp ); zswi(:,:) = 1.0e-12
316         ELSEWHERE            ; zswi(:,:) = 0.
317         END WHERE
318
319         zdiag_area_nh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) )
320         zdiag_volu_nh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) )
321
322         WHERE( fcor > 0._wp .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12
323         ELSEWHERE                              ; zswi(:,:) = 0.
324         END WHERE
325
326         zdiag_extt_nh = glob_sum( zswi(:,:) * e12t(:,:) )
327
328         IF ( iom_use( "NH_icearea" ) ) CALL iom_put( "NH_icearea" ,  zdiag_area_nh  )
329         IF ( iom_use( "NH_icevolu" ) ) CALL iom_put( "NH_icevolu" ,  zdiag_volu_nh  )
330         IF ( iom_use( "NH_iceextt" ) ) CALL iom_put( "NH_iceextt" ,  zdiag_extt_nh  )
331
332      ENDIF
333
334      IF ( iom_use( "SH_icearea" ) .OR. iom_use( "SH_icevolu" ) .OR. iom_use( "SH_iceextt" ) )   THEN   ! SH integrated diagnostics
335
336         WHERE( fcor < 0._wp ); zswi(:,:) = 1.0e-12; 
337         ELSEWHERE            ; zswi(:,:) = 0.
338         END WHERE
339
340         zdiag_area_sh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) ) 
341         zdiag_volu_sh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) )
342
343         WHERE( fcor < 0._wp .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12
344         ELSEWHERE                              ; zswi(:,:) = 0.
345         END WHERE
346
347         zdiag_extt_sh = glob_sum( zswi(:,:) * e12t(:,:) )
348
349         IF ( iom_use( "SH_icearea" ) ) CALL iom_put( "SH_icearea", zdiag_area_sh )
350         IF ( iom_use( "SH_icevolu" ) ) CALL iom_put( "SH_icevolu", zdiag_volu_sh )
351         IF ( iom_use( "SH_iceextt" ) ) CALL iom_put( "SH_iceextt", zdiag_extt_sh )
352
353      ENDIF 
354
355      !--------------------------------
356      ! Fluxes through straits (SIMIP)
357      !--------------------------------
358      !
359      ! Valid only for ORCA-like grids
360      !
361      ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions)
362      !
363      ! Fram and Bering  straits are easy because they follow parallels
364      ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful.
365      !
366
367      IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN
368
369         zdiag_area_strait(:) = 0._wp   ;   zdiag_mice_strait(:) = 0._wp   ;   zdiag_msno_strait(:) = 0._wp
370   
371         !------------------------------
372         ! === Fram & Bering Straits ===
373         !------------------------------
374         
375         SELECT CASE ( jp_cfg ) 
376         
377         CASE ( 2 )   ! --- ORCA2
378         
379            ! Fram Strait   (i_strait = 1)
380            ji0(1) = 133   ;   ji1(1) = 136
381            jj0(1) = 136 
382
383            ! Bering Strait (i_strait = 4)
384            ji0(4) = 55    ;   ji1(4) = 56
385            jj0(4) = 122
386         
387         CASE ( 1 )   ! --- eORCA1
388         
389            ! Fram Strait
390            ji0(1) = 268   ;   ji1(1) = 277
391            jj0(1) = 311
392
393            ! Bering Strait
394            ji0(4) = 113   ;   jj1(4) = 115
395            jj0(4) = 285
396           
397         END SELECT
398         
399         DO i_strait = 1, 4, 3
400
401            DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) )
402               jj = mj0( jj0(i_strait) )
403   
404               zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait)                                 &     ! --- ice area flux ---
405                   &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &     ! northwards (positive) flow
406                   &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )               ! southwards (negative) flow
407     
408               zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic *                       &     ! --- ice mass flux  ---
409                   &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         & 
410                   &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )         
411     
412               zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn *                       &     ! --- snow mass flux ---
413                   &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         & 
414                   &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) ) 
415   
416            END DO
417
418         END DO
419
420         !---------------------
421         ! === Barents opening
422         !---------------------
423   
424         SELECT CASE ( jp_cfg ) 
425
426            CASE ( 1 )   ! 'eORCA1'
427
428               Nu = 11   ! U-Flow
429               zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/)
430               zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/)
431
432               Nv = 9    ! V-Flow
433               zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/)
434               zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/)
435
436            CASE ( 2 )   ! 'ORCA2'
437
438               Nu = 5    ! U-Flow
439               zui(1:Nu) = (/ 141,142,142,143,144 /)
440               zuj(1:Nu) = (/ 134,133,132,131,130 /)
441
442               Nv = 4    ! V-Flow
443               zvi(1:Nv) = (/ 140,141,142,143 /)
444               zvj(1:Nv) = (/ 135,134,132,131 /)
445
446         END SELECT
447
448         ! Barents U-flow
449         zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
450   
451         DO ii = 1, Nu
452
453            ji = mi0(zui(ii))
454            jj = mj0(zuj(ii))
455
456            zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux ---
457                &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- northward
458                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- southward
459            zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---
460                &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
461                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
462            zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---
463                &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
464                &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
465         END DO
466   
467         ! Barents V-flow
468         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp
469
470         DO ii  = 1, Nv 
471
472            ji = mi0(zvi(ii))
473            jj = mj0(zvj(ii))
474
475            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux ---
476                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward
477                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward
478            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux ---
479                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
480                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
481            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux ---
482                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
483                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
484         END DO
485   
486         ! Sum Barents U-/V- contributions
487         zdiag_area_strait(3) = zfarea_u + zfarea_v 
488         zdiag_mice_strait(3) = zfmice_u + zfmice_v
489         zdiag_msno_strait(3) = zfmsno_u + zfmsno_v
490
491         !---------------------
492         ! === CAA throughflow
493         !---------------------
494   
495         SELECT CASE ( jp_cfg ) 
496
497            CASE ( 1 )   ! eORCA1
498
499               ! V-flow through Nares Strait
500               Nv = 4
501               zvi(1:Nv) = (/ 254,255,256,257 /)
502               zvj(1:Nv) = (/ 317,317,317,317 /)
503
504               ! U-flow through Queen Elisabeth Islands and McClure straits
505               Nu = 8 
506               zui(1:Nu) = (/ 231,231,231,  132,132,132,132,132  /)
507               zuj(1:Nu) = (/ 328,329,330,  318,319,320,321,322  /)
508
509               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
510
511               DO ii = 1, Nu
512
513                  ji = mi0(zui(ii))
514                  jj = mj0(zuj(ii))
515
516                  zfarea_u          = zfarea_u                                                           & ! --- ice area zonal flux ---
517                      &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward
518                      &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward
519                  zfmice_u          = zfmice_u + rhoic *                                                 & ! --- ice mass zonal flux ---
520                      &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
521                      &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
522                  zfmsno_u          = zfmsno_u + rhosn *                                                 & ! --- snow mass zonal flux ---
523                      &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &   
524                      &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )         
525
526               END DO
527
528
529            CASE ( 2 )   ! ORCA2
530
531               ! V-flow through Nares Strait
532               Nv = 2
533               zvi(1:Nv) = (/ 117,118 /)
534               zvj(1:Nv) = (/ 145,145 /)
535
536               ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2)
537               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp
538
539            END SELECT
540   
541         ! V-flow through Nares Strait
542         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp
543   
544         DO ii = 1, Nv 
545
546            ji = mi0(zvi(ii))
547            jj = mj0(zvj(ii))
548
549            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux ---
550                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward
551                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward
552            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux ---
553                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
554                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
555            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux ---
556                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & !
557                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         !
558
559         END DO
560
561         ! Sum U/V contributions
562         zdiag_area_strait(2) = zfarea_u + zfarea_v 
563         zdiag_mice_strait(2) = zfmice_u + zfmice_v
564         zdiag_msno_strait(2) = zfmsno_u + zfmsno_v
565   
566         ! === Ncdf output
567         IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait )
568         IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait )
569         IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait ) 
570
571         WRITE(numout,*) " area flx ", zdiag_area_strait(:)
572         WRITE(numout,*) " mice flx ", zdiag_mice_strait(:)
573         WRITE(numout,*) " msno flx ", zdiag_msno_strait(:)
574
575      ENDIF
576
577      !     !  Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s
578      !     IF( kindic < 0 )   CALL lim_wri_state( 'output.abort' )
579      !     not yet implemented
580     
581      CALL wrk_dealloc( jpi, jpj, jpl, zswi2 )
582      CALL wrk_dealloc( jpi, jpj     , z2d, zswi )
583      CALL wrk_dealloc( jpi, jpj     , zfb, zamask, zamask15 )
584
585      IF( nn_timing == 1 )  CALL timing_stop('limwri')
586     
587   END SUBROUTINE lim_wri
588
589 
590   SUBROUTINE lim_wri_state( kt, kid, kh_i )
591      !!---------------------------------------------------------------------
592      !!                 ***  ROUTINE lim_wri_state  ***
593      !!       
594      !! ** Purpose :   create a NetCDF file named cdfile_name which contains
595      !!      the instantaneous ice state and forcing fields for ice model
596      !!        Used to find errors in the initial state or save the last
597      !!      ocean state in case of abnormal end of a simulation
598      !!
599      !! History :
600      !!   4.0  !  2013-06  (C. Rousset)
601      !!----------------------------------------------------------------------
602      INTEGER, INTENT( in )   ::   kt               ! ocean time-step index)
603      INTEGER, INTENT( in )   ::   kid , kh_i
604      INTEGER                 ::   nz_i, jl
605      REAL(wp), DIMENSION(jpl) :: jcat
606      !!----------------------------------------------------------------------
607      DO jl = 1, jpl
608         jcat(jl) = REAL(jl)
609      ENDDO
610     
611      CALL histvert( kid, "ncatice", "Ice Categories","", jpl, jcat, nz_i, "up")
612
613      CALL histdef( kid, "sithic", "Ice thickness"           , "m"      ,   &
614      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
615      CALL histdef( kid, "siconc", "Ice concentration"       , "%"      ,   &
616      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
617      CALL histdef( kid, "sitemp", "Ice temperature"         , "C"      ,   &
618      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
619      CALL histdef( kid, "sivelu", "i-Ice speed "            , "m/s"    ,   &
620      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
621      CALL histdef( kid, "sivelv", "j-Ice speed "            , "m/s"    ,   &
622      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
623      CALL histdef( kid, "sistru", "i-Wind stress over ice " , "Pa"     ,   &
624      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
625      CALL histdef( kid, "sistrv", "j-Wind stress over ice " , "Pa"     ,   &
626      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
627      CALL histdef( kid, "sisflx", "Solar flux over ocean"     , "w/m2" ,   &
628      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
629      CALL histdef( kid, "sinflx", "Non-solar flux over ocean" , "w/m2" ,   &
630      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
631      CALL histdef( kid, "isnowpre", "Snow precipitation"      , "kg/m2/s",   &
632      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
633      CALL histdef( kid, "sisali", "Ice salinity"            , "PSU"    ,   &
634      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
635      CALL histdef( kid, "sivolu", "Ice volume"              , "m"      ,   &
636      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
637      CALL histdef( kid, "sidive", "Ice divergence"          , "10-8s-1",   &
638      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 
639
640      CALL histdef( kid, "vfxbog", "Ice bottom production"   , "m/s"    ,   &
641      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
642      CALL histdef( kid, "vfxdyn", "Ice dynamic production"  , "m/s"    ,   &
643      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
644      CALL histdef( kid, "vfxopw", "Ice open water prod"     , "m/s"    ,   &
645      &       jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
646      CALL histdef( kid, "vfxsni", "Snow ice production "    , "m/s"    ,   &
647      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
648      CALL histdef( kid, "vfxres", "Ice prod from limupdate" , "m/s"    ,   &
649      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
650      CALL histdef( kid, "vfxbom", "Ice bottom melt"         , "m/s"    ,   &
651      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
652      CALL histdef( kid, "vfxsum", "Ice surface melt"        , "m/s"    ,   &
653      &      jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
654
655      CALL histdef( kid, "sithicat", "Ice thickness"         , "m"      ,   &
656      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
657      CALL histdef( kid, "siconcat", "Ice concentration"     , "%"      ,   &
658      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
659      CALL histdef( kid, "sisalcat", "Ice salinity"           , ""      ,   &
660      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
661      CALL histdef( kid, "sitemcat", "Ice temperature"       , "C"      ,   &
662      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
663      CALL histdef( kid, "snthicat", "Snw thickness"         , "m"      ,   &
664      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
665      CALL histdef( kid, "sntemcat", "Snw temperature"       , "C"      ,   &
666      &      jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
667
668      CALL histend( kid, snc4set )   ! end of the file definition
669
670      CALL histwrite( kid, "sithic", kt, htm_i         , jpi*jpj, (/1/) )   
671      CALL histwrite( kid, "siconc", kt, at_i          , jpi*jpj, (/1/) )
672      CALL histwrite( kid, "sitemp", kt, tm_i - rt0    , jpi*jpj, (/1/) )
673      CALL histwrite( kid, "sivelu", kt, u_ice          , jpi*jpj, (/1/) )
674      CALL histwrite( kid, "sivelv", kt, v_ice          , jpi*jpj, (/1/) )
675      CALL histwrite( kid, "sistru", kt, utau_ice       , jpi*jpj, (/1/) )
676      CALL histwrite( kid, "sistrv", kt, vtau_ice       , jpi*jpj, (/1/) )
677      CALL histwrite( kid, "sisflx", kt, qsr , jpi*jpj, (/1/) )
678      CALL histwrite( kid, "sinflx", kt, qns , jpi*jpj, (/1/) )
679      CALL histwrite( kid, "isnowpre", kt, sprecip        , jpi*jpj, (/1/) )
680      CALL histwrite( kid, "sisali", kt, smt_i          , jpi*jpj, (/1/) )
681      CALL histwrite( kid, "sivolu", kt, vt_i           , jpi*jpj, (/1/) )
682      CALL histwrite( kid, "sidive", kt, divu_i*1.0e8   , jpi*jpj, (/1/) )
683
684      CALL histwrite( kid, "vfxbog", kt, wfx_bog        , jpi*jpj, (/1/) )
685      CALL histwrite( kid, "vfxdyn", kt, wfx_dyn        , jpi*jpj, (/1/) )
686      CALL histwrite( kid, "vfxopw", kt, wfx_opw        , jpi*jpj, (/1/) )
687      CALL histwrite( kid, "vfxsni", kt, wfx_sni        , jpi*jpj, (/1/) )
688      CALL histwrite( kid, "vfxres", kt, wfx_res        , jpi*jpj, (/1/) )
689      CALL histwrite( kid, "vfxbom", kt, wfx_bom        , jpi*jpj, (/1/) )
690      CALL histwrite( kid, "vfxsum", kt, wfx_sum        , jpi*jpj, (/1/) )
691
692      CALL histwrite( kid, "sithicat", kt, ht_i        , jpi*jpj*jpl, (/1/) )   
693      CALL histwrite( kid, "siconcat", kt, a_i         , jpi*jpj*jpl, (/1/) )   
694      CALL histwrite( kid, "sisalcat", kt, sm_i        , jpi*jpj*jpl, (/1/) )   
695      CALL histwrite( kid, "sitemcat", kt, tm_i - rt0  , jpi*jpj*jpl, (/1/) )   
696      CALL histwrite( kid, "snthicat", kt, ht_s        , jpi*jpj*jpl, (/1/) )   
697      CALL histwrite( kid, "sntemcat", kt, tm_su - rt0 , jpi*jpj*jpl, (/1/) )   
698
699      ! Close the file
700      ! -----------------
701      !CALL histclo( kid )
702
703    END SUBROUTINE lim_wri_state
704
705#else
706   !!----------------------------------------------------------------------
707   !!   Default option :         Empty module          NO LIM sea-ice model
708   !!----------------------------------------------------------------------
709CONTAINS
710   SUBROUTINE lim_wri          ! Empty routine
711   END SUBROUTINE lim_wri
712#endif
713
714   !!======================================================================
715END MODULE limwri
Note: See TracBrowser for help on using the repository browser.