- Timestamp:
- 2016-05-09T16:42:28+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r6417 r6515 60 60 REAL(wp) :: z1_365 61 61 REAL(wp) :: ztmp 62 REAL(wp), POINTER, DIMENSION(:,:,:) :: z oi, zei, zt_i, zt_s62 REAL(wp), POINTER, DIMENSION(:,:,:) :: zswi2 63 63 REAL(wp), POINTER, DIMENSION(:,:) :: z2d, z2da, z2db, zswi ! 2D workspace 64 64 !!------------------------------------------------------------------- … … 66 66 IF( nn_timing == 1 ) CALL timing_start('limwri') 67 67 68 CALL wrk_alloc( jpi, jpj, jpl, z oi, zei, zt_i, zt_s)68 CALL wrk_alloc( jpi, jpj, jpl, zswi2 ) 69 69 CALL wrk_alloc( jpi, jpj , z2d, z2da, z2db, zswi ) 70 70 … … 74 74 z1_365 = 1._wp / 365._wp 75 75 76 CALL lim_var_icetm ! mean sea ice temperature77 78 CALL lim_var_bv ! brine volume 79 80 DO jj = 1, jpj ! presence indicator of ice76 ! brine volume 77 CALL lim_var_bv 78 79 ! tresholds for outputs 80 DO jj = 1, jpj 81 81 DO ji = 1, jpi 82 82 zswi(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) 83 83 END DO 84 84 END DO 85 ! 86 ! 87 ! 88 IF ( iom_use( "icethic_cea" ) ) THEN ! mean ice thickness 89 DO jj = 1, jpj 85 DO jl = 1, jpl 86 DO jj = 1, jpj 90 87 DO ji = 1, jpi 91 z 2d(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zswi(ji,jj)88 zswi2(ji,jj,jl) = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 92 89 END DO 93 90 END DO 94 CALL iom_put( "icethic_cea" , z2d ) 95 ENDIF 96 97 IF ( iom_use( "snowthic_cea" ) ) THEN ! snow thickness = mean snow thickness over the cell 98 DO jj = 1, jpj 99 DO ji = 1, jpi 100 z2d(ji,jj) = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zswi(ji,jj) 101 END DO 102 END DO 103 CALL iom_put( "snowthic_cea" , z2d ) 104 ENDIF 91 END DO 105 92 ! 93 ! velocity 106 94 IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" ) ) THEN 107 95 DO jj = 2 , jpjm1 … … 120 108 END DO 121 109 END DO 122 CALL iom_put( "icevel" , z2d 110 CALL iom_put( "icevel" , z2d * zswi ) ! ice velocity module 123 111 ENDIF 124 112 ! 125 IF ( iom_use( "miceage" ) ) THEN 126 z2d(:,:) = 0.e0 127 DO jl = 1, jpl 128 DO jj = 1, jpj 129 DO ji = 1, jpi 130 rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.1 ) ) 131 z2d(ji,jj) = z2d(ji,jj) + rswitch * oa_i(ji,jj,jl) / MAX( at_i(ji,jj), 0.1 ) 132 END DO 133 END DO 134 END DO 135 CALL iom_put( "miceage" , z2d * z1_365 ) ! mean ice age 136 ENDIF 137 138 IF ( iom_use( "micet" ) ) THEN 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 z2d(ji,jj) = ( tm_i(ji,jj) - rt0 ) * zswi(ji,jj) 142 END DO 143 END DO 144 CALL iom_put( "micet" , z2d ) ! mean ice temperature 145 ENDIF 113 IF ( iom_use( "miceage" ) ) CALL iom_put( "miceage" , om_i * zswi * z1_365 ) ! mean ice age 114 IF ( iom_use( "icethic_cea" ) ) CALL iom_put( "icethic_cea" , htm_i * zswi ) ! ice thickness mean 115 IF ( iom_use( "snowthic_cea" ) ) CALL iom_put( "snowthic_cea", htm_s * zswi ) ! snow thickness mean 116 IF ( iom_use( "micet" ) ) CALL iom_put( "micet" , ( tm_i - rt0 ) * zswi ) ! ice mean temperature 117 IF ( iom_use( "icest" ) ) CALL iom_put( "icest" , ( tm_su - rt0 ) * zswi ) ! ice surface temperature 118 IF ( iom_use( "icecolf" ) ) CALL iom_put( "icecolf" , hicol ) ! frazil ice collection thickness 146 119 ! 147 IF ( iom_use( "icest" ) ) THEN148 z2d(:,:) = 0.e0149 DO jl = 1, jpl150 DO jj = 1, jpj151 DO ji = 1, jpi152 z2d(ji,jj) = z2d(ji,jj) + zswi(ji,jj) * ( t_su(ji,jj,jl) - rt0 ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 )153 END DO154 END DO155 END DO156 CALL iom_put( "icest" , z2d ) ! ice surface temperature157 ENDIF158 159 IF ( iom_use( "icecolf" ) ) CALL iom_put( "icecolf", hicol ) ! frazil ice collection thickness160 161 120 CALL iom_put( "isst" , sst_m ) ! sea surface temperature 162 121 CALL iom_put( "isss" , sss_m ) ! sea surface salinity 163 CALL iom_put( "iceconc" , at_i 164 CALL iom_put( "icevolu" , vt_i 165 CALL iom_put( "icehc" , et_i 166 CALL iom_put( "isnowhc" , et_s 167 CALL iom_put( "ibrinv" , bv _i * 100._wp) ! brine volume168 CALL iom_put( "utau_ice" , utau_ice 169 CALL iom_put( "vtau_ice" , vtau_ice 122 CALL iom_put( "iceconc" , at_i * zswi ) ! ice concentration 123 CALL iom_put( "icevolu" , vt_i * zswi ) ! ice volume = mean ice thickness over the cell 124 CALL iom_put( "icehc" , et_i * zswi ) ! ice total heat content 125 CALL iom_put( "isnowhc" , et_s * zswi ) ! snow total heat content 126 CALL iom_put( "ibrinv" , bvm_i * zswi * 100. ) ! brine volume 127 CALL iom_put( "utau_ice" , utau_ice * zswi ) ! wind stress over ice along i-axis at I-point 128 CALL iom_put( "vtau_ice" , vtau_ice * zswi ) ! wind stress over ice along j-axis at I-point 170 129 CALL iom_put( "snowpre" , sprecip * 86400. ) ! snow precipitation 171 CALL iom_put( "micesalt" , smt_i 172 173 CALL iom_put( "icestr" , strength * 0.001 )! ice strength174 CALL iom_put( "idive" , divu_i * 1.0e8 )! divergence175 CALL iom_put( "ishear" , shear_i * 1.0e8 )! shear176 CALL iom_put( "snowvol" , vt_s 130 CALL iom_put( "micesalt" , smt_i * zswi ) ! mean ice salinity 131 132 CALL iom_put( "icestr" , strength * 0.001 * zswi ) ! ice strength 133 CALL iom_put( "idive" , divu_i * 1.0e8 * zswi ) ! divergence 134 CALL iom_put( "ishear" , shear_i * 1.0e8 * zswi ) ! shear 135 CALL iom_put( "snowvol" , vt_s * zswi ) ! snow volume 177 136 178 137 CALL iom_put( "icetrp" , diag_trp_vi * rday ) ! ice volume transport … … 183 142 184 143 CALL iom_put( "sfxbog" , sfx_bog * rday ) ! salt flux from bottom growth 185 CALL iom_put( "sfxbom" , sfx_bom * rday ) ! salt flux from bottom melt 186 CALL iom_put( "sfxsum" , sfx_sum * rday ) ! salt flux from surface melt 144 CALL iom_put( "sfxbom" , sfx_bom * rday ) ! salt flux from bottom melting 145 CALL iom_put( "sfxsum" , sfx_sum * rday ) ! salt flux from surface melting 146 CALL iom_put( "sfxlam" , sfx_lam * rday ) ! salt flux from lateral melting 187 147 CALL iom_put( "sfxsni" , sfx_sni * rday ) ! salt flux from snow ice formation 188 148 CALL iom_put( "sfxopw" , sfx_opw * rday ) ! salt flux from open water formation 189 149 CALL iom_put( "sfxdyn" , sfx_dyn * rday ) ! salt flux from ridging rafting 190 CALL iom_put( "sfxres" , sfx_res * rday ) ! salt flux from residual150 CALL iom_put( "sfxres" , sfx_res * rday ) ! salt flux from limupdate (resultant) 191 151 CALL iom_put( "sfxbri" , sfx_bri * rday ) ! salt flux from brines 192 152 CALL iom_put( "sfxsub" , sfx_sub * rday ) ! salt flux from sublimation … … 201 161 CALL iom_put( "vfxsum" , wfx_sum * ztmp ) ! surface melt 202 162 CALL iom_put( "vfxbom" , wfx_bom * ztmp ) ! bottom melt 163 CALL iom_put( "vfxlam" , wfx_lam * ztmp ) ! lateral melt 203 164 CALL iom_put( "vfxice" , wfx_ice * ztmp ) ! total ice growth/melt 204 165 CALL iom_put( "vfxsnw" , wfx_snw * ztmp ) ! total snw growth/melt … … 231 192 232 193 IF ( iom_use( "vfxthin" ) ) THEN ! ice production for open water + thin ice (<20cm) => comparable to observations 233 DO jj = 1, jpj 234 DO ji = 1, jpi 235 z2d(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zswi(ji,jj) ! mean ice thickness 236 END DO 237 END DO 238 WHERE( z2d(:,:) < 0.2 .AND. z2d(:,:) > 0. ) ; z2da = wfx_bog 239 ELSEWHERE ; z2da = 0._wp 194 WHERE( htm_i(:,:) < 0.2 .AND. htm_i(:,:) > 0. ) ; z2d = wfx_bog 195 ELSEWHERE ; z2d = 0._wp 240 196 END WHERE 241 CALL iom_put( "vfxthin", ( wfx_opw + z2d a) * ztmp )197 CALL iom_put( "vfxthin", ( wfx_opw + z2d ) * ztmp ) 242 198 ENDIF 243 199 … … 245 201 ! Output values for each category 246 202 !-------------------------------- 247 CALL iom_put( "iceconc_cat" , a_i 248 CALL iom_put( "icethic_cat" , ht_i 249 CALL iom_put( "snowthic_cat" , ht_s 250 CALL iom_put( "salinity_cat" , sm_i 203 CALL iom_put( "iceconc_cat" , a_i * zswi2 ) ! area for categories 204 CALL iom_put( "icethic_cat" , ht_i * zswi2 ) ! thickness for categories 205 CALL iom_put( "snowthic_cat" , ht_s * zswi2 ) ! snow depth for categories 206 CALL iom_put( "salinity_cat" , sm_i * zswi2 ) ! salinity for categories 251 207 252 208 ! ice temperature 253 IF ( iom_use( "icetemp_cat" ) ) THEN 254 zt_i(:,:,:) = SUM( t_i(:,:,:,:), dim=3 ) * r1_nlay_i 255 CALL iom_put( "icetemp_cat" , zt_i - rt0 ) 256 ENDIF 209 IF ( iom_use( "icetemp_cat" ) ) CALL iom_put( "icetemp_cat", ( SUM( t_i(:,:,:,:), dim=3 ) * r1_nlay_i - rt0 ) * zswi2 ) 257 210 258 211 ! snow temperature 259 IF ( iom_use( "snwtemp_cat" ) ) THEN 260 zt_s(:,:,:) = SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s 261 CALL iom_put( "snwtemp_cat" , zt_s - rt0 ) 262 ENDIF 263 264 ! Compute ice age 265 IF ( iom_use( "iceage_cat" ) ) THEN 266 DO jl = 1, jpl 267 DO jj = 1, jpj 268 DO ji = 1, jpi 269 rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.1 ) ) 270 rswitch = rswitch * MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - 0.1 ) ) 271 zoi(ji,jj,jl) = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , 0.1 ) * rswitch 272 END DO 273 END DO 274 END DO 275 CALL iom_put( "iceage_cat" , zoi * z1_365 ) ! ice age for categories 276 ENDIF 277 278 ! Compute brine volume 279 IF ( iom_use( "brinevol_cat" ) ) THEN 280 zei(:,:,:) = 0._wp 281 DO jl = 1, jpl 282 DO jk = 1, nlay_i 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 rswitch = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 286 zei(ji,jj,jl) = zei(ji,jj,jl) + 100.0 * & 287 ( - tmut * s_i(ji,jj,jk,jl) / MIN( ( t_i(ji,jj,jk,jl) - rt0 ), - epsi06 ) ) * & 288 rswitch * r1_nlay_i 289 END DO 290 END DO 291 END DO 292 END DO 293 CALL iom_put( "brinevol_cat" , zei ) ! brine volume for categories 294 ENDIF 212 IF ( iom_use( "snwtemp_cat" ) ) CALL iom_put( "snwtemp_cat", ( SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s - rt0 ) * zswi2 ) 213 214 ! ice age 215 IF ( iom_use( "iceage_cat" ) ) CALL iom_put( "iceage_cat" , o_i * zswi2 * z1_365 ) 216 217 ! brine volume 218 IF ( iom_use( "brinevol_cat" ) ) CALL iom_put( "brinevol_cat", bv_i * 100. * zswi2 ) 295 219 296 220 ! ! Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s … … 298 222 ! not yet implemented 299 223 300 CALL wrk_dealloc( jpi, jpj, jpl, z oi, zei, zt_i, zt_s)224 CALL wrk_dealloc( jpi, jpj, jpl, zswi2 ) 301 225 CALL wrk_dealloc( jpi, jpj , z2d, zswi, z2da, z2db ) 302 226 … … 370 294 CALL histend( kid, snc4set ) ! end of the file definition 371 295 372 CALL histwrite( kid, "iicethic", kt, icethi, jpi*jpj, (/1/) )296 CALL histwrite( kid, "iicethic", kt, htm_i , jpi*jpj, (/1/) ) 373 297 CALL histwrite( kid, "iiceconc", kt, at_i , jpi*jpj, (/1/) ) 374 298 CALL histwrite( kid, "iicetemp", kt, tm_i - rt0 , jpi*jpj, (/1/) )
Note: See TracChangeset
for help on using the changeset viewer.