- Timestamp:
- 2017-12-06T15:33:57+01:00 (7 years ago)
- Location:
- branches/2017/dev_CNRS_2017/NEMOGCM/NEMO
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceforcing.F90
r8906 r8920 72 72 SELECT CASE( ksbc ) 73 73 CASE( jp_usr ) ; CALL usrdef_sbc_ice_tau( kt ) ! user defined formulation 74 CASE( jp_blk ) ; CALL blk_ice_tau ! Bulk formulation75 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation74 CASE( jp_blk ) ; CALL blk_ice_tau ! Bulk formulation 75 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation 76 76 END SELECT 77 77 … … 134 134 !!gm cldf_ice is a real, DOCTOR naming rule: start with cd means CHARACTER passed in argument ! 135 135 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 136 137 SELECT CASE( ksbc ) !== fluxes over sea ice ==! 138 ! 139 CASE( jp_usr ) !--- user defined formulation 136 ! 137 ! 138 SELECT CASE( ksbc ) !== fluxes over sea ice ==! 139 ! 140 CASE( jp_usr ) !--- user defined formulation 140 141 CALL usrdef_sbc_ice_flx( kt ) 141 ! 142 CASE( jp_blk ) !--- bulk formulation 143 CALL blk_ice_flx( t_su, h_s, h_i, alb_ice ) ! 142 CASE( jp_blk ) !--- bulk formulation 143 CALL blk_ice_flx ( t_su, h_s, h_i, alb_ice ) ! 144 144 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 145 IF( nn_flxdist /= -1 ) CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 146 ! 147 CASE ( jp_purecpl ) !--- coupled formulation 145 IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 146 SELECT CASE( nice_jules ) 147 CASE( np_jules_ACTIVE ) ! compute conduction flux and surface temperature (as in Jules surface module) 148 CALL blk_ice_qcn ( nn_monocat, t_su, t_bo, h_s, h_i ) 149 END SELECT 150 CASE ( jp_purecpl ) !--- coupled formulation 148 151 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 149 IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist )150 !151 END SELECT 152 153 IF( iom_use('icealb') ) THEN !--- output ice albedo152 IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 153 END SELECT 154 155 !--- output ice albedo and surface albedo ---! 156 IF( iom_use('icealb') ) THEN 154 157 WHERE( at_i_b <= epsi06 ) ; zalb(:,:) = rn_alb_oce 155 158 ELSEWHERE ; zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b … … 157 160 CALL iom_put( "icealb" , zalb(:,:) ) 158 161 ENDIF 159 160 IF( iom_use('albedo') ) THEN !--- output surface albedo 162 IF( iom_use('albedo') ) THEN 161 163 zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) + rn_alb_oce * ( 1._wp - at_i_b ) 162 164 CALL iom_put( "albedo" , zalb(:,:) ) -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk.F90
r8885 r8920 68 68 PUBLIC sbc_blk ! called in sbcmod 69 69 #if defined key_lim3 70 PUBLIC blk_ice_tau ! routine called in ice stp module71 PUBLIC blk_ice_flx ! routine called in ice stp module72 PUBLIC blk_ice_qcn ! routine called in ice stp module70 PUBLIC blk_ice_tau ! routine called in iceforcing 71 PUBLIC blk_ice_flx ! routine called in iceforcing 72 PUBLIC blk_ice_qcn ! routine called in iceforcing 73 73 #endif 74 74 … … 1041 1041 CASE ( 1 , 3 ) 1042 1042 ! 1043 zfac =1._wp / ( rn_cnd_s + rcdic )1044 zfac2 =EXP(1._wp) * 0.5_wp * zepsilon1045 zfac3 =2._wp / zepsilon1043 zfac = 1._wp / ( rn_cnd_s + rcdic ) 1044 zfac2 = EXP(1._wp) * 0.5_wp * zepsilon 1045 zfac3 = 2._wp / zepsilon 1046 1046 ! 1047 1047 DO jl = 1, jpl 1048 1048 DO jj = 1 , jpj 1049 1049 DO ji = 1, jpi 1050 ! ! Effective thickness 1051 zhe = ( rn_cnd_s * phi(ji,jj,jl) + rcdic * phs(ji,jj,jl) ) * zfac 1052 ! ! Enhanced conduction factor 1053 IF( zhe >= zfac2 ) & 1054 zgfac(ji,jj,jl) = MIN( 2._wp, ( 0.5_wp + 0.5 * LOG( zhe * zfac3 ) ) ) 1050 zhe = ( rn_cnd_s * phi(ji,jj,jl) + rcdic * phs(ji,jj,jl) ) * zfac ! Effective thickness 1051 IF( zhe >= zfac2 ) zgfac(ji,jj,jl) = MIN( 2._wp, 0.5_wp * ( 1._wp + LOG( zhe * zfac3 ) ) ) ! Enhanced conduction factor 1055 1052 END DO 1056 1053 END DO … … 1063 1060 ! -------------------------------------------------------------! 1064 1061 ! 1065 zfac = rcdic * rn_cnd_s 1066 ! ! ========================== ! 1067 DO jl = 1, jpl ! Loop over ice categories ! 1068 ! ! ========================== ! 1062 zfac = rcdic * rn_cnd_s 1063 ! 1064 DO jl = 1, jpl 1069 1065 DO jj = 1 , jpj 1070 1066 DO ji = 1, jpi 1071 ! ! Effective conductivity of the snow-ice system divided by thickness 1072 zkeff_h = zfac * zgfac(ji,jj,jl) / ( rcdic * phs(ji,jj,jl) + rn_cnd_s * phi(ji,jj,jl) ) 1073 ! ! Store initial surface temperature 1074 ztsu = ptsu(ji,jj,jl) 1075 ! ! Net initial atmospheric heat flux 1076 zqa0 = qsr_ice(ji,jj,jl) - qsr_ice_tr(ji,jj,jl) + qns_ice(ji,jj,jl) 1067 ! 1068 zkeff_h = zfac * zgfac(ji,jj,jl) / & ! Effective conductivity of the snow-ice system divided by thickness 1069 & ( rcdic * phs(ji,jj,jl) + rn_cnd_s * MAX( 0.01, phi(ji,jj,jl) ) ) 1070 ztsu = ptsu(ji,jj,jl) ! Store initial surface temperature 1071 zqa0 = qsr_ice(ji,jj,jl) - qsr_ice_tr(ji,jj,jl) + qns_ice(ji,jj,jl) ! Net initial atmospheric heat flux 1077 1072 ! 1078 DO iter = 1, nit ! --- Iteration loop 1079 ! ! Conduction heat flux through snow-ice system (>0 downwards) 1080 zqc = zkeff_h * ( ztsu - ptb(ji,jj) ) 1081 ! ! Surface energy budget 1082 zqnet = zqa0 + dqns_ice(ji,jj,jl) * ( ztsu - ptsu(ji,jj,jl) ) - zqc 1083 ! ! Temperature update 1084 ztsu = ztsu - zqnet / ( dqns_ice(ji,jj,jl) - zkeff_h ) 1073 DO iter = 1, nit ! --- Iterative loop 1074 zqc = zkeff_h * ( ztsu - ptb(ji,jj) ) ! Conduction heat flux through snow-ice system (>0 downwards) 1075 zqnet = zqa0 + dqns_ice(ji,jj,jl) * ( ztsu - ptsu(ji,jj,jl) ) - zqc ! Surface energy budget 1076 ztsu = ztsu - zqnet / ( dqns_ice(ji,jj,jl) - zkeff_h ) ! Temperature update 1085 1077 END DO 1086 1078 !
Note: See TracChangeset
for help on using the changeset viewer.