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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/sbccpl.F90

    r10617 r13463  
    2727   USE sbcwave         ! surface boundary condition: waves 
    2828   USE phycst          ! physical constants 
     29   USE isf_oce , ONLY : l_isfoasis, fwfisf_oasis ! ice shelf boundary condition 
    2930#if defined key_si3 
    3031   USE ice            ! ice variables 
     
    3233   USE cpl_oasis3     ! OASIS3 coupling 
    3334   USE geo2ocean      !  
    34    USE oce     , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
     35   USE oce     , ONLY : ts, uu, vv, ssh, fraqsr_1lev 
    3536   USE ocealb         !  
    3637   USE eosbn2         !  
    3738   USE sbcrnf  , ONLY : l_rnfcpl 
    38    USE sbcisf  , ONLY : l_isfcpl 
    3939#if defined key_cice 
    4040   USE ice_domain_size, only: ncat 
     
    193193 
    194194   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
    195    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
     195   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rho0)  
    196196 
    197197   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
    198198 
    199199   !! Substitution 
    200 #  include "vectopt_loop_substitute.h90" 
     200#  include "do_loop_substitute.h90" 
     201#  include "domzgr_substitute.h90" 
    201202   !!---------------------------------------------------------------------- 
    202203   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    264265      ! ================================ ! 
    265266      ! 
    266       REWIND( numnam_ref )              ! Namelist namsbc_cpl in reference namelist : Variables for OASIS coupling 
    267267      READ  ( numnam_ref, namsbc_cpl, IOSTAT = ios, ERR = 901) 
    268 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namsbc_cpl in reference namelist', lwp ) 
    269       ! 
    270       REWIND( numnam_cfg )              ! Namelist namsbc_cpl in configuration namelist : Variables for OASIS coupling 
     268901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namsbc_cpl in reference namelist' ) 
     269      ! 
    271270      READ  ( numnam_cfg, namsbc_cpl, IOSTAT = ios, ERR = 902 ) 
    272 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namsbc_cpl in configuration namelist', lwp ) 
     271902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namsbc_cpl in configuration namelist' ) 
    273272      IF(lwm) WRITE ( numond, namsbc_cpl ) 
    274273      ! 
     
    366365      !  
    367366      ! Vectors: change of sign at north fold ONLY if on the local grid 
    368       IF( TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM(sn_rcv_tau%cldes ) == 'oce and ice') THEN ! avoid working with the atmospheric fields if they are not coupled 
     367      IF(       TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM( sn_rcv_tau%cldes ) == 'oce and ice'  & 
     368           .OR. TRIM( sn_rcv_tau%cldes ) == 'mixed oce-ice' ) THEN ! avoid working with the atmospheric fields if they are not coupled 
     369 
    369370      IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' )   srcv(jpr_otx1:jpr_itz2)%nsgn = -1. 
    370371       
     
    453454      CASE( 'conservative'  ) 
    454455         srcv( (/jpr_rain, jpr_snow, jpr_ievp, jpr_tevp/) )%laction = .TRUE. 
    455          IF ( k_ice <= 1 )  srcv(jpr_ievp)%laction = .FALSE. 
     456         IF( k_ice <= 1 )  srcv(jpr_ievp)%laction = .FALSE. 
    456457      CASE( 'oce and ice'   )   ;   srcv( (/jpr_ievp, jpr_sbpr, jpr_semp, jpr_oemp/) )%laction = .TRUE. 
    457458      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_emp%cldes' ) 
     
    474475      srcv(jpr_icb)%clname = 'OIceberg'   ;  IF( TRIM( sn_rcv_icb%cldes) == 'coupled' )   srcv(jpr_icb)%laction = .TRUE. 
    475476 
    476       IF( srcv(jpr_isf)%laction .AND. ln_isf ) THEN 
    477          l_isfcpl             = .TRUE.                      ! -> no need to read isf in sbcisf 
     477      IF( srcv(jpr_isf)%laction ) THEN 
     478         l_isfoasis = .TRUE.  ! -> isf fwf comes from oasis 
    478479         IF(lwp) WRITE(numout,*) 
    479480         IF(lwp) WRITE(numout,*) '   iceshelf received from oasis ' 
     481         CALL ctl_stop('STOP','not coded') 
    480482      ENDIF 
    481483      ! 
     
    533535      !                                                      ! ------------------------- ! 
    534536      srcv(jpr_taum)%clname = 'O_TauMod'   ;   IF( TRIM(sn_rcv_taumod%cldes) == 'coupled' )   srcv(jpr_taum)%laction = .TRUE. 
    535       lhftau = srcv(jpr_taum)%laction 
    536537      ! 
    537538      !                                                      ! ------------------------- ! 
     
    558559      srcv(jpr_botm )%clname = 'OBotMlt' 
    559560      IF( TRIM(sn_rcv_iceflx%cldes) == 'coupled' ) THEN 
    560          IF ( TRIM( sn_rcv_iceflx%clcat ) == 'yes' ) THEN 
     561         IF( TRIM( sn_rcv_iceflx%clcat ) == 'yes' ) THEN 
    561562            srcv(jpr_topm:jpr_botm)%nct = nn_cats_cpl 
    562563         ELSE 
     
    569570      !                                                      ! ------------------------- ! 
    570571      srcv(jpr_ts_ice)%clname = 'OTsfIce'    ! needed by Met Office 
    571       IF ( TRIM( sn_rcv_ts_ice%cldes ) == 'ice' )   srcv(jpr_ts_ice)%laction = .TRUE. 
    572       IF ( TRIM( sn_rcv_ts_ice%clcat ) == 'yes' )   srcv(jpr_ts_ice)%nct     = nn_cats_cpl 
    573       IF ( TRIM( sn_rcv_emp%clcat    ) == 'yes' )   srcv(jpr_ievp)%nct       = nn_cats_cpl 
    574  
     572      IF( TRIM( sn_rcv_ts_ice%cldes ) == 'ice' )   srcv(jpr_ts_ice)%laction = .TRUE. 
     573      IF( TRIM( sn_rcv_ts_ice%clcat ) == 'yes' )   srcv(jpr_ts_ice)%nct     = nn_cats_cpl 
     574      IF( TRIM( sn_rcv_emp%clcat    ) == 'yes' )   srcv(jpr_ievp)%nct       = nn_cats_cpl 
     575 
     576#if defined key_si3 
     577      IF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN  
     578         IF( .NOT.srcv(jpr_ts_ice)%laction )  & 
     579            &   CALL ctl_stop( 'sbc_cpl_init: srcv(jpr_ts_ice)%laction should be set to true when ln_cndflx=T' )      
     580      ENDIF 
     581#endif 
    575582      !                                                      ! ------------------------- ! 
    576583      !                                                      !      Wave breaking        !     
     
    691698         ! Change first letter to couple with atmosphere if already coupled OPA 
    692699         ! this is nedeed as each variable name used in the namcouple must be unique: 
    693          ! for example O_Runoff received by OPA from SAS and therefore O_Runoff received by SAS from the Atmosphere 
     700         ! for example O_Runoff received by OPA from SAS and therefore S_Runoff received by SAS from the Atmosphere 
    694701         DO jn = 1, jprcv 
    695             IF ( srcv(jn)%clname(1:1) == "O" ) srcv(jn)%clname = "S"//srcv(jn)%clname(2:LEN(srcv(jn)%clname)) 
     702            IF( srcv(jn)%clname(1:1) == "O" ) srcv(jn)%clname = "S"//srcv(jn)%clname(2:LEN(srcv(jn)%clname)) 
    696703         END DO 
    697704         ! 
     
    720727      ! =================================================== ! 
    721728      DO jn = 1, jprcv 
    722          IF ( srcv(jn)%laction ) ALLOCATE( frcv(jn)%z3(jpi,jpj,srcv(jn)%nct) ) 
     729         IF( srcv(jn)%laction ) ALLOCATE( frcv(jn)%z3(jpi,jpj,srcv(jn)%nct) ) 
    723730      END DO 
    724731      ! Allocate taum part of frcv which is used even when not received as coupling field 
    725       IF ( .NOT. srcv(jpr_taum)%laction ) ALLOCATE( frcv(jpr_taum)%z3(jpi,jpj,srcv(jpr_taum)%nct) ) 
     732      IF( .NOT. srcv(jpr_taum)%laction ) ALLOCATE( frcv(jpr_taum)%z3(jpi,jpj,srcv(jpr_taum)%nct) ) 
    726733      ! Allocate w10m part of frcv which is used even when not received as coupling field 
    727       IF ( .NOT. srcv(jpr_w10m)%laction ) ALLOCATE( frcv(jpr_w10m)%z3(jpi,jpj,srcv(jpr_w10m)%nct) ) 
     734      IF( .NOT. srcv(jpr_w10m)%laction ) ALLOCATE( frcv(jpr_w10m)%z3(jpi,jpj,srcv(jpr_w10m)%nct) ) 
    728735      ! Allocate jpr_otx1 part of frcv which is used even when not received as coupling field 
    729       IF ( .NOT. srcv(jpr_otx1)%laction ) ALLOCATE( frcv(jpr_otx1)%z3(jpi,jpj,srcv(jpr_otx1)%nct) ) 
    730       IF ( .NOT. srcv(jpr_oty1)%laction ) ALLOCATE( frcv(jpr_oty1)%z3(jpi,jpj,srcv(jpr_oty1)%nct) ) 
     736      IF( .NOT. srcv(jpr_otx1)%laction ) ALLOCATE( frcv(jpr_otx1)%z3(jpi,jpj,srcv(jpr_otx1)%nct) ) 
     737      IF( .NOT. srcv(jpr_oty1)%laction ) ALLOCATE( frcv(jpr_oty1)%z3(jpi,jpj,srcv(jpr_oty1)%nct) ) 
    731738      ! Allocate itx1 and ity1 as they are used in sbc_cpl_ice_tau even if srcv(jpr_itx1)%laction = .FALSE. 
    732739      IF( k_ice /= 0 ) THEN 
    733          IF ( .NOT. srcv(jpr_itx1)%laction ) ALLOCATE( frcv(jpr_itx1)%z3(jpi,jpj,srcv(jpr_itx1)%nct) ) 
    734          IF ( .NOT. srcv(jpr_ity1)%laction ) ALLOCATE( frcv(jpr_ity1)%z3(jpi,jpj,srcv(jpr_ity1)%nct) ) 
    735       END IF 
     740         IF( .NOT. srcv(jpr_itx1)%laction ) ALLOCATE( frcv(jpr_itx1)%z3(jpi,jpj,srcv(jpr_itx1)%nct) ) 
     741         IF( .NOT. srcv(jpr_ity1)%laction ) ALLOCATE( frcv(jpr_ity1)%z3(jpi,jpj,srcv(jpr_ity1)%nct) ) 
     742      ENDIF 
    736743 
    737744      ! ================================ ! 
     
    757764      CASE( 'oce and ice' , 'weighted oce and ice' , 'oce and weighted ice' ) 
    758765         ssnd( (/jps_toce, jps_tice/) )%laction = .TRUE. 
    759          IF ( TRIM( sn_snd_temp%clcat ) == 'yes' )  ssnd(jps_tice)%nct = nn_cats_cpl 
     766         IF( TRIM( sn_snd_temp%clcat ) == 'yes' )  ssnd(jps_tice)%nct = nn_cats_cpl 
    760767      CASE( 'mixed oce-ice'                        )   ;   ssnd( jps_tmix )%laction = .TRUE. 
    761768      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_temp%cldes' ) 
     
    777784      !     1. sending mixed oce-ice albedo or 
    778785      !     2. receiving mixed oce-ice solar radiation  
    779       IF ( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN 
     786      IF( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN 
    780787         CALL oce_alb( zaos, zacs ) 
    781788         ! Due to lack of information on nebulosity : mean clear/overcast sky 
     
    796803         ssnd(jps_fice1)%laction = .TRUE.                 ! First-order regridded ice concentration, to be used producing atmos-to-ice fluxes (Met Office requirement) 
    797804! Currently no namelist entry to determine sending of multi-category ice fraction so use the thickness entry for now 
    798          IF ( TRIM( sn_snd_thick%clcat  ) == 'yes' ) ssnd(jps_fice)%nct  = nn_cats_cpl 
    799          IF ( TRIM( sn_snd_thick1%clcat ) == 'yes' ) ssnd(jps_fice1)%nct = nn_cats_cpl 
     805         IF( TRIM( sn_snd_thick%clcat  ) == 'yes' ) ssnd(jps_fice)%nct  = nn_cats_cpl 
     806         IF( TRIM( sn_snd_thick1%clcat ) == 'yes' ) ssnd(jps_fice1)%nct = nn_cats_cpl 
    800807      ENDIF 
    801808       
    802       IF (TRIM( sn_snd_ifrac%cldes )  == 'coupled') ssnd(jps_ficet)%laction = .TRUE.  
     809      IF(TRIM( sn_snd_ifrac%cldes )  == 'coupled') ssnd(jps_ficet)%laction = .TRUE.  
    803810 
    804811      SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 
     
    806813      CASE( 'ice and snow' )  
    807814         ssnd(jps_hice:jps_hsnw)%laction = .TRUE. 
    808          IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) THEN 
     815         IF( TRIM( sn_snd_thick%clcat ) == 'yes' ) THEN 
    809816            ssnd(jps_hice:jps_hsnw)%nct = nn_cats_cpl 
    810817         ENDIF 
    811818      CASE ( 'weighted ice and snow' )  
    812819         ssnd(jps_hice:jps_hsnw)%laction = .TRUE. 
    813          IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_hice:jps_hsnw)%nct = nn_cats_cpl 
     820         IF( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_hice:jps_hsnw)%nct = nn_cats_cpl 
    814821      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_thick%cldes' ) 
    815822      END SELECT 
     
    828835         ssnd(jps_a_p)%laction  = .TRUE.  
    829836         ssnd(jps_ht_p)%laction = .TRUE.  
    830          IF ( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN  
     837         IF( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN  
    831838            ssnd(jps_a_p)%nct  = nn_cats_cpl  
    832839            ssnd(jps_ht_p)%nct = nn_cats_cpl  
    833840         ELSE  
    834             IF ( nn_cats_cpl > 1 ) THEN  
     841            IF( nn_cats_cpl > 1 ) THEN  
    835842               CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_mpnd%cldes if not exchanging category fields' )  
    836843            ENDIF  
     
    839846         ssnd(jps_a_p)%laction  = .TRUE.  
    840847         ssnd(jps_ht_p)%laction = .TRUE.  
    841          IF ( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN  
     848         IF( TRIM( sn_snd_mpnd%clcat ) == 'yes' ) THEN  
    842849            ssnd(jps_a_p)%nct  = nn_cats_cpl   
    843850            ssnd(jps_ht_p)%nct = nn_cats_cpl   
     
    862869      ELSE IF( sn_snd_crt%clvgrd /= 'T' ) THEN   
    863870         CALL ctl_stop( 'sn_snd_crt%clvgrd must be equal to T' ) 
    864          ssnd(jps_ocx1:jps_ivz1)%clgrid  = 'T'      ! all oce and ice components on the same unique grid 
    865871      ENDIF 
    866872      ssnd(jps_ocx1:jps_ivz1)%laction = .TRUE.   ! default: all are send 
     
    914920      CASE ( 'ice only' )  
    915921         ssnd(jps_ttilyr)%laction = .TRUE.  
    916          IF ( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) THEN  
     922         IF( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) THEN  
    917923            ssnd(jps_ttilyr)%nct = nn_cats_cpl  
    918924         ELSE  
    919             IF ( nn_cats_cpl > 1 ) THEN  
     925            IF( nn_cats_cpl > 1 ) THEN  
    920926               CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_ttilyr%cldes if not exchanging category fields' )  
    921927            ENDIF  
     
    923929      CASE ( 'weighted ice' )  
    924930         ssnd(jps_ttilyr)%laction = .TRUE.  
    925          IF ( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) ssnd(jps_ttilyr)%nct = nn_cats_cpl  
     931         IF( TRIM( sn_snd_ttilyr%clcat ) == 'yes' ) ssnd(jps_ttilyr)%nct = nn_cats_cpl  
    926932      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_ttilyr%cldes;'//sn_snd_ttilyr%cldes )  
    927933      END SELECT  
     
    933939      CASE ( 'ice only' )  
    934940         ssnd(jps_kice)%laction = .TRUE.  
    935          IF ( TRIM( sn_snd_cond%clcat ) == 'yes' ) THEN  
     941         IF( TRIM( sn_snd_cond%clcat ) == 'yes' ) THEN  
    936942            ssnd(jps_kice)%nct = nn_cats_cpl  
    937943         ELSE  
    938             IF ( nn_cats_cpl > 1 ) THEN  
     944            IF( nn_cats_cpl > 1 ) THEN  
    939945               CALL ctl_stop( 'sbc_cpl_init: use weighted ice option for sn_snd_cond%cldes if not exchanging category fields' )  
    940946            ENDIF  
     
    942948      CASE ( 'weighted ice' )  
    943949         ssnd(jps_kice)%laction = .TRUE.  
    944          IF ( TRIM( sn_snd_cond%clcat ) == 'yes' ) ssnd(jps_kice)%nct = nn_cats_cpl  
     950         IF( TRIM( sn_snd_cond%clcat ) == 'yes' ) ssnd(jps_kice)%nct = nn_cats_cpl  
    945951      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_cond%cldes;'//sn_snd_cond%cldes )  
    946952      END SELECT  
     
    10031009         ! for example O_SSTSST sent by OPA to SAS and therefore S_SSTSST sent by SAS to the Atmosphere 
    10041010         DO jn = 1, jpsnd 
    1005             IF ( ssnd(jn)%clname(1:1) == "O" ) ssnd(jn)%clname = "S"//ssnd(jn)%clname(2:LEN(ssnd(jn)%clname)) 
     1011            IF( ssnd(jn)%clname(1:1) == "O" ) ssnd(jn)%clname = "S"//ssnd(jn)%clname(2:LEN(ssnd(jn)%clname)) 
    10061012         END DO 
    10071013         ! 
     
    10301036      CALL cpl_define(jprcv, jpsnd, nn_cplmodel) 
    10311037       
    1032       IF (ln_usecplmask) THEN  
     1038      IF(ln_usecplmask) THEN  
    10331039         xcplmask(:,:,:) = 0. 
    10341040         CALL iom_open( 'cplmask', inum ) 
    1035          CALL iom_get( inum, jpdom_unknown, 'cplmask', xcplmask(1:nlci,1:nlcj,1:nn_cplmodel),   & 
    1036             &          kstart = (/ mig(1),mjg(1),1 /), kcount = (/ nlci,nlcj,nn_cplmodel /) ) 
     1041         CALL iom_get( inum, jpdom_unknown, 'cplmask', xcplmask(1:jpi,1:jpj,1:nn_cplmodel),   & 
     1042            &          kstart = (/ mig(1),mjg(1),1 /), kcount = (/ jpi,jpj,nn_cplmodel /) ) 
    10371043         CALL iom_close( inum ) 
    10381044      ELSE 
     
    10411047      xcplmask(:,:,0) = 1. - SUM( xcplmask(:,:,1:nn_cplmodel), dim = 3 ) 
    10421048      ! 
    1043       ncpl_qsr_freq = cpl_freq( 'O_QsrOce' ) + cpl_freq( 'O_QsrMix' ) + cpl_freq( 'I_QsrOce' ) + cpl_freq( 'I_QsrMix' ) 
    1044       IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 )   & 
    1045          &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    1046       IF( ln_dm2dc .AND. ln_cpl ) ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
    1047       ! 
    10481049   END SUBROUTINE sbc_cpl_init 
    10491050 
    10501051 
    1051    SUBROUTINE sbc_cpl_rcv( kt, k_fsbc, k_ice )      
     1052   SUBROUTINE sbc_cpl_rcv( kt, k_fsbc, k_ice, Kbb, Kmm )      
    10521053      !!---------------------------------------------------------------------- 
    10531054      !!             ***  ROUTINE sbc_cpl_rcv  *** 
     
    10991100      INTEGER, INTENT(in) ::   k_fsbc      ! frequency of sbc (-> ice model) computation  
    11001101      INTEGER, INTENT(in) ::   k_ice       ! ice management in the sbc (=0/1/2/3) 
     1102      INTEGER, INTENT(in) ::   Kbb, Kmm    ! ocean model time level indices 
    11011103      !! 
    11021104      LOGICAL  ::   llnewtx, llnewtau      ! update wind stress components and module?? 
     
    11111113      !!---------------------------------------------------------------------- 
    11121114      ! 
     1115      IF( kt == nit000 ) THEN 
     1116      !   cannot be done in the init phase when we use agrif as cpl_freq requires that oasis_enddef is done 
     1117         ncpl_qsr_freq = cpl_freq( 'O_QsrOce' ) + cpl_freq( 'O_QsrMix' ) + cpl_freq( 'I_QsrOce' ) + cpl_freq( 'I_QsrMix' ) 
     1118         IF( ln_dm2dc .AND. ncpl_qsr_freq /= 86400 )   & 
     1119            &   CALL ctl_stop( 'sbc_cpl_rcv: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
     1120 
     1121         IF( ncpl_qsr_freq /= 0) ncpl_qsr_freq = 86400 / ncpl_qsr_freq ! used by top 
     1122          
     1123      ENDIF 
     1124      ! 
    11131125      IF( ln_mixcpl )   zmsk(:,:) = 1. - xcplmask(:,:,0) 
    11141126      ! 
     
    11161128      !                                                      ! Receive all the atmos. fields (including ice information) 
    11171129      !                                                      ! ======================================================= ! 
    1118       isec = ( kt - nit000 ) * NINT( rdt )                      ! date of exchanges 
     1130      isec = ( kt - nit000 ) * NINT( rn_Dt )                      ! date of exchanges 
    11191131      DO jn = 1, jprcv                                          ! received fields sent by the atmosphere 
    11201132         IF( srcv(jn)%laction )   CALL cpl_rcv( jn, isec, frcv(jn)%z3, xcplmask(:,:,1:nn_cplmodel), nrcvinfo(jn) ) 
     
    11581170            !                               
    11591171            IF( srcv(jpr_otx1)%clgrid == 'T' ) THEN 
    1160                DO jj = 2, jpjm1                                          ! T ==> (U,V) 
    1161                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    1162                      frcv(jpr_otx1)%z3(ji,jj,1) = 0.5 * ( frcv(jpr_otx1)%z3(ji+1,jj  ,1) + frcv(jpr_otx1)%z3(ji,jj,1) ) 
    1163                      frcv(jpr_oty1)%z3(ji,jj,1) = 0.5 * ( frcv(jpr_oty1)%z3(ji  ,jj+1,1) + frcv(jpr_oty1)%z3(ji,jj,1) ) 
    1164                   END DO 
    1165                END DO 
    1166                CALL lbc_lnk_multi( 'sbccpl', frcv(jpr_otx1)%z3(:,:,1), 'U',  -1., frcv(jpr_oty1)%z3(:,:,1), 'V',  -1. ) 
     1172               DO_2D( 0, 0, 0, 0 ) 
     1173                  frcv(jpr_otx1)%z3(ji,jj,1) = 0.5 * ( frcv(jpr_otx1)%z3(ji+1,jj  ,1) + frcv(jpr_otx1)%z3(ji,jj,1) ) 
     1174                  frcv(jpr_oty1)%z3(ji,jj,1) = 0.5 * ( frcv(jpr_oty1)%z3(ji  ,jj+1,1) + frcv(jpr_oty1)%z3(ji,jj,1) ) 
     1175               END_2D 
     1176               CALL lbc_lnk_multi( 'sbccpl', frcv(jpr_otx1)%z3(:,:,1), 'U',  -1.0_wp, frcv(jpr_oty1)%z3(:,:,1), 'V',  -1.0_wp ) 
    11671177            ENDIF 
    11681178            llnewtx = .TRUE. 
     
    11841194         ! => need to be done only when otx1 was changed 
    11851195         IF( llnewtx ) THEN 
    1186             DO jj = 2, jpjm1 
    1187                DO ji = fs_2, fs_jpim1   ! vect. opt. 
    1188                   zzx = frcv(jpr_otx1)%z3(ji-1,jj  ,1) + frcv(jpr_otx1)%z3(ji,jj,1) 
    1189                   zzy = frcv(jpr_oty1)%z3(ji  ,jj-1,1) + frcv(jpr_oty1)%z3(ji,jj,1) 
    1190                   frcv(jpr_taum)%z3(ji,jj,1) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 
    1191                END DO 
    1192             END DO 
    1193             CALL lbc_lnk( 'sbccpl', frcv(jpr_taum)%z3(:,:,1), 'T', 1. ) 
     1196            DO_2D( 0, 0, 0, 0 ) 
     1197               zzx = frcv(jpr_otx1)%z3(ji-1,jj  ,1) + frcv(jpr_otx1)%z3(ji,jj,1) 
     1198               zzy = frcv(jpr_oty1)%z3(ji  ,jj-1,1) + frcv(jpr_oty1)%z3(ji,jj,1) 
     1199               frcv(jpr_taum)%z3(ji,jj,1) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 
     1200            END_2D 
     1201            CALL lbc_lnk( 'sbccpl', frcv(jpr_taum)%z3(:,:,1), 'T', 1.0_wp ) 
    11941202            llnewtau = .TRUE. 
    11951203         ELSE 
     
    12111219         IF( llnewtau ) THEN  
    12121220            zcoef = 1. / ( zrhoa * zcdrag )  
    1213             DO jj = 1, jpj 
    1214                DO ji = 1, jpi  
    1215                   frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 
    1216                END DO 
    1217             END DO 
     1221            DO_2D( 1, 1, 1, 1 ) 
     1222               frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 
     1223            END_2D 
    12181224         ENDIF 
    12191225      ENDIF 
     
    12431249      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    12441250      ! 
    1245       !                                                      ! ================== ! 
    1246       !                                                      !   ice skin temp.   ! 
    1247       !                                                      ! ================== ! 
    1248 #if defined key_si3 
    1249       ! needed by Met Office 
    1250       IF( srcv(jpr_ts_ice)%laction ) THEN  
    1251          WHERE    ( frcv(jpr_ts_ice)%z3(:,:,:) > 0.0  )   ;   tsfc_ice(:,:,:) = 0.0  
    1252          ELSEWHERE( frcv(jpr_ts_ice)%z3(:,:,:) < -60. )   ;   tsfc_ice(:,:,:) = -60. 
    1253          ELSEWHERE                                        ;   tsfc_ice(:,:,:) = frcv(jpr_ts_ice)%z3(:,:,:) 
    1254          END WHERE 
    1255       ENDIF  
    1256 #endif 
    12571251      !                                                      ! ========================= !  
    12581252      !                                                      ! Mean Sea Level Pressure   !   (taum)  
     
    12611255          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
    12621256 
    1263           r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
     1257          r1_grau = 1.e0 / (grav * rho0)               !* constant for optimization  
    12641258          ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
    12651259          apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
    12661260     
    12671261          IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:)  ! correct this later (read from restart if possible)  
    1268       END IF  
     1262      ENDIF  
    12691263      ! 
    12701264      IF( ln_sdw ) THEN  ! Stokes Drift correction activated 
     
    13021296         IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction & 
    13031297                                      .OR. srcv(jpr_hsig)%laction   .OR. srcv(jpr_wfreq)%laction) THEN 
    1304             CALL sbc_stokes() 
     1298            CALL sbc_stokes( Kmm ) 
    13051299         ENDIF 
    13061300      ENDIF 
     
    13541348      IF( srcv(jpr_ocx1)%laction ) THEN                      ! received by sas in case of opa <-> sas coupling 
    13551349         ssu_m(:,:) = frcv(jpr_ocx1)%z3(:,:,1) 
    1356          ub (:,:,1) = ssu_m(:,:)                             ! will be used in icestp in the call of ice_forcing_tau 
    1357          un (:,:,1) = ssu_m(:,:)                             ! will be used in sbc_cpl_snd if atmosphere coupling 
     1350         uu(:,:,1,Kbb) = ssu_m(:,:)                          ! will be used in icestp in the call of ice_forcing_tau 
     1351         uu(:,:,1,Kmm) = ssu_m(:,:)                          ! will be used in sbc_cpl_snd if atmosphere coupling 
    13581352         CALL iom_put( 'ssu_m', ssu_m ) 
    13591353      ENDIF 
    13601354      IF( srcv(jpr_ocy1)%laction ) THEN 
    13611355         ssv_m(:,:) = frcv(jpr_ocy1)%z3(:,:,1) 
    1362          vb (:,:,1) = ssv_m(:,:)                             ! will be used in icestp in the call of ice_forcing_tau 
    1363          vn (:,:,1) = ssv_m(:,:)                             ! will be used in sbc_cpl_snd if atmosphere coupling 
     1356         vv(:,:,1,Kbb) = ssv_m(:,:)                          ! will be used in icestp in the call of ice_forcing_tau 
     1357         vv(:,:,1,Kmm) = ssv_m(:,:)                          ! will be used in sbc_cpl_snd if atmosphere coupling 
    13641358         CALL iom_put( 'ssv_m', ssv_m ) 
    13651359      ENDIF 
     
    14051399             rnf(:,:)    = rnf(:,:) + fwficb(:,:)   ! iceberg added to runfofs 
    14061400         ENDIF 
    1407          IF( srcv(jpr_isf)%laction )  fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1)  ! fresh water flux from the isf (fwfisf <0 mean melting)   
     1401         ! 
     1402         ! ice shelf fwf 
     1403         IF( srcv(jpr_isf)%laction )  THEN 
     1404            fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1)  ! fresh water flux from the isf (fwfisf <0 mean melting)   
     1405         END IF 
    14081406         
    14091407         IF( ln_mixcpl ) THEN   ;   emp(:,:) = emp(:,:) * xcplmask(:,:,0) + zemp(:,:) * zmsk(:,:) 
     
    14151413         ELSE IF( srcv(jpr_qnsmix)%laction ) THEN   ;   zqns(:,:) = frcv(jpr_qnsmix)%z3(:,:,1) 
    14161414         ELSE                                       ;   zqns(:,:) = 0._wp 
    1417          END IF 
     1415         ENDIF 
    14181416         ! update qns over the free ocean with: 
    14191417         IF( nn_components /= jp_iam_opa ) THEN 
     
    14861484      INTEGER ::   ji, jj   ! dummy loop indices 
    14871485      INTEGER ::   itx      ! index of taux over ice 
     1486      REAL(wp)                     ::   zztmp1, zztmp2 
    14881487      REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty  
    14891488      !!---------------------------------------------------------------------- 
     
    15491548            p_taui(:,:) = frcv(jpr_itx1)%z3(:,:,1)                   ! (U,V) ==> (U,V) 
    15501549            p_tauj(:,:) = frcv(jpr_ity1)%z3(:,:,1) 
    1551          CASE( 'F' ) 
    1552             DO jj = 2, jpjm1                                   ! F ==> (U,V) 
    1553                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1554                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji,jj,1) + frcv(jpr_itx1)%z3(ji  ,jj-1,1) ) 
    1555                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji,jj,1) + frcv(jpr_ity1)%z3(ji-1,jj  ,1) ) 
    1556                END DO 
    1557             END DO 
    15581550         CASE( 'T' ) 
    1559             DO jj = 2, jpjm1                                   ! T ==> (U,V) 
    1560                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1561                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji+1,jj  ,1) + frcv(jpr_itx1)%z3(ji,jj,1) ) 
    1562                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji  ,jj+1,1) + frcv(jpr_ity1)%z3(ji,jj,1) ) 
    1563                END DO 
    1564             END DO 
    1565          CASE( 'I' ) 
    1566             DO jj = 2, jpjm1                                   ! I ==> (U,V) 
    1567                DO ji = 2, jpim1   ! NO vector opt. 
    1568                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji+1,jj+1,1) + frcv(jpr_itx1)%z3(ji+1,jj  ,1) ) 
    1569                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji+1,jj+1,1) + frcv(jpr_ity1)%z3(ji  ,jj+1,1) ) 
    1570                END DO 
    1571             END DO 
     1551            DO_2D( 0, 0, 0, 0 ) 
     1552               ! take care of the land-sea mask to avoid "pollution" of coastal stress. p[uv]taui used in frazil and  rheology  
     1553               zztmp1 = 0.5_wp * ( 2. - umask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji+1,jj  ,1) ) 
     1554               zztmp2 = 0.5_wp * ( 2. - vmask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji  ,jj+1,1) ) 
     1555               p_taui(ji,jj) = zztmp1 * ( frcv(jpr_itx1)%z3(ji+1,jj  ,1) + frcv(jpr_itx1)%z3(ji,jj,1) ) 
     1556               p_tauj(ji,jj) = zztmp2 * ( frcv(jpr_ity1)%z3(ji  ,jj+1,1) + frcv(jpr_ity1)%z3(ji,jj,1) ) 
     1557            END_2D 
     1558            CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U',  -1., p_tauj, 'V',  -1. ) 
    15721559         END SELECT 
    1573          IF( srcv(jpr_itx1)%clgrid /= 'U' ) THEN  
    1574             CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U',  -1., p_tauj, 'V',  -1. ) 
    1575          ENDIF 
    15761560          
    15771561      ENDIF 
     
    16301614      !!                   sprecip           solid precipitation over the ocean   
    16311615      !!---------------------------------------------------------------------- 
    1632       REAL(wp), INTENT(in), DIMENSION(:,:)             ::   picefr     ! ice fraction                [0 to 1] 
    1633       !                                                !!           ! optional arguments, used only in 'mixed oce-ice' case 
    1634       REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   palbi      ! all skies ice albedo  
    1635       REAL(wp), INTENT(in), DIMENSION(:,:  ), OPTIONAL ::   psst       ! sea surface temperature     [Celsius] 
    1636       REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   pist       ! ice surface temperature     [Kelvin] 
    1637       REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   phs        ! snow depth                  [m] 
    1638       REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   phi        ! ice thickness               [m] 
     1616      REAL(wp), INTENT(in)   , DIMENSION(:,:)             ::   picefr     ! ice fraction                [0 to 1] 
     1617      !                                                   !!           ! optional arguments, used only in 'mixed oce-ice' case or for Met-Office coupling 
     1618      REAL(wp), INTENT(in)   , DIMENSION(:,:,:), OPTIONAL ::   palbi      ! all skies ice albedo  
     1619      REAL(wp), INTENT(in)   , DIMENSION(:,:  ), OPTIONAL ::   psst       ! sea surface temperature     [Celsius] 
     1620      REAL(wp), INTENT(inout), DIMENSION(:,:,:), OPTIONAL ::   pist       ! ice surface temperature     [Kelvin] => inout for Met-Office 
     1621      REAL(wp), INTENT(in)   , DIMENSION(:,:,:), OPTIONAL ::   phs        ! snow depth                  [m] 
     1622      REAL(wp), INTENT(in)   , DIMENSION(:,:,:), OPTIONAL ::   phi        ! ice thickness               [m] 
    16391623      ! 
    16401624      INTEGER  ::   ji, jj, jl   ! dummy loop index 
     
    16431627      REAL(wp), DIMENSION(jpi,jpj)     ::   zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip  , zevap_oce, zdevap_ice 
    16441628      REAL(wp), DIMENSION(jpi,jpj)     ::   zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice 
    1645       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zevap_ice    !!gm , zfrqsr_tr_i 
     1629      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zevap_ice, zqtr_ice_top, ztsu 
    16461630      !!---------------------------------------------------------------------- 
    16471631      ! 
     
    16871671      ! --- evaporation over ice (kg/m2/s) --- ! 
    16881672      DO jl=1,jpl 
    1689          IF (sn_rcv_emp%clcat == 'yes') THEN   ;   zevap_ice(:,:,jl) = frcv(jpr_ievp)%z3(:,:,jl) 
     1673         IF(sn_rcv_emp%clcat == 'yes') THEN   ;   zevap_ice(:,:,jl) = frcv(jpr_ievp)%z3(:,:,jl) 
    16901674         ELSE                                  ;   zevap_ice(:,:,jl) = frcv(jpr_ievp)%z3(:,:,1 )   ;   ENDIF 
    16911675      ENDDO 
     
    17081692      ENDIF 
    17091693      IF( srcv(jpr_isf)%laction ) THEN   ! iceshelf (fwfisf <0 mean melting) 
    1710         fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1)   
     1694        fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1)   
    17111695      ENDIF 
    17121696 
     
    17471731      ENDIF 
    17481732      IF( srcv(jpr_isf)%laction ) THEN   ! iceshelf (fwfisf <0 mean melting) 
    1749         fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1) 
     1733        fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1) 
    17501734      ENDIF 
    17511735      ! 
     
    17741758      IF( iom_use('snow_ao_cea') )  CALL iom_put( 'snow_ao_cea' , sprecip(:,:) * ( 1._wp - zsnw(:,:) )                  )  ! Snow over ice-free ocean  (cell average) 
    17751759      IF( iom_use('snow_ai_cea') )  CALL iom_put( 'snow_ai_cea' , sprecip(:,:) *           zsnw(:,:)                    )  ! Snow over sea-ice         (cell average) 
     1760      IF( iom_use('rain_ao_cea') )  CALL iom_put( 'rain_ao_cea' , ( tprecip(:,:) - sprecip(:,:) ) * picefr(:,:)         )  ! liquid precipitation over ocean (cell average) 
    17761761      IF( iom_use('subl_ai_cea') )  CALL iom_put( 'subl_ai_cea' , frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) * tmask(:,:,1) )  ! Sublimation over sea-ice (cell average) 
    17771762      IF( iom_use('evap_ao_cea') )  CALL iom_put( 'evap_ao_cea' , ( frcv(jpr_tevp)%z3(:,:,1)  & 
     
    17861771      CASE( 'conservative' )     ! the required fields are directly provided 
    17871772         zqns_tot(:,:) = frcv(jpr_qnsmix)%z3(:,:,1) 
    1788          IF ( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
     1773         IF( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
    17891774            zqns_ice(:,:,1:jpl) = frcv(jpr_qnsice)%z3(:,:,1:jpl) 
    17901775         ELSE 
     
    17951780      CASE( 'oce and ice' )      ! the total flux is computed from ocean and ice fluxes 
    17961781         zqns_tot(:,:) =  ziceld(:,:) * frcv(jpr_qnsoce)%z3(:,:,1) 
    1797          IF ( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
     1782         IF( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
    17981783            DO jl=1,jpl 
    17991784               zqns_tot(:,:   ) = zqns_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qnsice)%z3(:,:,jl)    
     
    18011786            ENDDO 
    18021787         ELSE 
    1803             qns_tot(:,:) = qns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
     1788            zqns_tot(:,:) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    18041789            DO jl = 1, jpl 
    1805                zqns_tot(:,:   ) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    18061790               zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
    18071791            END DO 
     
    18101794! ** NEED TO SORT OUT HOW THIS SHOULD WORK IN THE MULTI-CATEGORY CASE - CURRENTLY NOT ALLOWED WHEN INTERFACE INITIALISED ** 
    18111795         zqns_tot(:,:  ) = frcv(jpr_qnsmix)%z3(:,:,1) 
    1812          zqns_ice(:,:,1) = frcv(jpr_qnsmix)%z3(:,:,1)    & 
    1813             &            + frcv(jpr_dqnsdt)%z3(:,:,1) * ( pist(:,:,1) - ( (rt0 + psst(:,:  ) ) * ziceld(:,:)   & 
    1814             &                                           + pist(:,:,1) * picefr(:,:) ) ) 
     1796         IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
     1797            DO jl = 1, jpl 
     1798               zqns_ice(:,:,jl) = frcv(jpr_qnsmix)%z3(:,:,jl)    & 
     1799                  &             + frcv(jpr_dqnsdt)%z3(:,:,jl) * ( pist(:,:,jl) - ( ( rt0 + psst(:,:) ) * ziceld(:,:)   & 
     1800                  &                                                                + pist(:,:,jl) * picefr(:,:) ) ) 
     1801            END DO 
     1802         ELSE 
     1803            DO jl = 1, jpl 
     1804               zqns_ice(:,:,jl) = frcv(jpr_qnsmix)%z3(:,:, 1)    & 
     1805                  &             + frcv(jpr_dqnsdt)%z3(:,:, 1) * ( pist(:,:,jl) - ( ( rt0 + psst(:,:) ) * ziceld(:,:)   & 
     1806                  &                                                                + pist(:,:,jl) * picefr(:,:) ) ) 
     1807            END DO 
     1808         ENDIF 
    18151809      END SELECT 
    18161810      !                                      
     
    18971891#endif 
    18981892      ! outputs 
    1899       IF ( srcv(jpr_cal)%laction       ) CALL iom_put('hflx_cal_cea'    , - frcv(jpr_cal)%z3(:,:,1) * rLfus )                      ! latent heat from calving 
    1900       IF ( srcv(jpr_icb)%laction       ) CALL iom_put('hflx_icb_cea'    , - frcv(jpr_icb)%z3(:,:,1) * rLfus )                      ! latent heat from icebergs melting 
    1901       IF ( iom_use('hflx_rain_cea')    ) CALL iom_put('hflx_rain_cea'   , ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) )        ! heat flux from rain (cell average) 
    1902       IF ( iom_use('hflx_evap_cea')    ) CALL iom_put('hflx_evap_cea'   , ( frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) & 
     1893      IF( srcv(jpr_cal)%laction       ) CALL iom_put('hflx_cal_cea'    , - frcv(jpr_cal)%z3(:,:,1) * rLfus )                      ! latent heat from calving 
     1894      IF( srcv(jpr_icb)%laction       ) CALL iom_put('hflx_icb_cea'    , - frcv(jpr_icb)%z3(:,:,1) * rLfus )                      ! latent heat from icebergs melting 
     1895      IF( iom_use('hflx_rain_cea')    ) CALL iom_put('hflx_rain_cea'   , ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) )        ! heat flux from rain (cell average) 
     1896      IF( iom_use('hflx_evap_cea')    ) CALL iom_put('hflx_evap_cea'   , ( frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) & 
    19031897           &                                                              * picefr(:,:) ) * zcptn(:,:) * tmask(:,:,1) )            ! heat flux from evap (cell average) 
    1904       IF ( iom_use('hflx_snow_cea')    ) CALL iom_put('hflx_snow_cea'   , sprecip(:,:) * ( zcptsnw(:,:) - rLfus )  )               ! heat flux from snow (cell average) 
    1905       IF ( iom_use('hflx_snow_ao_cea') ) CALL iom_put('hflx_snow_ao_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) & 
     1898      IF( iom_use('hflx_prec_cea')    ) CALL iom_put('hflx_prec_cea'   ,  sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) +  &                    ! heat flux from all precip (cell avg) 
     1899         &                                                               ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) ) 
     1900      IF( iom_use('hflx_snow_cea')    ) CALL iom_put('hflx_snow_cea'   , sprecip(:,:) * ( zcptsnw(:,:) - rLfus )  )               ! heat flux from snow (cell average) 
     1901      IF( iom_use('hflx_snow_ao_cea') ) CALL iom_put('hflx_snow_ao_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) & 
    19061902           &                                                              * ( 1._wp - zsnw(:,:) )                  )               ! heat flux from snow (over ocean) 
    1907       IF ( iom_use('hflx_snow_ai_cea') ) CALL iom_put('hflx_snow_ai_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) &  
     1903      IF( iom_use('hflx_snow_ai_cea') ) CALL iom_put('hflx_snow_ai_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) &  
    19081904           &                                                              *           zsnw(:,:)                    )               ! heat flux from snow (over ice) 
    19091905      ! note: hflx for runoff and iceshelf are done in sbcrnf and sbcisf resp. 
     
    19161912      CASE( 'conservative' ) 
    19171913         zqsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
    1918          IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
     1914         IF( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
    19191915            zqsr_ice(:,:,1:jpl) = frcv(jpr_qsrice)%z3(:,:,1:jpl) 
    19201916         ELSE 
     
    19241920            END DO 
    19251921         ENDIF 
    1926          zqsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
    1927          zqsr_ice(:,:,1) = frcv(jpr_qsrice)%z3(:,:,1) 
    19281922      CASE( 'oce and ice' ) 
    19291923         zqsr_tot(:,:  ) =  ziceld(:,:) * frcv(jpr_qsroce)%z3(:,:,1) 
    1930          IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
     1924         IF( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
    19311925            DO jl = 1, jpl 
    19321926               zqsr_tot(:,:   ) = zqsr_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qsrice)%z3(:,:,jl)    
     
    19341928            END DO 
    19351929         ELSE 
    1936             qsr_tot(:,:   ) = qsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
     1930            zqsr_tot(:,:) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    19371931            DO jl = 1, jpl 
    1938                zqsr_tot(:,:   ) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    19391932               zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
    19401933            END DO 
     
    19451938!       Create solar heat flux over ice using incoming solar heat flux and albedos 
    19461939!       ( see OASIS3 user guide, 5th edition, p39 ) 
    1947          zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) )   & 
    1948             &            / (  1.- ( alb_oce_mix(:,:  ) * ziceld(:,:)       & 
    1949             &                     + palbi      (:,:,1) * picefr(:,:) ) ) 
     1940         IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
     1941            DO jl = 1, jpl 
     1942               zqsr_ice(:,:,jl) = frcv(jpr_qsrmix)%z3(:,:,jl) * ( 1.- palbi(:,:,jl) )   & 
     1943                  &            / (  1.- ( alb_oce_mix(:,:   ) * ziceld(:,:)       & 
     1944                  &                     + palbi      (:,:,jl) * picefr(:,:) ) ) 
     1945            END DO 
     1946         ELSE 
     1947            DO jl = 1, jpl 
     1948               zqsr_ice(:,:,jl) = frcv(jpr_qsrmix)%z3(:,:, 1) * ( 1.- palbi(:,:,jl) )   & 
     1949                  &            / (  1.- ( alb_oce_mix(:,:   ) * ziceld(:,:)       & 
     1950                  &                     + palbi      (:,:,jl) * picefr(:,:) ) ) 
     1951            END DO 
     1952         ENDIF 
    19501953      CASE( 'none'      )       ! Not available as for now: needs additional coding   
    19511954      !                         ! since fields received, here zqsr_tot,  are not defined with none option 
     
    19841987      !                                                      ! ========================= ! 
    19851988      CASE ('coupled') 
    1986          IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN 
     1989         IF( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN 
    19871990            zdqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl) 
    19881991         ELSE 
     
    20072010      !                                                      ! ========================= ! 
    20082011      CASE ('coupled') 
    2009          qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) 
    2010          qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) 
     2012         IF( ln_mixcpl ) THEN 
     2013            DO jl=1,jpl 
     2014               qml_ice(:,:,jl) = qml_ice(:,:,jl) * xcplmask(:,:,0) + frcv(jpr_topm)%z3(:,:,jl) * zmsk(:,:) 
     2015               qcn_ice(:,:,jl) = qcn_ice(:,:,jl) * xcplmask(:,:,0) + frcv(jpr_botm)%z3(:,:,jl) * zmsk(:,:) 
     2016            ENDDO 
     2017         ELSE 
     2018            qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) 
     2019            qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) 
     2020         ENDIF 
    20112021      END SELECT 
    2012       ! 
    20132022      !                                                      ! ========================= ! 
    20142023      !                                                      !      Transmitted Qsr      !   [W/m2] 
     
    20172026         ! 
    20182027         !                    ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
    2019          ztri = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice    ! surface transmission parameter (Grenfell Maykut 77) 
     2028         ztri = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice    ! surface transmission when hi>10cm (Grenfell Maykut 77) 
    20202029         ! 
    2021          qtr_ice_top(:,:,:) = ztri * qsr_ice(:,:,:) 
    2022          WHERE( phs(:,:,:) >= 0.0_wp )   qtr_ice_top(:,:,:) = 0._wp            ! snow fully opaque 
    2023          WHERE( phi(:,:,:) <= 0.1_wp )   qtr_ice_top(:,:,:) = qsr_ice(:,:,:)   ! thin ice transmits all solar radiation 
     2030         WHERE    ( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) <  0.1_wp )       ! linear decrease from hi=0 to 10cm   
     2031            zqtr_ice_top(:,:,:) = qsr_ice(:,:,:) * ( ztri + ( 1._wp - ztri ) * ( 1._wp - phi(:,:,:) * 10._wp ) ) 
     2032         ELSEWHERE( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) >= 0.1_wp )       ! constant (ztri) when hi>10cm 
     2033            zqtr_ice_top(:,:,:) = qsr_ice(:,:,:) * ztri 
     2034         ELSEWHERE                                                         ! zero when hs>0 
     2035            zqtr_ice_top(:,:,:) = 0._wp 
     2036         END WHERE 
    20242037         !      
    20252038      ELSEIF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN      !==  conduction flux as surface forcing  ==! 
     
    20272040         !                    ! ===> here we must receive the qtr_ice_top array from the coupler 
    20282041         !                           for now just assume zero (fully opaque ice) 
    2029          qtr_ice_top(:,:,:) = 0._wp 
     2042         zqtr_ice_top(:,:,:) = 0._wp 
     2043         ! 
     2044      ENDIF 
     2045      ! 
     2046      IF( ln_mixcpl ) THEN 
     2047         DO jl=1,jpl 
     2048            qtr_ice_top(:,:,jl) = qtr_ice_top(:,:,jl) * xcplmask(:,:,0) + zqtr_ice_top(:,:,jl) * zmsk(:,:) 
     2049         ENDDO 
     2050      ELSE 
     2051         qtr_ice_top(:,:,:) = zqtr_ice_top(:,:,:) 
     2052      ENDIF 
     2053      !                                                      ! ================== ! 
     2054      !                                                      !   ice skin temp.   ! 
     2055      !                                                      ! ================== ! 
     2056      ! needed by Met Office 
     2057      IF( srcv(jpr_ts_ice)%laction ) THEN  
     2058         WHERE    ( frcv(jpr_ts_ice)%z3(:,:,:) > 0.0  )   ;   ztsu(:,:,:) =   0. + rt0  
     2059         ELSEWHERE( frcv(jpr_ts_ice)%z3(:,:,:) < -60. )   ;   ztsu(:,:,:) = -60. + rt0 
     2060         ELSEWHERE                                        ;   ztsu(:,:,:) = frcv(jpr_ts_ice)%z3(:,:,:) + rt0 
     2061         END WHERE 
     2062         ! 
     2063         IF( ln_mixcpl ) THEN 
     2064            DO jl=1,jpl 
     2065               pist(:,:,jl) = pist(:,:,jl) * xcplmask(:,:,0) + ztsu(:,:,jl) * zmsk(:,:) 
     2066            ENDDO 
     2067         ELSE 
     2068            pist(:,:,:) = ztsu(:,:,:) 
     2069         ENDIF 
    20302070         ! 
    20312071      ENDIF 
     
    20362076    
    20372077    
    2038    SUBROUTINE sbc_cpl_snd( kt ) 
     2078   SUBROUTINE sbc_cpl_snd( kt, Kbb, Kmm ) 
    20392079      !!---------------------------------------------------------------------- 
    20402080      !!             ***  ROUTINE sbc_cpl_snd  *** 
     
    20462086      !!---------------------------------------------------------------------- 
    20472087      INTEGER, INTENT(in) ::   kt 
     2088      INTEGER, INTENT(in) ::   Kbb, Kmm    ! ocean model time level index 
    20482089      ! 
    20492090      INTEGER ::   ji, jj, jl   ! dummy loop indices 
     
    20542095      !!---------------------------------------------------------------------- 
    20552096      ! 
    2056       isec = ( kt - nit000 ) * NINT( rdt )        ! date of exchanges 
     2097      isec = ( kt - nit000 ) * NINT( rn_Dt )        ! date of exchanges 
    20572098 
    20582099      zfr_l(:,:) = 1.- fr_i(:,:) 
     
    20622103      IF( ssnd(jps_toce)%laction .OR. ssnd(jps_tice)%laction .OR. ssnd(jps_tmix)%laction ) THEN 
    20632104          
    2064          IF ( nn_components == jp_iam_opa ) THEN 
    2065             ztmp1(:,:) = tsn(:,:,1,jp_tem)   ! send temperature as it is (potential or conservative) -> use of l_useCT on the received part 
     2105         IF( nn_components == jp_iam_opa ) THEN 
     2106            ztmp1(:,:) = ts(:,:,1,jp_tem,Kmm)   ! send temperature as it is (potential or conservative) -> use of l_useCT on the received part 
    20662107         ELSE 
    20672108            ! we must send the surface potential temperature  
    2068             IF( l_useCT )  THEN    ;   ztmp1(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 
    2069             ELSE                   ;   ztmp1(:,:) = tsn(:,:,1,jp_tem) 
     2109            IF( l_useCT )  THEN    ;   ztmp1(:,:) = eos_pt_from_ct( ts(:,:,1,jp_tem,Kmm), ts(:,:,1,jp_sal,Kmm) ) 
     2110            ELSE                   ;   ztmp1(:,:) = ts(:,:,1,jp_tem,Kmm) 
    20702111            ENDIF 
    20712112            ! 
     
    20952136               CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
    20962137               END SELECT 
    2097             CASE( 'oce and weighted ice')    ;   ztmp1(:,:) =   tsn(:,:,1,jp_tem) + rt0   
     2138            CASE( 'oce and weighted ice')    ;   ztmp1(:,:) =   ts(:,:,1,jp_tem,Kmm) + rt0   
    20982139               SELECT CASE( sn_snd_temp%clcat )  
    20992140               CASE( 'yes' )     
     
    21902231         CASE default    ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick%clcat' ) 
    21912232         END SELECT 
    2192          IF( ssnd(jps_fice)%laction )   CALL cpl_snd( jps_fice, isec, ztmp3, info ) 
     2233         CALL cpl_snd( jps_fice, isec, ztmp3, info ) 
    21932234      ENDIF 
    21942235 
     
    22502291      !                                                      !      Ice melt ponds       !  
    22512292      !                                                      ! ------------------------- ! 
    2252       ! needed by Met Office 
     2293      ! needed by Met Office: 1) fraction of ponded ice 2) local/actual pond depth  
    22532294      IF( ssnd(jps_a_p)%laction .OR. ssnd(jps_ht_p)%laction ) THEN  
    22542295         SELECT CASE( sn_snd_mpnd%cldes)   
     
    22562297            SELECT CASE( sn_snd_mpnd%clcat )   
    22572298            CASE( 'yes' )   
    2258                ztmp3(:,:,1:jpl) =  a_ip(:,:,1:jpl) 
    2259                ztmp4(:,:,1:jpl) =  v_ip(:,:,1:jpl)   
     2299               ztmp3(:,:,1:jpl) =  a_ip_frac(:,:,1:jpl) 
     2300               ztmp4(:,:,1:jpl) =  h_ip(:,:,1:jpl)   
    22602301            CASE( 'no' )   
    22612302               ztmp3(:,:,:) = 0.0   
    22622303               ztmp4(:,:,:) = 0.0   
    22632304               DO jl=1,jpl   
    2264                  ztmp3(:,:,1) = ztmp3(:,:,1) + a_ip(:,:,jpl)   
    2265                  ztmp4(:,:,1) = ztmp4(:,:,1) + v_ip(:,:,jpl)  
     2305                 ztmp3(:,:,1) = ztmp3(:,:,1) + a_ip_frac(:,:,jpl)   
     2306                 ztmp4(:,:,1) = ztmp4(:,:,1) + h_ip(:,:,jpl)  
    22662307               ENDDO   
    22672308            CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_mpnd%clcat' )   
     
    23012342      !                                                      !  CO2 flux from PISCES     !  
    23022343      !                                                      ! ------------------------- ! 
    2303       IF( ssnd(jps_co2)%laction .AND. l_co2cpl )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
     2344      IF( ssnd(jps_co2)%laction .AND. l_co2cpl )   THEN  
     2345         ztmp1(:,:) = oce_co2(:,:) * 1000.  ! conversion in molC/m2/s 
     2346         CALL cpl_snd( jps_co2, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ) , info ) 
     2347      ENDIF 
    23042348      ! 
    23052349      !                                                      ! ------------------------- ! 
     
    23162360         !                                                               i      i+1 (for I) 
    23172361         IF( nn_components == jp_iam_opa ) THEN 
    2318             zotx1(:,:) = un(:,:,1 
    2319             zoty1(:,:) = vn(:,:,1 
     2362            zotx1(:,:) = uu(:,:,1,Kmm 
     2363            zoty1(:,:) = vv(:,:,1,Kmm 
    23202364         ELSE         
    23212365            SELECT CASE( TRIM( sn_snd_crt%cldes ) ) 
    23222366            CASE( 'oce only'             )      ! C-grid ==> T 
    2323                DO jj = 2, jpjm1 
    2324                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    2325                      zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
    2326                      zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
    2327                   END DO 
    2328                END DO 
     2367               DO_2D( 0, 0, 0, 0 ) 
     2368                  zotx1(ji,jj) = 0.5 * ( uu(ji,jj,1,Kmm) + uu(ji-1,jj  ,1,Kmm) ) 
     2369                  zoty1(ji,jj) = 0.5 * ( vv(ji,jj,1,Kmm) + vv(ji  ,jj-1,1,Kmm) )  
     2370               END_2D 
    23292371            CASE( 'weighted oce and ice' )      ! Ocean and Ice on C-grid ==> T   
    2330                DO jj = 2, jpjm1 
    2331                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    2332                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   
    2333                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj) 
    2334                      zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
    2335                      zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
    2336                   END DO 
    2337                END DO 
    2338                CALL lbc_lnk_multi( 'sbccpl', zitx1, 'T', -1., zity1, 'T', -1. ) 
     2372               DO_2D( 0, 0, 0, 0 ) 
     2373                  zotx1(ji,jj) = 0.5 * ( uu   (ji,jj,1,Kmm) + uu   (ji-1,jj  ,1,Kmm) ) * zfr_l(ji,jj)   
     2374                  zoty1(ji,jj) = 0.5 * ( vv   (ji,jj,1,Kmm) + vv   (ji  ,jj-1,1,Kmm) ) * zfr_l(ji,jj) 
     2375                  zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  )     + u_ice(ji-1,jj    )     ) *  fr_i(ji,jj) 
     2376                  zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  )     + v_ice(ji  ,jj-1  )     ) *  fr_i(ji,jj) 
     2377               END_2D 
     2378               CALL lbc_lnk_multi( 'sbccpl', zitx1, 'T', -1.0_wp, zity1, 'T', -1.0_wp ) 
    23392379            CASE( 'mixed oce-ice'        )      ! Ocean and Ice on C-grid ==> T 
    2340                DO jj = 2, jpjm1 
    2341                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    2342                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   & 
    2343                         &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
    2344                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   & 
    2345                         &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
    2346                   END DO 
    2347                END DO 
     2380               DO_2D( 0, 0, 0, 0 ) 
     2381                  zotx1(ji,jj) = 0.5 * ( uu   (ji,jj,1,Kmm) + uu   (ji-1,jj  ,1,Kmm) ) * zfr_l(ji,jj)   & 
     2382                     &         + 0.5 * ( u_ice(ji,jj  )     + u_ice(ji-1,jj    )     ) *  fr_i(ji,jj) 
     2383                  zoty1(ji,jj) = 0.5 * ( vv   (ji,jj,1,Kmm) + vv   (ji  ,jj-1,1,Kmm) ) * zfr_l(ji,jj)   & 
     2384                     &         + 0.5 * ( v_ice(ji,jj  )     + v_ice(ji  ,jj-1  )     ) *  fr_i(ji,jj) 
     2385               END_2D 
    23482386            END SELECT 
    2349             CALL lbc_lnk_multi( 'sbccpl', zotx1, ssnd(jps_ocx1)%clgrid, -1.,  zoty1, ssnd(jps_ocy1)%clgrid, -1. ) 
     2387            CALL lbc_lnk_multi( 'sbccpl', zotx1, ssnd(jps_ocx1)%clgrid, -1.0_wp,  zoty1, ssnd(jps_ocy1)%clgrid, -1.0_wp ) 
    23502388            ! 
    23512389         ENDIF 
     
    24042442          SELECT CASE( TRIM( sn_snd_crtw%cldes ) )  
    24052443          CASE( 'oce only'             )      ! C-grid ==> T  
    2406              DO jj = 2, jpjm1  
    2407                 DO ji = fs_2, fs_jpim1   ! vector opt.  
    2408                    zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) )  
    2409                    zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji , jj-1,1) )   
    2410                 END DO  
    2411              END DO  
     2444             DO_2D( 0, 0, 0, 0 ) 
     2445                zotx1(ji,jj) = 0.5 * ( uu(ji,jj,1,Kmm) + uu(ji-1,jj  ,1,Kmm) )  
     2446                zoty1(ji,jj) = 0.5 * ( vv(ji,jj,1,Kmm) + vv(ji , jj-1,1,Kmm) )   
     2447             END_2D 
    24122448          CASE( 'weighted oce and ice' )      ! Ocean and Ice on C-grid ==> T    
    2413              DO jj = 2, jpjm1  
    2414                 DO ji = fs_2, fs_jpim1   ! vector opt.  
    2415                    zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)    
    2416                    zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)  
    2417                    zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
    2418                    zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
    2419                 END DO 
    2420              END DO 
    2421              CALL lbc_lnk_multi( 'sbccpl', zitx1, 'T', -1.,  zity1, 'T', -1. )  
     2449             DO_2D( 0, 0, 0, 0 ) 
     2450                zotx1(ji,jj) = 0.5 * ( uu   (ji,jj,1,Kmm) + uu   (ji-1,jj  ,1,Kmm) ) * zfr_l(ji,jj)    
     2451                zoty1(ji,jj) = 0.5 * ( vv   (ji,jj,1,Kmm) + vv   (ji  ,jj-1,1,Kmm) ) * zfr_l(ji,jj)  
     2452                zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
     2453                zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
     2454             END_2D 
     2455             CALL lbc_lnk_multi( 'sbccpl', zitx1, 'T', -1.0_wp,  zity1, 'T', -1.0_wp )  
    24222456          CASE( 'mixed oce-ice'        )      ! Ocean and Ice on C-grid ==> T   
    2423              DO jj = 2, jpjm1  
    2424                 DO ji = fs_2, fs_jpim1   ! vector opt.  
    2425                    zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   &  
    2426                       &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
    2427                    zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
    2428                       &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
    2429                 END DO 
    2430              END DO 
     2457             DO_2D( 0, 0, 0, 0 ) 
     2458                zotx1(ji,jj) = 0.5 * ( uu   (ji,jj,1,Kmm) + uu   (ji-1,jj  ,1,Kmm) ) * zfr_l(ji,jj)   &  
     2459                   &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
     2460                zoty1(ji,jj) = 0.5 * ( vv   (ji,jj,1,Kmm) + vv   (ji  ,jj-1,1,Kmm) ) * zfr_l(ji,jj)   &  
     2461                   &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
     2462             END_2D 
    24312463          END SELECT 
    2432          CALL lbc_lnk_multi( 'sbccpl', zotx1, ssnd(jps_ocxw)%clgrid, -1., zoty1, ssnd(jps_ocyw)%clgrid, -1. )  
     2464         CALL lbc_lnk_multi( 'sbccpl', zotx1, ssnd(jps_ocxw)%clgrid, -1.0_wp, zoty1, ssnd(jps_ocyw)%clgrid, -1.0_wp )  
    24332465         !  
    24342466         !  
     
    24672499      IF( ssnd(jps_ficet)%laction ) THEN  
    24682500         CALL cpl_snd( jps_ficet, isec, RESHAPE ( fr_i, (/jpi,jpj,1/) ), info )  
    2469       END IF  
     2501      ENDIF  
    24702502      !                                                      ! ------------------------- !  
    24712503      !                                                      !   Water levels to waves   !  
     
    24742506         IF( ln_apr_dyn ) THEN   
    24752507            IF( kt /= nit000 ) THEN   
    2476                ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
     2508               ztmp1(:,:) = ssh(:,:,Kbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
    24772509            ELSE   
    2478                ztmp1(:,:) = sshb(:,: 
     2510               ztmp1(:,:) = ssh(:,:,Kbb 
    24792511            ENDIF   
    24802512         ELSE   
    2481             ztmp1(:,:) = sshn(:,: 
     2513            ztmp1(:,:) = ssh(:,:,Kmm 
    24822514         ENDIF   
    24832515         CALL cpl_snd( jps_wlev  , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )  
    2484       END IF  
     2516      ENDIF  
    24852517      ! 
    24862518      !  Fields sent by OPA to SAS when doing OPA<->SAS coupling 
     
    24892521         !                          ! removed inverse barometer ssh when Patm 
    24902522         !                          forcing is used (for sea-ice dynamics) 
    2491          IF( ln_apr_dyn ) THEN   ;   ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    2492          ELSE                    ;   ztmp1(:,:) = sshn(:,:) 
     2523         IF( ln_apr_dyn ) THEN   ;   ztmp1(:,:) = ssh(:,:,Kbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     2524         ELSE                    ;   ztmp1(:,:) = ssh(:,:,Kmm) 
    24932525         ENDIF 
    24942526         CALL cpl_snd( jps_ssh   , isec, RESHAPE ( ztmp1            , (/jpi,jpj,1/) ), info ) 
     
    24972529      !                                                        ! SSS 
    24982530      IF( ssnd(jps_soce  )%laction )  THEN 
    2499          CALL cpl_snd( jps_soce  , isec, RESHAPE ( tsn(:,:,1,jp_sal), (/jpi,jpj,1/) ), info ) 
     2531         CALL cpl_snd( jps_soce  , isec, RESHAPE ( ts(:,:,1,jp_sal,Kmm), (/jpi,jpj,1/) ), info ) 
    25002532      ENDIF 
    25012533      !                                                        ! first T level thickness  
    25022534      IF( ssnd(jps_e3t1st )%laction )  THEN 
    2503          CALL cpl_snd( jps_e3t1st, isec, RESHAPE ( e3t_n(:,:,1)   , (/jpi,jpj,1/) ), info ) 
     2535         CALL cpl_snd( jps_e3t1st, isec, RESHAPE ( e3t(:,:,1,Kmm)   , (/jpi,jpj,1/) ), info ) 
    25042536      ENDIF 
    25052537      !                                                        ! Qsr fraction 
     
    25242556      !                                                      ! ------------------------- ! 
    25252557      ! needed by Met Office 
    2526       CALL eos_fzp(tsn(:,:,1,jp_sal), sstfrz) 
     2558      CALL eos_fzp(ts(:,:,1,jp_sal,Kmm), sstfrz) 
    25272559      ztmp1(:,:) = sstfrz(:,:) + rt0 
    25282560      IF( ssnd(jps_sstfrz)%laction )  CALL cpl_snd( jps_sstfrz, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info) 
Note: See TracChangeset for help on using the changeset viewer.