limwri.F90 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. MODULE 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 limvar
  21. USE in_out_manager
  22. USE lbclnk
  23. USE lib_mpp ! MPP library
  24. USE wrk_nemo ! work arrays
  25. USE iom
  26. USE timing ! Timing
  27. USE lib_fortran ! Fortran utilities
  28. IMPLICIT NONE
  29. PRIVATE
  30. PUBLIC lim_wri ! routine called by lim_step.F90
  31. PUBLIC lim_wri_state ! called by dia_wri_state
  32. !!----------------------------------------------------------------------
  33. !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
  34. !! $Id: limwri.F90 5517 2015-06-30 13:09:58Z clem $
  35. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  36. !!----------------------------------------------------------------------
  37. CONTAINS
  38. SUBROUTINE lim_wri( kindic )
  39. !!-------------------------------------------------------------------
  40. !! This routine computes the average of some variables and write it
  41. !! on the ouput files.
  42. !! ATTENTION cette routine n'est valable que si le pas de temps est
  43. !! egale a une fraction entiere de 1 jours.
  44. !! Diff 1-D 3-D : suppress common also included in etat
  45. !! suppress cmoymo 11-18
  46. !! modif : 03/06/98
  47. !!-------------------------------------------------------------------
  48. INTEGER, INTENT(in) :: kindic ! if kindic < 0 there has been an error somewhere
  49. !
  50. INTEGER :: ji, jj, jk, jl ! dummy loop indices
  51. REAL(wp) :: z1_365
  52. REAL(wp) :: z2da, z2db, ztmp
  53. REAL(wp), POINTER, DIMENSION(:,:,:) :: zswi2
  54. REAL(wp), POINTER, DIMENSION(:,:) :: z2d, zswi ! 2D workspace
  55. !!-------------------------------------------------------------------
  56. IF( nn_timing == 1 ) CALL timing_start('limwri')
  57. CALL wrk_alloc( jpi, jpj, jpl, zswi2 )
  58. CALL wrk_alloc( jpi, jpj , z2d, zswi )
  59. !-----------------------------
  60. ! Mean category values
  61. !-----------------------------
  62. z1_365 = 1._wp / 365._wp
  63. ! brine volume
  64. CALL lim_var_bv
  65. ! tresholds for outputs
  66. DO jj = 1, jpj
  67. DO ji = 1, jpi
  68. zswi(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) )
  69. END DO
  70. END DO
  71. DO jl = 1, jpl
  72. DO jj = 1, jpj
  73. DO ji = 1, jpi
  74. zswi2(ji,jj,jl) = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) )
  75. END DO
  76. END DO
  77. END DO
  78. !
  79. ! fluxes
  80. ! pfrld is the lead fraction at the previous time step (actually between TRP and THD)
  81. IF( iom_use('qsr_oce') ) CALL iom_put( "qsr_oce" , qsr_oce(:,:) * pfrld(:,:) ) ! solar flux at ocean surface
  82. IF( iom_use('qns_oce') ) CALL iom_put( "qns_oce" , qns_oce(:,:) * pfrld(:,:) + qemp_oce(:,:) ) ! non-solar flux at ocean surface
  83. IF( iom_use('qsr_ice') ) CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux at ice surface
  84. 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
  85. IF( iom_use('qtr_ice') ) CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice
  86. IF( iom_use('qt_oce' ) ) CALL iom_put( "qt_oce" , ( qsr_oce(:,:) + qns_oce(:,:) ) * pfrld(:,:) + qemp_oce(:,:) )
  87. IF( iom_use('qt_ice' ) ) CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) &
  88. & * a_i_b(:,:,:),dim=3 ) + qemp_ice(:,:) )
  89. IF( iom_use('qemp_oce') ) CALL iom_put( "qemp_oce" , qemp_oce(:,:) )
  90. IF( iom_use('qemp_ice') ) CALL iom_put( "qemp_ice" , qemp_ice(:,:) )
  91. 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)
  92. 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)
  93. ! velocity
  94. IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" ) ) THEN
  95. DO jj = 2 , jpjm1
  96. DO ji = 2 , jpim1
  97. z2da = ( u_ice(ji,jj) * umask(ji,jj,1) + u_ice(ji-1,jj) * umask(ji-1,jj,1) ) * 0.5_wp
  98. z2db = ( v_ice(ji,jj) * vmask(ji,jj,1) + v_ice(ji,jj-1) * vmask(ji,jj-1,1) ) * 0.5_wp
  99. z2d(ji,jj) = SQRT( z2da * z2da + z2db * z2db )
  100. END DO
  101. END DO
  102. CALL lbc_lnk( z2d, 'T', 1. )
  103. CALL iom_put( "uice_ipa" , u_ice ) ! ice velocity u component
  104. CALL iom_put( "vice_ipa" , v_ice ) ! ice velocity v component
  105. CALL iom_put( "icevel" , z2d ) ! ice velocity module
  106. ENDIF
  107. !
  108. IF ( iom_use( "miceage" ) ) CALL iom_put( "miceage" , om_i * zswi * z1_365 ) ! mean ice age
  109. IF ( iom_use( "icethic_cea" ) ) CALL iom_put( "icethic_cea" , htm_i * zswi ) ! ice thickness mean
  110. IF ( iom_use( "snowthic_cea" ) ) CALL iom_put( "snowthic_cea", htm_s * zswi ) ! snow thickness mean
  111. IF ( iom_use( "micet" ) ) CALL iom_put( "micet" , ( tm_i - rt0 ) * zswi ) ! ice mean temperature
  112. IF ( iom_use( "icest" ) ) CALL iom_put( "icest" , ( tm_su - rt0 ) * zswi ) ! ice surface temperature
  113. IF ( iom_use( "icecolf" ) ) CALL iom_put( "icecolf" , hicol ) ! frazil ice collection thickness
  114. !
  115. CALL iom_put( "isst" , sst_m ) ! sea surface temperature
  116. CALL iom_put( "isss" , sss_m ) ! sea surface salinity
  117. CALL iom_put( "iceconc" , at_i * zswi ) ! ice concentration
  118. CALL iom_put( "icevolu" , vt_i * zswi ) ! ice volume = mean ice thickness over the cell
  119. CALL iom_put( "icehc" , et_i * zswi ) ! ice total heat content
  120. CALL iom_put( "isnowhc" , et_s * zswi ) ! snow total heat content
  121. CALL iom_put( "ibrinv" , bvm_i * zswi * 100. ) ! brine volume
  122. CALL iom_put( "utau_ice" , utau_ice ) ! wind stress over ice along i-axis at I-point
  123. CALL iom_put( "vtau_ice" , vtau_ice ) ! wind stress over ice along j-axis at I-point
  124. CALL iom_put( "snowpre" , sprecip * 86400. ) ! snow precipitation
  125. CALL iom_put( "micesalt" , smt_i * zswi ) ! mean ice salinity
  126. CALL iom_put( "icestr" , strength * zswi ) ! ice strength
  127. CALL iom_put( "idive" , divu_i * 1.0e8 ) ! divergence
  128. CALL iom_put( "ishear" , shear_i * 1.0e8 ) ! shear
  129. CALL iom_put( "snowvol" , vt_s * zswi ) ! snow volume
  130. CALL iom_put( "icetrp" , diag_trp_vi * rday ) ! ice volume transport
  131. CALL iom_put( "snwtrp" , diag_trp_vs * rday ) ! snw volume transport
  132. CALL iom_put( "saltrp" , diag_trp_smv * rday * rhoic ) ! salt content transport
  133. CALL iom_put( "deitrp" , diag_trp_ei ) ! advected ice enthalpy (W/m2)
  134. CALL iom_put( "destrp" , diag_trp_es ) ! advected snw enthalpy (W/m2)
  135. CALL iom_put( "sfxbog" , sfx_bog * rday ) ! salt flux from bottom growth
  136. CALL iom_put( "sfxbom" , sfx_bom * rday ) ! salt flux from bottom melting
  137. CALL iom_put( "sfxsum" , sfx_sum * rday ) ! salt flux from surface melting
  138. CALL iom_put( "sfxsni" , sfx_sni * rday ) ! salt flux from snow ice formation
  139. CALL iom_put( "sfxopw" , sfx_opw * rday ) ! salt flux from open water formation
  140. CALL iom_put( "sfxdyn" , sfx_dyn * rday ) ! salt flux from ridging rafting
  141. CALL iom_put( "sfxres" , sfx_res * rday ) ! salt flux from limupdate (resultant)
  142. CALL iom_put( "sfxbri" , sfx_bri * rday ) ! salt flux from brines
  143. CALL iom_put( "sfxsub" , sfx_sub * rday ) ! salt flux from sublimation
  144. CALL iom_put( "sfx" , sfx * rday ) ! total salt flux
  145. ztmp = rday / rhoic
  146. CALL iom_put( "vfxres" , wfx_res * ztmp ) ! daily prod./melting due to limupdate
  147. CALL iom_put( "vfxopw" , wfx_opw * ztmp ) ! daily lateral thermodynamic ice production
  148. CALL iom_put( "vfxsni" , wfx_sni * ztmp ) ! daily snowice ice production
  149. CALL iom_put( "vfxbog" , wfx_bog * ztmp ) ! daily bottom thermodynamic ice production
  150. CALL iom_put( "vfxdyn" , wfx_dyn * ztmp ) ! daily dynamic ice production (rid/raft)
  151. CALL iom_put( "vfxsum" , wfx_sum * ztmp ) ! surface melt
  152. CALL iom_put( "vfxbom" , wfx_bom * ztmp ) ! bottom melt
  153. CALL iom_put( "vfxice" , wfx_ice * ztmp ) ! total ice growth/melt
  154. IF ( iom_use( "vfxthin" ) ) THEN ! ice production for open water + thin ice (<20cm) => comparable to observations
  155. WHERE( htm_i(:,:) < 0.2 .AND. htm_i(:,:) > 0. ) ; z2d = wfx_bog
  156. ELSEWHERE ; z2d = 0._wp
  157. END WHERE
  158. CALL iom_put( "vfxthin", ( wfx_opw + z2d ) * ztmp )
  159. ENDIF
  160. ztmp = rday / rhosn
  161. CALL iom_put( "vfxspr" , wfx_spr * ztmp ) ! precip (snow)
  162. CALL iom_put( "vfxsnw" , wfx_snw * ztmp ) ! total snw growth/melt
  163. CALL iom_put( "vfxsub" , wfx_sub * ztmp ) ! sublimation (snow/ice)
  164. CALL iom_put( "vfxsub_err" , wfx_err_sub * ztmp ) ! "excess" of sublimation sent to ocean
  165. CALL iom_put( "afxtot" , afx_tot * rday ) ! concentration tendency (total)
  166. CALL iom_put( "afxdyn" , afx_dyn * rday ) ! concentration tendency (dynamics)
  167. CALL iom_put( "afxthd" , afx_thd * rday ) ! concentration tendency (thermo)
  168. CALL iom_put ('hfxthd' , hfx_thd(:,:) ) !
  169. CALL iom_put ('hfxdyn' , hfx_dyn(:,:) ) !
  170. CALL iom_put ('hfxres' , hfx_res(:,:) ) !
  171. CALL iom_put ('hfxout' , hfx_out(:,:) ) !
  172. CALL iom_put ('hfxin' , hfx_in(:,:) ) !
  173. CALL iom_put ('hfxsnw' , hfx_snw(:,:) ) !
  174. CALL iom_put ('hfxsub' , hfx_sub(:,:) ) !
  175. CALL iom_put ('hfxerr' , hfx_err(:,:) ) !
  176. CALL iom_put ('hfxerr_rem' , hfx_err_rem(:,:) ) !
  177. CALL iom_put ('hfxsum' , hfx_sum(:,:) ) !
  178. CALL iom_put ('hfxbom' , hfx_bom(:,:) ) !
  179. CALL iom_put ('hfxbog' , hfx_bog(:,:) ) !
  180. CALL iom_put ('hfxdif' , hfx_dif(:,:) ) !
  181. CALL iom_put ('hfxopw' , hfx_opw(:,:) ) !
  182. CALL iom_put ('hfxtur' , fhtur(:,:) * SUM( a_i_b(:,:,:), dim=3 ) ) ! turbulent heat flux at ice base
  183. CALL iom_put ('hfxdhc' , diag_heat(:,:) ) ! Heat content variation in snow and ice
  184. CALL iom_put ('hfxspr' , hfx_spr(:,:) ) ! Heat content of snow precip
  185. !--------------------------------
  186. ! Output values for each category
  187. !--------------------------------
  188. IF ( iom_use( "iceconc_cat" ) ) CALL iom_put( "iceconc_cat" , a_i * zswi2 ) ! area for categories
  189. IF ( iom_use( "icethic_cat" ) ) CALL iom_put( "icethic_cat" , ht_i * zswi2 ) ! thickness for categories
  190. IF ( iom_use( "snowthic_cat" ) ) CALL iom_put( "snowthic_cat" , ht_s * zswi2 ) ! snow depth for categories
  191. IF ( iom_use( "salinity_cat" ) ) CALL iom_put( "salinity_cat" , sm_i * zswi2 ) ! salinity for categories
  192. ! ice temperature
  193. IF ( iom_use( "icetemp_cat" ) ) CALL iom_put( "icetemp_cat", ( SUM( t_i(:,:,:,:), dim=3 ) * r1_nlay_i - rt0 ) * zswi2 )
  194. ! snow temperature
  195. IF ( iom_use( "snwtemp_cat" ) ) CALL iom_put( "snwtemp_cat", ( SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s - rt0 ) * zswi2 )
  196. ! ice age
  197. IF ( iom_use( "iceage_cat" ) ) CALL iom_put( "iceage_cat" , o_i * zswi2 * z1_365 )
  198. ! brine volume
  199. IF ( iom_use( "brinevol_cat" ) ) CALL iom_put( "brinevol_cat", bv_i * 100. * zswi2 )
  200. ! ! Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s
  201. ! IF( kindic < 0 ) CALL lim_wri_state( 'output.abort' )
  202. ! not yet implemented
  203. CALL wrk_dealloc( jpi, jpj, jpl, zswi2 )
  204. CALL wrk_dealloc( jpi, jpj , z2d, zswi )
  205. IF( nn_timing == 1 ) CALL timing_stop('limwri')
  206. END SUBROUTINE lim_wri
  207. SUBROUTINE lim_wri_state( kt, kid, kh_i )
  208. !!---------------------------------------------------------------------
  209. !! *** ROUTINE lim_wri_state ***
  210. !!
  211. !! ** Purpose : create a NetCDF file named cdfile_name which contains
  212. !! the instantaneous ice state and forcing fields for ice model
  213. !! Used to find errors in the initial state or save the last
  214. !! ocean state in case of abnormal end of a simulation
  215. !!
  216. !! History :
  217. !! 4.0 ! 2013-06 (C. Rousset)
  218. !!----------------------------------------------------------------------
  219. INTEGER, INTENT( in ) :: kt ! ocean time-step index)
  220. INTEGER, INTENT( in ) :: kid , kh_i
  221. INTEGER :: nz_i, jl
  222. REAL(wp), DIMENSION(jpl) :: jcat
  223. !!----------------------------------------------------------------------
  224. DO jl = 1, jpl
  225. jcat(jl) = REAL(jl)
  226. ENDDO
  227. CALL histvert( kid, "ncatice", "Ice Categories","", jpl, jcat, nz_i, "up")
  228. CALL histdef( kid, "sithic", "Ice thickness" , "m" , &
  229. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  230. CALL histdef( kid, "siconc", "Ice concentration" , "%" , &
  231. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  232. CALL histdef( kid, "sitemp", "Ice temperature" , "C" , &
  233. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  234. CALL histdef( kid, "sivelu", "i-Ice speed " , "m/s" , &
  235. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  236. CALL histdef( kid, "sivelv", "j-Ice speed " , "m/s" , &
  237. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  238. CALL histdef( kid, "sistru", "i-Wind stress over ice " , "Pa" , &
  239. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  240. CALL histdef( kid, "sistrv", "j-Wind stress over ice " , "Pa" , &
  241. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  242. CALL histdef( kid, "sisflx", "Solar flux over ocean" , "w/m2" , &
  243. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  244. CALL histdef( kid, "sinflx", "Non-solar flux over ocean" , "w/m2" , &
  245. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  246. CALL histdef( kid, "isnowpre", "Snow precipitation" , "kg/m2/s", &
  247. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  248. CALL histdef( kid, "sisali", "Ice salinity" , "PSU" , &
  249. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  250. CALL histdef( kid, "sivolu", "Ice volume" , "m" , &
  251. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  252. CALL histdef( kid, "sidive", "Ice divergence" , "10-8s-1", &
  253. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  254. CALL histdef( kid, "vfxbog", "Ice bottom production" , "m/s" , &
  255. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  256. CALL histdef( kid, "vfxdyn", "Ice dynamic production" , "m/s" , &
  257. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  258. CALL histdef( kid, "vfxopw", "Ice open water prod" , "m/s" , &
  259. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  260. CALL histdef( kid, "vfxsni", "Snow ice production " , "m/s" , &
  261. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  262. CALL histdef( kid, "vfxres", "Ice prod from limupdate" , "m/s" , &
  263. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  264. CALL histdef( kid, "vfxbom", "Ice bottom melt" , "m/s" , &
  265. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  266. CALL histdef( kid, "vfxsum", "Ice surface melt" , "m/s" , &
  267. & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt )
  268. CALL histdef( kid, "sithicat", "Ice thickness" , "m" , &
  269. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  270. CALL histdef( kid, "siconcat", "Ice concentration" , "%" , &
  271. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  272. CALL histdef( kid, "sisalcat", "Ice salinity" , "" , &
  273. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  274. CALL histdef( kid, "sitemcat", "Ice temperature" , "C" , &
  275. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  276. CALL histdef( kid, "snthicat", "Snw thickness" , "m" , &
  277. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  278. CALL histdef( kid, "sntemcat", "Snw temperature" , "C" , &
  279. & jpi, jpj, kh_i, jpl, 1, jpl, nz_i, 32, "inst(x)", rdt, rdt )
  280. CALL histend( kid, snc4set ) ! end of the file definition
  281. CALL histwrite( kid, "sithic", kt, htm_i , jpi*jpj, (/1/) )
  282. CALL histwrite( kid, "siconc", kt, at_i , jpi*jpj, (/1/) )
  283. CALL histwrite( kid, "sitemp", kt, tm_i - rt0 , jpi*jpj, (/1/) )
  284. CALL histwrite( kid, "sivelu", kt, u_ice , jpi*jpj, (/1/) )
  285. CALL histwrite( kid, "sivelv", kt, v_ice , jpi*jpj, (/1/) )
  286. CALL histwrite( kid, "sistru", kt, utau_ice , jpi*jpj, (/1/) )
  287. CALL histwrite( kid, "sistrv", kt, vtau_ice , jpi*jpj, (/1/) )
  288. CALL histwrite( kid, "sisflx", kt, qsr , jpi*jpj, (/1/) )
  289. CALL histwrite( kid, "sinflx", kt, qns , jpi*jpj, (/1/) )
  290. CALL histwrite( kid, "isnowpre", kt, sprecip , jpi*jpj, (/1/) )
  291. CALL histwrite( kid, "sisali", kt, smt_i , jpi*jpj, (/1/) )
  292. CALL histwrite( kid, "sivolu", kt, vt_i , jpi*jpj, (/1/) )
  293. CALL histwrite( kid, "sidive", kt, divu_i*1.0e8 , jpi*jpj, (/1/) )
  294. CALL histwrite( kid, "vfxbog", kt, wfx_bog , jpi*jpj, (/1/) )
  295. CALL histwrite( kid, "vfxdyn", kt, wfx_dyn , jpi*jpj, (/1/) )
  296. CALL histwrite( kid, "vfxopw", kt, wfx_opw , jpi*jpj, (/1/) )
  297. CALL histwrite( kid, "vfxsni", kt, wfx_sni , jpi*jpj, (/1/) )
  298. CALL histwrite( kid, "vfxres", kt, wfx_res , jpi*jpj, (/1/) )
  299. CALL histwrite( kid, "vfxbom", kt, wfx_bom , jpi*jpj, (/1/) )
  300. CALL histwrite( kid, "vfxsum", kt, wfx_sum , jpi*jpj, (/1/) )
  301. CALL histwrite( kid, "sithicat", kt, ht_i , jpi*jpj*jpl, (/1/) )
  302. CALL histwrite( kid, "siconcat", kt, a_i , jpi*jpj*jpl, (/1/) )
  303. CALL histwrite( kid, "sisalcat", kt, sm_i , jpi*jpj*jpl, (/1/) )
  304. CALL histwrite( kid, "sitemcat", kt, tm_i - rt0 , jpi*jpj*jpl, (/1/) )
  305. CALL histwrite( kid, "snthicat", kt, ht_s , jpi*jpj*jpl, (/1/) )
  306. CALL histwrite( kid, "sntemcat", kt, tm_su - rt0 , jpi*jpj*jpl, (/1/) )
  307. ! Close the file
  308. ! -----------------
  309. !CALL histclo( kid )
  310. END SUBROUTINE lim_wri_state
  311. #else
  312. !!----------------------------------------------------------------------
  313. !! Default option : Empty module NO LIM sea-ice model
  314. !!----------------------------------------------------------------------
  315. CONTAINS
  316. SUBROUTINE lim_wri ! Empty routine
  317. END SUBROUTINE lim_wri
  318. #endif
  319. !!======================================================================
  320. END MODULE limwri