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.
Changeset 8884 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceupdate.F90 – NEMO

Ignore:
Timestamp:
2017-12-04T10:05:16+01:00 (6 years ago)
Author:
clem
Message:

dev_CNRS_2017: modify outputs for sea-ice

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceupdate.F90

    r8882 r8884  
    207207      ! output all fluxes 
    208208      !------------------ 
    209       IF( iom_use('qsr_oce') )   CALL iom_put( "qsr_oce" , qsr_oce(:,:) * ( 1._wp - at_i_b(:,:) ) )                      !     solar flux at ocean surface 
    210       IF( iom_use('qns_oce') )   CALL iom_put( "qns_oce" , qns_oce(:,:) * ( 1._wp - at_i_b(:,:) ) + qemp_oce(:,:) )      ! non-solar flux at ocean surface 
    211       IF( iom_use('qsr_ice') )   CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) )                 !     solar flux at ice surface 
    212       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 
    213       IF( iom_use('qtr_ice') )   CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) )                 !     solar flux transmitted thru ice 
    214       IF( iom_use('qt_oce' ) )   CALL iom_put( "qt_oce"  , ( qsr_oce(:,:) + qns_oce(:,:) ) * ( 1._wp - at_i_b(:,:) ) + qemp_oce(:,:) ) 
    215       IF( iom_use('qt_ice' ) )   CALL iom_put( "qt_ice"  , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) )   & 
    216          &                                                      * a_i_b(:,:,:), dim=3 ) + qemp_ice(:,:) ) 
    217 !!gm I don't understand the variable below.... why not multiplied by a_i_b or (1-a_i_b) ???  
    218       IF( iom_use('qemp_oce') )  CALL iom_put( "qemp_oce" , qemp_oce(:,:) )   
    219       IF( iom_use('qemp_ice') )  CALL iom_put( "qemp_ice" , qemp_ice(:,:) )   
    220       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) 
    221       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) 
    222  
    223       CALL iom_put( "snowpre"     , sprecip * 86400.    )        ! snow precipitation [m/day] 
    224  
    225       CALL iom_put( "sfxbog"      , sfx_bog             )        ! salt flux from bottom growth 
    226       CALL iom_put( "sfxbom"      , sfx_bom             )        ! salt flux from bottom melting 
    227       CALL iom_put( "sfxsum"      , sfx_sum             )        ! salt flux from surface melting 
    228       CALL iom_put( "sfxlam"      , sfx_lam             )        ! salt flux from lateral melting 
    229       CALL iom_put( "sfxsni"      , sfx_sni             )        ! salt flux from snow ice formation 
    230       CALL iom_put( "sfxopw"      , sfx_opw             )        ! salt flux from open water formation 
    231       CALL iom_put( "sfxdyn"      , sfx_dyn             )        ! salt flux from ridging rafting 
    232       CALL iom_put( "sfxres"      , sfx_res             )        ! salt flux from corrections (resultant) 
    233       CALL iom_put( "sfxbri"      , sfx_bri             )        ! salt flux from brines 
    234       CALL iom_put( "sfxsub"      , sfx_sub             )        ! salt flux from sublimation 
    235       CALL iom_put( "sfx"         , sfx                 )        ! total salt flux 
    236  
    237       CALL iom_put( "vfxres"     , wfx_res              )        ! prod./melting due to corrections  
    238       CALL iom_put( "vfxopw"     , wfx_opw              )        ! lateral thermodynamic ice production 
    239       CALL iom_put( "vfxsni"     , wfx_sni              )        ! snowice ice production 
    240       CALL iom_put( "vfxbog"     , wfx_bog              )        ! bottom thermodynamic ice production 
    241       CALL iom_put( "vfxdyn"     , wfx_dyn              )        ! dynamic ice production (rid/raft) 
    242       CALL iom_put( "vfxsum"     , wfx_sum              )        ! surface melt  
    243       CALL iom_put( "vfxbom"     , wfx_bom              )        ! bottom melt  
    244       CALL iom_put( "vfxlam"     , wfx_lam              )        ! lateral melt  
    245       CALL iom_put( "vfxice"     , wfx_ice              )        ! total ice growth/melt  
    246       IF ( ln_pnd_fwb )   CALL iom_put( "vfxpnd", wfx_pnd   )        ! melt pond water flux 
    247  
    248       IF ( iom_use( "vfxthin" ) ) THEN   ! ice production for open water + thin ice (<20cm) => comparable to observations   
     209      ! 
     210      ! --- salt fluxes [kg/m2/s] --- ! 
     211      !                           ! sfxice =  sfxbog + sfxbom + sfxsum + sfxsni + sfxopw + sfxres + sfxdyn + sfxbri + sfxsub + sfxlam 
     212      IF( iom_use('sfxice'  ) )   CALL iom_put( "sfxice", sfx     * 1.e-03 )   ! salt flux from total ice growth/melt 
     213      IF( iom_use('sfxbog'  ) )   CALL iom_put( "sfxbog", sfx_bog * 1.e-03 )   ! salt flux from bottom growth 
     214      IF( iom_use('sfxbom'  ) )   CALL iom_put( "sfxbom", sfx_bom * 1.e-03 )   ! salt flux from bottom melting 
     215      IF( iom_use('sfxsum'  ) )   CALL iom_put( "sfxsum", sfx_sum * 1.e-03 )   ! salt flux from surface melting 
     216      IF( iom_use('sfxlam'  ) )   CALL iom_put( "sfxlam", sfx_lam * 1.e-03 )   ! salt flux from lateral melting 
     217      IF( iom_use('sfxsni'  ) )   CALL iom_put( "sfxsni", sfx_sni * 1.e-03 )   ! salt flux from snow ice formation 
     218      IF( iom_use('sfxopw'  ) )   CALL iom_put( "sfxopw", sfx_opw * 1.e-03 )   ! salt flux from open water formation 
     219      IF( iom_use('sfxdyn'  ) )   CALL iom_put( "sfxdyn", sfx_dyn * 1.e-03 )   ! salt flux from ridging rafting 
     220      IF( iom_use('sfxbri'  ) )   CALL iom_put( "sfxbri", sfx_bri * 1.e-03 )   ! salt flux from brines 
     221      IF( iom_use('sfxres'  ) )   CALL iom_put( "sfxres", sfx_res * 1.e-03 )   ! salt flux from undiagnosed processes 
     222      IF( iom_use('sfxsub'  ) )   CALL iom_put( "sfxsub", sfx_sub * 1.e-03 )   ! salt flux from sublimation 
     223 
     224      ! --- mass fluxes [kg/m2/s] --- ! 
     225      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) 
     226      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) 
     227 
     228      !                           ! vfxice = vfxbog + vfxbom + vfxsum + vfxsni + vfxopw + vfxdyn + vfxres + vfxlam + vfxpnd 
     229      IF( iom_use('vfxice'  ) )   CALL iom_put( "vfxice" , wfx_ice )   ! mass flux from total ice growth/melt 
     230      IF( iom_use('vfxbog'  ) )   CALL iom_put( "vfxbog" , wfx_bog )   ! mass flux from bottom growth 
     231      IF( iom_use('vfxbom'  ) )   CALL iom_put( "vfxbom" , wfx_bom )   ! mass flux from bottom melt  
     232      IF( iom_use('vfxsum'  ) )   CALL iom_put( "vfxsum" , wfx_sum )   ! mass flux from surface melt  
     233      IF( iom_use('vfxlam'  ) )   CALL iom_put( "vfxlam" , wfx_lam )   ! mass flux from lateral melt  
     234      IF( iom_use('vfxsni'  ) )   CALL iom_put( "vfxsni" , wfx_sni )   ! mass flux from snow-ice formation 
     235      IF( iom_use('vfxopw'  ) )   CALL iom_put( "vfxopw" , wfx_opw )   ! mass flux from growth in open water 
     236      IF( iom_use('vfxdyn'  ) )   CALL iom_put( "vfxdyn" , wfx_dyn )   ! mass flux from dynamics (ridging) 
     237      IF( iom_use('vfxres'  ) )   CALL iom_put( "vfxres" , wfx_res )   ! mass flux from undiagnosed processes  
     238      IF( iom_use('vfxpnd'  ) )   CALL iom_put( "vfxpnd" , wfx_pnd )   ! mass flux from melt ponds 
     239      IF( iom_use('vfxsub'  ) )   CALL iom_put( "vfxsub" , wfx_ice_sub )   ! mass flux from ice sublimation (ice-atm.) 
     240      IF( iom_use('vfxsub_err') ) CALL iom_put( "vfxsub_err", wfx_err_sub )   ! "excess" of sublimation sent to ocean       
     241 
     242      IF ( iom_use( "vfxthin" ) ) THEN   ! mass flux from ice growth in open water + thin ice (<20cm) => comparable to observations   
    249243         WHERE( hm_i(:,:) < 0.2 .AND. hm_i(:,:) > 0. ) ; z2d = wfx_bog 
    250244         ELSEWHERE                                     ; z2d = 0._wp 
    251245         END WHERE 
    252          CALL iom_put( "vfxthin", ( wfx_opw + z2d )     ) 
    253       ENDIF 
    254  
    255       CALL iom_put( "vfxspr"     , wfx_spr              )        ! precip (snow) 
    256       CALL iom_put( "vfxsnw"     , wfx_snw              )        ! total snw growth/melt  
    257       CALL iom_put( "vfxsub"     , wfx_sub              )        ! sublimation (snow/ice)  
    258       CALL iom_put( "vfxsub_err" , wfx_err_sub          )        ! "excess" of sublimation sent to ocean       
    259   
    260       CALL iom_put ('hfxthd'     , hfx_thd(:,:)         )   !   
    261       CALL iom_put ('hfxdyn'     , hfx_dyn(:,:)         )   !   
    262       CALL iom_put ('hfxres'     , hfx_res(:,:)         )   !   
    263       CALL iom_put ('hfxout'     , hfx_out(:,:)         )   !   
    264       CALL iom_put ('hfxin'      , hfx_in(:,:)          )   !   
    265       CALL iom_put ('hfxsnw'     , hfx_snw(:,:)         )   !   
    266       CALL iom_put ('hfxsub'     , hfx_sub(:,:)         )   !   
    267       CALL iom_put ('hfxerr'     , hfx_err_dif(:,:)     )   !   
    268       CALL iom_put ('hfxerr_rem' , hfx_err_rem(:,:)     )   !   
    269        
    270       CALL iom_put ('hfxsum'     , hfx_sum(:,:)         )   !   
    271       CALL iom_put ('hfxbom'     , hfx_bom(:,:)         )   !   
    272       CALL iom_put ('hfxbog'     , hfx_bog(:,:)         )   !   
    273       CALL iom_put ('hfxdif'     , hfx_dif(:,:)         )   !   
    274       CALL iom_put ('hfxopw'     , hfx_opw(:,:)         )   !   
    275       CALL iom_put ('hfxtur'     , fhtur(:,:) * at_i_b(:,:) ) ! turbulent heat flux at ice base  
    276       CALL iom_put ('hfxdhc'     , diag_heat(:,:)       )   ! Heat content variation in snow and ice  
    277       CALL iom_put ('hfxspr'     , hfx_spr(:,:)         )   ! Heat content of snow precip  
     246         CALL iom_put( "vfxthin", wfx_opw + z2d ) 
     247      ENDIF 
     248 
     249      !                              ! vfxsnw = vfxsnw_sni + vfxsnw_dyn + vfxsnw_sum 
     250      IF( iom_use('vfxsnw'     ) )   CALL iom_put( "vfxsnw"     , wfx_snw     )   ! mass flux from total snow growth/melt 
     251      IF( iom_use('vfxsnw_sum' ) )   CALL iom_put( "vfxsnw_sum" , wfx_snw_sum )   ! mass flux from snow melt at the surface 
     252      IF( iom_use('vfxsnw_sni' ) )   CALL iom_put( "vfxsnw_sni" , wfx_snw_sni )   ! mass flux from snow melt during snow-ice formation  
     253      IF( iom_use('vfxsnw_dyn' ) )   CALL iom_put( "vfxsnw_dyn" , wfx_snw_dyn )   ! mass flux from dynamics (ridging)  
     254      IF( iom_use('vfxsnw_sub' ) )   CALL iom_put( "vfxsnw_sub" , wfx_snw_sub )   ! mass flux from snow sublimation (ice-atm.)  
     255      IF( iom_use('vfxsnw_pre' ) )   CALL iom_put( "vfxsnw_pre" , wfx_spr     )   ! snow precip 
     256 
     257      ! --- heat fluxes [W/m2] --- ! 
     258      !                              ! qt_atm_oi - qt_oce_ai = hfxdhc - ( dihctrp + dshctrp ) 
     259      IF( iom_use('qsr_oce'    ) )   CALL iom_put( "qsr_oce"    , qsr_oce * ( 1._wp - at_i_b )                               )   !     solar flux at ocean surface 
     260      IF( iom_use('qns_oce'    ) )   CALL iom_put( "qns_oce"    , qns_oce * ( 1._wp - at_i_b ) + qemp_oce                    )   ! non-solar flux at ocean surface 
     261      IF( iom_use('qsr_ice'    ) )   CALL iom_put( "qsr_ice"    , SUM( qsr_ice * a_i_b, dim=3 )                              )   !     solar flux at ice surface 
     262      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 
     263      IF( iom_use('qtr_ice_bot') )   CALL iom_put( "qtr_ice_bot", SUM( ftr_ice * a_i_b, dim=3 )                              )   !     solar flux transmitted thru ice 
     264      IF( iom_use('qtr_ice_top') )   CALL iom_put( "qtr_ice_top", SUM( qsr_ice_tr * a_i_b, dim=3 )                           )   !     solar flux transmitted thru ice surface 
     265      IF( iom_use('qt_oce'     ) )   CALL iom_put( "qt_oce"     ,      ( qsr_oce + qns_oce ) * ( 1._wp - at_i_b ) + qemp_oce ) 
     266      IF( iom_use('qt_ice'     ) )   CALL iom_put( "qt_ice"     , SUM( ( qns_ice + qsr_ice ) * a_i_b, dim=3 )     + qemp_ice ) 
     267      IF( iom_use('qt_oce_ai'  ) )   CALL iom_put( "qt_oce_ai"  , hfx_out                                                    )   ! total heat flux at the ocean   surface: interface oce-(ice+atm)  
     268      IF( iom_use('qt_atm_oi'  ) )   CALL iom_put( "qt_atm_oi"  , hfx_in                                                     )   ! total heat flux at the oce-ice surface: interface atm-(ice+oce)  
     269      IF( iom_use('qemp_oce'   ) )   CALL iom_put( "qemp_oce"   , qemp_oce                                                   )   ! Downward Heat Flux from E-P over ocean 
     270      IF( iom_use('qemp_ice'   ) )   CALL iom_put( "qemp_ice"   , qemp_ice                                                   )   ! Downward Heat Flux from E-P over ice 
     271 
     272      ! heat fluxes from ice transformations 
     273      !                              ! hfxdhc = hfxbog + hfxbom + hfxsum + hfxopw + hfxdif + hfxsnw - ( hfxthd + hfxdyn + hfxres + hfxsub + hfxspr ) 
     274      IF( iom_use('hfxbog'     ) )   CALL iom_put ("hfxbog"     , hfx_bog             )   ! heat flux used for ice bottom growth  
     275      IF( iom_use('hfxbom'     ) )   CALL iom_put ("hfxbom"     , hfx_bom             )   ! heat flux used for ice bottom melt 
     276      IF( iom_use('hfxsum'     ) )   CALL iom_put ("hfxsum"     , hfx_sum             )   ! heat flux used for ice surface growth 
     277      IF( iom_use('hfxopw'     ) )   CALL iom_put ("hfxopw"     , hfx_opw             )   ! heat flux used for ice formation in open water 
     278      IF( iom_use('hfxdif'     ) )   CALL iom_put ("hfxdif"     , hfx_dif             )   ! heat flux used for ice temperature change 
     279      IF( iom_use('hfxsnw'     ) )   CALL iom_put ("hfxsnw"     , hfx_snw             )   ! heat flux used for snow melt  
     280      IF( iom_use('hfxerr'     ) )   CALL iom_put ("hfxerr"     , hfx_err_dif         )   ! heat flux error after heat diffusion (included in hfx_out) 
     281 
     282      ! heat fluxes associated with mass exchange (freeze/melt/precip...) 
     283      IF( iom_use('hfxthd'     ) )   CALL iom_put ("hfxthd"     , hfx_thd             )   !   
     284      IF( iom_use('hfxdyn'     ) )   CALL iom_put ("hfxdyn"     , hfx_dyn             )   !   
     285      IF( iom_use('hfxres'     ) )   CALL iom_put ("hfxres"     , hfx_res             )   !   
     286      IF( iom_use('hfxsub'     ) )   CALL iom_put ("hfxsub"     , hfx_sub             )   !   
     287      IF( iom_use('hfxspr'     ) )   CALL iom_put ("hfxspr"     , hfx_spr             )   ! Heat flux from snow precip heat content  
     288 
     289      ! other heat fluxes 
     290      IF( iom_use('hfxsensib'  ) )   CALL iom_put( "hfxsensib"  , -fhtur     * at_i_b )   ! Sensible oceanic heat flux 
     291      IF( iom_use('hfxcndbot'  ) )   CALL iom_put( "hfxcndbot"  , diag_fc_bo * at_i_b )   ! Bottom conduction flux 
     292      IF( iom_use('hfxcndtop'  ) )   CALL iom_put( "hfxcndtop"  , diag_fc_su * at_i_b )   ! Surface conduction flux 
     293 
     294      ! diags 
     295      IF( iom_use('hfxdhc'     ) )   CALL iom_put ("hfxdhc"     , diag_heat           )   ! Heat content variation in snow and ice  
    278296      ! 
    279297      ! controls 
Note: See TracChangeset for help on using the changeset viewer.