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 trunk/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: trunk/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90 @ 2777

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

LIM3 compiling and (partly?) running in v3_3_1, see ticket#817

  • Property svn:keywords set to Id
File size: 20.1 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_init : initialization and namelist read
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 dom_ice
20   USE ice
21   USE limvar
22   USE in_out_manager
23   USE lbclnk
24   USE lib_mpp         ! MPP library
25   USE par_ice
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC lim_wri        ! routine called by lim_step.F90
31
32   INTEGER, PARAMETER ::   jpnoumax = 40   !: maximum number of variable for ice output
33   
34   INTEGER  ::   noumef             ! number of fields
35   INTEGER  ::   noumefa            ! number of additional fields
36   INTEGER  ::   add_diag_swi       ! additional diagnostics
37   INTEGER  ::   nz                                         ! dimension for the itd field
38
39   REAL(wp) , DIMENSION(jpnoumax) ::   cmulti         ! multiplicative constant
40   REAL(wp) , DIMENSION(jpnoumax) ::   cadd           ! additive constant
41   REAL(wp) , DIMENSION(jpnoumax) ::   cmultia        ! multiplicative constant
42   REAL(wp) , DIMENSION(jpnoumax) ::   cadda          ! additive constant
43   CHARACTER(len = 35), DIMENSION(jpnoumax) ::   titn, titna   ! title of the field
44   CHARACTER(len = 8 ), DIMENSION(jpnoumax) ::   nam , nama    ! name of the field
45   CHARACTER(len = 8 ), DIMENSION(jpnoumax) ::   uni , unia    ! unit of the field
46   INTEGER            , DIMENSION(jpnoumax) ::   nc  , nca     ! switch for saving field ( = 1 ) or not ( = 0 )
47
48   REAL(wp)  ::   epsi16 = 1e-16_wp
49   REAL(wp)  ::   zzero  = 0._wp
50   REAL(wp)  ::   zone   = 1._wp
51
52   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   zcmo, zcmoa   ! additional fields
53     
54   !!----------------------------------------------------------------------
55   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
56   !! $Id$
57   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
58   !!----------------------------------------------------------------------
59CONTAINS
60
61#if defined key_dimgout
62# include "limwri_dimg.h90"
63#else
64
65   SUBROUTINE lim_wri( kindic )
66      !!-------------------------------------------------------------------
67      !!  This routine computes the average of some variables and write it
68      !!  on the ouput files.
69      !!  ATTENTION cette routine n'est valable que si le pas de temps est
70      !!  egale a une fraction entiere de 1 jours.
71      !!  Diff 1-D 3-D : suppress common also included in etat
72      !!                 suppress cmoymo 11-18
73      !!  modif : 03/06/98
74      !!-------------------------------------------------------------------
75      USE wrk_nemo, ONLY:   wrk_not_released, wrk_in_use
76      USE wrk_nemo, ONLY:   zfield => wrk_2d_1             ! 2D workspace
77      USE wrk_nemo, ONLY:   wrk_3d_3, wrk_3d_4, wrk_3d_5   ! 3D workspace
78      !
79      INTEGER, INTENT(in) ::   kindic   ! if kindic < 0 there has been an error somewhere
80      !
81      INTEGER ::  ji, jj, jk, jl, jf, ipl ! dummy loop indices
82      INTEGER ::  ierr
83      REAL(wp),DIMENSION(1) ::   zdept
84      REAL(wp) ::  zsto, zjulian, zout, zindh, zinda, zindb
85      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zmaskitd, zoi, zei
86
87      CHARACTER(len = 40) ::   clhstnam, clop, clhstnama
88
89      INTEGER , SAVE ::   nice, nhorid, ndim, niter, ndepid
90      INTEGER , SAVE ::   nicea, nhorida, ndimitd
91      INTEGER , ALLOCATABLE, DIMENSION(:), SAVE ::   ndex51
92      INTEGER , ALLOCATABLE, DIMENSION(:), SAVE ::   ndexitd
93      !!-------------------------------------------------------------------
94
95      IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 3,4,5) ) THEN
96         CALL ctl_stop( 'lim_wri : requested workspace arrays unavailable' )   ;   RETURN
97      ENDIF
98
99      ipl = jpl
100
101      zmaskitd => wrk_3d_3(:,:,1:jpl)
102      zoi      => wrk_3d_4(:,:,1:jpl)
103      zei      => wrk_3d_5(:,:,1:jpl)
104
105
106      IF( numit == nstart ) THEN
107
108         ALLOCATE( ndex51(jpij), ndexitd(jpij*jpl), zcmo(jpi,jpj,jpnoumax), zcmoa(jpi,jpj,jpnoumax), STAT=ierr )
109         IF( lk_mpp    )   CALL mpp_sum ( ierr )
110         IF( ierr /= 0 ) THEN
111            CALL ctl_stop( 'lim_wri : unable to allocate standard arrays' )   ;   RETURN
112         ENDIF
113
114         CALL lim_wri_init 
115
116         IF(lwp) WRITE(numout,*) ' lim_wri, first time step '
117         IF(lwp) WRITE(numout,*) ' add_diag_swi ', add_diag_swi
118
119         !--------------------
120         !  1) Initialization
121         !--------------------
122
123         !-------------
124         ! Normal file
125         !-------------
126
127         zsto     = rdt_ice
128         IF( ln_mskland )   THEN   ;   clop = "ave(only(x))"   ! put 1.e+20 on land (very expensive!!)
129         ELSE                      ;   clop = "ave(x)"         ! no use of the mask value (require less cpu time)
130         ENDIF
131         zout     = nwrite * rdt_ice / nn_fsbc
132         niter    = ( nit000 - 1 ) / nn_fsbc
133         zdept(1) = 0.
134
135         CALL ymds2ju ( nyear, nmonth, nday, rdt, zjulian )
136         zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment
137         CALL dia_nam ( clhstnam, nwrite, 'icemod' )
138         CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit, 1, jpi, 1, jpj, niter, zjulian, rdt_ice,   &
139            &           nhorid, nice, domain_id=nidom, snc4chunks=snc4set )
140         CALL histvert( nice, "deptht", "Vertical T levels", "m", 1, zdept, ndepid, "down")
141         CALL wheneq  ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim)
142
143         DO jf = 1 , noumef
144            IF(lwp) WRITE(numout,*) 'jf', jf
145            IF ( nc(jf) == 1 ) THEN
146               CALL histdef( nice, nam(jf), titn(jf), uni(jf), jpi, jpj &
147                  , nhorid, 1, 1, 1, -99, 32, clop, zsto, zout )
148               IF(lwp) WRITE(numout,*) 'nice, nam(jf), titn(jf), uni(jf), nhorid, clop, zsto, zout'
149               IF(lwp) WRITE(numout,*)  nice, nam(jf), titn(jf), uni(jf), nhorid, clop, zsto, zout 
150            ENDIF
151         END DO
152
153         CALL histend(nice, snc4set)
154
155         !-----------------
156         ! ITD file output
157         !-----------------
158         zsto     = rdt_ice
159         clop     = "ave(x)"
160         zout     = nwrite * rdt_ice / nn_fsbc
161         zdept(1) = 0.
162
163         CALL dia_nam ( clhstnama, nwrite, 'icemoa' )
164         CALL histbeg ( clhstnama, jpi, glamt, jpj, gphit,         &
165            1, jpi, 1, jpj,            & ! zoom
166            niter, zjulian, rdt_ice,   & ! time
167            nhorida,                   & ! ? linked with horizontal ...
168            nicea , domain_id=nidom, snc4chunks=snc4set)                  ! file
169         CALL histvert( nicea, "icethi", "L levels",               &
170            "m", ipl , hi_mean , nz )
171         DO jl = 1, jpl
172            zmaskitd(:,:,jl) = tmask(:,:,1)
173         END DO
174         CALL wheneq  ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim)
175         CALL wheneq( jpi*jpj*jpl, zmaskitd, 1, 1., ndexitd, ndimitd  ) 
176         CALL histdef( nicea, "iice_itd", "Ice area in categories"         , "-"    ,   & 
177            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
178         CALL histdef( nicea, "iice_hid", "Ice thickness in categories"    , "m"    ,   & 
179            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
180         CALL histdef( nicea, "iice_hsd", "Snow depth in in categories"    , "m"    ,   & 
181            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
182         CALL histdef( nicea, "iice_std", "Ice salinity distribution"      , "ppt"  ,   & 
183            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
184         CALL histdef( nicea, "iice_otd", "Ice age distribution"               , "days",   & 
185            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
186         CALL histdef( nicea, "iice_etd", "Brine volume distr. "               , "%"    ,   & 
187            jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout )
188         CALL histend(nicea, snc4set)
189      ENDIF
190
191      !     !-----------------------------------------------------------------------!
192      !     !--2. Computation of instantaneous values                               !
193      !     !-----------------------------------------------------------------------!
194
195      !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
196      IF( ln_nicep ) THEN
197         WRITE(numout,*)
198         WRITE(numout,*) 'lim_wri : write ice outputs in NetCDF files at time : ', nyear, nmonth, nday, numit
199         WRITE(numout,*) '~~~~~~~ '
200         WRITE(numout,*) ' kindic = ', kindic
201      ENDIF
202      !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
203
204      !-- calculs des valeurs instantanees
205      zcmo ( 1:jpi, 1:jpj, 1:jpnoumax ) = 0._wp
206      zcmoa( 1:jpi, 1:jpj, 1:jpnoumax ) = 0._wp
207
208      DO jl = 1, jpl
209         DO jj = 1, jpj
210            DO ji = 1, jpi
211               zindh  = MAX( zzero , SIGN( zone , vt_i(ji,jj) * at_i(ji,jj) - 0.10 ) )
212               zinda  = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )
213               zcmo(ji,jj,17) = zcmo(ji,jj,17) + a_i(ji,jj,jl)*qsr_ice (ji,jj,jl) 
214               zcmo(ji,jj,18) = zcmo(ji,jj,18) + a_i(ji,jj,jl)*qns_ice(ji,jj,jl) 
215               zcmo(ji,jj,27) = zcmo(ji,jj,27) + t_su(ji,jj,jl)*a_i(ji,jj,jl)/MAX(at_i(ji,jj),epsi16)*zinda
216            END DO
217         END DO
218      END DO
219
220      CALL lim_var_bv
221
222      DO jj = 2 , jpjm1
223         DO ji = 2 , jpim1
224            zindh  = MAX( zzero , SIGN( zone , vt_i(ji,jj) * at_i(ji,jj) - 0.10 ) )
225            zinda  = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )
226            zindb  = zindh * zinda
227
228            zcmo(ji,jj,1)  = at_i(ji,jj)
229            zcmo(ji,jj,2)  = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi16 ) * zinda
230            zcmo(ji,jj,3)  = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi16 ) * zinda
231            zcmo(ji,jj,4)  = diag_bot_gr(ji,jj) * 86400.0 * zinda    ! Bottom thermodynamic ice production
232            zcmo(ji,jj,5)  = diag_dyn_gr(ji,jj) * 86400.0 * zinda    ! Dynamic ice production (rid/raft)
233            zcmo(ji,jj,22) = diag_lat_gr(ji,jj) * 86400.0 * zinda    ! Lateral thermodynamic ice production
234            zcmo(ji,jj,23) = diag_sni_gr(ji,jj) * 86400.0 * zinda    ! Snow ice production ice production
235            zcmo(ji,jj,24) = tm_i(ji,jj) - rtt
236
237            zcmo(ji,jj,6)  = fbif  (ji,jj)
238            zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) ) * 0.5_wp
239            zcmo(ji,jj,8)  = zindb * (  v_ice(ji,jj) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) ) * 0.5_wp
240            zcmo(ji,jj,9)  = sst_m(ji,jj)
241            zcmo(ji,jj,10) = sss_m(ji,jj)
242
243            zcmo(ji,jj,11) = qns(ji,jj) + qsr(ji,jj)
244            zcmo(ji,jj,12) = qsr(ji,jj)
245            zcmo(ji,jj,13) = qns(ji,jj)
246            zcmo(ji,jj,14) = fhbri(ji,jj)
247            zcmo(ji,jj,15) = utau_ice(ji,jj)
248            zcmo(ji,jj,16) = vtau_ice(ji,jj)
249            zcmo(ji,jj,17) = zcmo(ji,jj,17) + ( 1._wp - at_i(ji,jj) ) * qsr(ji,jj)
250            zcmo(ji,jj,18) = zcmo(ji,jj,18) + ( 1._wp - at_i(ji,jj) ) * qns(ji,jj)
251            zcmo(ji,jj,19) = sprecip(ji,jj)
252            zcmo(ji,jj,20) = smt_i(ji,jj)
253            zcmo(ji,jj,21) = ot_i(ji,jj)
254            zcmo(ji,jj,25) = et_i(ji,jj)
255            zcmo(ji,jj,26) = et_s(ji,jj)
256            zcmo(ji,jj,28) = fsbri(ji,jj)
257            zcmo(ji,jj,29) = fseqv(ji,jj)
258
259            zcmo(ji,jj,30) = bv_i(ji,jj)
260            zcmo(ji,jj,31) = hicol(ji,jj)
261            zcmo(ji,jj,32) = strength(ji,jj)
262            zcmo(ji,jj,33) = SQRT(  zcmo(ji,jj,7)*zcmo(ji,jj,7) + zcmo(ji,jj,8)*zcmo(ji,jj,8)  )
263            zcmo(ji,jj,34) = diag_sur_me(ji,jj) * 86400.0 * zinda    ! Surface melt
264            zcmo(ji,jj,35) = diag_bot_me(ji,jj) * 86400.0 * zinda    ! Bottom melt
265            zcmo(ji,jj,36) = divu_i(ji,jj)
266            zcmo(ji,jj,37) = shear_i(ji,jj)
267         END DO
268      END DO
269
270      !
271      ! ecriture d'un fichier netcdf
272      !
273      niter = niter + 1
274      DO jf = 1 , noumef
275         !
276         zfield(:,:) = zcmo(:,:,jf) * cmulti(jf) + cadd(jf)
277         !
278         IF( jf == 7  .OR. jf == 8  .OR. jf == 15 .OR. jf == 16 ) THEN   ;   CALL lbc_lnk( zfield, 'T', -1. )
279         ELSE                                                            ;   CALL lbc_lnk( zfield, 'T',  1. )
280         ENDIF
281         !
282         IF( ln_nicep ) THEN
283            WRITE(numout,*)
284            WRITE(numout,*) 'nc(jf), nice, nam(jf), niter, ndim'
285            WRITE(numout,*) nc(jf), nice, nam(jf), niter, ndim
286         ENDIF
287         IF( nc(jf) == 1 ) CALL histwrite( nice, nam(jf), niter, zfield, ndim, ndex51 )
288         !
289      END DO
290
291      IF( ( nn_fsbc * niter ) >= nitend .OR. kindic < 0 ) THEN
292         IF( lwp) WRITE(numout,*) ' Closing the icemod file '
293         CALL histclo( nice )
294      ENDIF
295
296      !-----------------------------
297      ! Thickness distribution file
298      !-----------------------------
299      IF( add_diag_swi == 1 ) THEN
300
301         DO jl = 1, jpl 
302            CALL lbc_lnk( a_i(:,:,jl)  , 'T' ,  1. )
303            CALL lbc_lnk( sm_i(:,:,jl) , 'T' ,  1. )
304            CALL lbc_lnk( oa_i(:,:,jl) , 'T' ,  1. )
305            CALL lbc_lnk( ht_i(:,:,jl) , 'T' ,  1. )
306            CALL lbc_lnk( ht_s(:,:,jl) , 'T' ,  1. )
307         END DO
308
309         ! Compute ice age
310         DO jl = 1, jpl 
311            DO jj = 1, jpj
312               DO ji = 1, jpi
313                  zinda = MAX( zzero , SIGN( zone , a_i(ji,jj,jl) - 1.0e-6 ) )
314                  zoi(ji,jj,jl) = oa_i(ji,jj,jl)  / MAX( a_i(ji,jj,jl) , 1.0e-6 ) * zinda
315               END DO
316            END DO
317         END DO
318
319         ! Compute brine volume
320         zei(:,:,:) = 0._wp
321         DO jl = 1, jpl 
322            DO jk = 1, nlay_i
323               DO jj = 1, jpj
324                  DO ji = 1, jpi
325                     zinda = MAX( zzero , SIGN( zone , a_i(ji,jj,jl) - 1.0e-6 ) )
326                     zei(ji,jj,jl) = zei(ji,jj,jl) + 100.0* &
327                        ( - tmut * s_i(ji,jj,jk,jl) / MIN( ( t_i(ji,jj,jk,jl) - rtt ), -1.0e-6 ) ) * &
328                        zinda / nlay_i
329                  END DO
330               END DO
331            END DO
332         END DO
333
334         DO jl = 1, jpl 
335            CALL lbc_lnk( zei(:,:,jl) , 'T' ,  1. )
336         END DO
337
338         CALL histwrite( nicea, "iice_itd", niter, a_i  , ndimitd , ndexitd  )   ! area
339         CALL histwrite( nicea, "iice_hid", niter, ht_i , ndimitd , ndexitd  )   ! thickness
340         CALL histwrite( nicea, "iice_hsd", niter, ht_s , ndimitd , ndexitd  )   ! snow depth
341         CALL histwrite( nicea, "iice_std", niter, sm_i , ndimitd , ndexitd  )   ! salinity
342         CALL histwrite( nicea, "iice_otd", niter, zoi  , ndimitd , ndexitd  )   ! age
343         CALL histwrite( nicea, "iice_etd", niter, zei  , ndimitd , ndexitd  )   ! brine volume
344
345         !     !  Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s
346         !     IF( kindic < 0 )   CALL lim_wri_state( 'output.abort' )
347         !     not yet implemented
348
349         IF( ( nn_fsbc * niter ) >= nitend .OR. kindic < 0 ) THEN
350            IF(lwp) WRITE(numout,*) ' Closing the icemod file '
351            CALL histclo( nicea ) 
352         ENDIF
353         !
354      ENDIF
355
356      IF( wrk_not_released(2, 1) .OR. wrk_not_released(3, 3,4,5) )   &
357         CALL ctl_stop( 'lim_wri: failed to release workspace arrays' )
358     
359   END SUBROUTINE lim_wri
360#endif
361
362   SUBROUTINE lim_wri_init
363      !!-------------------------------------------------------------------
364      !!                    ***   ROUTINE lim_wri_init  ***
365      !!               
366      !! ** Purpose :   ???
367      !!
368      !! ** Method  : Read the namicewri namelist and check the parameter
369      !!       values called at the first timestep (nit000)
370      !!
371      !! ** input   :   Namelist namicewri
372      !!-------------------------------------------------------------------
373      INTEGER ::   nf      ! ???
374
375      TYPE FIELD 
376         CHARACTER(len = 35) :: ztitle 
377         CHARACTER(len = 8 ) :: zname         
378         CHARACTER(len = 8 ) :: zunit
379         INTEGER             :: znc   
380         REAL                :: zcmulti 
381         REAL                :: zcadd       
382      END TYPE FIELD
383
384      TYPE(FIELD) ::  &
385         field_1 , field_2 , field_3 , field_4 , field_5 , field_6 ,   &
386         field_7 , field_8 , field_9 , field_10, field_11, field_12,   &
387         field_13, field_14, field_15, field_16, field_17, field_18,   &
388         field_19, field_20, field_21, field_22, field_23, field_24,   &
389         field_25, field_26, field_27, field_28, field_29, field_30,   &
390         field_31, field_32, field_33, field_34, field_35, field_36,   &
391         field_37
392
393      TYPE(FIELD) , DIMENSION(jpnoumax) :: zfield
394      !
395      NAMELIST/namiceout/ noumef, &
396         field_1 , field_2 , field_3 , field_4 , field_5 , field_6 ,   &
397         field_7 , field_8 , field_9 , field_10, field_11, field_12,   &
398         field_13, field_14, field_15, field_16, field_17, field_18,   &
399         field_19, field_20, field_21, field_22, field_23, field_24,   &
400         field_25, field_26, field_27, field_28, field_29, field_30,   &
401         field_31, field_32, field_33, field_34, field_35, field_36,   &
402         field_37, add_diag_swi
403      !!-------------------------------------------------------------------
404
405      REWIND( numnam_ice )                ! Read Namelist namicewri
406      READ  ( numnam_ice  , namiceout )
407
408      zfield(1)  = field_1
409      zfield(2)  = field_2
410      zfield(3)  = field_3
411      zfield(4)  = field_4
412      zfield(5)  = field_5
413      zfield(6)  = field_6
414      zfield(7)  = field_7
415      zfield(8)  = field_8
416      zfield(9)  = field_9
417      zfield(10) = field_10
418      zfield(11) = field_11
419      zfield(12) = field_12
420      zfield(13) = field_13
421      zfield(14) = field_14
422      zfield(15) = field_15
423      zfield(16) = field_16
424      zfield(17) = field_17
425      zfield(18) = field_18
426      zfield(19) = field_19
427      zfield(20) = field_20
428      zfield(21) = field_21
429      zfield(22) = field_22
430      zfield(23) = field_23
431      zfield(24) = field_24
432      zfield(25) = field_25
433      zfield(26) = field_26
434      zfield(27) = field_27
435      zfield(28) = field_28
436      zfield(29) = field_29
437      zfield(30) = field_30
438      zfield(31) = field_31
439      zfield(32) = field_32
440      zfield(33) = field_33
441      zfield(34) = field_34
442      zfield(35) = field_35
443      zfield(36) = field_36
444      zfield(37) = field_37
445
446      DO nf = 1, noumef
447         titn  (nf) = zfield(nf)%ztitle
448         nam   (nf) = zfield(nf)%zname
449         uni   (nf) = zfield(nf)%zunit
450         nc    (nf) = zfield(nf)%znc
451         cmulti(nf) = zfield(nf)%zcmulti
452         cadd  (nf) = zfield(nf)%zcadd
453      END DO
454
455      IF(lwp) THEN                        ! control print
456         WRITE(numout,*)
457         WRITE(numout,*) 'lim_wri_init : Ice parameters for outputs'
458         WRITE(numout,*) '~~~~~~~~~~~~'
459         WRITE(numout,*) '    number of fields to be stored         noumef = ', noumef
460         WRITE(numout,*) '           title                            name     unit      Saving (1/0) ',   &
461            &            '    multiplicative constant       additive constant '
462         DO nf = 1 , noumef         
463            WRITE(numout,*) '   ', titn(nf), '   '    , nam   (nf), '      '  , uni (nf),   &
464               &            '  ' , nc  (nf),'        ', cmulti(nf), '        ', cadd(nf)
465         END DO
466         WRITE(numout,*) ' add_diag_swi ', add_diag_swi
467      ENDIF
468      !
469   END SUBROUTINE lim_wri_init
470
471#else
472   !!----------------------------------------------------------------------
473   !!   Default option :         Empty module          NO LIM sea-ice model
474   !!----------------------------------------------------------------------
475CONTAINS
476   SUBROUTINE lim_wri          ! Empty routine
477   END SUBROUTINE lim_wri
478#endif
479
480   !!======================================================================
481END MODULE limwri
Note: See TracBrowser for help on using the repository browser.