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 8169 – NEMO

Changeset 8169


Ignore:
Timestamp:
2017-06-14T10:04:06+02:00 (7 years ago)
Author:
vancop
Message:

SIMIP outputs: clean ice age, prepare ocean heat flux modification

Location:
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r8158 r8169  
    8585      INTEGER  :: nbpb             ! nb of icy pts for vertical thermo calculations 
    8686      INTEGER  :: ii, ij           ! temporary dummy loop index 
    87       REAL(wp) :: zfric_u, zqld, zqfr 
     87      REAL(wp) :: zfric_u, zqld, zqfr, zqfr_neg 
    8888      REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b  
    8989      REAL(wp), PARAMETER :: zfric_umin = 0._wp           ! lower bound for the friction velocity (cice value=5.e-04) 
     
    147147 
    148148            ! --- Energy needed to bring ocean surface layer until its freezing (<0, J.m-2) --- ! 
     149            ! includes supercooling potential energy (>0) or "above-freezing" energy (<0) 
    149150            zqfr = tmask(ji,jj,1) * rau0 * rcp * fse3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) 
    150151 
    151             ! --- Energy from the turbulent oceanic heat flux (W/m2) --- ! 
     152            ! --- Above-freezing sensible heat content (J/m2 grid) 
     153            !-> target zqfr_neg = tmask(ji,jj,1) * rau0 * rcp * fse3t_m(ji,jj) * MIN( ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ), 0._wp ) 
     154 
     155            ! --- Sensible ocean-to-ice heat flux (W/m2) 
    152156            zfric_u      = MAX( SQRT( ust2s(ji,jj) ), zfric_umin )  
    153157            fhtur(ji,jj) = MAX( 0._wp, rswitch * rau0 * rcp * zch  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ) ! W.m-2 
    154  
    155             !-> MV 
    156             !-> the following line makes hfxtur often crazily negative 
    157             !-> if sst is warmer than freezing, evt is fine  
    158             !-> but if sst is super-cooled, fhtur = 0 and zqfr > 0 
    159             !-> so fhtur becomes - zqfr * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) 
    160             !-> if at_i is small, fhtur can be big 
    161             !-> an we will impose the ice to give energy to the ocean to absorb all super cooling! 
    162             !-> makes very high values for small ice concentrations, and grows ice vertically very rapidly 
    163             !-> eg 5th category in hudson bay 
    164             !-> should check after 10 years, but within a year fhtur is too negative 
    165             !-> that may help to build up towers 
    166             ! could we test to put this energy in zqld 
    167             ! zqfr_pos kept in fhtur 
    168             ! zqfr_neg added to zqld 
    169             ! zqfr_pos = MAX( tmask(ji,jj,1) * rau0 * rcp * fse3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ), 0. ) 
    170             ! zqfr_neg = MIN( tmask(ji,jj,1) * rau0 * rcp * fse3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ), 0. ) 
    171             ! fhtur(ji,jj) = rswitch * MIN( fhtur(ji,jj), - zqfr_pos * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) )  
    172             ! how do we deal with qlead ? 
    173  
     158            !-> target fhtur(ji,jj) = rswitch * rau0 * rcp * zch  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 
    174159 
    175160            fhtur(ji,jj) = rswitch * MIN( fhtur(ji,jj), - zqfr * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 
     161            !-> target fhtur(ji,jj) = rswitch * MIN( fhtur(ji,jj), - zqfr_neg * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 
    176162            ! upper bound for fhtur: the heat retrieved from the ocean must be smaller than the heat necessary to reach  
    177163            !                        the freezing point, so that we do not have SST < T_freeze 
    178164            !                        This implies: - ( fhtur(ji,jj) * at_i(ji,jj) * rtdice ) - zqfr >= 0 
    179165 
    180             !-- Energy Budget of the leads (J.m-2). Must be < 0 to form ice 
     166            !-- Energy Budget of the leads (J.m-2), source of lateral accretion. Must be < 0 to form ice 
    181167            qlead(ji,jj) = MIN( 0._wp , zqld - ( fhtur(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 
    182168 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90

    r6311 r8169  
    8282               IF( at_i(ji,jj) > rn_amax_2d(ji,jj) .AND. a_i(ji,jj,jl) > 0._wp ) THEN 
    8383                  a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 
    84                   oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 
    8584               ENDIF 
    8685            END DO 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90

    r8156 r8169  
    7878            IF( v_i(ji,jj,1) > 0._wp .AND. ht_i(ji,jj,1) < rn_himin ) THEN 
    7979               a_i (ji,jj,1) = a_i (ji,jj,1) * ht_i(ji,jj,1) / rn_himin 
    80                oa_i(ji,jj,1) = oa_i(ji,jj,1) * ht_i(ji,jj,1) / rn_himin 
    8180            ENDIF 
    8281         END DO 
     
    9695               IF( at_i(ji,jj) > rn_amax_2d(ji,jj) .AND. a_i(ji,jj,jl) > 0._wp ) THEN 
    9796                  a_i (ji,jj,jl) = a_i (ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 
    98                   oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 
    9997               ENDIF 
    10098            END DO 
     
    180178      ! necessary calls (at least for coupling) 
    181179      CALL lim_var_glo2eqv 
    182  
    183       ! MV SIMIP 2016 small patch to clean ice age outputs 
    184       WHERE( ( a_i < 5.0e-3 ) .AND. ( ht_i < 1.5 * rn_himin ) ); oa_i(:,:,:) = a_i(:,:,:); END WHERE 
    185180 
    186181      CALL lim_var_agg(2) 
Note: See TracChangeset for help on using the changeset viewer.