- Timestamp:
- 2014-03-13T16:35:37+01:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r4028_CNRS_LIM3_MV2014/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r4332 r4525 9 9 !!---------------------------------------------------------------------- 10 10 !! lim_wri : write of the diagnostics variables in ouput file 11 !! lim_wri_init : initialization and namelist read12 11 !! lim_wri_state : write for initial state or/and abandon 13 12 !!---------------------------------------------------------------------- … … 36 35 PUBLIC lim_wri_state ! called by dia_wri_state 37 36 38 INTEGER, PARAMETER :: jpnoumax = 43 !: maximum number of variable for ice output39 40 INTEGER :: noumef ! number of fields41 INTEGER :: noumefa ! number of additional fields42 INTEGER :: add_diag_swi ! additional diagnostics43 INTEGER :: nz ! dimension for the itd field44 45 REAL(wp) , DIMENSION(jpnoumax) :: cmulti ! multiplicative constant46 REAL(wp) , DIMENSION(jpnoumax) :: cadd ! additive constant47 REAL(wp) , DIMENSION(jpnoumax) :: cmultia ! multiplicative constant48 REAL(wp) , DIMENSION(jpnoumax) :: cadda ! additive constant49 CHARACTER(len = 35), DIMENSION(jpnoumax) :: titn, titna ! title of the field50 CHARACTER(len = 8 ), DIMENSION(jpnoumax) :: nam , nama ! name of the field51 CHARACTER(len = 8 ), DIMENSION(jpnoumax) :: uni , unia ! unit of the field52 INTEGER , DIMENSION(jpnoumax) :: nc , nca ! switch for saving field ( = 1 ) or not ( = 0 )53 54 37 REAL(wp) :: epsi06 = 1.e-6_wp 55 38 REAL(wp) :: zzero = 0._wp … … 78 61 INTEGER, INTENT(in) :: kindic ! if kindic < 0 there has been an error somewhere 79 62 ! 80 INTEGER :: ji, jj, jk, jl, jf, ipl ! dummy loop indices 81 INTEGER :: ierr 82 REAL(wp),DIMENSION(1) :: zdept 83 REAL(wp) :: zsto, zjulian, zout, zindh, zinda, zindb, zindc 84 REAL(wp), POINTER, DIMENSION(:,:,:) :: zcmo, zcmoa 85 REAL(wp), POINTER, DIMENSION(:,: ) :: zfield 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmaskitd, zoi, zei 87 88 CHARACTER(len = 60) :: clhstnam, clop, clhstnama 89 90 INTEGER , SAVE :: nice, nhorid, ndim, niter, ndepid 91 INTEGER , SAVE :: nicea, nhorida, ndimitd 92 INTEGER , ALLOCATABLE, DIMENSION(:), SAVE :: ndex51 93 INTEGER , ALLOCATABLE, DIMENSION(:), SAVE :: ndexitd 63 INTEGER :: ji, jj, jk, jl ! dummy loop indices 64 REAL(wp) :: zinda, zindb, z1_365 65 REAL(wp), POINTER, DIMENSION(:,:,:) :: zoi, zei 66 REAL(wp), POINTER, DIMENSION(:,:) :: z2d, z2da, z2db, zind ! 2D workspace 94 67 !!------------------------------------------------------------------- 95 68 96 69 IF( nn_timing == 1 ) CALL timing_start('limwri') 97 70 98 CALL wrk_alloc( jpi, jpj, zfield ) 99 CALL wrk_alloc( jpi, jpj, jpnoumax, zcmo, zcmoa ) 100 CALL wrk_alloc( jpi, jpj, jpl, zmaskitd, zoi, zei ) 101 102 ipl = jpl 103 104 IF( numit == nstart ) THEN 105 106 ALLOCATE( ndex51(jpij), ndexitd(jpij*jpl), STAT=ierr ) 107 IF( lk_mpp ) CALL mpp_sum ( ierr ) 108 IF( ierr /= 0 ) THEN 109 CALL ctl_stop( 'lim_wri : unable to allocate standard arrays' ) ; RETURN 110 ENDIF 111 112 CALL lim_wri_init 113 114 IF(lwp) WRITE(numout,*) ' lim_wri, first time step ' 115 IF(lwp) WRITE(numout,*) ' add_diag_swi ', add_diag_swi 116 117 !-------------------- 118 ! 1) Initialization 119 !-------------------- 120 121 !------------- 122 ! Normal file 123 !------------- 124 niter = ( nit000 - 1 ) / nn_fsbc 125 CALL ymds2ju ( nyear, nmonth, nday, rdt, zjulian ) 126 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment 127 !clem 128 ! zsto = rdt_ice 129 ! IF( ln_mskland ) THEN ; clop = "ave(only(x))" ! put 1.e+20 on land (very expensive!!) 130 ! ELSE ; clop = "ave(x)" ! no use of the mask value (require less cpu time) 131 ! ENDIF 132 ! zout = nwrite * rdt_ice / nn_fsbc 133 ! zdept(1) = 0. 134 ! 135 ! CALL dia_nam ( clhstnam, nwrite, 'icemod_old' ) 136 ! CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit, 1, jpi, 1, jpj, niter, zjulian, rdt_ice, & 137 ! & nhorid, nice, domain_id=nidom, snc4chunks=snc4set ) 138 ! CALL histvert( nice, "deptht", "Vertical T levels", "m", 1, zdept, ndepid, "down") 139 ! CALL wheneq ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim) 140 ! 141 ! DO jf = 1 , noumef 142 ! IF(lwp) WRITE(numout,*) 'jf', jf 143 ! IF ( nc(jf) == 1 ) THEN 144 ! CALL histdef( nice, nam(jf), titn(jf), uni(jf), jpi, jpj & 145 ! , nhorid, 1, 1, 1, -99, 32, clop, zsto, zout ) 146 ! IF(lwp) WRITE(numout,*) 'nice, nam(jf), titn(jf), uni(jf), nhorid, clop, zsto, zout' 147 ! IF(lwp) WRITE(numout,*) nice, nam(jf), titn(jf), uni(jf), nhorid, clop, zsto, zout 148 ! ENDIF 149 ! END DO 150 ! 151 ! CALL histend(nice, snc4set) 152 !clem 153 ! 154 !----------------- 155 ! ITD file output 156 !----------------- 157 zsto = rdt_ice 158 clop = "ave(x)" 159 zout = nwrite * rdt_ice / nn_fsbc 160 zdept(1) = 0. 161 162 CALL dia_nam ( clhstnama, nwrite, 'icemoa' ) 163 CALL histbeg ( clhstnama, jpi, glamt, jpj, gphit, & 164 1, jpi, 1, jpj, & ! zoom 165 niter, zjulian, rdt_ice, & ! time 166 nhorida, & ! ? linked with horizontal ... 167 nicea , domain_id=nidom, snc4chunks=snc4set) ! file 168 CALL histvert( nicea, "icethi", "L levels","m", ipl , hi_mean , nz ) 169 DO jl = 1, jpl 170 zmaskitd(:,:,jl) = tmask(:,:,1) 171 END DO 172 CALL wheneq ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim) 173 CALL wheneq( jpi*jpj*jpl, zmaskitd, 1, 1., ndexitd, ndimitd ) 174 CALL histdef( nicea, "iice_itd", "Ice area in categories" , "-" , & 175 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 176 CALL histdef( nicea, "iice_hid", "Ice thickness in categories" , "m" , & 177 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 178 CALL histdef( nicea, "iice_hsd", "Snow depth in in categories" , "m" , & 179 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 180 CALL histdef( nicea, "iice_std", "Ice salinity distribution" , "ppt" , & 181 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 182 CALL histdef( nicea, "iice_otd", "Ice age distribution" , "days", & 183 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 184 CALL histdef( nicea, "iice_etd", "Brine volume distr. " , "%" , & 185 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 186 CALL histend(nicea, snc4set) 187 ENDIF 188 189 ! !-----------------------------------------------------------------------! 190 ! !--2. Computation of instantaneous values ! 191 ! !-----------------------------------------------------------------------! 192 193 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 194 !IF( ln_nicep ) THEN 195 ! WRITE(numout,*) 196 ! WRITE(numout,*) 'lim_wri : write ice outputs in NetCDF files at time : ', nyear, nmonth, nday, numit 197 ! WRITE(numout,*) '~~~~~~~ ' 198 ! WRITE(numout,*) ' kindic = ', kindic 199 !ENDIF 200 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 201 202 !-- calculs des valeurs instantanees 203 zcmo ( 1:jpi, 1:jpj, 1:jpnoumax ) = 0._wp 204 zcmoa( 1:jpi, 1:jpj, 1:jpnoumax ) = 0._wp 205 206 ! Ice surface temperature and some fluxes 71 CALL wrk_alloc( jpi, jpj, jpl, zoi, zei ) 72 CALL wrk_alloc( jpi, jpj , z2d, z2da, z2db, zind ) 73 74 75 !----------------------------- 76 ! Mean category values 77 !----------------------------- 78 79 CALL lim_var_icetm ! mean sea ice temperature 80 81 CALL lim_var_bv ! brine volume 82 83 DO jj = 1, jpj ! presence indicator of ice 84 DO ji = 1, jpi 85 zind(ji,jj) = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi06 ) ) 86 END DO 87 END DO 88 ! 89 ! 90 CALL iom_put( "iceconc" , at_i ) ! ice concentration 91 ! 92 DO jj = 1, jpj ! mean ice thickness 93 DO ji = 1, jpi 94 z2d(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 95 END DO 96 END DO 97 CALL iom_put( "icethic_cea" , z2d ) ! ice thickness (i.e. icethi(:,:)) 98 CALL iom_put( "icevolu" , vt_i ) ! ice volume = mean ice thickness over the cell 99 DO jj = 1, jpj 100 DO ji = 1, jpi 101 z2d(ji,jj) = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 102 END DO 103 END DO 104 CALL iom_put( "snowthic_cea" , z2d ) ! snow thickness = mean snow thickness over the cell 105 CALL iom_put( "ioceflxb" , fbif * at_i ) ! oceanic flux at the ice base 106 CALL iom_put( "isst" , sst_m ) ! sea surface temperature 107 CALL iom_put( "isss" , sss_m ) ! sea surface salinity 108 CALL iom_put( "qt_oce" , qns + qsr ) ! total flux at ocean surface 109 ! 110 DO jj = 2 , jpjm1 111 DO ji = 2 , jpim1 112 z2da(ji,jj) = ( u_ice(ji,jj) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) ) * 0.5_wp 113 z2db(ji,jj) = ( v_ice(ji,jj) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) ) * 0.5_wp 114 END DO 115 END DO 116 CALL lbc_lnk( z2da, 'T', -1. ) 117 CALL lbc_lnk( z2db, 'T', -1. ) 118 DO jj = 1, jpj 119 DO ji = 1, jpi 120 z2d(ji,jj) = SQRT( z2da(ji,jj) * z2da(ji,jj) + z2db(ji,jj) * z2db(ji,jj) ) 121 END DO 122 END DO 123 CALL iom_put( "uice_ipa" , z2da ) ! ice velocity u component 124 CALL iom_put( "vice_ipa" , z2db ) ! ice velocity v component 125 CALL iom_put( "icevel" , z2d ) ! ice velocity module 126 CALL iom_put( "icebopr" , diag_bot_gr * rday ) ! daily bottom thermodynamic ice production 127 CALL iom_put( "icedypr" , diag_dyn_gr * rday ) ! daily dynamic ice production (rid/raft) 128 !!SF BE CAREFUL : qsr_oce qnd qns_oce are after penetration over ice 129 CALL iom_put( "qsr_oce" , qsr ) ! solar flux at ocean surface 130 CALL iom_put( "qns_oce" , qns ) ! non-solar flux at ocean surface 131 !!SF end be careful 132 CALL iom_put( "hfbri" , fhbri ) ! heat flux due to brine release 133 CALL iom_put( "utau_ice" , utau_ice ) ! wind stress over ice along i-axis at I-point 134 CALL iom_put( "vtau_ice" , vtau_ice ) ! wind stress over ice along j-axis at I-point 135 !!SF commented because this computation is not ok 136 !SF because qsr is not qsr_ocean but it contains already qsr_ice 137 !SF 138 !SF DO jj = 1 , jpj 139 !SF DO ji = 1 , jpi 140 !SF z2d(ji,jj) = ( 1._wp - at_i(ji,jj) ) * qsr(ji,jj) 141 !SF END DO 142 !SF END DO 143 !SF CALL iom_put( "qsr_io" , z2d ) ! solar flux at ice/ocean surface 144 !SF DO jj = 1 , jpj 145 !SF DO ji = 1 , jpi 146 !SF z2d(ji,jj) = ( 1._wp - at_i(ji,jj) ) * qns(ji,jj) 147 !SF END DO 148 !SF END DO 149 !SF CALL iom_put( "qns_io" , z2d ) ! non-solar flux at ice/ocean surface 150 CALL iom_put( "snowpre" , sprecip ) ! snow precipitation 151 CALL iom_put( "micesalt" , smt_i ) ! mean ice salinity 152 ! 153 z2d(:,:) = 0.e0 207 154 DO jl = 1, jpl 208 155 DO jj = 1, jpj 209 156 DO ji = 1, jpi 210 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi06 ) ) 211 zcmo(ji,jj,17) = zcmo(ji,jj,17) + a_i(ji,jj,jl)*qsr_ice (ji,jj,jl) 212 zcmo(ji,jj,18) = zcmo(ji,jj,18) + a_i(ji,jj,jl)*qns_ice(ji,jj,jl) 213 zcmo(ji,jj,27) = zcmo(ji,jj,27) + zinda*(t_su(ji,jj,jl)-rtt)*a_i(ji,jj,jl)/MAX(at_i(ji,jj),epsi06) 214 zcmo(ji,jj,21) = zcmo(ji,jj,21) + zinda*oa_i(ji,jj,jl)/MAX(at_i(ji,jj),epsi06) 157 z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * oa_i(ji,jj,jl) 215 158 END DO 216 159 END DO 217 160 END DO 218 219 ! Mean sea ice temperature 220 CALL lim_var_icetm 221 222 ! Brine volume 223 CALL lim_var_bv 224 225 DO jj = 2 , jpjm1 226 DO ji = 2 , jpim1 227 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - epsi06 ) ) 161 z1_365 = 1._wp / 365._wp 162 CALL iom_put( "miceage" , z2d * z1_365 ) ! mean ice age 163 CALL iom_put( "icelapr" , diag_lat_gr * rday ) ! daily lateral thermodynamic ice production 164 CALL iom_put( "icesipr" , diag_sni_gr * rday ) ! daily snowice ice production 165 DO jj = 1, jpj 166 DO ji = 1, jpi 167 z2d(ji,jj) = ( tm_i(ji,jj) - rtt ) * zind(ji,jj) 168 END DO 169 END DO 170 171 CALL iom_put( "micet" , z2d ) ! mean ice temperature 172 CALL iom_put( "icehc" , et_i ) ! ice total heat content 173 CALL iom_put( "isnowhc" , et_s ) ! snow total heat content 174 ! 175 z2d(:,:) = 0.e0 176 DO jl = 1, jpl 177 DO jj = 1, jpj 178 DO ji = 1, jpi 179 z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * ( t_su(ji,jj,jl) - rtt ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 ) 180 END DO 181 END DO 182 END DO 183 CALL iom_put( "icest" , z2d ) ! ice surface temperature 184 CALL iom_put( "sfxthd" , sfx_thd * rday ) ! equivalent FW salt flux 185 CALL iom_put( "ibrinv" , bv_i * 100._wp ) ! brine volume 186 DO jj = 1, jpj 187 DO ji = 1, jpi 228 188 zindb = MAX( zzero , SIGN( zone , at_i(ji,jj) ) ) 229 230 zcmo(ji,jj,1) = at_i(ji,jj) 231 zcmo(ji,jj,2) = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zinda 232 zcmo(ji,jj,3) = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zinda 233 zcmo(ji,jj,4) = diag_bot_gr(ji,jj) * rday ! Bottom thermodynamic ice production 234 zcmo(ji,jj,5) = diag_dyn_gr(ji,jj) * rday ! Dynamic ice production (rid/raft) 235 zcmo(ji,jj,22) = diag_lat_gr(ji,jj) * rday ! Lateral thermodynamic ice production 236 zcmo(ji,jj,23) = diag_sni_gr(ji,jj) * rday ! Snow ice production ice production 237 zcmo(ji,jj,24) = (tm_i(ji,jj) - rtt) * zinda 238 239 zcmo(ji,jj,6) = fbif(ji,jj)*at_i(ji,jj) 240 zcmo(ji,jj,7) = ( u_ice(ji,jj) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) ) * 0.5_wp 241 zcmo(ji,jj,8) = ( v_ice(ji,jj) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) ) * 0.5_wp 242 zcmo(ji,jj,9) = sst_m(ji,jj) 243 zcmo(ji,jj,10) = sss_m(ji,jj) 244 245 zcmo(ji,jj,11) = qns(ji,jj) + qsr(ji,jj) 246 zcmo(ji,jj,12) = qsr(ji,jj) 247 zcmo(ji,jj,13) = qns(ji,jj) 248 zcmo(ji,jj,14) = fhbri(ji,jj) 249 zcmo(ji,jj,15) = utau_ice(ji,jj) 250 zcmo(ji,jj,16) = vtau_ice(ji,jj) 251 zcmo(ji,jj,17) = zcmo(ji,jj,17) + ( 1._wp - at_i(ji,jj) ) * qsr(ji,jj) 252 zcmo(ji,jj,18) = zcmo(ji,jj,18) + ( 1._wp - at_i(ji,jj) ) * qns(ji,jj) 253 zcmo(ji,jj,19) = sprecip(ji,jj) 254 zcmo(ji,jj,20) = smt_i(ji,jj) 255 zcmo(ji,jj,25) = et_i(ji,jj) 256 zcmo(ji,jj,26) = et_s(ji,jj) 257 zcmo(ji,jj,28) = sfx_bri(ji,jj) 258 zcmo(ji,jj,29) = sfx_thd(ji,jj) 259 260 zcmo(ji,jj,30) = bv_i(ji,jj) 261 zcmo(ji,jj,31) = hicol(ji,jj) * zindb 262 zcmo(ji,jj,32) = strength(ji,jj) 263 zcmo(ji,jj,33) = SQRT( zcmo(ji,jj,7)*zcmo(ji,jj,7) + zcmo(ji,jj,8)*zcmo(ji,jj,8) ) 264 zcmo(ji,jj,34) = diag_sur_me(ji,jj) * rday ! Surface melt 265 zcmo(ji,jj,35) = diag_bot_me(ji,jj) * rday ! Bottom melt 266 zcmo(ji,jj,36) = divu_i(ji,jj) 267 zcmo(ji,jj,37) = shear_i(ji,jj) 268 zcmo(ji,jj,38) = diag_res_pr(ji,jj) * rday ! Bottom melt 269 zcmo(ji,jj,39) = vt_i(ji,jj) ! ice volume 270 zcmo(ji,jj,40) = vt_s(ji,jj) ! snow volume 271 272 zcmo(ji,jj,41) = sfx_mec(ji,jj) 273 zcmo(ji,jj,42) = sfx_res(ji,jj) 274 275 zcmo(ji,jj,43) = diag_trp_vi(ji,jj) * rday ! transport of ice volume 276 277 END DO 278 END DO 279 280 ! 281 ! ecriture d'un fichier netcdf 282 ! 283 niter = niter + 1 284 !clem 285 ! DO jf = 1 , noumef 286 ! ! 287 ! zfield(:,:) = zcmo(:,:,jf) * cmulti(jf) + cadd(jf) 288 ! ! 289 ! IF( jf == 7 .OR. jf == 8 .OR. jf == 15 .OR. jf == 16 ) THEN ; CALL lbc_lnk( zfield, 'T', -1. ) 290 ! ELSE ; CALL lbc_lnk( zfield, 'T', 1. ) 291 ! ENDIF 292 ! ! 293 ! IF( ln_nicep ) THEN 294 ! WRITE(numout,*) 295 ! WRITE(numout,*) 'nc(jf), nice, nam(jf), niter, ndim' 296 ! WRITE(numout,*) nc(jf), nice, nam(jf), niter, ndim 297 ! ENDIF 298 ! IF( nc(jf) == 1 ) CALL histwrite( nice, nam(jf), niter, zfield, ndim, ndex51 ) 299 ! ! 300 ! END DO 301 ! 302 ! IF( ( nn_fsbc * niter ) >= nitend .OR. kindic < 0 ) THEN 303 ! IF( lwp) WRITE(numout,*) ' Closing the icemod file ' 304 ! CALL histclo( nice ) 305 ! ENDIF 306 !clem 307 ! 308 CALL iom_put ('iceconc', zcmo(:,:,1) ) ! field1: ice concentration 309 CALL iom_put ('icethic_cea', zcmo(:,:,2) ) ! field2: ice thickness (i.e. icethi(:,:)) 310 CALL iom_put ('snowthic_cea', zcmo(:,:,3)) ! field3: snow thickness 311 CALL iom_put ('icebopr', zcmo(:,:,4) ) ! field4: daily bottom thermo ice production 312 CALL iom_put ('icedypr', zcmo(:,:,5) ) ! field5: daily dynamic ice production 313 CALL iom_put ('ioceflxb', zcmo(:,:,6) ) ! field6: Oceanic flux at the ice base 314 CALL iom_put ('uice_ipa', zcmo(:,:,7) ) ! field7: ice velocity u component 315 CALL iom_put ('vice_ipa', zcmo(:,:,8) ) ! field8: ice velocity v component 316 CALL iom_put ('isst', zcmo(:,:,9) ) ! field 9: sea surface temperature 317 CALL iom_put ('isss', zcmo(:,:,10) ) ! field 10: sea surface salinity 318 CALL iom_put ('qt_oce', zcmo(:,:,11) ) ! field 11: total flux at ocean surface 319 CALL iom_put ('qsr_oce', zcmo(:,:,12) ) ! field 12: solar flux at ocean surface 320 CALL iom_put ('qns_oce', zcmo(:,:,13) ) ! field 13: non-solar flux at ocean surface 321 !CALL iom_put ('hfbri', fhbri ) ! field 14: heat flux due to brine release 322 CALL iom_put( 'utau_ice', zcmo(:,:,15) ) ! Wind stress over ice along i-axis at I-point 323 CALL iom_put( 'vtau_ice', zcmo(:,:,16) ) ! Wind stress over ice along j-axis at I-point 324 CALL iom_put ('qsr_io', zcmo(:,:,17) ) ! field 17: solar flux at ice/ocean surface 325 CALL iom_put ('qns_io', zcmo(:,:,18) ) ! field 18: non-solar flux at ice/ocean surface 326 !CALL iom_put ('snowpre', zcmo(:,:,19) * rday ! field 19 :snow precip 327 CALL iom_put ('micesalt', zcmo(:,:,20) ) ! field 20 :mean ice salinity 328 CALL iom_put ('miceage', zcmo(:,:,21) / 365) ! field 21: mean ice age 329 CALL iom_put ('icelapr',zcmo(:,:,22) ) ! field 22: daily lateral thermo ice prod. 330 CALL iom_put ('icesipr',zcmo(:,:,23) ) ! field 23: daily snowice ice prod. 331 CALL iom_put ('micet', zcmo(:,:,24) ) ! field 24: mean ice temperature 332 CALL iom_put ('icehc', zcmo(:,:,25) ) ! field 25: ice total heat content 333 CALL iom_put ('isnowhc', zcmo(:,:,26) ) ! field 26: snow total heat content 334 CALL iom_put ('icest', zcmo(:,:,27) ) ! field 27: ice surface temperature 335 CALL iom_put ('sfxbri', zcmo(:,:,28) * rday ) ! field 28: brine salt flux 336 CALL iom_put ('sfxthd', zcmo(:,:,29) * rday ) ! field 29: equivalent FW salt flux 337 CALL iom_put ('ibrinv', zcmo(:,:,30) *100 ) ! field 30: brine volume 338 CALL iom_put ('icecolf', zcmo(:,:,31) ) ! field 31: frazil ice collection thickness 339 CALL iom_put ('icestr', zcmo(:,:,32) * 0.001 ) ! field 32: ice strength 340 CALL iom_put ('icevel', zcmo(:,:,33) ) ! field 33: ice velocity 341 CALL iom_put ('isume', zcmo(:,:,34) ) ! field 34: surface melt 342 CALL iom_put ('ibome', zcmo(:,:,35) ) ! field 35: bottom melt 343 CALL iom_put ('idive', zcmo(:,:,36) * 1.0e8) ! field 36: divergence 344 CALL iom_put ('ishear', zcmo(:,:,37) * 1.0e8 ) ! field 37: shear 345 CALL iom_put ('icerepr', zcmo(:,:,38) ) ! field 38: daily prod./melting due to limupdate 346 CALL iom_put ('icevolu', zcmo(:,:,39) ) ! field 39: ice volume 347 CALL iom_put ('snowvol', zcmo(:,:,40) ) ! field 40: snow volume 348 CALL iom_put ('sfxmec', zcmo(:,:,41) * rday ) ! field 41: salt flux from ridging rafting 349 CALL iom_put ('sfxres', zcmo(:,:,42) * rday ) ! field 42: salt flux from limupdate (resultant) 350 CALL iom_put ('icetrp', zcmo(:,:,43) ) ! field 43: ice volume transport 351 352 !----------------------------- 353 ! Thickness distribution file 354 !----------------------------- 355 IF( add_diag_swi == 1 ) THEN 189 z2d(ji,jj) = hicol(ji,jj) * zindb 190 END DO 191 END DO 192 CALL iom_put( "icecolf" , z2d ) ! frazil ice collection thickness 193 CALL iom_put( "icestr" , strength * 0.001 ) ! ice strength 194 CALL iom_put( "isume" , diag_sur_me * rday ) ! surface melt 195 CALL iom_put( "ibome" , diag_bot_me * rday ) ! bottom melt 196 CALL iom_put( "idive" , divu_i * 1.0e8 ) ! divergence 197 CALL iom_put( "ishear" , shear_i * 1.0e8 ) ! shear 198 CALL iom_put( "isume" , diag_sur_me * rday ) ! surface melt 199 CALL iom_put( "icerepr" , diag_res_pr * rday ) ! daily prod./melting due to limupdate 200 CALL iom_put( "snowvol" , vt_s ) ! snow volume 201 CALL iom_put( "sfxmec" , sfx_mec * rday ) ! salt flux from ridging rafting 202 CALL iom_put( "sfxres" , sfx_res * rday ) ! salt flux from limupdate (resultant) 203 CALL iom_put( "icetrp" , diag_trp_vi * rday ) ! ice volume transport 204 205 206 !-------------------------------- 207 ! Output values for each category 208 !-------------------------------- 356 209 357 210 DO jl = 1, jpl … … 363 216 END DO 364 217 365 ! Compute ice age366 218 DO jl = 1, jpl 367 219 DO jj = 1, jpj … … 372 224 END DO 373 225 END DO 226 227 CALL iom_put( "iceage_cat" , zoi ) ! ice age for categories 374 228 375 229 ! Compute brine volume … … 392 246 END DO 393 247 394 CALL histwrite( nicea, "iice_itd", niter, a_i , ndimitd , ndexitd ) ! area 395 CALL histwrite( nicea, "iice_hid", niter, ht_i , ndimitd , ndexitd ) ! thickness 396 CALL histwrite( nicea, "iice_hsd", niter, ht_s , ndimitd , ndexitd ) ! snow depth 397 CALL histwrite( nicea, "iice_std", niter, sm_i , ndimitd , ndexitd ) ! salinity 398 CALL histwrite( nicea, "iice_otd", niter, zoi , ndimitd , ndexitd ) ! age 399 CALL histwrite( nicea, "iice_etd", niter, zei , ndimitd , ndexitd ) ! brine volume 400 401 ! ! Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s 402 ! IF( kindic < 0 ) CALL lim_wri_state( 'output.abort' ) 403 ! not yet implemented 404 405 IF( ( nn_fsbc * niter ) >= nitend .OR. kindic < 0 ) THEN 406 IF(lwp) WRITE(numout,*) ' Closing the icemod file ' 407 CALL histclo( nicea ) 408 ENDIF 409 ! 410 ENDIF 411 412 CALL wrk_dealloc( jpi, jpj, zfield ) 413 CALL wrk_dealloc( jpi, jpj, jpnoumax, zcmo, zcmoa ) 414 CALL wrk_dealloc( jpi, jpj, jpl, zmaskitd, zoi, zei ) 248 CALL iom_put( "iceconc_cat" , a_i ) ! area for categories 249 CALL iom_put( "icethic_cat" , ht_i ) ! thickness for categories 250 CALL iom_put( "snowthic_cat" , ht_s ) ! snow depth for categories 251 CALL iom_put( "salinity_cat" , sm_i ) ! salinity for categories 252 CALL iom_put( "brinevol_cat" , zei ) ! brine volume for categories 253 254 ! ! Create an output files (output.lim.abort.nc) if S < 0 or u > 20 255 ! m/s 256 ! IF( kindic < 0 ) CALL lim_wri_state( 'output.abort' ) 257 ! not yet implemented 258 259 CALL wrk_dealloc( jpi, jpj, jpl, zoi, zei ) 260 CALL wrk_dealloc( jpi, jpj , z2d, zind, z2da, z2db ) 415 261 416 262 IF( nn_timing == 1 ) CALL timing_stop('limwri') … … 419 265 #endif 420 266 421 SUBROUTINE lim_wri_init422 !!-------------------------------------------------------------------423 !! *** ROUTINE lim_wri_init ***424 !!425 !! ** Purpose : ???426 !!427 !! ** Method : Read the namicewri namelist and check the parameter428 !! values called at the first timestep (nit000)429 !!430 !! ** input : Namelist namicewri431 !!-------------------------------------------------------------------432 INTEGER :: nf ! ???433 434 TYPE FIELD435 CHARACTER(len = 35) :: ztitle436 CHARACTER(len = 8 ) :: zname437 CHARACTER(len = 8 ) :: zunit438 INTEGER :: znc439 REAL :: zcmulti440 REAL :: zcadd441 END TYPE FIELD442 443 TYPE(FIELD) :: &444 field_1 , field_2 , field_3 , field_4 , field_5 , field_6 , &445 field_7 , field_8 , field_9 , field_10, field_11, field_12, &446 field_13, field_14, field_15, field_16, field_17, field_18, &447 field_19, field_20, field_21, field_22, field_23, field_24, &448 field_25, field_26, field_27, field_28, field_29, field_30, &449 field_31, field_32, field_33, field_34, field_35, field_36, &450 field_37, field_38, field_39, field_40, field_41, field_42, field_43451 452 TYPE(FIELD) , DIMENSION(jpnoumax) :: zfield453 !454 NAMELIST/namiceout/ noumef, &455 field_1 , field_2 , field_3 , field_4 , field_5 , field_6 , &456 field_7 , field_8 , field_9 , field_10, field_11, field_12, &457 field_13, field_14, field_15, field_16, field_17, field_18, &458 field_19, field_20, field_21, field_22, field_23, field_24, &459 field_25, field_26, field_27, field_28, field_29, field_30, &460 field_31, field_32, field_33, field_34, field_35, field_36, &461 field_37, field_38, field_39, field_40, field_41, field_42, field_43, add_diag_swi462 !!-------------------------------------------------------------------463 464 REWIND( numnam_ice ) ! Read Namelist namicewri465 READ ( numnam_ice , namiceout )466 467 zfield(1) = field_1468 zfield(2) = field_2469 zfield(3) = field_3470 zfield(4) = field_4471 zfield(5) = field_5472 zfield(6) = field_6473 zfield(7) = field_7474 zfield(8) = field_8475 zfield(9) = field_9476 zfield(10) = field_10477 zfield(11) = field_11478 zfield(12) = field_12479 zfield(13) = field_13480 zfield(14) = field_14481 zfield(15) = field_15482 zfield(16) = field_16483 zfield(17) = field_17484 zfield(18) = field_18485 zfield(19) = field_19486 zfield(20) = field_20487 zfield(21) = field_21488 zfield(22) = field_22489 zfield(23) = field_23490 zfield(24) = field_24491 zfield(25) = field_25492 zfield(26) = field_26493 zfield(27) = field_27494 zfield(28) = field_28495 zfield(29) = field_29496 zfield(30) = field_30497 zfield(31) = field_31498 zfield(32) = field_32499 zfield(33) = field_33500 zfield(34) = field_34501 zfield(35) = field_35502 zfield(36) = field_36503 zfield(37) = field_37504 zfield(38) = field_38505 zfield(39) = field_39506 zfield(40) = field_40507 zfield(41) = field_41508 zfield(42) = field_42509 zfield(43) = field_43510 511 DO nf = 1, noumef512 titn (nf) = zfield(nf)%ztitle513 nam (nf) = zfield(nf)%zname514 uni (nf) = zfield(nf)%zunit515 nc (nf) = zfield(nf)%znc516 cmulti(nf) = zfield(nf)%zcmulti517 cadd (nf) = zfield(nf)%zcadd518 END DO519 520 IF(lwp) THEN ! control print521 WRITE(numout,*)522 WRITE(numout,*) 'lim_wri_init : Ice parameters for outputs'523 WRITE(numout,*) '~~~~~~~~~~~~'524 WRITE(numout,*) ' number of fields to be stored noumef = ', noumef525 WRITE(numout,*) ' title name unit Saving (1/0) ', &526 & ' multiplicative constant additive constant '527 DO nf = 1 , noumef528 WRITE(numout,*) ' ', titn(nf), ' ' , nam (nf), ' ' , uni (nf), &529 & ' ' , nc (nf),' ', cmulti(nf), ' ', cadd(nf)530 END DO531 WRITE(numout,*) ' add_diag_swi ', add_diag_swi532 ENDIF533 !534 END SUBROUTINE lim_wri_init535 267 536 268 SUBROUTINE lim_wri_state( kt, kid, kh_i ) … … 549 281 INTEGER, INTENT( in ) :: kid , kh_i 550 282 !!---------------------------------------------------------------------- 551 !CALL histvert( kid, "icethi", "L levels","m", jpl , hi_mean , nz ) 552 283 284 285 553 286 CALL histdef( kid, "iicethic", "Ice thickness" , "m" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 554 287 CALL histdef( kid, "iiceconc", "Ice concentration" , "%" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) … … 575 308 CALL histdef( kid, "iisfxres", "Salt flux from limupdate", "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 576 309 577 578 !CALL histdef( kid, "iice_itd", "Ice concentration by cat", "%" , jpi, jpj, kh_i, jpl, 1, jpl, -99, 32, "inst(x)", rdt, rdt )579 !CALL histdef( kid, "iice_hid", "Ice thickness by cat" , "m" , jpi, jpj, kh_i, jpl, 1, jpl, -99, 32, "inst(x)", rdt, rdt )580 !CALL histdef( kid, "iice_hsd", "Snow thickness by cat" , "m" , jpi, jpj, kh_i, jpl, 1, jpl, -99, 32, "inst(x)", rdt, rdt )581 !CALL histdef( kid, "iice_std", "Ice salinity by cat" , "PSU" , jpi, jpj, kh_i, jpl, 1, jpl, -99, 32, "inst(x)", rdt, rdt )582 583 310 CALL histend( kid, snc4set ) ! end of the file definition 584 311 … … 608 335 CALL histwrite( kid, "iisfxres", kt, sfx_res , jpi*jpj, (/1/) ) 609 336 610 !CALL histwrite( kid, "iice_itd", kt, a_i , jpi*jpj*jpl, (/1/) ) ! area 611 !CALL histwrite( kid, "iice_hid", kt, ht_i , jpi*jpj*jpl, (/1/) ) ! thickness 612 !CALL histwrite( kid, "iice_hsd", kt, ht_s , jpi*jpj*jpl, (/1/) ) ! snow depth 613 !CALL histwrite( kid, "iice_std", kt, sm_i , jpi*jpj*jpl, (/1/) ) ! salinity 337 ! Close the file 338 ! ----------------- 339 CALL histclo( kid ) 614 340 615 341 END SUBROUTINE lim_wri_state
Note: See TracChangeset
for help on using the changeset viewer.