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 8933 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2017-12-07T12:14:23+01:00 (6 years ago)
Author:
clem
Message:

dev_CNRS_2017: raw commit of the Met-Office specifics for coupling with their Earth system model. It is not yet tested and debuging is expected

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  
    7070   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   emp_oce        !: evap - precip over ocean                 [kg/m2/s] 
    7171   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) 
    7274#endif 
    7375 
     
    123125 
    124126#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) ) 
    134136#endif 
    135137 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r8882 r8933  
    4141   LOGICAL , PUBLIC ::   ln_cpl         !: ocean-atmosphere coupled formulation 
    4242   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 
    4344   LOGICAL , PUBLIC ::   ln_dm2dc       !: Daily mean to Diurnal Cycle short wave (qsr) 
    4445   LOGICAL , PUBLIC ::   ln_rnf         !: runoffs / runoff mouths 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r8882 r8933  
    114114   INTEGER, PARAMETER ::   jpr_isf    = 52 
    115115   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   
    118119 
    119120   INTEGER, PARAMETER ::   jps_fice   =  1   ! ice fraction sent to the atmosphere 
     
    149150   INTEGER, PARAMETER ::   jps_ocyw   = 31   ! currents on grid 2 
    150151   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 
    152162 
    153163   !                                  !!** namelist namsbc_cpl ** 
     
    160170   END TYPE FLD_C 
    161171   !                                   ! 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          
    163174   !                                   ! 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 
    165177   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf                               
    166178   ! Send to waves  
     
    183195   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
    184196 
    185    INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo           ! OASIS info argument 
     197   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
    186198 
    187199   !! Substitution 
     
    236248      REAL(wp), POINTER, DIMENSION(:,:) ::   zacs, zaos 
    237249      !! 
    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_isf 
     250      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   
    245257 
    246258      !!--------------------------------------------------------------------- 
     
    249261      ! 
    250262      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 
    251272 
    252273      ! ================================ ! 
     
    294315         WRITE(numout,*)'      Stress frac adsorbed by waves   = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')'  
    295316         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), ')'  
    296318         WRITE(numout,*)'  sent fields (multiple ice categories)' 
    297319         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), ')' 
    298321         WRITE(numout,*)'      albedo                          = ', TRIM(sn_snd_alb%cldes   ), ' (', TRIM(sn_snd_alb%clcat   ), ')' 
    299322         WRITE(numout,*)'      ice/snow thickness              = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' 
     
    304327         WRITE(numout,*)'                      - mesh          = ', sn_snd_crt%clvgrd 
    305328         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), ')' 
    306332         WRITE(numout,*)'      water level                     = ', TRIM(sn_snd_wlev%cldes  ), ' (', TRIM(sn_snd_wlev%clcat  ), ')'  
    307333         WRITE(numout,*)'      mean sea level pressure         = ', TRIM(sn_rcv_mslp%cldes  ), ' (', TRIM(sn_rcv_mslp%clcat  ), ')'  
     
    312338         WRITE(numout,*)'  nn_cplmodel                         = ', nn_cplmodel 
    313339         WRITE(numout,*)'  ln_usecplmask                       = ', ln_usecplmask 
     340         WRITE(numout,*)'  nn_cats_cpl                         = ', nn_cats_cpl 
    314341      ENDIF 
    315342 
     
    501528      ! 
    502529      ! 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 
    505535      ! non solar sensitivity mandatory for mixed oce-ice solar radiation coupling technique 
    506536      IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. TRIM( sn_rcv_qns%cldes ) == 'mixed oce-ice' ) & 
     
    547577         srcv(jpr_topm:jpr_botm)%laction = .TRUE. 
    548578      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 
    549588      !                                                      ! ------------------------- ! 
    550589      !                                                      !      Wave breaking        !     
     
    707746      !                                                      !    Surface temperature    ! 
    708747      !                                                      ! ------------------------- ! 
    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' 
    712752      SELECT CASE( TRIM( sn_snd_temp%cldes ) ) 
    713753      CASE( 'none'                                 )       ! nothing to do 
    714754      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' ) 
    716756         ssnd( (/jps_toce, jps_tice/) )%laction = .TRUE. 
    717757         IF ( TRIM( sn_snd_temp%clcat ) == 'yes' )  ssnd(jps_tice)%nct = jpl 
     
    744784      !                                                      !  Ice fraction & Thickness !  
    745785      !                                                      ! ------------------------- ! 
    746       ssnd(jps_fice)%clname = 'OIceFrc' 
     786      ssnd(jps_fice)%clname  = 'OIceFrc' 
    747787      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' 
    750793      IF( k_ice /= 0 ) THEN 
    751794         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 
    752797! 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 
    754800      ENDIF 
    755801       
     
    769815      END SELECT 
    770816 
     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  
    771851      !                                                      ! ------------------------- ! 
    772852      !                                                      !      Surface current      ! 
     
    818898      !                                                      ! ------------------------- ! 
    819899      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        
    821955      !                                                      ! ------------------------- !  
    822956      !                                                      !     Sea surface height    !  
     
    11261260      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    11271261      !  
     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 
    11281283      !                                                      ! ========================= !  
    11291284      !                                                      ! Mean Sea Level Pressure   !   (taum)  
     
    15841739      REAL(wp) ::   ztri         ! local scalar 
    15851740      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, zevap_ice, zdevap_ice 
     1741      REAL(wp), DIMENSION(jpi,jpj)     ::   zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip  , zevap_oce, zdevap_ice 
    15871742      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_i 
     1743      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zevap_ice    !!gm , zfrqsr_tr_i 
    15891744      !!---------------------------------------------------------------------- 
    15901745      ! 
     
    16281783 
    16291784      ! --- 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 
    16311790      ! since the sensitivity of evap to temperature (devap/dT) is not prescribed by the atmosphere, we set it to 0 
    16321791      ! therefore, sublimation is not redistributed over the ice categories when no subgrid scale fluxes are provided by atm. 
     
    16561815         tprecip(:,:) = tprecip(:,:) * xcplmask(:,:,0) + ztprecip(:,:) * zmsk(:,:) 
    16571816         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(:,:) 
    16601819         END DO 
    16611820      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(:,:,:) 
    16671827         DO jl = 1, jpl 
    1668             evap_ice (:,:,jl) = zevap_ice (:,:) 
    16691828            devap_ice(:,:,jl) = zdevap_ice(:,:) 
    16701829         END DO 
     
    19342093         dqns_ice(:,:,:) = zdqns_ice(:,:,:) 
    19352094      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 
    19442106 
    19452107#if defined key_lim3 
     
    19502112      CASE( np_jules_OFF    )       !==  No Jules coupler  ==! 
    19512113         ! 
    1952 !!gm         ! former coding was     
    1953 !!gm         ! Coupled case: since cloud cover is not received from atmosphere  
    1954 !!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 !!gm          
    1958 !!gm         ! to retrieve that coding, we needed to access h_i & h_s from here 
    1959 !!gm         ! we could even retrieve cloud fraction from the coupler 
    1960 !!gm         ! 
    1961 !!gm         zfrqsr_tr_i(:,:,:) = 0._wp   !   surface transmission parameter 
    1962 !!gm         ! 
    1963 !!gm         DO jl = 1, jpl 
    1964 !!gm            DO jj = 1 , jpj 
    1965 !!gm               DO ji = 1, jpi 
    1966 !!gm                  !              !--- surface transmission parameter (Grenfell Maykut 77) --- ! 
    1967 !!gm                  zfrqsr_tr_i(ji,jj,jl) = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice  
    1968 !!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 opaque 
    1971 !!gm                  IF ( phi(ji,jj,jl) <= 0.1_wp )   zfrqsr_tr_i(ji,jj,jl) = 1._wp   !   thin ice transmits all solar radiation 
    1972 !!gm               END DO 
    1973 !!gm            END DO 
    1974 !!gm         END DO 
    1975 !!gm         ! 
    1976 !!gm         qsr_ice_tr(:,:,:) =   zfrqsr_tr_i(:,:,:) * qsr_ice(:,:,:)               !   transmitted solar radiation  
    1977 !!gm         ! 
    1978 !!gm better coding of the above calculation: 
    1979          ! 
    19802114         !                    ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
    19812115         ztri = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice    ! surface transmission parameter (Grenfell Maykut 77) 
     
    19842118         WHERE( phs(:,:,:) >= 0.0_wp )   qsr_ice_tr(:,:,:) = 0._wp            ! snow fully opaque 
    19852119         WHERE( phi(:,:,:) <= 0.1_wp )   qsr_ice_tr(:,:,:) = qsr_ice(:,:,:)   ! thin ice transmits all solar radiation 
    1986 !!gm end 
    19872120         !      
    19882121      CASE( np_jules_ACTIVE )       !==  Jules coupler is active  ==! 
     
    20642197               CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
    20652198               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  
    20662210            CASE( 'mixed oce-ice'        )    
    20672211               ztmp1(:,:) = ( ztmp1(:,:) + rt0 ) * zfr_l(:,:)  
     
    20762220         IF( ssnd(jps_tmix)%laction )   CALL cpl_snd( jps_tmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
    20772221      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 
    20782236      !                                                      ! ------------------------- ! 
    20792237      !                                                      !           Albedo          ! 
     
    21342292         END SELECT 
    21352293         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 ) 
    21362303      ENDIF 
    21372304       
     
    21792346         IF( ssnd(jps_hsnw)%laction )   CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 
    21802347      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 
    21812394      !                                                      ! ------------------------- ! 
    21822395      !                                                      !  CO2 flux from PISCES     !  
     
    25002713      IF( ssnd(jps_taum  )%laction )  CALL cpl_snd( jps_taum  , isec, RESHAPE ( taum, (/jpi,jpj,1/) ), info ) 
    25012714 
     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 
    25022720      CALL wrk_dealloc( jpi,jpj,       zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 
    25032721      CALL wrk_dealloc( jpi,jpj,jpl,   ztmp3, ztmp4 ) 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r8885 r8933  
    9292      NAMELIST/namsbc/ nn_fsbc  ,                                                    & 
    9393         &             ln_usr   , ln_flx   , ln_blk       ,                          & 
    94          &             ln_cpl   , ln_mixcpl, nn_components,                          & 
     94         &             ln_cpl   , ln_mixcpl, ln_meto_cpl  , nn_components,           & 
    9595         &             nn_ice   , ln_ice_embd,                                       & 
    9696         &             ln_traqsr, ln_dm2dc ,                                         & 
     
    138138         WRITE(numout,*) '         mixed forced-coupled     formulation       ln_mixcpl     = ', ln_mixcpl 
    139139!!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 
    140141         WRITE(numout,*) '         OASIS coupling (with atm or sas)           lk_oasis      = ', lk_oasis 
    141142         WRITE(numout,*) '         components of your executable              nn_components = ', nn_components 
Note: See TracChangeset for help on using the changeset viewer.