Changeset 8933 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC
- Timestamp:
- 2017-12-07T12:14:23+01:00 (6 years ago)
- Location:
- branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r8882 r8933 70 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_oce !: evap - precip over ocean [kg/m2/s] 71 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm_ice !: wind speed module at T-point [m/s] 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sstfrz !: wind speed module at T-point [m/s] 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tsfc_ice !: sea ice surface skin temperature (on categories) 72 74 #endif 73 75 … … 123 125 124 126 #if defined key_lim3 125 ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) , &126 & qla_ice (jpi,jpj,jpl) , dqla_ice (jpi,jpj,jpl) , &127 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice(jpi,jpj,jpl) , &128 & qml_ice (jpi,jpj,jpl) , qcn_ice(jpi,jpj,jpl) , qsr_ice_tr(jpi,jpj,jpl),&129 & utau_ice(jpi,jpj) , vtau_ice (jpi,jpj) , wndm_ice(jpi,jpj) , &130 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice (jpi,jpj), &131 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj), &132 & qns_oce (jpi,jpj) , qsr_oce (jpi,jpj) , emp_oce (jpi,jpj), &133 & emp_ice (jpi,jpj) ,STAT= ierr(2) )127 ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) , & 128 & qla_ice (jpi,jpj,jpl) , dqla_ice (jpi,jpj,jpl) , & 129 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 130 & qml_ice (jpi,jpj,jpl) , qcn_ice (jpi,jpj,jpl) , qsr_ice_tr(jpi,jpj,jpl) , & 131 & utau_ice(jpi,jpj) , vtau_ice (jpi,jpj) , wndm_ice (jpi,jpj) , & 132 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice (jpi,jpj) , & 133 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj) , & 134 & qns_oce (jpi,jpj) , qsr_oce (jpi,jpj) , emp_oce (jpi,jpj) , & 135 & emp_ice (jpi,jpj) , tsfc_ice (jpi,jpj,jpl) , sstfrz (jpi,jpj) , STAT= ierr(2) ) 134 136 #endif 135 137 -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r8882 r8933 41 41 LOGICAL , PUBLIC :: ln_cpl !: ocean-atmosphere coupled formulation 42 42 LOGICAL , PUBLIC :: ln_mixcpl !: ocean-atmosphere forced-coupled mixed formulation 43 LOGICAL , PUBLIC :: ln_meto_cpl !: Met Office coupling formulation, with surface exchange carried out in atmosphere 43 44 LOGICAL , PUBLIC :: ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) 44 45 LOGICAL , PUBLIC :: ln_rnf !: runoffs / runoff mouths -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r8882 r8933 114 114 INTEGER, PARAMETER :: jpr_isf = 52 115 115 INTEGER, PARAMETER :: jpr_icb = 53 116 117 INTEGER, PARAMETER :: jprcv = 53 ! total number of fields received 116 INTEGER, PARAMETER :: jpr_ts_ice = 54 ! Sea ice surface temp 117 118 INTEGER, PARAMETER :: jprcv = 55 ! total number of fields received 118 119 119 120 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 149 150 INTEGER, PARAMETER :: jps_ocyw = 31 ! currents on grid 2 150 151 INTEGER, PARAMETER :: jps_wlev = 32 ! water level 151 INTEGER, PARAMETER :: jpsnd = 32 ! total number of fields sent 152 INTEGER, PARAMETER :: jps_fice1 = 33 ! first-order ice concentration (for semi-implicit coupling of atmos-ice fluxes) 153 INTEGER, PARAMETER :: jps_a_p = 34 ! meltpond area 154 INTEGER, PARAMETER :: jps_ht_p = 35 ! meltpond thickness 155 INTEGER, PARAMETER :: jps_kice = 36 ! sea ice effective conductivity 156 INTEGER, PARAMETER :: jps_sstfrz = 37 ! sea surface freezing temperature 157 INTEGER, PARAMETER :: jps_ttilyr = 38 ! sea ice top layer temp 158 159 INTEGER, PARAMETER :: jpsnd = 38 ! total number of fields sent 160 161 INTEGER :: nn_cats_cpl ! number of sea ice categories over which the coupling is carried out 152 162 153 163 ! !!** namelist namsbc_cpl ** … … 160 170 END TYPE FLD_C 161 171 ! ! Send to the atmosphere 162 TYPE(FLD_C) :: sn_snd_temp, sn_snd_alb, sn_snd_thick, sn_snd_crt, sn_snd_co2 172 TYPE(FLD_C) :: sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2, & 173 & sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr 163 174 ! ! Received from the atmosphere 164 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 175 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, & 176 & sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf, sn_rcv_ts_ice 165 177 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 166 178 ! Send to waves … … 183 195 REAL(wp) :: r1_grau ! = 1.e0 / (grav * rau0) 184 196 185 INTEGER , ALLOCATABLE, SAVE, DIMENSION( 197 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: nrcvinfo ! OASIS info argument 186 198 187 199 !! Substitution … … 236 248 REAL(wp), POINTER, DIMENSION(:,:) :: zacs, zaos 237 249 !! 238 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick , sn_snd_crt , sn_snd_co2,&239 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr,&240 & sn_snd_ifrac , sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc, &241 & sn_rcv_sdrfx , sn_rcv_sdrfy, sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf, &242 & sn_rcv_wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal, &243 & sn_rcv_iceflx, sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp, &244 & sn_rcv_icb , sn_rcv_isf250 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2 , & 251 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 252 & sn_snd_ifrac , sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc, & 253 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf, & 254 & sn_rcv_wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 255 & sn_rcv_iceflx, sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp , & 256 & sn_rcv_icb , sn_rcv_isf , nn_cats_cpl 245 257 246 258 !!--------------------------------------------------------------------- … … 249 261 ! 250 262 CALL wrk_alloc( jpi,jpj, zacs, zaos ) 263 264 IF( ln_meto_cpl ) THEN 265 tsfc_ice(:,:,:) = 0.0 266 a_ip (:,:,:) = 0.0 267 v_ip (:,:,:) = 0.0 268 t1_ice (:,:,:) = rt0 269 cnd_ice (:,:,:) = 0.0 270 sstfrz (:,:) = 0.0 271 ENDIF 251 272 252 273 ! ================================ ! … … 294 315 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 295 316 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 317 WRITE(numout,*)' Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')' 296 318 WRITE(numout,*)' sent fields (multiple ice categories)' 297 319 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' 320 WRITE(numout,*)' top ice layer temperature = ', TRIM(sn_snd_ttilyr%cldes), ' (', TRIM(sn_snd_ttilyr%clcat), ')' 298 321 WRITE(numout,*)' albedo = ', TRIM(sn_snd_alb%cldes ), ' (', TRIM(sn_snd_alb%clcat ), ')' 299 322 WRITE(numout,*)' ice/snow thickness = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' … … 304 327 WRITE(numout,*)' - mesh = ', sn_snd_crt%clvgrd 305 328 WRITE(numout,*)' oce co2 flux = ', TRIM(sn_snd_co2%cldes ), ' (', TRIM(sn_snd_co2%clcat ), ')' 329 WRITE(numout,*)' ice effective conductivity = ', TRIM(sn_snd_cond%cldes ), ' (', TRIM(sn_snd_cond%clcat ), ')' 330 WRITE(numout,*)' meltponds fraction and depth = ', TRIM(sn_snd_mpnd%cldes ), ' (', TRIM(sn_snd_mpnd%clcat ), ')' 331 WRITE(numout,*)' sea surface freezing temp = ', TRIM(sn_snd_sstfrz%cldes), ' (', TRIM(sn_snd_sstfrz%clcat), ')' 306 332 WRITE(numout,*)' water level = ', TRIM(sn_snd_wlev%cldes ), ' (', TRIM(sn_snd_wlev%clcat ), ')' 307 333 WRITE(numout,*)' mean sea level pressure = ', TRIM(sn_rcv_mslp%cldes ), ' (', TRIM(sn_rcv_mslp%clcat ), ')' … … 312 338 WRITE(numout,*)' nn_cplmodel = ', nn_cplmodel 313 339 WRITE(numout,*)' ln_usecplmask = ', ln_usecplmask 340 WRITE(numout,*)' nn_cats_cpl = ', nn_cats_cpl 314 341 ENDIF 315 342 … … 501 528 ! 502 529 ! non solar sensitivity mandatory for LIM ice model 503 IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 3 .AND. nn_components /= jp_iam_sas ) & 504 CALL ctl_stop( 'sbc_cpl_init: sn_rcv_dqnsdt%cldes must be coupled in namsbc_cpl namelist' ) 530 IF (.NOT. ln_meto_cpl) THEN 531 IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 3 .AND. nn_components /= jp_iam_sas ) & 532 & CALL ctl_stop( 'sbc_cpl_init: sn_rcv_dqnsdt%cldes must be coupled in namsbc_cpl namelist' ) 533 ENDIF 534 505 535 ! non solar sensitivity mandatory for mixed oce-ice solar radiation coupling technique 506 536 IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. TRIM( sn_rcv_qns%cldes ) == 'mixed oce-ice' ) & … … 547 577 srcv(jpr_topm:jpr_botm)%laction = .TRUE. 548 578 ENDIF 579 ! ! ----------------------------- ! 580 581 !!!!! To get NEMO4-LIM working at Met Office 582 srcv(jpr_ts_ice)%clname = 'OTsfIce' 583 IF ( TRIM( sn_rcv_ts_ice%cldes ) == 'ice' ) srcv(jpr_ts_ice)%laction = .TRUE. 584 IF ( TRIM( sn_rcv_ts_ice%clcat ) == 'yes' ) srcv(jpr_ts_ice)%nct = nn_cats_cpl 585 IF ( TRIM( sn_rcv_emp%clcat ) == 'yes' ) srcv(jpr_ievp)%nct = nn_cats_cpl 586 !!!!! 587 549 588 ! ! ------------------------- ! 550 589 ! ! Wave breaking ! … … 707 746 ! ! Surface temperature ! 708 747 ! ! ------------------------- ! 709 ssnd(jps_toce)%clname = 'O_SSTSST' 710 ssnd(jps_tice)%clname = 'O_TepIce' 711 ssnd(jps_tmix)%clname = 'O_TepMix' 748 ssnd(jps_toce)%clname = 'O_SSTSST' 749 ssnd(jps_tice)%clname = 'O_TepIce' 750 ssnd(jps_ttilyr)%clname = 'O_TtiLyr' 751 ssnd(jps_tmix)%clname = 'O_TepMix' 712 752 SELECT CASE( TRIM( sn_snd_temp%cldes ) ) 713 753 CASE( 'none' ) ! nothing to do 714 754 CASE( 'oce only' ) ; ssnd( jps_toce )%laction = .TRUE. 715 CASE( 'oce and ice' , 'weighted oce and ice' )755 CASE( 'oce and ice' , 'weighted oce and ice' , 'oce and weighted ice' ) 716 756 ssnd( (/jps_toce, jps_tice/) )%laction = .TRUE. 717 757 IF ( TRIM( sn_snd_temp%clcat ) == 'yes' ) ssnd(jps_tice)%nct = jpl … … 744 784 ! ! Ice fraction & Thickness ! 745 785 ! ! ------------------------- ! 746 ssnd(jps_fice)%clname = 'OIceFrc'786 ssnd(jps_fice)%clname = 'OIceFrc' 747 787 ssnd(jps_ficet)%clname = 'OIceFrcT' 748 ssnd(jps_hice)%clname = 'OIceTck' 749 ssnd(jps_hsnw)%clname = 'OSnwTck' 788 ssnd(jps_hice)%clname = 'OIceTck' 789 ssnd(jps_a_p)%clname = 'OPndFrc' 790 ssnd(jps_ht_p)%clname = 'OPndTck' 791 ssnd(jps_hsnw)%clname = 'OSnwTck' 792 ssnd(jps_fice1)%clname = 'OIceFrd' 750 793 IF( k_ice /= 0 ) THEN 751 794 ssnd(jps_fice)%laction = .TRUE. ! if ice treated in the ocean (even in climato case) 795 ssnd(jps_fice1)%laction = .TRUE. ! First-order regridded ice concentration, to be used 796 ! producing atmos-to-ice fluxes 752 797 ! Currently no namelist entry to determine sending of multi-category ice fraction so use the thickness entry for now 753 IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_fice)%nct = jpl 798 IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_fice)%nct = jpl 799 IF ( TRIM( sn_snd_thick1%clcat ) == 'yes' ) ssnd(jps_fice1)%nct = jpl 754 800 ENDIF 755 801 … … 769 815 END SELECT 770 816 817 ! ! ------------------------- ! 818 ! ! Ice Meltponds ! 819 ! ! ------------------------- ! 820 821 822 !!!!! Getting NEMO4-LIM to work at Met Office 823 ssnd(jps_a_p)%clname = 'OPndFrc' 824 ssnd(jps_ht_p)%clname = 'OPndTck' 825 SELECT CASE ( TRIM( sn_snd_mpnd%cldes ) ) 826 CASE ( 'none' ) 827 ssnd(jps_a_p)%laction = .FALSE. 828 ssnd(jps_ht_p)%laction = .FALSE. 829 CASE ( 'ice only' ) 830 ssnd(jps_a_p)%laction = .TRUE. 831 ssnd(jps_ht_p)%laction = .TRUE. 832 IF ( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN 833 ssnd(jps_a_p)%nct = nn_cats_cpl 834 ssnd(jps_ht_p)%nct = nn_cats_cpl 835 ELSE 836 IF ( jpl > 1 ) THEN 837 CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_mpnd%cldes if not exchanging category fields' ) 838 ENDIF 839 ENDIF 840 CASE ( 'weighted ice' ) 841 ssnd(jps_a_p)%laction = .TRUE. 842 ssnd(jps_ht_p)%laction = .TRUE. 843 IF ( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN 844 ssnd(jps_a_p)%nct = nn_cats_cpl 845 ssnd(jps_ht_p)%nct = nn_cats_cpl 846 ENDIF 847 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_mpnd%cldes; '//sn_snd_mpnd%cldes ) 848 END SELECT 849 !!!!! 850 771 851 ! ! ------------------------- ! 772 852 ! ! Surface current ! … … 818 898 ! ! ------------------------- ! 819 899 ssnd(jps_co2)%clname = 'O_CO2FLX' ; IF( TRIM(sn_snd_co2%cldes) == 'coupled' ) ssnd(jps_co2 )%laction = .TRUE. 820 900 ! 901 902 !!!!! Getting NEMO4-LIM to work at the Met Office 903 ! ! ------------------------- ! 904 ! ! Sea surface freezing temp ! 905 ! ! ------------------------- ! 906 ssnd(jps_sstfrz)%clname = 'O_SSTFrz' ; IF( TRIM(sn_snd_sstfrz%cldes) == 'coupled' ) ssnd(jps_sstfrz)%laction = .TRUE. 907 !!!!! 908 909 ! 910 ! ! ------------------------- ! 911 ! ! Ice conductivity ! 912 ! ! ------------------------- ! 913 ! Note that ultimately we will move to passing an ocean effective conductivity as well so there 914 ! will be some changes to the parts of the code which currently relate only to ice conductivity 915 916 ssnd(jps_ttilyr )%clname = 'O_TtiLyr' 917 SELECT CASE ( TRIM( sn_snd_ttilyr%cldes ) ) 918 CASE ( 'none' ) 919 ssnd(jps_ttilyr)%laction = .FALSE. 920 CASE ( 'ice only' ) 921 ssnd(jps_ttilyr)%laction = .TRUE. 922 IF ( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) THEN 923 ssnd(jps_ttilyr)%nct = nn_cats_cpl 924 ELSE 925 IF ( nn_cats_cpl > 1 ) THEN 926 CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_ttilyr%cldes if not exchanging category fields' ) 927 ENDIF 928 ENDIF 929 CASE ( 'weighted ice' ) 930 ssnd(jps_ttilyr)%laction = .TRUE. 931 IF ( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) ssnd(jps_ttilyr)%nct = nn_cats_cpl 932 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_ttilyr%cldes;'//sn_snd_ttilyr%cldes ) 933 END SELECT 934 935 ssnd(jps_kice )%clname = 'OIceKn' 936 SELECT CASE ( TRIM( sn_snd_cond%cldes ) ) 937 CASE ( 'none' ) 938 ssnd(jps_kice)%laction = .FALSE. 939 CASE ( 'ice only' ) 940 ssnd(jps_kice)%laction = .TRUE. 941 IF ( TRIM( sn_snd_cond%clcat ) == 'yes' ) THEN 942 ssnd(jps_kice)%nct = nn_cats_cpl 943 ELSE 944 IF ( nn_cats_cpl > 1 ) THEN 945 CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_cond%cldes if not exchanging category fields' ) 946 ENDIF 947 ENDIF 948 CASE ( 'weighted ice' ) 949 ssnd(jps_kice)%laction = .TRUE. 950 IF ( TRIM( sn_snd_cond%clcat ) == 'yes' ) ssnd(jps_kice)%nct = nn_cats_cpl 951 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_cond%cldes;'//sn_snd_cond%cldes ) 952 END SELECT 953 ! 954 821 955 ! ! ------------------------- ! 822 956 ! ! Sea surface height ! … … 1126 1260 IF( srcv(jpr_co2)%laction ) atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 1127 1261 ! 1262 1263 !!!!! Getting NEMO4-LIM to work at the Met Office 1264 ! ! Sea ice surface skin temp: 1265 IF( srcv(jpr_ts_ice)%laction ) THEN 1266 DO jn = 1, jpl 1267 DO jj = 1, jpj 1268 DO ji = 1, jpi 1269 IF (frcv(jpr_ts_ice)%z3(ji,jj,jn) > 0.0) THEN 1270 tsfc_ice(ji,jj,jn) = 0.0 1271 ELSE IF (frcv(jpr_ts_ice)%z3(ji,jj,jn) < -60.0) THEN 1272 tsfc_ice(ji,jj,jn) = -60.0 1273 ELSE 1274 tsfc_ice(ji,jj,jn) = frcv(jpr_ts_ice)%z3(ji,jj,jn) 1275 ENDIF 1276 END DO 1277 END DO 1278 END DO 1279 ENDIF 1280 !!!!! 1281 1282 1128 1283 ! ! ========================= ! 1129 1284 ! ! Mean Sea Level Pressure ! (taum) … … 1584 1739 REAL(wp) :: ztri ! local scalar 1585 1740 REAL(wp), DIMENSION(jpi,jpj) :: zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw 1586 REAL(wp), DIMENSION(jpi,jpj) :: zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip , zevap_oce, z evap_ice, zdevap_ice1741 REAL(wp), DIMENSION(jpi,jpj) :: zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip , zevap_oce, zdevap_ice 1587 1742 REAL(wp), DIMENSION(jpi,jpj) :: zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice 1588 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice !!gm , zfrqsr_tr_i1743 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zevap_ice !!gm , zfrqsr_tr_i 1589 1744 !!---------------------------------------------------------------------- 1590 1745 ! … … 1628 1783 1629 1784 ! --- evaporation over ice (kg/m2/s) --- ! 1630 zevap_ice(:,:) = frcv(jpr_ievp)%z3(:,:,1) 1785 DO jl=1,jpl 1786 IF (sn_rcv_emp%clcat == 'yes') THEN ; zevap_ice(:,:,jl) = frcv(jpr_ievp)%z3(:,:,jl) 1787 ELSE ; zevap_ice(:,:,jl) = frcv(jpr_ievp)%z3(:,:,1 ) ; ENDIF 1788 ENDDO 1789 1631 1790 ! since the sensitivity of evap to temperature (devap/dT) is not prescribed by the atmosphere, we set it to 0 1632 1791 ! therefore, sublimation is not redistributed over the ice categories when no subgrid scale fluxes are provided by atm. … … 1656 1815 tprecip(:,:) = tprecip(:,:) * xcplmask(:,:,0) + ztprecip(:,:) * zmsk(:,:) 1657 1816 DO jl = 1, jpl 1658 evap_ice (:,:,jl) = evap_ice (:,:,jl) * xcplmask(:,:,0) + zevap_ice (:,: ) * zmsk(:,:)1659 devap_ice(:,:,jl) = devap_ice(:,:,jl) * xcplmask(:,:,0) + zdevap_ice(:,:) * zmsk(:,:)1817 evap_ice (:,:,jl) = evap_ice (:,:,jl) * xcplmask(:,:,0) + zevap_ice (:,:,jl) * zmsk(:,:) 1818 devap_ice(:,:,jl) = devap_ice(:,:,jl) * xcplmask(:,:,0) + zdevap_ice(:,:) * zmsk(:,:) 1660 1819 END DO 1661 1820 ELSE 1662 emp_tot(:,:) = zemp_tot(:,:) 1663 emp_ice(:,:) = zemp_ice(:,:) 1664 emp_oce(:,:) = zemp_oce(:,:) 1665 sprecip(:,:) = zsprecip(:,:) 1666 tprecip(:,:) = ztprecip(:,:) 1821 emp_tot (:,:) = zemp_tot (:,:) 1822 emp_ice (:,:) = zemp_ice (:,:) 1823 emp_oce (:,:) = zemp_oce (:,:) 1824 sprecip (:,:) = zsprecip (:,:) 1825 tprecip (:,:) = ztprecip (:,:) 1826 evap_ice(:,:,:) = zevap_ice(:,:,:) 1667 1827 DO jl = 1, jpl 1668 evap_ice (:,:,jl) = zevap_ice (:,:)1669 1828 devap_ice(:,:,jl) = zdevap_ice(:,:) 1670 1829 END DO … … 1934 2093 dqns_ice(:,:,:) = zdqns_ice(:,:,:) 1935 2094 ENDIF 1936 1937 ! ! ========================= ! 1938 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) ! topmelt and botmelt ! 1939 ! ! ========================= ! 1940 CASE ('coupled') 1941 topmelt(:,:,:)=frcv(jpr_topm)%z3(:,:,:) 1942 botmelt(:,:,:)=frcv(jpr_botm)%z3(:,:,:) 1943 END SELECT 2095 2096 IF( ln_meto_cpl ) THEN 2097 ! ! ========================= ! 2098 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) ! topmelt and botmelt ! 2099 ! ! ========================= ! 2100 CASE ('coupled') 2101 qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) * a_i(:,:,:) 2102 qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) * a_i(:,:,:) 2103 END SELECT 2104 ENDIF 2105 1944 2106 1945 2107 #if defined key_lim3 … … 1950 2112 CASE( np_jules_OFF ) !== No Jules coupler ==! 1951 2113 ! 1952 !!gm ! former coding was1953 !!gm ! Coupled case: since cloud cover is not received from atmosphere1954 !!gm ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81)1955 !!gm ! fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice )1956 !!gm ! fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice )1957 !!gm1958 !!gm ! to retrieve that coding, we needed to access h_i & h_s from here1959 !!gm ! we could even retrieve cloud fraction from the coupler1960 !!gm !1961 !!gm zfrqsr_tr_i(:,:,:) = 0._wp ! surface transmission parameter1962 !!gm !1963 !!gm DO jl = 1, jpl1964 !!gm DO jj = 1 , jpj1965 !!gm DO ji = 1, jpi1966 !!gm ! !--- surface transmission parameter (Grenfell Maykut 77) --- !1967 !!gm zfrqsr_tr_i(ji,jj,jl) = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice1968 !!gm !1969 !!gm ! ! --- influence of snow and thin ice --- !1970 !!gm IF ( phs(ji,jj,jl) >= 0.0_wp ) zfrqsr_tr_i(ji,jj,jl) = 0._wp ! snow fully opaque1971 !!gm IF ( phi(ji,jj,jl) <= 0.1_wp ) zfrqsr_tr_i(ji,jj,jl) = 1._wp ! thin ice transmits all solar radiation1972 !!gm END DO1973 !!gm END DO1974 !!gm END DO1975 !!gm !1976 !!gm qsr_ice_tr(:,:,:) = zfrqsr_tr_i(:,:,:) * qsr_ice(:,:,:) ! transmitted solar radiation1977 !!gm !1978 !!gm better coding of the above calculation:1979 !1980 2114 ! ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 1981 2115 ztri = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ! surface transmission parameter (Grenfell Maykut 77) … … 1984 2118 WHERE( phs(:,:,:) >= 0.0_wp ) qsr_ice_tr(:,:,:) = 0._wp ! snow fully opaque 1985 2119 WHERE( phi(:,:,:) <= 0.1_wp ) qsr_ice_tr(:,:,:) = qsr_ice(:,:,:) ! thin ice transmits all solar radiation 1986 !!gm end1987 2120 ! 1988 2121 CASE( np_jules_ACTIVE ) !== Jules coupler is active ==! … … 2064 2197 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 2065 2198 END SELECT 2199 CASE( 'oce and weighted ice') ; ztmp1(:,:) = tsn(:,:,1,jp_tem) + rt0 2200 SELECT CASE( sn_snd_temp%clcat ) 2201 CASE( 'yes' ) 2202 ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 2203 CASE( 'no' ) 2204 ztmp3(:,:,:) = 0.0 2205 DO jl=1,jpl 2206 ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) 2207 ENDDO 2208 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 2209 END SELECT 2066 2210 CASE( 'mixed oce-ice' ) 2067 2211 ztmp1(:,:) = ( ztmp1(:,:) + rt0 ) * zfr_l(:,:) … … 2076 2220 IF( ssnd(jps_tmix)%laction ) CALL cpl_snd( jps_tmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 2077 2221 ENDIF 2222 2223 !!!!! Getting NEMO4-LIM working at Met Office 2224 ! Top layer ice temperature 2225 IF( ssnd(jps_ttilyr)%laction) THEN 2226 SELECT CASE( sn_snd_ttilyr%cldes) 2227 CASE ('weighted ice') 2228 ztmp3(:,:,1:jpl) = t1_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 2229 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_ttilyr%cldes' ) 2230 END SELECT 2231 IF( ssnd(jps_ttilyr)%laction ) CALL cpl_snd( jps_ttilyr, isec, ztmp3, info ) 2232 ENDIF 2233 !!!!! 2234 2235 2078 2236 ! ! ------------------------- ! 2079 2237 ! ! Albedo ! … … 2134 2292 END SELECT 2135 2293 IF( ssnd(jps_fice)%laction ) CALL cpl_snd( jps_fice, isec, ztmp3, info ) 2294 ENDIF 2295 2296 IF( ssnd(jps_fice1)%laction ) THEN 2297 SELECT CASE( sn_snd_thick1%clcat ) 2298 CASE( 'yes' ) ; ztmp3(:,:,1:jpl) = a_i(:,:,1:jpl) 2299 CASE( 'no' ) ; ztmp3(:,:,1 ) = fr_i(:,: ) 2300 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick1%clcat' ) 2301 END SELECT 2302 CALL cpl_snd( jps_fice1, isec, ztmp3, info ) 2136 2303 ENDIF 2137 2304 … … 2179 2346 IF( ssnd(jps_hsnw)%laction ) CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 2180 2347 ENDIF 2348 2349 ! NEMO4 - Jules coupling - Met Office 2350 ! Send meltpond fields 2351 IF( ssnd(jps_a_p)%laction .OR. ssnd(jps_ht_p)%laction ) THEN 2352 SELECT CASE( sn_snd_mpnd%cldes) 2353 CASE( 'ice only' ) 2354 SELECT CASE( sn_snd_mpnd%clcat ) 2355 CASE( 'yes' ) 2356 ztmp3(:,:,1:jpl) = a_ip(:,:,1:jpl) 2357 ztmp4(:,:,1:jpl) = v_ip(:,:,1:jpl) 2358 CASE( 'no' ) 2359 ztmp3(:,:,:) = 0.0 2360 ztmp4(:,:,:) = 0.0 2361 DO jl=1,jpl 2362 ztmp3(:,:,1) = ztmp3(:,:,1) + a_ip(:,:,jpl) 2363 ztmp4(:,:,1) = ztmp4(:,:,1) + v_ip(:,:,jpl) 2364 ENDDO 2365 CASE default ; CALL ctl_stop( 'sbc_cpl_mpd: wrong definition of sn_snd_mpnd%clcat' ) 2366 END SELECT 2367 CASE( 'default' ) ; CALL ctl_stop( 'sbc_cpl_mpd: wrong definition of sn_snd_mpnd%cldes' ) 2368 END SELECT 2369 IF( ssnd(jps_a_p)%laction ) CALL cpl_snd( jps_a_p, isec, ztmp3, info ) 2370 IF( ssnd(jps_ht_p)%laction ) CALL cpl_snd( jps_ht_p, isec, ztmp4, info ) 2371 ! 2372 ! Send ice effective conductivity 2373 SELECT CASE( sn_snd_cond%cldes) 2374 CASE( 'weighted ice' ) 2375 SELECT CASE( sn_snd_cond%clcat ) 2376 CASE( 'yes' ) 2377 ztmp3(:,:,1:jpl) = cnd_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 2378 CASE( 'no' ) 2379 ztmp3(:,:,:) = 0.0 2380 DO jl=1,jpl 2381 ztmp3(:,:,1) = ztmp3(:,:,1) + cnd_ice(:,:,jl) * a_i(:,:,jl) 2382 ENDDO 2383 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_cond%clcat' ) 2384 END SELECT 2385 CASE( 'ice only' ) 2386 ztmp3(:,:,1:jpl) = cnd_ice(:,:,1:jpl) 2387 END SELECT 2388 IF( ssnd(jps_kice)%laction ) CALL cpl_snd( jps_kice, isec, ztmp3, info ) 2389 ENDIF 2390 ! 2391 !!!!! 2392 2393 2181 2394 ! ! ------------------------- ! 2182 2395 ! ! CO2 flux from PISCES ! … … 2500 2713 IF( ssnd(jps_taum )%laction ) CALL cpl_snd( jps_taum , isec, RESHAPE ( taum, (/jpi,jpj,1/) ), info ) 2501 2714 2715 ! NEMO4 - Jules coupling - Met Office 2716 CALL eos_fzp(tsn(:,:,1,jp_sal), sstfrz) 2717 ztmp1(:,:) = sstfrz(:,:) + rt0 2718 IF( ssnd(jps_sstfrz)%laction ) CALL cpl_snd( jps_sstfrz, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info) 2719 2502 2720 CALL wrk_dealloc( jpi,jpj, zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 2503 2721 CALL wrk_dealloc( jpi,jpj,jpl, ztmp3, ztmp4 ) -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r8885 r8933 92 92 NAMELIST/namsbc/ nn_fsbc , & 93 93 & ln_usr , ln_flx , ln_blk , & 94 & ln_cpl , ln_mixcpl, nn_components,&94 & ln_cpl , ln_mixcpl, ln_meto_cpl , nn_components, & 95 95 & nn_ice , ln_ice_embd, & 96 96 & ln_traqsr, ln_dm2dc , & … … 138 138 WRITE(numout,*) ' mixed forced-coupled formulation ln_mixcpl = ', ln_mixcpl 139 139 !!gm lk_oasis is controlled by key_oasis3 ===>>> It shoud be removed from the namelist 140 WRITE(numout,*) ' Met Office coupling specifics ln_meto_cpl = ', ln_meto_cpl 140 141 WRITE(numout,*) ' OASIS coupling (with atm or sas) lk_oasis = ', lk_oasis 141 142 WRITE(numout,*) ' components of your executable nn_components = ', nn_components
Note: See TracChangeset
for help on using the changeset viewer.