Changeset 8258
- Timestamp:
- 2017-06-30T14:31:14+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r8175 r8258 54 54 ! 55 55 INTEGER :: ii, ji, jj, jk, jl ! dummy loop indices 56 REAL(wp) :: z2da, z2db, ztmp, zrho1, zrho2 56 REAL(wp) :: z2da, z2db, ztmp, zrho1, zrho2, zmiss_val 57 57 REAL(wp), POINTER, DIMENSION(:,:,:) :: zswi2 58 58 REAL(wp), POINTER, DIMENSION(:,:) :: z2d, zswi ! 2D workspace 59 59 REAL(wp), POINTER, DIMENSION(:,:) :: zfb ! ice freeboard 60 60 REAL(wp), POINTER, DIMENSION(:,:) :: zamask, zamask15 ! 15% concentration mask 61 REAL(wp), POINTER, DIMENSION(:,:) :: zmiss ! missing value array 61 62 62 63 ! Global ice diagnostics (SIMIP) … … 75 76 CALL wrk_alloc( jpi, jpj , z2d, zswi ) 76 77 CALL wrk_alloc( jpi, jpj , zfb, zamask, zamask15 ) 78 CALL wrk_alloc( jpi, jpj , zmiss ) 79 80 !----------------------------- 81 ! Missing value array 82 !----------------------------- 83 zmiss_val = -1.0e20 84 zmiss(:,:) = zmiss_val * ( 1. - zswi(:,:) ) 77 85 78 86 !----------------------------- … … 119 127 120 128 ! velocity 121 IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" ) ) THEN 129 IF ( iom_use('uice_ipa') ) CALL iom_put( "uice_ipa" , u_ice ) ! ice velocity u component 130 IF ( iom_use('vice_ipa') ) CALL iom_put( "vice_ipa" , v_ice ) ! ice velocity v component 131 132 IF ( ( iom_use( "icevel" ) .OR. ( iom_use( "icevel_mv" ) ) ) THEN 122 133 DO jj = 2 , jpjm1 123 134 DO ji = 2 , jpim1 … … 128 139 END DO 129 140 CALL lbc_lnk( z2d, 'T', 1. ) 130 CALL iom_put( "uice_ipa" , u_ice ) ! ice velocity u component 131 CALL iom_put( "vice_ipa" , v_ice ) ! ice velocity v component 132 CALL iom_put( "icevel" , z2d ) ! ice velocity module 141 IF ( iom_use( "icevel" ) CALL iom_put( "icevel" , z2d ) ! ice velocity module 142 IF ( iom_use( "icevel_mv" ) CALL iom_put( "icevel_mv" , z2d(:,:) * zswi(:,:) + zmiss(:,:) ! ice velocity module (missing value) 133 143 ENDIF 134 144 ! … … 239 249 zrho1 = ( rau0 - rhoic ) / rau0; zrho2 = rhosn / rau0 240 250 241 IF ( iom_use( "icethic" ) ) CALL iom_put( "icethic" , htm_i * zamask ) ! Ice thickness 242 IF ( iom_use( "icepres" ) ) CALL iom_put( "icepres" , zswi ) ! Ice presence (1 or 0) 243 IF ( iom_use( "snowthic" ) ) CALL iom_put( "snowthic" , htm_s * zamask ) ! Snow thickness 244 IF ( iom_use( "icemass" ) ) CALL iom_put( "icemass" , rhoic * vt_i(:,:) * zswi ) ! Ice mass per cell area 245 IF ( iom_use( "snomass" ) ) CALL iom_put( "snomass" , rhosn * vt_s(:,:) * zswi ) ! Snow mass per cell area 246 IF ( iom_use( "icesnt" ) ) CALL iom_put( "icesnt" , ( tm_si - rt0 ) * zswi ) ! Snow-ice interface temperature 247 IF ( iom_use( "icebot" ) ) CALL iom_put( "icebot" , ( t_bo - rt0 ) * zswi ) ! Ice bottom temperature 248 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 251 IF ( iom_use( "icepres" ) ) CALL iom_put( "icepres" , zswi(:,:) ) ! Ice presence (1 or 0) 252 IF ( iom_use( "icemass" ) ) CALL iom_put( "icemass" , rhoic * vt_i(:,:) * zswi(:,:) ) ! Ice mass per cell area 253 IF ( iom_use( "icethic" ) ) CALL iom_put( "icethic" , htm_i(:,:) * zamask(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ice thickness 254 IF ( iom_use( "snomass" ) ) CALL iom_put( "snomass" , rhosn * vt_s(:,:) * zswi(:,:) + zmiss(:,:) ) ! Snow mass per cell area 255 IF ( iom_use( "snowthic" ) ) CALL iom_put( "snowthic" , htm_s(:,:) * zamask(:,:) * zswi(:,:) + zmiss(:,:) ) ! Snow thickness 256 IF ( iom_use( "icesnt" ) ) CALL iom_put( "icesnt" , ( tm_si(:,:) - rt0 ) * zswi(:,:) + zmiss(:,:) ) ! Snow-ice interface temperature 257 IF ( iom_use( "icebot" ) ) CALL iom_put( "icebot" , ( t_bo(:,:) - rt0 ) * zswi(:,:) + zmiss(:,:) ) ! Ice bottom temperature 258 IF ( iom_use( "iceage_mv") ) CALL iom_put( "iceage_mv" , om_i(:,:) * zamask15(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ice age 259 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 260 IF ( iom_use( "icesal_mv") ) CALL iom_put( "icesal_mv" , smt_i(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ice salinity 261 249 262 IF ( iom_use( "icefb" ) ) THEN 250 zfb(:,:) = ( zrho1 * htm_i(:,:) - zrho2 * htm_s(:,:) ) * zswi(:,:)263 zfb(:,:) = ( zrho1 * htm_i(:,:) - zrho2 * htm_s(:,:) ) 251 264 WHERE( zfb < 0._wp ) ; zfb = 0._wp ; END WHERE 252 CALL iom_put( "icefb" , zfb )! Ice freeboard265 CALL iom_put( "icefb" , zfb(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ice freeboard 253 266 ENDIF 254 IF ( iom_use( "dmithd" ) ) CALL iom_put( "dmithd" , - wfx_bog - wfx_bom - wfx_sum & ! Sea-ice mass change from thermodynamics 267 268 IF ( iom_use( "snhc_mv" ) ) CALL iom_put( "snhc_mv" , et_s(:,:) * zswi(:,:) + zmiss(:,:) ) ! Snow total heat content 269 270 IF ( iom_use( "dmithd" ) ) CALL iom_put( "dmithd" , - wfx_bog - wfx_bom - wfx_sum & ! Sea-ice mass change from thermodynamics 255 271 & - wfx_sni - wfx_opw - wfx_res ) 256 IF ( iom_use( "dmidyn" ) ) CALL iom_put( "dmidyn" , diag_dmi_dyn ) ! Sea-ice mass change from dynamics 257 IF ( iom_use( "dmiopw" ) ) CALL iom_put( "dmiopw" , - wfx_opw ) ! Sea-ice mass change through growth in open water 258 IF ( iom_use( "dmibog" ) ) CALL iom_put( "dmibog" , - wfx_bog ) ! Sea-ice mass change through basal growth 259 IF ( iom_use( "dmisni" ) ) CALL iom_put( "dmisni" , - wfx_sni ) ! Sea-ice mass change through snow-to-ice conversion 260 IF ( iom_use( "dmisum" ) ) CALL iom_put( "dmisum" , - wfx_sum ) ! Sea-ice mass change through surface melting 261 IF ( iom_use( "dmibom" ) ) CALL iom_put( "dmibom" , - wfx_bom ) ! Sea-ice mass change through bottom melting 262 263 IF ( iom_use( "dmtsub" ) ) CALL iom_put( "dmtsub" , - wfx_sub ) ! Sea-ice mass change through evaporation and sublimation 264 IF ( iom_use( "dmssub" ) ) CALL iom_put( "dmssub" , - wfx_snw_sub ) ! Snow mass change through sublimation 265 IF ( iom_use( "dmisub" ) ) CALL iom_put( "dmisub" , - wfx_ice_sub ) ! Sea-ice mass change through sublimation 266 267 IF ( iom_use( "dmsspr" ) ) CALL iom_put( "dmsspr" , - wfx_spr ) ! Snow mass change through snow fall 268 IF ( iom_use( "dmsssi" ) ) CALL iom_put( "dmsssi" , wfx_sni*rhosn/rhoic ) ! Snow mass change through snow-to-ice conversion 269 270 IF ( iom_use( "dmsmel" ) ) CALL iom_put( "dmsmel" , - wfx_snw_sum ) ! Snow mass change through melt 271 IF ( iom_use( "dmsdyn" ) ) CALL iom_put( "dmsdyn" , diag_dms_dyn ) ! Snow mass change through dynamics 272 273 IF ( iom_use( "hfxconbo" ) ) CALL iom_put( "hfxconbo" , diag_fc_bo ) ! Bottom conduction flux 274 IF ( iom_use( "hfxconsu" ) ) CALL iom_put( "hfxconsu" , diag_fc_su ) ! Surface conduction flux 275 276 IF ( iom_use( "wfxtot" ) ) CALL iom_put( "wfxtot" , wfx_ice ) ! Total freshwater flux from sea ice 277 IF ( iom_use( "wfxsum" ) ) CALL iom_put( "wfxsum" , wfx_sum ) ! Freshwater flux from sea-ice surface 278 279 IF ( iom_use( "utau_oi" ) ) CALL iom_put( "utau_oi" , diag_utau_oi*zswi ) ! X-component of ocean stress on sea ice 280 IF ( iom_use( "vtau_oi" ) ) CALL iom_put( "vtau_oi" , diag_vtau_oi*zswi ) ! Y-component of ocean stress on sea ice 281 282 IF ( iom_use( "dssh_dx" ) ) CALL iom_put( "dssh_dx" , diag_dssh_dx*zswi ) ! Sea-surface tilt term in force balance (x-component) 283 IF ( iom_use( "dssh_dy" ) ) CALL iom_put( "dssh_dy" , diag_dssh_dy*zswi ) ! Sea-surface tilt term in force balance (y-component) 284 285 IF ( iom_use( "corstrx" ) ) CALL iom_put( "corstrx" , diag_corstrx*zswi ) ! Coriolis force term in force balance (x-component) 286 IF ( iom_use( "corstry" ) ) CALL iom_put( "corstry" , diag_corstry*zswi ) ! Coriolis force term in force balance (y-component) 287 288 IF ( iom_use( "intstrx" ) ) CALL iom_put( "intstrx" , diag_intstrx*zswi ) ! Internal force term in force balance (x-component) 289 IF ( iom_use( "intstry" ) ) CALL iom_put( "intstry" , diag_intstry*zswi ) ! Internal force term in force balance (y-component) 290 291 IF ( iom_use( "normstr" ) ) CALL iom_put( "normstr" , diag_sig1 *zswi ) ! Normal stress 292 IF ( iom_use( "sheastr" ) ) CALL iom_put( "sheastr" , diag_sig2 *zswi ) ! Shear stress 293 294 IF ( iom_use( "xmtrpice" ) ) CALL iom_put( "xmtrpice" , diag_xmtrp_ice ) ! X-component of sea-ice mass transport 295 IF ( iom_use( "ymtrpice" ) ) CALL iom_put( "ymtrpice" , diag_ymtrp_ice ) ! Y-component of sea-ice mass transport 296 297 IF ( iom_use( "xmtrpsnw" ) ) CALL iom_put( "xmtrpsnw" , diag_xmtrp_snw ) ! X-component of snow mass transport 298 IF ( iom_use( "ymtrpsnw" ) ) CALL iom_put( "ymtrpsnw" , diag_ymtrp_snw ) ! Y-component of snow mass transport 299 300 IF ( iom_use( "xatrp" ) ) CALL iom_put( "xatrp" , diag_xatrp ) ! X-component of ice area transport 301 IF ( iom_use( "yatrp" ) ) CALL iom_put( "yatrp" , diag_yatrp ) ! Y-component of ice area transport 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 279 IF ( iom_use( "dmtsub" ) ) CALL iom_put( "dmtsub" , - wfx_sub ) ! Sea-ice mass change through evaporation and sublimation 280 IF ( iom_use( "dmssub" ) ) CALL iom_put( "dmssub" , - wfx_snw_sub ) ! Snow mass change through sublimation 281 IF ( iom_use( "dmisub" ) ) CALL iom_put( "dmisub" , - wfx_ice_sub ) ! Sea-ice mass change through sublimation 282 283 IF ( iom_use( "dmsspr" ) ) CALL iom_put( "dmsspr" , - wfx_spr ) ! Snow mass change through snow fall 284 IF ( iom_use( "dmsssi" ) ) CALL iom_put( "dmsssi" , wfx_sni*rhosn/rhoic ) ! Snow mass change through snow-to-ice conversion 285 286 IF ( iom_use( "dmsmel" ) ) CALL iom_put( "dmsmel" , - wfx_snw_sum ) ! Snow mass change through melt 287 IF ( iom_use( "dmsdyn" ) ) CALL iom_put( "dmsdyn" , diag_dms_dyn ) ! Snow mass change through dynamics 288 289 IF ( iom_use( "hfxconsu" ) ) CALL iom_put( "hfxsenso" , -fhtur(:,:) * zswi(:,:) + zmiss(:,:) ) ! Sensible oceanic heat flux 290 IF ( iom_use( "hfxconbo" ) ) CALL iom_put( "hfxconbo" , diag_fc_bo * zswi(:,:) + zmiss(:,:) ) ! Bottom conduction flux 291 IF ( iom_use( "hfxconsu" ) ) CALL iom_put( "hfxconsu" , diag_fc_su * zswi(:,:) + zmiss(:,:) ) ! Surface conduction flux 292 293 IF ( iom_use( "wfxtot" ) ) CALL iom_put( "wfxtot" , wfx_ice(:,:) * zswi(:,:) + zmiss(:,:) ) ! Total freshwater flux from sea ice 294 IF ( iom_use( "wfxsum" ) ) CALL iom_put( "wfxsum" , wfx_sum(:,:) * zswi(:,:) + zmiss(:,:) ) ! Freshwater flux from sea-ice surface 295 IF ( iom_use( "sfx_mv" ) ) CALL iom_put( "sfx_mv" , sfx(:,:) * zswi(:,:) + zmiss(:,:) ) ! Total salt flux 296 297 IF ( iom_use( "uice_mv" ) ) CALL iom_put( "uice_mv" , u_ice(:,:) * zswi(:,:) + zmiss(:,:) ) ! ice velocity u component 298 IF ( iom_use( "vice_mv" ) ) CALL iom_put( "vice_mv" , v_ice(:,:) * zswi(:,:) + zmiss(:,:) ) ! ice velocity v component 299 300 IF ( iom_use( "xmtrpice" ) ) CALL iom_put( "xmtrpice" , diag_xmtrp_ice(:,:) ) ! X-component of sea-ice mass transport (kg/s) 301 IF ( iom_use( "ymtrpice" ) ) CALL iom_put( "ymtrpice" , diag_ymtrp_ice(:,:) ) ! Y-component of sea-ice mass transport 302 303 IF ( iom_use( "xmtrpsnw" ) ) CALL iom_put( "xmtrpsnw" , diag_xmtrp_snw(:,:) ) ! X-component of snow mass transport (kg/s) 304 IF ( iom_use( "ymtrpsnw" ) ) CALL iom_put( "ymtrpsnw" , diag_ymtrp_snw(:,:) ) ! Y-component of snow mass transport 305 306 IF ( iom_use( "xatrp" ) ) CALL iom_put( "xatrp" , diag_xatrp(:,:) ) ! X-component of ice area transport 307 IF ( iom_use( "yatrp" ) ) CALL iom_put( "yatrp" , diag_yatrp(:,:) ) ! Y-component of ice area transport 308 309 IF ( iom_use("utau_ai_mv") ) CALL iom_put( "utau_ai_mv" , utau_ice(:,:) * zswi(:,:) + zmiss(:,:) ) ! Wind stress term in force balance (x) 310 IF ( iom_use("vtau_ai_mv") ) CALL iom_put( "vtau_ai_mv" , vtau_ice(:,:) * zswi(:,:) + zmiss(:,:) ) ! Wind stress term in force balance (y) 311 312 IF ( iom_use( "utau_oi" ) ) CALL iom_put( "utau_oi" , diag_utau_oi(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ocean stress term in force balance (x) 313 IF ( iom_use( "vtau_oi" ) ) CALL iom_put( "vtau_oi" , diag_vtau_oi(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ocean stress term in force balance (y) 314 315 IF ( iom_use( "icestr_mv") ) CALL iom_put( "icestr_mv" , strength(:,:) * zswi(:,:) + zmiss(:,:) ) ! Ice strength 316 317 IF ( iom_use( "dssh_dx" ) ) CALL iom_put( "dssh_dx" , diag_dssh_dx(:,:) * zswi(:,:) + zmiss(:,:) ) ! Sea-surface tilt term in force balance (x) 318 IF ( iom_use( "dssh_dy" ) ) CALL iom_put( "dssh_dy" , diag_dssh_dy(:,:) * zswi(:,:) + zmiss(:,:) ) ! Sea-surface tilt term in force balance (y) 319 320 IF ( iom_use( "corstrx" ) ) CALL iom_put( "corstrx" , diag_corstrx(:,:) * zswi(:,:) + zmiss(:,:) ) ! Coriolis force term in force balance (x) 321 IF ( iom_use( "corstry" ) ) CALL iom_put( "corstry" , diag_corstry(:,:) * zswi(:,:) + zmiss(:,:) ) ! Coriolis force term in force balance (y) 322 323 IF ( iom_use( "intstrx" ) ) CALL iom_put( "intstrx" , diag_intstrx(:,:) * zswi(:,:) + zmiss(:,:) ) ! Internal force term in force balance (x) 324 IF ( iom_use( "intstry" ) ) CALL iom_put( "intstry" , diag_intstry(:,:) * zswi(:,:) + zmiss(:,:) ) ! Internal force term in force balance (y) 325 326 IF ( iom_use( "normstr" ) ) CALL iom_put( "normstr" , diag_sig1(:,:) * zswi(:,:) ) ! Normal stress 327 IF ( iom_use( "sheastr" ) ) CALL iom_put( "sheastr" , diag_sig2(:,:) * zswi(:,:) ) ! Shear stress 302 328 303 329 !-------------------------------- … … 354 380 CALL wrk_dealloc( jpi, jpj , z2d, zswi ) 355 381 CALL wrk_dealloc( jpi, jpj , zfb, zamask, zamask15 ) 382 CALL wrk_dealloc( jpi, jpj , zmiss ) 356 383 357 384 IF( nn_timing == 1 ) CALL timing_stop('limwri')
Note: See TracChangeset
for help on using the changeset viewer.