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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r4664 r6225  
    99   !!            3.4  ! 2011_11  (C. Harris) more flexibility + multi-category fields 
    1010   !!---------------------------------------------------------------------- 
    11 #if defined key_oasis3 || defined key_oasis4 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_oasis3' or 'key_oasis4'   Coupled Ocean/Atmosphere formulation 
    1411   !!---------------------------------------------------------------------- 
    1512   !!   namsbc_cpl      : coupled formulation namlist 
     
    2118   !!   sbc_cpl_snd     : send     fields to the atmosphere 
    2219   !!---------------------------------------------------------------------- 
    23    USE dom_oce         ! ocean space and time domain 
    24    USE sbc_oce         ! Surface boundary condition: ocean fields 
    25    USE sbc_ice         ! Surface boundary condition: ice fields 
    26    USE sbcdcy          ! surface boundary condition: diurnal cycle 
    27    USE phycst          ! physical constants 
     20   USE dom_oce        ! ocean space and time domain 
     21   USE sbc_oce        ! Surface boundary condition: ocean fields 
     22   USE sbc_ice        ! Surface boundary condition: ice fields 
     23   USE sbcapr         ! Stochastic param. : ??? 
     24   USE sbcdcy         ! surface boundary condition: diurnal cycle 
     25   USE phycst         ! physical constants 
    2826#if defined key_lim3 
    29    USE par_ice         ! ice parameters 
    30    USE ice             ! ice variables 
     27   USE ice            ! ice variables 
    3128#endif 
    3229#if defined key_lim2 
    33    USE par_ice_2       ! ice parameters 
    34    USE ice_2           ! ice variables 
     30   USE par_ice_2      ! ice parameters 
     31   USE ice_2          ! ice variables 
    3532#endif 
    36 #if defined key_oasis3 
    37    USE cpl_oasis3      ! OASIS3 coupling 
    38 #endif 
    39 #if defined key_oasis4 
    40    USE cpl_oasis4      ! OASIS4 coupling 
    41 #endif 
    42    USE geo2ocean       !  
    43    USE oce   , ONLY : tsn, un, vn 
    44    USE albedo          ! 
    45    USE in_out_manager  ! I/O manager 
    46    USE iom             ! NetCDF library 
    47    USE lib_mpp         ! distribued memory computing library 
    48    USE wrk_nemo        ! work arrays 
    49    USE timing          ! Timing 
    50    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     33   USE cpl_oasis3     ! OASIS3 coupling 
     34   USE geo2ocean      !  
     35   USE oce   , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
     36   USE albedo         !  
     37   USE eosbn2         !  
     38   USE sbcrnf  , ONLY : l_rnfcpl 
    5139#if defined key_cpl_carbon_cycle 
    5240   USE p4zflx, ONLY : oce_co2 
    5341#endif 
    54    USE diaar5, ONLY :   lk_diaar5 
    5542#if defined key_cice 
    5643   USE ice_domain_size, only: ncat 
    5744#endif 
     45#if defined key_lim3 
     46   USE limthd_dh      ! for CALL lim_thd_snwblow 
     47#endif 
     48   ! 
     49   USE in_out_manager ! I/O manager 
     50   USE iom            ! NetCDF library 
     51   USE lib_mpp        ! distribued memory computing library 
     52   USE wrk_nemo       ! work arrays 
     53   USE timing         ! Timing 
     54   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     55 
    5856   IMPLICIT NONE 
    5957   PRIVATE 
    6058 
    61    PUBLIC   sbc_cpl_rcv        ! routine called by sbc_ice_lim(_2).F90 
    62    PUBLIC   sbc_cpl_snd        ! routine called by step.F90 
    63    PUBLIC   sbc_cpl_ice_tau    ! routine called by sbc_ice_lim(_2).F90 
    64    PUBLIC   sbc_cpl_ice_flx    ! routine called by sbc_ice_lim(_2).F90 
    65  
    66    INTEGER, PARAMETER ::   jpr_otx1   =  1            ! 3 atmosphere-ocean stress components on grid 1 
    67    INTEGER, PARAMETER ::   jpr_oty1   =  2            !  
    68    INTEGER, PARAMETER ::   jpr_otz1   =  3            !  
    69    INTEGER, PARAMETER ::   jpr_otx2   =  4            ! 3 atmosphere-ocean stress components on grid 2 
    70    INTEGER, PARAMETER ::   jpr_oty2   =  5            !  
    71    INTEGER, PARAMETER ::   jpr_otz2   =  6            !  
    72    INTEGER, PARAMETER ::   jpr_itx1   =  7            ! 3 atmosphere-ice   stress components on grid 1 
    73    INTEGER, PARAMETER ::   jpr_ity1   =  8            !  
    74    INTEGER, PARAMETER ::   jpr_itz1   =  9            !  
    75    INTEGER, PARAMETER ::   jpr_itx2   = 10            ! 3 atmosphere-ice   stress components on grid 2 
    76    INTEGER, PARAMETER ::   jpr_ity2   = 11            !  
    77    INTEGER, PARAMETER ::   jpr_itz2   = 12            !  
    78    INTEGER, PARAMETER ::   jpr_qsroce = 13            ! Qsr above the ocean 
    79    INTEGER, PARAMETER ::   jpr_qsrice = 14            ! Qsr above the ice 
     59   PUBLIC   sbc_cpl_init      ! routine called by sbcmod.F90 
     60   PUBLIC   sbc_cpl_rcv       ! routine called by sbc_ice_lim(_2).F90 
     61   PUBLIC   sbc_cpl_snd       ! routine called by step.F90 
     62   PUBLIC   sbc_cpl_ice_tau   ! routine called by sbc_ice_lim(_2).F90 
     63   PUBLIC   sbc_cpl_ice_flx   ! routine called by sbc_ice_lim(_2).F90 
     64   PUBLIC   sbc_cpl_alloc     ! routine called in sbcice_cice.F90 
     65 
     66   INTEGER, PARAMETER ::   jpr_otx1   =  1   ! 3 atmosphere-ocean stress components on grid 1 
     67   INTEGER, PARAMETER ::   jpr_oty1   =  2   !  
     68   INTEGER, PARAMETER ::   jpr_otz1   =  3   !  
     69   INTEGER, PARAMETER ::   jpr_otx2   =  4   ! 3 atmosphere-ocean stress components on grid 2 
     70   INTEGER, PARAMETER ::   jpr_oty2   =  5   !  
     71   INTEGER, PARAMETER ::   jpr_otz2   =  6   !  
     72   INTEGER, PARAMETER ::   jpr_itx1   =  7   ! 3 atmosphere-ice   stress components on grid 1 
     73   INTEGER, PARAMETER ::   jpr_ity1   =  8   !  
     74   INTEGER, PARAMETER ::   jpr_itz1   =  9   !  
     75   INTEGER, PARAMETER ::   jpr_itx2   = 10   ! 3 atmosphere-ice   stress components on grid 2 
     76   INTEGER, PARAMETER ::   jpr_ity2   = 11   !  
     77   INTEGER, PARAMETER ::   jpr_itz2   = 12   !  
     78   INTEGER, PARAMETER ::   jpr_qsroce = 13   ! Qsr above the ocean 
     79   INTEGER, PARAMETER ::   jpr_qsrice = 14   ! Qsr above the ice 
    8080   INTEGER, PARAMETER ::   jpr_qsrmix = 15  
    81    INTEGER, PARAMETER ::   jpr_qnsoce = 16            ! Qns above the ocean 
    82    INTEGER, PARAMETER ::   jpr_qnsice = 17            ! Qns above the ice 
     81   INTEGER, PARAMETER ::   jpr_qnsoce = 16   ! Qns above the ocean 
     82   INTEGER, PARAMETER ::   jpr_qnsice = 17   ! Qns above the ice 
    8383   INTEGER, PARAMETER ::   jpr_qnsmix = 18 
    84    INTEGER, PARAMETER ::   jpr_rain   = 19            ! total liquid precipitation (rain) 
    85    INTEGER, PARAMETER ::   jpr_snow   = 20            ! solid precipitation over the ocean (snow) 
    86    INTEGER, PARAMETER ::   jpr_tevp   = 21            ! total evaporation 
    87    INTEGER, PARAMETER ::   jpr_ievp   = 22            ! solid evaporation (sublimation) 
    88    INTEGER, PARAMETER ::   jpr_sbpr   = 23            ! sublimation - liquid precipitation - solid precipitation 
    89    INTEGER, PARAMETER ::   jpr_semp   = 24            ! solid freshwater budget (sublimation - snow) 
    90    INTEGER, PARAMETER ::   jpr_oemp   = 25            ! ocean freshwater budget (evap - precip) 
    91    INTEGER, PARAMETER ::   jpr_w10m   = 26            ! 10m wind 
    92    INTEGER, PARAMETER ::   jpr_dqnsdt = 27            ! d(Q non solar)/d(temperature) 
    93    INTEGER, PARAMETER ::   jpr_rnf    = 28            ! runoffs 
    94    INTEGER, PARAMETER ::   jpr_cal    = 29            ! calving 
    95    INTEGER, PARAMETER ::   jpr_taum   = 30            ! wind stress module 
     84   INTEGER, PARAMETER ::   jpr_rain   = 19   ! total liquid precipitation (rain) 
     85   INTEGER, PARAMETER ::   jpr_snow   = 20   ! solid precipitation over the ocean (snow) 
     86   INTEGER, PARAMETER ::   jpr_tevp   = 21   ! total evaporation 
     87   INTEGER, PARAMETER ::   jpr_ievp   = 22   ! solid evaporation (sublimation) 
     88   INTEGER, PARAMETER ::   jpr_sbpr   = 23   ! sublimation - liquid precipitation - solid precipitation 
     89   INTEGER, PARAMETER ::   jpr_semp   = 24   ! solid freshwater budget (sublimation - snow) 
     90   INTEGER, PARAMETER ::   jpr_oemp   = 25   ! ocean freshwater budget (evap - precip) 
     91   INTEGER, PARAMETER ::   jpr_w10m   = 26   ! 10m wind 
     92   INTEGER, PARAMETER ::   jpr_dqnsdt = 27   ! d(Q non solar)/d(temperature) 
     93   INTEGER, PARAMETER ::   jpr_rnf    = 28   ! runoffs 
     94   INTEGER, PARAMETER ::   jpr_cal    = 29   ! calving 
     95   INTEGER, PARAMETER ::   jpr_taum   = 30   ! wind stress module 
    9696   INTEGER, PARAMETER ::   jpr_co2    = 31 
    97    INTEGER, PARAMETER ::   jpr_topm   = 32            ! topmeltn 
    98    INTEGER, PARAMETER ::   jpr_botm   = 33            ! botmeltn 
    99    INTEGER, PARAMETER ::   jprcv      = 33            ! total number of fields received 
    100  
    101    INTEGER, PARAMETER ::   jps_fice   =  1            ! ice fraction  
    102    INTEGER, PARAMETER ::   jps_toce   =  2            ! ocean temperature 
    103    INTEGER, PARAMETER ::   jps_tice   =  3            ! ice   temperature 
    104    INTEGER, PARAMETER ::   jps_tmix   =  4            ! mixed temperature (ocean+ice) 
    105    INTEGER, PARAMETER ::   jps_albice =  5            ! ice   albedo 
    106    INTEGER, PARAMETER ::   jps_albmix =  6            ! mixed albedo 
    107    INTEGER, PARAMETER ::   jps_hice   =  7            ! ice  thickness 
    108    INTEGER, PARAMETER ::   jps_hsnw   =  8            ! snow thickness 
    109    INTEGER, PARAMETER ::   jps_ocx1   =  9            ! ocean current on grid 1 
    110    INTEGER, PARAMETER ::   jps_ocy1   = 10            ! 
    111    INTEGER, PARAMETER ::   jps_ocz1   = 11            ! 
    112    INTEGER, PARAMETER ::   jps_ivx1   = 12            ! ice   current on grid 1 
    113    INTEGER, PARAMETER ::   jps_ivy1   = 13            ! 
    114    INTEGER, PARAMETER ::   jps_ivz1   = 14            ! 
     97   INTEGER, PARAMETER ::   jpr_topm   = 32   ! topmeltn 
     98   INTEGER, PARAMETER ::   jpr_botm   = 33   ! botmeltn 
     99   INTEGER, PARAMETER ::   jpr_sflx   = 34   ! salt flux 
     100   INTEGER, PARAMETER ::   jpr_toce   = 35   ! ocean temperature 
     101   INTEGER, PARAMETER ::   jpr_soce   = 36   ! ocean salinity 
     102   INTEGER, PARAMETER ::   jpr_ocx1   = 37   ! ocean current on grid 1 
     103   INTEGER, PARAMETER ::   jpr_ocy1   = 38   ! 
     104   INTEGER, PARAMETER ::   jpr_ssh    = 39   ! sea surface height 
     105   INTEGER, PARAMETER ::   jpr_fice   = 40   ! ice fraction           
     106   INTEGER, PARAMETER ::   jpr_e3t1st = 41   ! first T level thickness  
     107   INTEGER, PARAMETER ::   jpr_fraqsr = 42   ! fraction of solar net radiation absorbed in the first ocean level 
     108   INTEGER, PARAMETER ::   jprcv      = 42   ! total number of fields received 
     109 
     110   INTEGER, PARAMETER ::   jps_fice   =  1   ! ice fraction sent to the atmosphere 
     111   INTEGER, PARAMETER ::   jps_toce   =  2   ! ocean temperature 
     112   INTEGER, PARAMETER ::   jps_tice   =  3   ! ice   temperature 
     113   INTEGER, PARAMETER ::   jps_tmix   =  4   ! mixed temperature (ocean+ice) 
     114   INTEGER, PARAMETER ::   jps_albice =  5   ! ice   albedo 
     115   INTEGER, PARAMETER ::   jps_albmix =  6   ! mixed albedo 
     116   INTEGER, PARAMETER ::   jps_hice   =  7   ! ice  thickness 
     117   INTEGER, PARAMETER ::   jps_hsnw   =  8   ! snow thickness 
     118   INTEGER, PARAMETER ::   jps_ocx1   =  9   ! ocean current on grid 1 
     119   INTEGER, PARAMETER ::   jps_ocy1   = 10   ! 
     120   INTEGER, PARAMETER ::   jps_ocz1   = 11   ! 
     121   INTEGER, PARAMETER ::   jps_ivx1   = 12   ! ice   current on grid 1 
     122   INTEGER, PARAMETER ::   jps_ivy1   = 13   ! 
     123   INTEGER, PARAMETER ::   jps_ivz1   = 14   ! 
    115124   INTEGER, PARAMETER ::   jps_co2    = 15 
    116    INTEGER, PARAMETER ::   jpsnd      = 15            ! total number of fields sended 
    117  
    118    !                                                         !!** namelist namsbc_cpl ** 
    119    TYPE ::   FLD_C 
    120       CHARACTER(len = 32) ::   cldes                  ! desciption of the coupling strategy 
    121       CHARACTER(len = 32) ::   clcat                  ! multiple ice categories strategy 
    122       CHARACTER(len = 32) ::   clvref                 ! reference of vector ('spherical' or 'cartesian') 
    123       CHARACTER(len = 32) ::   clvor                  ! orientation of vector fields ('eastward-northward' or 'local grid') 
    124       CHARACTER(len = 32) ::   clvgrd                 ! grids on which is located the vector fields 
     125   INTEGER, PARAMETER ::   jps_soce   = 16   ! ocean salinity 
     126   INTEGER, PARAMETER ::   jps_ssh    = 17   ! sea surface height 
     127   INTEGER, PARAMETER ::   jps_qsroce = 18   ! Qsr above the ocean 
     128   INTEGER, PARAMETER ::   jps_qnsoce = 19   ! Qns above the ocean 
     129   INTEGER, PARAMETER ::   jps_oemp   = 20   ! ocean freshwater budget (evap - precip) 
     130   INTEGER, PARAMETER ::   jps_sflx   = 21   ! salt flux 
     131   INTEGER, PARAMETER ::   jps_otx1   = 22   ! 2 atmosphere-ocean stress components on grid 1 
     132   INTEGER, PARAMETER ::   jps_oty1   = 23   !  
     133   INTEGER, PARAMETER ::   jps_rnf    = 24   ! runoffs 
     134   INTEGER, PARAMETER ::   jps_taum   = 25   ! wind stress module 
     135   INTEGER, PARAMETER ::   jps_fice2  = 26   ! ice fraction sent to OPA (by SAS when doing SAS-OPA coupling) 
     136   INTEGER, PARAMETER ::   jps_e3t1st = 27   ! first level depth (vvl) 
     137   INTEGER, PARAMETER ::   jps_fraqsr = 28   ! fraction of solar net radiation absorbed in the first ocean level 
     138   INTEGER, PARAMETER ::   jpsnd      = 28   ! total number of fields sended 
     139 
     140   !                                  !!** namelist namsbc_cpl ** 
     141   TYPE ::   FLD_C                     !    
     142      CHARACTER(len = 32) ::   cldes      ! desciption of the coupling strategy 
     143      CHARACTER(len = 32) ::   clcat      ! multiple ice categories strategy 
     144      CHARACTER(len = 32) ::   clvref     ! reference of vector ('spherical' or 'cartesian') 
     145      CHARACTER(len = 32) ::   clvor      ! orientation of vector fields ('eastward-northward' or 'local grid') 
     146      CHARACTER(len = 32) ::   clvgrd     ! grids on which is located the vector fields 
    125147   END TYPE FLD_C 
    126    ! Send to the atmosphere                           ! 
     148   !                                   ! Send to the atmosphere   
    127149   TYPE(FLD_C) ::   sn_snd_temp, sn_snd_alb, sn_snd_thick, sn_snd_crt, sn_snd_co2                         
    128    ! Received from the atmosphere                     ! 
     150   !                                   ! Received from the atmosphere 
    129151   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 
    130152   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2                         
    131  
     153   !                                   ! Other namelist parameters 
     154   INTEGER     ::   nn_cplmodel           ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 
     155   LOGICAL     ::   ln_usecplmask         !  use a coupling mask file to merge data received from several models 
     156                                         !   -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) 
    132157   TYPE ::   DYNARR      
    133158      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   z3    
    134159   END TYPE DYNARR 
    135160 
    136    TYPE( DYNARR ), SAVE, DIMENSION(jprcv) ::   frcv                      ! all fields recieved from the atmosphere 
    137  
    138    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix     ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
    139  
    140    INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo           ! OASIS info argument 
    141  
    142 #if ! defined key_lim2   &&   ! defined key_lim3 
    143    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   u_ice, v_ice,fr1_i0,fr2_i0          ! jpi, jpj 
    144    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tn_ice, alb_ice, qns_ice, dqns_ice  ! (jpi,jpj,jpl) 
    145 #endif 
    146  
    147 #if defined key_cice 
    148    INTEGER, PARAMETER ::   jpl = ncat 
    149 #elif ! defined key_lim2   &&   ! defined key_lim3 
    150    INTEGER, PARAMETER ::   jpl = 1  
    151    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   emp_ice 
    152    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice 
    153 #endif 
    154  
    155 #if ! defined key_lim3   &&  ! defined key_cice 
    156    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  a_i 
    157 #endif 
    158  
    159 #if ! defined key_lim3 
    160    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  ht_i, ht_s 
    161 #endif 
    162  
    163 #if ! defined key_cice 
    164    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  topmelt, botmelt 
    165 #endif 
     161   TYPE( DYNARR ), SAVE, DIMENSION(jprcv) ::   frcv                     ! all fields recieved from the atmosphere 
     162 
     163   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
     164 
     165   INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo          ! OASIS info argument 
    166166 
    167167   !! Substitution 
    168168#  include "vectopt_loop_substitute.h90" 
    169169   !!---------------------------------------------------------------------- 
    170    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     170   !! NEMO/OPA 3.7 , NEMO Consortium (2015) 
    171171   !! $Id$ 
    172172   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    173173   !!---------------------------------------------------------------------- 
    174  
    175174CONTAINS 
    176175   
     
    179178      !!             ***  FUNCTION sbc_cpl_alloc  *** 
    180179      !!---------------------------------------------------------------------- 
    181       INTEGER :: ierr(4),jn 
     180      INTEGER :: ierr(3) 
    182181      !!---------------------------------------------------------------------- 
    183182      ierr(:) = 0 
    184183      ! 
    185184      ALLOCATE( albedo_oce_mix(jpi,jpj), nrcvinfo(jprcv),  STAT=ierr(1) ) 
    186       ! 
    187 #if ! defined key_lim2 && ! defined key_lim3 
    188       ! quick patch to be able to run the coupled model without sea-ice... 
    189       ALLOCATE( u_ice(jpi,jpj) , fr1_i0(jpi,jpj) , tn_ice (jpi,jpj,1) ,     & 
    190                 v_ice(jpi,jpj) , fr2_i0(jpi,jpj) , alb_ice(jpi,jpj,1),      & 
    191                 emp_ice(jpi,jpj) , qns_ice(jpi,jpj,1) , dqns_ice(jpi,jpj,1) , STAT=ierr(2) ) 
     185       
     186#if ! defined key_lim3 && ! defined key_lim2 && ! defined key_cice 
     187      ALLOCATE( a_i(jpi,jpj,1) , STAT=ierr(2) )  ! used in sbcice_if.F90 (done here as there is no sbc_ice_if_init) 
    192188#endif 
    193  
    194 #if ! defined key_lim3 && ! defined key_cice 
    195       ALLOCATE( a_i(jpi,jpj,jpl) , STAT=ierr(3) ) 
    196 #endif 
    197  
    198 #if defined key_cice || defined key_lim2 
    199       ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(4) ) 
    200 #endif 
     189      ALLOCATE( xcplmask(jpi,jpj,0:nn_cplmodel) , STAT=ierr(3) ) 
     190      ! 
    201191      sbc_cpl_alloc = MAXVAL( ierr ) 
    202192      IF( lk_mpp            )   CALL mpp_sum ( sbc_cpl_alloc ) 
     
    210200      !!             ***  ROUTINE sbc_cpl_init  *** 
    211201      !! 
    212       !! ** Purpose :   Initialisation of send and recieved information from 
     202      !! ** Purpose :   Initialisation of send and received information from 
    213203      !!                the atmospheric component 
    214204      !! 
     
    218208      !!              * initialise the OASIS coupler 
    219209      !!---------------------------------------------------------------------- 
    220       INTEGER, INTENT(in) ::   k_ice    ! ice management in the sbc (=0/1/2/3) 
    221       !! 
    222       INTEGER ::   jn   ! dummy loop index 
    223       INTEGER ::   ios  ! Local integer output status for namelist read 
     210      INTEGER, INTENT(in) ::   k_ice   ! ice management in the sbc (=0/1/2/3) 
     211      ! 
     212      INTEGER ::   jn          ! dummy loop index 
     213      INTEGER ::   ios, inum   ! Local integer 
    224214      REAL(wp), POINTER, DIMENSION(:,:) ::   zacs, zaos 
    225215      !! 
    226       NAMELIST/namsbc_cpl/  sn_snd_temp, sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2,   & 
    227          &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr,   & 
    228          &                  sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf  , sn_rcv_cal   , sn_rcv_iceflx  , sn_rcv_co2 
     216      NAMELIST/namsbc_cpl/  sn_snd_temp, sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2,      & 
     217         &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr,      & 
     218         &                  sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf  , sn_rcv_cal   , sn_rcv_iceflx,   & 
     219         &                  sn_rcv_co2 , nn_cplmodel  , ln_usecplmask 
    229220      !!--------------------------------------------------------------------- 
    230221      ! 
    231       IF( nn_timing == 1 )  CALL timing_start('sbc_cpl_init') 
    232       ! 
    233       CALL wrk_alloc( jpi,jpj, zacs, zaos ) 
     222      IF( nn_timing == 1 )   CALL timing_start('sbc_cpl_init') 
     223      ! 
     224      CALL wrk_alloc( jpi,jpj,   zacs, zaos ) 
    234225 
    235226      ! ================================ ! 
    236227      !      Namelist informations       ! 
    237228      ! ================================ ! 
    238  
     229      ! 
    239230      REWIND( numnam_ref )              ! Namelist namsbc_cpl in reference namelist : Variables for OASIS coupling 
    240231      READ  ( numnam_ref, namsbc_cpl, IOSTAT = ios, ERR = 901) 
    241 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_cpl in reference namelist', lwp ) 
    242  
     232901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namsbc_cpl in reference namelist', lwp ) 
     233      ! 
    243234      REWIND( numnam_cfg )              ! Namelist namsbc_cpl in configuration namelist : Variables for OASIS coupling 
    244235      READ  ( numnam_cfg, namsbc_cpl, IOSTAT = ios, ERR = 902 ) 
    245 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_cpl in configuration namelist', lwp ) 
     236902   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namsbc_cpl in configuration namelist', lwp ) 
    246237      IF(lwm) WRITE ( numond, namsbc_cpl ) 
    247  
     238      ! 
    248239      IF(lwp) THEN                        ! control print 
    249240         WRITE(numout,*) 
    250241         WRITE(numout,*)'sbc_cpl_init : namsbc_cpl namelist ' 
    251242         WRITE(numout,*)'~~~~~~~~~~~~' 
     243      ENDIF 
     244      IF( lwp .AND. ln_cpl ) THEN                        ! control print 
    252245         WRITE(numout,*)'  received fields (mutiple ice categogies)' 
    253246         WRITE(numout,*)'      10m wind module                 = ', TRIM(sn_rcv_w10m%cldes  ), ' (', TRIM(sn_rcv_w10m%clcat  ), ')' 
     
    274267         WRITE(numout,*)'                      - mesh          = ', sn_snd_crt%clvgrd 
    275268         WRITE(numout,*)'      oce co2 flux                    = ', TRIM(sn_snd_co2%cldes   ), ' (', TRIM(sn_snd_co2%clcat   ), ')' 
     269         WRITE(numout,*)'  nn_cplmodel                         = ', nn_cplmodel 
     270         WRITE(numout,*)'  ln_usecplmask                       = ', ln_usecplmask 
    276271      ENDIF 
    277272 
     
    377372         srcv(jpr_ity1)%clgrid = 'V'                  ! i.e. it is always at U- & V-points for i- & j-comp. resp. 
    378373      ENDIF 
    379         
     374      ! 
    380375      !                                                      ! ------------------------- ! 
    381376      !                                                      !    freshwater budget      !   E-P 
     
    391386      srcv(jpr_oemp)%clname = 'OOEvaMPr'      ! ocean water budget = ocean Evap - ocean precip 
    392387      SELECT CASE( TRIM( sn_rcv_emp%cldes ) ) 
     388      CASE( 'none'          )       ! nothing to do 
    393389      CASE( 'oce only'      )   ;   srcv(                                 jpr_oemp   )%laction = .TRUE.  
    394390      CASE( 'conservative'  ) 
     
    398394      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_emp%cldes' ) 
    399395      END SELECT 
    400  
     396      ! 
    401397      !                                                      ! ------------------------- ! 
    402398      !                                                      !     Runoffs & Calving     !    
    403399      !                                                      ! ------------------------- ! 
    404       srcv(jpr_rnf   )%clname = 'O_Runoff'   ;   IF( TRIM( sn_rcv_rnf%cldes ) == 'coupled' )   srcv(jpr_rnf)%laction = .TRUE. 
    405 ! This isn't right - really just want ln_rnf_emp changed 
    406 !                                                 IF( TRIM( sn_rcv_rnf%cldes ) == 'climato' )   THEN   ;   ln_rnf = .TRUE. 
    407 !                                                 ELSE                                                 ;   ln_rnf = .FALSE. 
    408 !                                                 ENDIF 
     400      srcv(jpr_rnf   )%clname = 'O_Runoff' 
     401      IF( TRIM( sn_rcv_rnf%cldes ) == 'coupled' ) THEN 
     402         srcv(jpr_rnf)%laction = .TRUE. 
     403         l_rnfcpl              = .TRUE.                      ! -> no need to read runoffs in sbcrnf 
     404         ln_rnf                = nn_components /= jp_iam_sas ! -> force to go through sbcrnf if not sas 
     405         IF(lwp) WRITE(numout,*) 
     406         IF(lwp) WRITE(numout,*) '   runoffs received from oasis -> force ln_rnf = ', ln_rnf 
     407      ENDIF 
     408      ! 
    409409      srcv(jpr_cal   )%clname = 'OCalving'   ;   IF( TRIM( sn_rcv_cal%cldes ) == 'coupled' )   srcv(jpr_cal)%laction = .TRUE. 
    410  
     410      ! 
    411411      !                                                      ! ------------------------- ! 
    412412      !                                                      !    non solar radiation    !   Qns 
     
    416416      srcv(jpr_qnsmix)%clname = 'O_QnsMix' 
    417417      SELECT CASE( TRIM( sn_rcv_qns%cldes ) ) 
     418      CASE( 'none'          )       ! nothing to do 
    418419      CASE( 'oce only'      )   ;   srcv(               jpr_qnsoce   )%laction = .TRUE. 
    419420      CASE( 'conservative'  )   ;   srcv( (/jpr_qnsice, jpr_qnsmix/) )%laction = .TRUE. 
     
    431432      srcv(jpr_qsrmix)%clname = 'O_QsrMix' 
    432433      SELECT CASE( TRIM( sn_rcv_qsr%cldes ) ) 
     434      CASE( 'none'          )       ! nothing to do 
    433435      CASE( 'oce only'      )   ;   srcv(               jpr_qsroce   )%laction = .TRUE. 
    434436      CASE( 'conservative'  )   ;   srcv( (/jpr_qsrice, jpr_qsrmix/) )%laction = .TRUE. 
     
    446448      ! 
    447449      ! non solar sensitivity mandatory for LIM ice model 
    448       IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 4) & 
     450      IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 4 .AND. nn_components /= jp_iam_sas ) & 
    449451         CALL ctl_stop( 'sbc_cpl_init: sn_rcv_dqnsdt%cldes must be coupled in namsbc_cpl namelist' ) 
    450452      ! non solar sensitivity mandatory for mixed oce-ice solar radiation coupling technique 
     
    479481         srcv(jpr_topm:jpr_botm)%laction = .TRUE. 
    480482      ENDIF 
    481  
    482       ! Allocate all parts of frcv used for received fields 
     483      !                                                      ! ------------------------------- ! 
     484      !                                                      !   OPA-SAS coupling - rcv by opa !    
     485      !                                                      ! ------------------------------- ! 
     486      srcv(jpr_sflx)%clname = 'O_SFLX' 
     487      srcv(jpr_fice)%clname = 'RIceFrc' 
     488      ! 
     489      IF( nn_components == jp_iam_opa ) THEN    ! OPA coupled to SAS via OASIS: force received field by OPA (sent by SAS) 
     490         srcv(:)%laction = .FALSE.   ! force default definition in case of opa <-> sas coupling 
     491         srcv(:)%clgrid  = 'T'       ! force default definition in case of opa <-> sas coupling 
     492         srcv(:)%nsgn    = 1.        ! force default definition in case of opa <-> sas coupling 
     493         srcv( (/jpr_qsroce, jpr_qnsoce, jpr_oemp, jpr_sflx, jpr_fice, jpr_otx1, jpr_oty1, jpr_taum/) )%laction = .TRUE. 
     494         srcv(jpr_otx1)%clgrid = 'U'        ! oce components given at U-point 
     495         srcv(jpr_oty1)%clgrid = 'V'        !           and           V-point 
     496         ! Vectors: change of sign at north fold ONLY if on the local grid 
     497         srcv( (/jpr_otx1,jpr_oty1/) )%nsgn = -1. 
     498         sn_rcv_tau%clvgrd = 'U,V' 
     499         sn_rcv_tau%clvor = 'local grid' 
     500         sn_rcv_tau%clvref = 'spherical' 
     501         sn_rcv_emp%cldes = 'oce only' 
     502         ! 
     503         IF(lwp) THEN                        ! control print 
     504            WRITE(numout,*) 
     505            WRITE(numout,*)'               Special conditions for SAS-OPA coupling  ' 
     506            WRITE(numout,*)'               OPA component  ' 
     507            WRITE(numout,*) 
     508            WRITE(numout,*)'  received fields from SAS component ' 
     509            WRITE(numout,*)'                  ice cover ' 
     510            WRITE(numout,*)'                  oce only EMP  ' 
     511            WRITE(numout,*)'                  salt flux  ' 
     512            WRITE(numout,*)'                  mixed oce-ice solar flux  ' 
     513            WRITE(numout,*)'                  mixed oce-ice non solar flux  ' 
     514            WRITE(numout,*)'                  wind stress U,V on local grid and sperical coordinates ' 
     515            WRITE(numout,*)'                  wind stress module' 
     516            WRITE(numout,*) 
     517         ENDIF 
     518      ENDIF 
     519      !                                                      ! -------------------------------- ! 
     520      !                                                      !   OPA-SAS coupling - rcv by sas  !    
     521      !                                                      ! -------------------------------- ! 
     522      srcv(jpr_toce  )%clname = 'I_SSTSST' 
     523      srcv(jpr_soce  )%clname = 'I_SSSal' 
     524      srcv(jpr_ocx1  )%clname = 'I_OCurx1' 
     525      srcv(jpr_ocy1  )%clname = 'I_OCury1' 
     526      srcv(jpr_ssh   )%clname = 'I_SSHght' 
     527      srcv(jpr_e3t1st)%clname = 'I_E3T1st'    
     528      srcv(jpr_fraqsr)%clname = 'I_FraQsr'    
     529      ! 
     530      IF( nn_components == jp_iam_sas ) THEN 
     531         IF( .NOT. ln_cpl ) srcv(:)%laction = .FALSE.   ! force default definition in case of opa <-> sas coupling 
     532         IF( .NOT. ln_cpl ) srcv(:)%clgrid  = 'T'       ! force default definition in case of opa <-> sas coupling 
     533         IF( .NOT. ln_cpl ) srcv(:)%nsgn    = 1.        ! force default definition in case of opa <-> sas coupling 
     534         srcv( (/jpr_toce, jpr_soce, jpr_ssh, jpr_fraqsr, jpr_ocx1, jpr_ocy1/) )%laction = .TRUE. 
     535         srcv( jpr_e3t1st )%laction = .NOT.ln_linssh 
     536         srcv(jpr_ocx1)%clgrid = 'U'        ! oce components given at U-point 
     537         srcv(jpr_ocy1)%clgrid = 'V'        !           and           V-point 
     538         ! Vectors: change of sign at north fold ONLY if on the local grid 
     539         srcv(jpr_ocx1:jpr_ocy1)%nsgn = -1. 
     540         ! Change first letter to couple with atmosphere if already coupled OPA 
     541         ! this is nedeed as each variable name used in the namcouple must be unique: 
     542         ! for example O_Runoff received by OPA from SAS and therefore O_Runoff received by SAS from the Atmosphere 
     543         DO jn = 1, jprcv 
     544            IF ( srcv(jn)%clname(1:1) == "O" ) srcv(jn)%clname = "S"//srcv(jn)%clname(2:LEN(srcv(jn)%clname)) 
     545         END DO 
     546         ! 
     547         IF(lwp) THEN                        ! control print 
     548            WRITE(numout,*) 
     549            WRITE(numout,*)'               Special conditions for SAS-OPA coupling  ' 
     550            WRITE(numout,*)'               SAS component  ' 
     551            WRITE(numout,*) 
     552            IF( .NOT. ln_cpl ) THEN 
     553               WRITE(numout,*)'  received fields from OPA component ' 
     554            ELSE 
     555               WRITE(numout,*)'  Additional received fields from OPA component : ' 
     556            ENDIF 
     557            WRITE(numout,*)'               sea surface temperature (Celcius) ' 
     558            WRITE(numout,*)'               sea surface salinity '  
     559            WRITE(numout,*)'               surface currents '  
     560            WRITE(numout,*)'               sea surface height '  
     561            WRITE(numout,*)'               thickness of first ocean T level '         
     562            WRITE(numout,*)'               fraction of solar net radiation absorbed in the first ocean level' 
     563            WRITE(numout,*) 
     564         ENDIF 
     565      ENDIF 
     566       
     567      ! =================================================== ! 
     568      ! Allocate all parts of frcv used for received fields ! 
     569      ! =================================================== ! 
    483570      DO jn = 1, jprcv 
    484571         IF ( srcv(jn)%laction ) ALLOCATE( frcv(jn)%z3(jpi,jpj,srcv(jn)%nct) ) 
    485572      END DO 
    486573      ! Allocate taum part of frcv which is used even when not received as coupling field 
    487       IF ( .NOT. srcv(jpr_taum)%laction ) ALLOCATE( frcv(jpr_taum)%z3(jpi,jpj,srcv(jn)%nct) ) 
     574      IF ( .NOT. srcv(jpr_taum)%laction ) ALLOCATE( frcv(jpr_taum)%z3(jpi,jpj,srcv(jpr_taum)%nct) ) 
     575      ! Allocate w10m part of frcv which is used even when not received as coupling field 
     576      IF ( .NOT. srcv(jpr_w10m)%laction ) ALLOCATE( frcv(jpr_w10m)%z3(jpi,jpj,srcv(jpr_w10m)%nct) ) 
     577      ! Allocate jpr_otx1 part of frcv which is used even when not received as coupling field 
     578      IF ( .NOT. srcv(jpr_otx1)%laction ) ALLOCATE( frcv(jpr_otx1)%z3(jpi,jpj,srcv(jpr_otx1)%nct) ) 
     579      IF ( .NOT. srcv(jpr_oty1)%laction ) ALLOCATE( frcv(jpr_oty1)%z3(jpi,jpj,srcv(jpr_oty1)%nct) ) 
    488580      ! Allocate itx1 and ity1 as they are used in sbc_cpl_ice_tau even if srcv(jpr_itx1)%laction = .FALSE. 
    489581      IF( k_ice /= 0 ) THEN 
    490          IF ( .NOT. srcv(jpr_itx1)%laction ) ALLOCATE( frcv(jpr_itx1)%z3(jpi,jpj,srcv(jn)%nct) ) 
    491          IF ( .NOT. srcv(jpr_ity1)%laction ) ALLOCATE( frcv(jpr_ity1)%z3(jpi,jpj,srcv(jn)%nct) ) 
     582         IF ( .NOT. srcv(jpr_itx1)%laction ) ALLOCATE( frcv(jpr_itx1)%z3(jpi,jpj,srcv(jpr_itx1)%nct) ) 
     583         IF ( .NOT. srcv(jpr_ity1)%laction ) ALLOCATE( frcv(jpr_ity1)%z3(jpi,jpj,srcv(jpr_ity1)%nct) ) 
    492584      END IF 
    493585 
     
    509601      ssnd(jps_tmix)%clname = 'O_TepMix' 
    510602      SELECT CASE( TRIM( sn_snd_temp%cldes ) ) 
    511       CASE( 'none'         )       ! nothing to do 
    512       CASE( 'oce only'             )   ;   ssnd(   jps_toce            )%laction = .TRUE. 
    513       CASE( 'weighted oce and ice' ) 
     603      CASE( 'none'                                 )       ! nothing to do 
     604      CASE( 'oce only'                             )   ;   ssnd( jps_toce )%laction = .TRUE. 
     605      CASE( 'oce and ice' , 'weighted oce and ice' ) 
    514606         ssnd( (/jps_toce, jps_tice/) )%laction = .TRUE. 
    515607         IF ( TRIM( sn_snd_temp%clcat ) == 'yes' )  ssnd(jps_tice)%nct = jpl 
    516       CASE( 'mixed oce-ice'        )   ;   ssnd(   jps_tmix            )%laction = .TRUE. 
     608      CASE( 'mixed oce-ice'                        )   ;   ssnd( jps_tmix )%laction = .TRUE. 
    517609      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_temp%cldes' ) 
    518610      END SELECT 
    519       
     611            
    520612      !                                                      ! ------------------------- ! 
    521613      !                                                      !          Albedo           ! 
     
    524616      ssnd(jps_albmix)%clname = 'O_AlbMix' 
    525617      SELECT CASE( TRIM( sn_snd_alb%cldes ) ) 
    526       CASE( 'none'               ! nothing to do 
    527       CASE( 'weighted ice'  )   ;  ssnd(jps_albice)%laction = .TRUE. 
    528       CASE( 'mixed oce-ice' )   ;  ssnd(jps_albmix)%laction = .TRUE. 
     618      CASE( 'none'                 )     ! nothing to do 
     619      CASE( 'ice' , 'weighted ice' )   ; ssnd(jps_albice)%laction = .TRUE. 
     620      CASE( 'mixed oce-ice'        )   ; ssnd(jps_albmix)%laction = .TRUE. 
    529621      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_alb%cldes' ) 
    530622      END SELECT 
     
    550642         IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_fice)%nct = jpl 
    551643      ENDIF 
    552  
     644       
    553645      SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 
    554646      CASE( 'none'         )       ! nothing to do 
     
    557649         IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) THEN 
    558650            ssnd(jps_hice:jps_hsnw)%nct = jpl 
    559          ELSE 
    560             IF ( jpl > 1 ) THEN 
    561 CALL ctl_stop( 'sbc_cpl_init: use weighted ice and snow option for sn_snd_thick%cldes if not exchanging category fields' ) 
    562             ENDIF 
    563651         ENDIF 
    564652      CASE ( 'weighted ice and snow' )  
     
    599687      !                                                      ! ------------------------- ! 
    600688      ssnd(jps_co2)%clname = 'O_CO2FLX' ;  IF( TRIM(sn_snd_co2%cldes) == 'coupled' )    ssnd(jps_co2 )%laction = .TRUE. 
     689 
     690      !                                                      ! ------------------------------- ! 
     691      !                                                      !   OPA-SAS coupling - snd by opa !    
     692      !                                                      ! ------------------------------- ! 
     693      ssnd(jps_ssh   )%clname = 'O_SSHght'  
     694      ssnd(jps_soce  )%clname = 'O_SSSal'  
     695      ssnd(jps_e3t1st)%clname = 'O_E3T1st'    
     696      ssnd(jps_fraqsr)%clname = 'O_FraQsr' 
     697      ! 
     698      IF( nn_components == jp_iam_opa ) THEN 
     699         ssnd(:)%laction = .FALSE.   ! force default definition in case of opa <-> sas coupling 
     700         ssnd( (/jps_toce, jps_soce, jps_ssh, jps_fraqsr, jps_ocx1, jps_ocy1/) )%laction = .TRUE. 
     701         ssnd( jps_e3t1st )%laction = .NOT.ln_linssh 
     702         ! vector definition: not used but cleaner... 
     703         ssnd(jps_ocx1)%clgrid  = 'U'        ! oce components given at U-point 
     704         ssnd(jps_ocy1)%clgrid  = 'V'        !           and           V-point 
     705         sn_snd_crt%clvgrd = 'U,V' 
     706         sn_snd_crt%clvor = 'local grid' 
     707         sn_snd_crt%clvref = 'spherical' 
     708         ! 
     709         IF(lwp) THEN                        ! control print 
     710            WRITE(numout,*) 
     711            WRITE(numout,*)'  sent fields to SAS component ' 
     712            WRITE(numout,*)'               sea surface temperature (T before, Celcius) ' 
     713            WRITE(numout,*)'               sea surface salinity '  
     714            WRITE(numout,*)'               surface currents U,V on local grid and spherical coordinates'  
     715            WRITE(numout,*)'               sea surface height '  
     716            WRITE(numout,*)'               thickness of first ocean T level '         
     717            WRITE(numout,*)'               fraction of solar net radiation absorbed in the first ocean level' 
     718            WRITE(numout,*) 
     719         ENDIF 
     720      ENDIF 
     721      !                                                      ! ------------------------------- ! 
     722      !                                                      !   OPA-SAS coupling - snd by sas !    
     723      !                                                      ! ------------------------------- ! 
     724      ssnd(jps_sflx  )%clname = 'I_SFLX'      
     725      ssnd(jps_fice2 )%clname = 'IIceFrc' 
     726      ssnd(jps_qsroce)%clname = 'I_QsrOce'    
     727      ssnd(jps_qnsoce)%clname = 'I_QnsOce'    
     728      ssnd(jps_oemp  )%clname = 'IOEvaMPr'  
     729      ssnd(jps_otx1  )%clname = 'I_OTaux1'    
     730      ssnd(jps_oty1  )%clname = 'I_OTauy1'    
     731      ssnd(jps_rnf   )%clname = 'I_Runoff'    
     732      ssnd(jps_taum  )%clname = 'I_TauMod'    
     733      ! 
     734      IF( nn_components == jp_iam_sas ) THEN 
     735         IF( .NOT. ln_cpl ) ssnd(:)%laction = .FALSE.   ! force default definition in case of opa <-> sas coupling 
     736         ssnd( (/jps_qsroce, jps_qnsoce, jps_oemp, jps_fice2, jps_sflx, jps_otx1, jps_oty1, jps_taum/) )%laction = .TRUE. 
     737         ! 
     738         ! Change first letter to couple with atmosphere if already coupled with sea_ice 
     739         ! this is nedeed as each variable name used in the namcouple must be unique: 
     740         ! for example O_SSTSST sent by OPA to SAS and therefore S_SSTSST sent by SAS to the Atmosphere 
     741         DO jn = 1, jpsnd 
     742            IF ( ssnd(jn)%clname(1:1) == "O" ) ssnd(jn)%clname = "S"//ssnd(jn)%clname(2:LEN(ssnd(jn)%clname)) 
     743         END DO 
     744         ! 
     745         IF(lwp) THEN                        ! control print 
     746            WRITE(numout,*) 
     747            IF( .NOT. ln_cpl ) THEN 
     748               WRITE(numout,*)'  sent fields to OPA component ' 
     749            ELSE 
     750               WRITE(numout,*)'  Additional sent fields to OPA component : ' 
     751            ENDIF 
     752            WRITE(numout,*)'                  ice cover ' 
     753            WRITE(numout,*)'                  oce only EMP  ' 
     754            WRITE(numout,*)'                  salt flux  ' 
     755            WRITE(numout,*)'                  mixed oce-ice solar flux  ' 
     756            WRITE(numout,*)'                  mixed oce-ice non solar flux  ' 
     757            WRITE(numout,*)'                  wind stress U,V components' 
     758            WRITE(numout,*)'                  wind stress module' 
     759         ENDIF 
     760      ENDIF 
     761 
    601762      ! 
    602763      ! ================================ ! 
     
    604765      ! ================================ ! 
    605766 
    606       CALL cpl_prism_define(jprcv, jpsnd)             
    607       ! 
    608       IF( ln_dm2dc .AND. ( cpl_prism_freq( jpr_qsroce ) + cpl_prism_freq( jpr_qsrmix ) /= 86400 ) )   & 
     767      CALL cpl_define(jprcv, jpsnd, nn_cplmodel) 
     768       
     769      IF (ln_usecplmask) THEN  
     770         xcplmask(:,:,:) = 0. 
     771         CALL iom_open( 'cplmask', inum ) 
     772         CALL iom_get( inum, jpdom_unknown, 'cplmask', xcplmask(1:nlci,1:nlcj,1:nn_cplmodel),   & 
     773            &          kstart = (/ mig(1),mjg(1),1 /), kcount = (/ nlci,nlcj,nn_cplmodel /) ) 
     774         CALL iom_close( inum ) 
     775      ELSE 
     776         xcplmask(:,:,:) = 1. 
     777      ENDIF 
     778      xcplmask(:,:,0) = 1. - SUM( xcplmask(:,:,1:nn_cplmodel), dim = 3 ) 
     779      ! 
     780      ncpl_qsr_freq = cpl_freq( 'O_QsrOce' ) + cpl_freq( 'O_QsrMix' ) + cpl_freq( 'I_QsrOce' ) + cpl_freq( 'I_QsrMix' ) 
     781      IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 )   & 
    609782         &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    610  
    611       CALL wrk_dealloc( jpi,jpj, zacs, zaos ) 
    612       ! 
    613       IF( nn_timing == 1 )  CALL timing_stop('sbc_cpl_init') 
     783      ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
     784 
     785      CALL wrk_dealloc( jpi,jpj,   zacs, zaos ) 
     786      ! 
     787      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_init') 
    614788      ! 
    615789   END SUBROUTINE sbc_cpl_init 
     
    654828      !! 
    655829      !! ** Action  :   update  utau, vtau   ocean stress at U,V grid  
    656       !!                        taum, wndm   wind stres and wind speed module at T-point 
     830      !!                        taum         wind stress module at T-point 
     831      !!                        wndm         wind speed  module at T-point over free ocean or leads in presence of sea-ice 
    657832      !!                        qns          non solar heat fluxes including emp heat content    (ocean only case) 
    658833      !!                                     and the latent heat flux of solid precip. melting 
     
    663838      INTEGER, INTENT(in) ::   k_fsbc   ! frequency of sbc (-> ice model) computation  
    664839      INTEGER, INTENT(in) ::   k_ice    ! ice management in the sbc (=0/1/2/3) 
    665       !! 
    666       LOGICAL ::    llnewtx, llnewtau      ! update wind stress components and module?? 
     840 
     841      !! 
     842      LOGICAL  ::   llnewtx, llnewtau      ! update wind stress components and module?? 
    667843      INTEGER  ::   ji, jj, jn             ! dummy loop indices 
    668       INTEGER  ::   isec                   ! number of seconds since nit000 (assuming rdttra did not change since nit000) 
     844      INTEGER  ::   isec                   ! number of seconds since nit000 (assuming rdt did not change since nit000) 
    669845      REAL(wp) ::   zcumulneg, zcumulpos   ! temporary scalars      
    670846      REAL(wp) ::   zcoef                  ! temporary scalar 
     
    672848      REAL(wp) ::   zcdrag = 1.5e-3        ! drag coefficient 
    673849      REAL(wp) ::   zzx, zzy               ! temporary variables 
    674       REAL(wp), POINTER, DIMENSION(:,:) ::   ztx, zty  
     850      REAL(wp), POINTER, DIMENSION(:,:) ::   ztx, zty, zmsk, zemp, zqns, zqsr 
    675851      !!---------------------------------------------------------------------- 
    676852      ! 
    677       IF( nn_timing == 1 )  CALL timing_start('sbc_cpl_rcv') 
    678       ! 
    679       CALL wrk_alloc( jpi,jpj, ztx, zty ) 
    680  
    681       IF( kt == nit000 )   CALL sbc_cpl_init( k_ice )          ! initialisation 
    682  
    683       !                                                 ! Receive all the atmos. fields (including ice information) 
    684       isec = ( kt - nit000 ) * NINT( rdttra(1) )             ! date of exchanges 
    685       DO jn = 1, jprcv                                       ! received fields sent by the atmosphere 
    686          IF( srcv(jn)%laction )   CALL cpl_prism_rcv( jn, isec, frcv(jn)%z3, nrcvinfo(jn) ) 
     853      IF( nn_timing == 1 )   CALL timing_start('sbc_cpl_rcv') 
     854      ! 
     855      CALL wrk_alloc( jpi,jpj,   ztx, zty, zmsk, zemp, zqns, zqsr ) 
     856      ! 
     857      IF( ln_mixcpl )   zmsk(:,:) = 1. - xcplmask(:,:,0) 
     858      ! 
     859      !                                                      ! ======================================================= ! 
     860      !                                                      ! Receive all the atmos. fields (including ice information) 
     861      !                                                      ! ======================================================= ! 
     862      isec = ( kt - nit000 ) * NINT( rdt )                      ! date of exchanges 
     863      DO jn = 1, jprcv                                          ! received fields sent by the atmosphere 
     864         IF( srcv(jn)%laction )   CALL cpl_rcv( jn, isec, frcv(jn)%z3, xcplmask(:,:,1:nn_cplmodel), nrcvinfo(jn) ) 
    687865      END DO 
    688866 
     
    744922         ! 
    745923      ENDIF 
    746        
    747924      !                                                      ! ========================= ! 
    748925      !                                                      !    wind stress module     !   (taum) 
     
    752929         ! => need to be done only when otx1 was changed 
    753930         IF( llnewtx ) THEN 
    754 !CDIR NOVERRCHK 
    755931            DO jj = 2, jpjm1 
    756 !CDIR NOVERRCHK 
    757932               DO ji = fs_2, fs_jpim1   ! vect. opt. 
    758933                  zzx = frcv(jpr_otx1)%z3(ji-1,jj  ,1) + frcv(jpr_otx1)%z3(ji,jj,1) 
     
    773948         ENDIF 
    774949      ENDIF 
    775        
     950      ! 
    776951      !                                                      ! ========================= ! 
    777952      !                                                      !      10 m wind speed      !   (wndm) 
     
    782957         IF( llnewtau ) THEN  
    783958            zcoef = 1. / ( zrhoa * zcdrag )  
    784 !CDIR NOVERRCHK 
    785959            DO jj = 1, jpj 
    786 !CDIR NOVERRCHK 
    787960               DO ji = 1, jpi  
    788                   wndm(ji,jj) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 
     961                  frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 
    789962               END DO 
    790963            END DO 
    791964         ENDIF 
    792       ELSE 
    793          IF ( nrcvinfo(jpr_w10m) == OASIS_Rcv ) wndm(:,:) = frcv(jpr_w10m)%z3(:,:,1) 
    794965      ENDIF 
    795966 
     
    798969      IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 
    799970         ! 
    800          utau(:,:) = frcv(jpr_otx1)%z3(:,:,1) 
    801          vtau(:,:) = frcv(jpr_oty1)%z3(:,:,1) 
    802          taum(:,:) = frcv(jpr_taum)%z3(:,:,1) 
     971         IF( ln_mixcpl ) THEN 
     972            utau(:,:) = utau(:,:) * xcplmask(:,:,0) + frcv(jpr_otx1)%z3(:,:,1) * zmsk(:,:) 
     973            vtau(:,:) = vtau(:,:) * xcplmask(:,:,0) + frcv(jpr_oty1)%z3(:,:,1) * zmsk(:,:) 
     974            taum(:,:) = taum(:,:) * xcplmask(:,:,0) + frcv(jpr_taum)%z3(:,:,1) * zmsk(:,:) 
     975            wndm(:,:) = wndm(:,:) * xcplmask(:,:,0) + frcv(jpr_w10m)%z3(:,:,1) * zmsk(:,:) 
     976         ELSE 
     977            utau(:,:) = frcv(jpr_otx1)%z3(:,:,1) 
     978            vtau(:,:) = frcv(jpr_oty1)%z3(:,:,1) 
     979            taum(:,:) = frcv(jpr_taum)%z3(:,:,1) 
     980            wndm(:,:) = frcv(jpr_w10m)%z3(:,:,1) 
     981         ENDIF 
    803982         CALL iom_put( "taum_oce", taum )   ! output wind stress module 
    804983         !   
     
    806985 
    807986#if defined key_cpl_carbon_cycle 
    808       !                                                              ! atmosph. CO2 (ppm) 
     987      !                                                      ! ================== ! 
     988      !                                                      ! atmosph. CO2 (ppm) ! 
     989      !                                                      ! ================== ! 
    809990      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    810991#endif 
    811992 
     993      !  Fields received by SAS when OASIS coupling 
     994      !  (arrays no more filled at sbcssm stage) 
     995      !                                                      ! ================== ! 
     996      !                                                      !        SSS         ! 
     997      !                                                      ! ================== ! 
     998      IF( srcv(jpr_soce)%laction ) THEN                      ! received by sas in case of opa <-> sas coupling 
     999         sss_m(:,:) = frcv(jpr_soce)%z3(:,:,1) 
     1000         CALL iom_put( 'sss_m', sss_m ) 
     1001      ENDIF 
     1002      !                                                
     1003      !                                                      ! ================== ! 
     1004      !                                                      !        SST         ! 
     1005      !                                                      ! ================== ! 
     1006      IF( srcv(jpr_toce)%laction ) THEN                      ! received by sas in case of opa <-> sas coupling 
     1007         sst_m(:,:) = frcv(jpr_toce)%z3(:,:,1) 
     1008         IF( srcv(jpr_soce)%laction .AND. ln_useCT ) THEN    ! make sure that sst_m is the potential temperature 
     1009            sst_m(:,:) = eos_pt_from_ct( sst_m(:,:), sss_m(:,:) ) 
     1010         ENDIF 
     1011      ENDIF 
     1012      !                                                      ! ================== ! 
     1013      !                                                      !        SSH         ! 
     1014      !                                                      ! ================== ! 
     1015      IF( srcv(jpr_ssh )%laction ) THEN                      ! received by sas in case of opa <-> sas coupling 
     1016         ssh_m(:,:) = frcv(jpr_ssh )%z3(:,:,1) 
     1017         CALL iom_put( 'ssh_m', ssh_m ) 
     1018      ENDIF 
     1019      !                                                      ! ================== ! 
     1020      !                                                      !  surface currents  ! 
     1021      !                                                      ! ================== ! 
     1022      IF( srcv(jpr_ocx1)%laction ) THEN                      ! received by sas in case of opa <-> sas coupling 
     1023         ssu_m(:,:) = frcv(jpr_ocx1)%z3(:,:,1) 
     1024         ub (:,:,1) = ssu_m(:,:)                             ! will be used in sbcice_lim in the call of lim_sbc_tau 
     1025         un (:,:,1) = ssu_m(:,:)                             ! will be used in sbc_cpl_snd if atmosphere coupling 
     1026         CALL iom_put( 'ssu_m', ssu_m ) 
     1027      ENDIF 
     1028      IF( srcv(jpr_ocy1)%laction ) THEN 
     1029         ssv_m(:,:) = frcv(jpr_ocy1)%z3(:,:,1) 
     1030         vb (:,:,1) = ssv_m(:,:)                             ! will be used in sbcice_lim in the call of lim_sbc_tau 
     1031         vn (:,:,1) = ssv_m(:,:)                             ! will be used in sbc_cpl_snd if atmosphere coupling 
     1032         CALL iom_put( 'ssv_m', ssv_m ) 
     1033      ENDIF 
     1034      !                                                      ! ======================== ! 
     1035      !                                                      !  first T level thickness ! 
     1036      !                                                      ! ======================== ! 
     1037      IF( srcv(jpr_e3t1st )%laction ) THEN                   ! received by sas in case of opa <-> sas coupling 
     1038         e3t_m(:,:) = frcv(jpr_e3t1st )%z3(:,:,1) 
     1039         CALL iom_put( 'e3t_m', e3t_m(:,:) ) 
     1040      ENDIF 
     1041      !                                                      ! ================================ ! 
     1042      !                                                      !  fraction of solar net radiation ! 
     1043      !                                                      ! ================================ ! 
     1044      IF( srcv(jpr_fraqsr)%laction ) THEN                    ! received by sas in case of opa <-> sas coupling 
     1045         frq_m(:,:) = frcv(jpr_fraqsr)%z3(:,:,1) 
     1046         CALL iom_put( 'frq_m', frq_m ) 
     1047      ENDIF 
     1048       
    8121049      !                                                      ! ========================= ! 
    813       IF( k_ice <= 1 ) THEN                                  !  heat & freshwater fluxes ! (Ocean only case) 
     1050      IF( k_ice <= 1 .AND. MOD( kt-1, k_fsbc ) == 0 ) THEN   !  heat & freshwater fluxes ! (Ocean only case) 
    8141051         !                                                   ! ========================= ! 
    8151052         ! 
    8161053         !                                                       ! total freshwater fluxes over the ocean (emp) 
    817          SELECT CASE( TRIM( sn_rcv_emp%cldes ) )                                    ! evaporation - precipitation 
    818          CASE( 'conservative' ) 
    819             emp(:,:) = frcv(jpr_tevp)%z3(:,:,1) - ( frcv(jpr_rain)%z3(:,:,1) + frcv(jpr_snow)%z3(:,:,1) ) 
    820          CASE( 'oce only', 'oce and ice' ) 
    821             emp(:,:) = frcv(jpr_oemp)%z3(:,:,1) 
    822          CASE default 
    823             CALL ctl_stop( 'sbc_cpl_rcv: wrong definition of sn_rcv_emp%cldes' ) 
    824          END SELECT 
     1054         IF( srcv(jpr_oemp)%laction .OR. srcv(jpr_rain)%laction ) THEN 
     1055            SELECT CASE( TRIM( sn_rcv_emp%cldes ) )                                    ! evaporation - precipitation 
     1056            CASE( 'conservative' ) 
     1057               zemp(:,:) = frcv(jpr_tevp)%z3(:,:,1) - ( frcv(jpr_rain)%z3(:,:,1) + frcv(jpr_snow)%z3(:,:,1) ) 
     1058            CASE( 'oce only', 'oce and ice' ) 
     1059               zemp(:,:) = frcv(jpr_oemp)%z3(:,:,1) 
     1060            CASE default 
     1061               CALL ctl_stop( 'sbc_cpl_rcv: wrong definition of sn_rcv_emp%cldes' ) 
     1062            END SELECT 
     1063         ELSE 
     1064            zemp(:,:) = 0._wp 
     1065         ENDIF 
    8251066         ! 
    8261067         !                                                        ! runoffs and calving (added in emp) 
    827          IF( srcv(jpr_rnf)%laction )   emp(:,:) = emp(:,:) - frcv(jpr_rnf)%z3(:,:,1) 
    828          IF( srcv(jpr_cal)%laction )   emp(:,:) = emp(:,:) - frcv(jpr_cal)%z3(:,:,1) 
    829          ! 
    830 !!gm :  this seems to be internal cooking, not sure to need that in a generic interface  
    831 !!gm                                       at least should be optional... 
    832 !!         IF( TRIM( sn_rcv_rnf%cldes ) == 'coupled' ) THEN     ! add to the total freshwater budget 
    833 !!            ! remove negative runoff 
    834 !!            zcumulpos = SUM( MAX( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * e1t(:,:) * e2t(:,:) * tmask_i(:,:) )  
    835 !!            zcumulneg = SUM( MIN( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * e1t(:,:) * e2t(:,:) * tmask_i(:,:) ) 
    836 !!            IF( lk_mpp )   CALL mpp_sum( zcumulpos )   ! sum over the global domain 
    837 !!            IF( lk_mpp )   CALL mpp_sum( zcumulneg )  
    838 !!            IF( zcumulpos /= 0. ) THEN                 ! distribute negative runoff on positive runoff grid points 
    839 !!               zcumulneg = 1.e0 + zcumulneg / zcumulpos 
    840 !!               frcv(jpr_rnf)%z3(:,:,1) = MAX( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * zcumulneg 
    841 !!            ENDIF      
    842 !!            ! add runoff to e-p  
    843 !!            emp(:,:) = emp(:,:) - frcv(jpr_rnf)%z3(:,:,1) 
    844 !!         ENDIF 
    845 !!gm  end of internal cooking 
     1068         IF( srcv(jpr_rnf)%laction )     rnf(:,:) = frcv(jpr_rnf)%z3(:,:,1) 
     1069         IF( srcv(jpr_cal)%laction )     zemp(:,:) = zemp(:,:) - frcv(jpr_cal)%z3(:,:,1) 
     1070          
     1071         IF( ln_mixcpl ) THEN   ;   emp(:,:) = emp(:,:) * xcplmask(:,:,0) + zemp(:,:) * zmsk(:,:) 
     1072         ELSE                   ;   emp(:,:) =                              zemp(:,:) 
     1073         ENDIF 
    8461074         ! 
    8471075         !                                                       ! non solar heat flux over the ocean (qns) 
    848          IF( srcv(jpr_qnsoce)%laction )   qns(:,:) = frcv(jpr_qnsoce)%z3(:,:,1) 
    849          IF( srcv(jpr_qnsmix)%laction )   qns(:,:) = frcv(jpr_qnsmix)%z3(:,:,1) 
    850          ! add the latent heat of solid precip. melting 
    851          IF( srcv(jpr_snow  )%laction )   THEN                         ! update qns over the free ocean with: 
    852               qns(:,:) = qns(:,:) - frcv(jpr_snow)%z3(:,:,1) * lfus  & ! energy for melting solid precipitation over the free ocean 
    853            &           - emp(:,:) * sst_m(:,:) * rcp                   ! remove heat content due to mass flux (assumed to be at SST) 
     1076         IF(      srcv(jpr_qnsoce)%laction ) THEN   ;   zqns(:,:) = frcv(jpr_qnsoce)%z3(:,:,1) 
     1077         ELSE IF( srcv(jpr_qnsmix)%laction ) THEN   ;   zqns(:,:) = frcv(jpr_qnsmix)%z3(:,:,1) 
     1078         ELSE                                       ;   zqns(:,:) = 0._wp 
     1079         END IF 
     1080         ! update qns over the free ocean with: 
     1081         IF( nn_components /= jp_iam_opa ) THEN 
     1082            zqns(:,:) =  zqns(:,:) - zemp(:,:) * sst_m(:,:) * rcp         ! remove heat content due to mass flux (assumed to be at SST) 
     1083            IF( srcv(jpr_snow  )%laction ) THEN 
     1084               zqns(:,:) = zqns(:,:) - frcv(jpr_snow)%z3(:,:,1) * lfus    ! energy for melting solid precipitation over the free ocean 
     1085            ENDIF 
     1086         ENDIF 
     1087         IF( ln_mixcpl ) THEN   ;   qns(:,:) = qns(:,:) * xcplmask(:,:,0) + zqns(:,:) * zmsk(:,:) 
     1088         ELSE                   ;   qns(:,:) =                              zqns(:,:) 
    8541089         ENDIF 
    8551090 
    8561091         !                                                       ! solar flux over the ocean          (qsr) 
    857          IF( srcv(jpr_qsroce)%laction )   qsr(:,:) = frcv(jpr_qsroce)%z3(:,:,1) 
    858          IF( srcv(jpr_qsrmix)%laction )   qsr(:,:) = frcv(jpr_qsrmix)%z3(:,:,1) 
    859          IF( ln_dm2dc )   qsr(:,:) = sbc_dcy( qsr )                           ! modify qsr to include the diurnal cycle 
     1092         IF     ( srcv(jpr_qsroce)%laction ) THEN   ;   zqsr(:,:) = frcv(jpr_qsroce)%z3(:,:,1) 
     1093         ELSE IF( srcv(jpr_qsrmix)%laction ) then   ;   zqsr(:,:) = frcv(jpr_qsrmix)%z3(:,:,1) 
     1094         ELSE                                       ;   zqsr(:,:) = 0._wp 
     1095         ENDIF 
     1096         IF( ln_dm2dc .AND. ln_cpl )   zqsr(:,:) = sbc_dcy( zqsr )   ! modify qsr to include the diurnal cycle 
     1097         IF( ln_mixcpl ) THEN   ;   qsr(:,:) = qsr(:,:) * xcplmask(:,:,0) + zqsr(:,:) * zmsk(:,:) 
     1098         ELSE                   ;   qsr(:,:) =                              zqsr(:,:) 
     1099         ENDIF 
    8601100         ! 
    861    
    862       ENDIF 
    863       ! 
    864       CALL wrk_dealloc( jpi,jpj, ztx, zty ) 
    865       ! 
    866       IF( nn_timing == 1 )  CALL timing_stop('sbc_cpl_rcv') 
     1101         ! salt flux over the ocean (received by opa in case of opa <-> sas coupling) 
     1102         IF( srcv(jpr_sflx )%laction )   sfx(:,:) = frcv(jpr_sflx  )%z3(:,:,1) 
     1103         ! Ice cover  (received by opa in case of opa <-> sas coupling) 
     1104         IF( srcv(jpr_fice )%laction )   fr_i(:,:) = frcv(jpr_fice )%z3(:,:,1) 
     1105         ! 
     1106      ENDIF 
     1107      ! 
     1108      CALL wrk_dealloc( jpi,jpj,   ztx, zty, zmsk, zemp, zqns, zqsr ) 
     1109      ! 
     1110      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_rcv') 
    8671111      ! 
    8681112   END SUBROUTINE sbc_cpl_rcv 
     
    9051149      REAL(wp), INTENT(out), DIMENSION(:,:) ::   p_tauj   ! at I-point (B-grid) or U & V-point (C-grid) 
    9061150      !! 
    907       INTEGER ::   ji, jj                          ! dummy loop indices 
    908       INTEGER ::   itx                             ! index of taux over ice 
     1151      INTEGER ::   ji, jj   ! dummy loop indices 
     1152      INTEGER ::   itx      ! index of taux over ice 
    9091153      REAL(wp), POINTER, DIMENSION(:,:) ::   ztx, zty  
    9101154      !!---------------------------------------------------------------------- 
    9111155      ! 
    912       IF( nn_timing == 1 )  CALL timing_start('sbc_cpl_ice_tau') 
    913       ! 
    914       CALL wrk_alloc( jpi,jpj, ztx, zty ) 
    915  
    916 !AC Pour eviter un stress nul sur la glace dans le cas mixed oce-ice 
    917       IF( srcv(jpr_itx1)%laction .AND. TRIM( sn_rcv_tau%cldes ) == 'oce and ice') THEN   ;   itx =  jpr_itx1    
     1156      IF( nn_timing == 1 )   CALL timing_start('sbc_cpl_ice_tau') 
     1157      ! 
     1158      CALL wrk_alloc( jpi,jpj,   ztx, zty ) 
     1159 
     1160      IF( srcv(jpr_itx1)%laction ) THEN   ;   itx =  jpr_itx1    
    9181161      ELSE                                ;   itx =  jpr_otx1 
    9191162      ENDIF 
     
    9211164      ! do something only if we just received the stress from atmosphere 
    9221165      IF(  nrcvinfo(itx) == OASIS_Rcv ) THEN 
    923  
    924          !                                                                                              ! ======================= ! 
    925 !AC Pour eviter un stress nul sur la glace dans le cas mixes oce-ice 
    926          IF( srcv(jpr_itx1)%laction .AND. TRIM( sn_rcv_tau%cldes ) == 'oce and ice') THEN               !   ice stress received   ! 
    927             !                                                                                           ! ======================= ! 
     1166         !                                                      ! ======================= ! 
     1167         IF( srcv(jpr_itx1)%laction ) THEN                      !   ice stress received   ! 
     1168            !                                                   ! ======================= ! 
    9281169            !   
    9291170            IF( TRIM( sn_rcv_tau%clvref ) == 'cartesian' ) THEN            ! 2 components on the sphere 
     
    9611202            ! 
    9621203         ENDIF 
    963  
    9641204         !                                                      ! ======================= ! 
    9651205         !                                                      !     put on ice grid     ! 
     
    10761316      ENDIF 
    10771317      !    
    1078       CALL wrk_dealloc( jpi,jpj, ztx, zty ) 
    1079       ! 
    1080       IF( nn_timing == 1 )  CALL timing_stop('sbc_cpl_ice_tau') 
     1318      CALL wrk_dealloc( jpi,jpj,   ztx, zty ) 
     1319      ! 
     1320      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_ice_tau') 
    10811321      ! 
    10821322   END SUBROUTINE sbc_cpl_ice_tau 
    10831323    
    10841324 
    1085    SUBROUTINE sbc_cpl_ice_flx( p_frld  , palbi   , psst    , pist    ) 
     1325   SUBROUTINE sbc_cpl_ice_flx( p_frld, palbi, psst, pist ) 
    10861326      !!---------------------------------------------------------------------- 
    10871327      !!             ***  ROUTINE sbc_cpl_ice_flx  *** 
     
    11231363      !!                   sprecip             solid precipitation over the ocean   
    11241364      !!---------------------------------------------------------------------- 
    1125       REAL(wp), INTENT(in   ), DIMENSION(:,:)   ::   p_frld     ! lead fraction                [0 to 1] 
     1365      REAL(wp), INTENT(in   ), DIMENSION(:,:)             ::   p_frld  ! lead fraction            [0 to 1] 
    11261366      ! optional arguments, used only in 'mixed oce-ice' case 
    1127       REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   palbi   ! ice albedo  
    1128       REAL(wp), INTENT(in   ), DIMENSION(:,:  ), OPTIONAL ::   psst    ! sea surface temperature     [Celcius] 
    1129       REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   pist    ! ice surface temperature     [Kelvin] 
     1367      REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   palbi   ! all skies ice albedo  
     1368      REAL(wp), INTENT(in   ), DIMENSION(:,:  ), OPTIONAL ::   psst    ! sea surface temperature  [Celsius] 
     1369      REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   pist    ! ice surface temperature  [Kelvin] 
    11301370      ! 
    11311371      INTEGER ::   jl   ! dummy loop index 
    1132       REAL(wp), POINTER, DIMENSION(:,:) ::   zcptn, ztmp, zicefr 
     1372      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zcptn, ztmp, zicefr, zmsk 
     1373      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zemp_tot, zemp_ice, zsprecip, ztprecip, zqns_tot, zqsr_tot 
     1374      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zqns_ice, zqsr_ice, zdqns_ice 
     1375      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zevap, zsnw, zqns_oce, zqsr_oce, zqprec_ice, zqemp_oce ! for LIM3 
    11331376      !!---------------------------------------------------------------------- 
    11341377      ! 
    1135       IF( nn_timing == 1 )  CALL timing_start('sbc_cpl_ice_flx') 
    1136       ! 
    1137       CALL wrk_alloc( jpi,jpj, zcptn, ztmp, zicefr ) 
    1138  
     1378      IF( nn_timing == 1 )   CALL timing_start('sbc_cpl_ice_flx') 
     1379      ! 
     1380      CALL wrk_alloc( jpi,jpj,       zcptn, ztmp, zicefr, zmsk, zemp_tot, zemp_ice, zsprecip, ztprecip, zqns_tot, zqsr_tot ) 
     1381      CALL wrk_alloc( jpi,jpj,jpl,   zqns_ice, zqsr_ice, zdqns_ice ) 
     1382 
     1383      IF( ln_mixcpl )   zmsk(:,:) = 1. - xcplmask(:,:,0) 
    11391384      zicefr(:,:) = 1.- p_frld(:,:) 
    11401385      zcptn(:,:) = rcp * sst_m(:,:) 
     
    11441389      !                                                      ! ========================= ! 
    11451390      ! 
    1146       !                                                           ! total Precipitations - total Evaporation (emp_tot) 
    1147       !                                                           ! solid precipitation  - sublimation       (emp_ice) 
    1148       !                                                           ! solid Precipitation                      (sprecip) 
     1391      !                                                           ! total Precipitation - total Evaporation (emp_tot) 
     1392      !                                                           ! solid precipitation - sublimation       (emp_ice) 
     1393      !                                                           ! solid Precipitation                     (sprecip) 
     1394      !                                                           ! liquid + solid Precipitation            (tprecip) 
    11491395      SELECT CASE( TRIM( sn_rcv_emp%cldes ) ) 
    11501396      CASE( 'conservative'  )   ! received fields: jpr_rain, jpr_snow, jpr_ievp, jpr_tevp 
    1151          sprecip(:,:) = frcv(jpr_snow)%z3(:,:,1)                 ! May need to ensure positive here 
    1152          tprecip(:,:) = frcv(jpr_rain)%z3(:,:,1) + sprecip (:,:) ! May need to ensure positive here 
    1153          emp_tot(:,:) = frcv(jpr_tevp)%z3(:,:,1) - tprecip(:,:) 
    1154          emp_ice(:,:) = frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_snow)%z3(:,:,1) 
    1155                            CALL iom_put( 'rain'         , frcv(jpr_rain)%z3(:,:,1)              )   ! liquid precipitation  
    1156          IF( lk_diaar5 )   CALL iom_put( 'hflx_rain_cea', frcv(jpr_rain)%z3(:,:,1) * zcptn(:,:) )   ! heat flux from liq. precip.  
    1157          ztmp(:,:) = frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) 
    1158                            CALL iom_put( 'evap_ao_cea'  , ztmp                            )   ! ice-free oce evap (cell average) 
    1159          IF( lk_diaar5 )   CALL iom_put( 'hflx_evap_cea', ztmp(:,:         ) * zcptn(:,:) )   ! heat flux from from evap (cell ave) 
     1397         zsprecip(:,:) = frcv(jpr_snow)%z3(:,:,1)                  ! May need to ensure positive here 
     1398         ztprecip(:,:) = frcv(jpr_rain)%z3(:,:,1) + zsprecip(:,:)  ! May need to ensure positive here 
     1399         zemp_tot(:,:) = frcv(jpr_tevp)%z3(:,:,1) - ztprecip(:,:) 
     1400         zemp_ice(:,:) = frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_snow)%z3(:,:,1) 
     1401            CALL iom_put( 'rain'         , frcv(jpr_rain)%z3(:,:,1)              )   ! liquid precipitation  
     1402         IF( iom_use('hflx_rain_cea') )   & 
     1403            CALL iom_put( 'hflx_rain_cea', frcv(jpr_rain)%z3(:,:,1) * zcptn(:,:) )   ! heat flux from liq. precip.  
     1404         IF( iom_use('evap_ao_cea') .OR. iom_use('hflx_evap_cea') )   & 
     1405            ztmp(:,:) = frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) 
     1406         IF( iom_use('evap_ao_cea'  ) )   & 
     1407            CALL iom_put( 'evap_ao_cea'  , ztmp                   )   ! ice-free oce evap (cell average) 
     1408         IF( iom_use('hflx_evap_cea') )   & 
     1409            CALL iom_put( 'hflx_evap_cea', ztmp(:,:) * zcptn(:,:) )   ! heat flux from from evap (cell average) 
    11601410      CASE( 'oce and ice'   )   ! received fields: jpr_sbpr, jpr_semp, jpr_oemp, jpr_ievp 
    1161          emp_tot(:,:) = p_frld(:,:) * frcv(jpr_oemp)%z3(:,:,1) + zicefr(:,:) * frcv(jpr_sbpr)%z3(:,:,1) 
    1162          emp_ice(:,:) = frcv(jpr_semp)%z3(:,:,1) 
    1163          sprecip(:,:) = - frcv(jpr_semp)%z3(:,:,1) + frcv(jpr_ievp)%z3(:,:,1) 
     1411         zemp_tot(:,:) = p_frld(:,:) * frcv(jpr_oemp)%z3(:,:,1) + zicefr(:,:) * frcv(jpr_sbpr)%z3(:,:,1) 
     1412         zemp_ice(:,:) = frcv(jpr_semp)%z3(:,:,1) 
     1413         zsprecip(:,:) = frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_semp)%z3(:,:,1) 
     1414         ztprecip(:,:) = frcv(jpr_semp)%z3(:,:,1) - frcv(jpr_sbpr)%z3(:,:,1) + zsprecip(:,:) 
    11641415      END SELECT 
    11651416 
    1166       CALL iom_put( 'snowpre'    , sprecip                                )   ! Snow 
    1167       CALL iom_put( 'snow_ao_cea', sprecip(:,:         ) * p_frld(:,:)    )   ! Snow        over ice-free ocean  (cell average) 
    1168       CALL iom_put( 'snow_ai_cea', sprecip(:,:         ) * zicefr(:,:)    )   ! Snow        over sea-ice         (cell average) 
    1169       CALL iom_put( 'subl_ai_cea', frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) )   ! Sublimation over sea-ice         (cell average) 
     1417      IF( iom_use('subl_ai_cea') )   & 
     1418         CALL iom_put( 'subl_ai_cea', frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) )   ! Sublimation over sea-ice         (cell average) 
    11701419      !    
    11711420      !                                                           ! runoffs and calving (put in emp_tot) 
    1172       IF( srcv(jpr_rnf)%laction ) THEN  
    1173          emp_tot(:,:) = emp_tot(:,:) - frcv(jpr_rnf)%z3(:,:,1) 
    1174                            CALL iom_put( 'runoffs'      , frcv(jpr_rnf)%z3(:,:,1)              )   ! rivers 
    1175          IF( lk_diaar5 )   CALL iom_put( 'hflx_rnf_cea' , frcv(jpr_rnf)%z3(:,:,1) * zcptn(:,:) )   ! heat flux from rivers 
    1176       ENDIF 
     1421      IF( srcv(jpr_rnf)%laction )   rnf(:,:) = frcv(jpr_rnf)%z3(:,:,1) 
    11771422      IF( srcv(jpr_cal)%laction ) THEN  
    1178          emp_tot(:,:) = emp_tot(:,:) - frcv(jpr_cal)%z3(:,:,1) 
    1179          CALL iom_put( 'calving', frcv(jpr_cal)%z3(:,:,1) ) 
    1180       ENDIF 
    1181       ! 
    1182 !!gm :  this seems to be internal cooking, not sure to need that in a generic interface  
    1183 !!gm                                       at least should be optional... 
    1184 !!       ! remove negative runoff                            ! sum over the global domain 
    1185 !!       zcumulpos = SUM( MAX( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * e1t(:,:) * e2t(:,:) * tmask_i(:,:) )  
    1186 !!       zcumulneg = SUM( MIN( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * e1t(:,:) * e2t(:,:) * tmask_i(:,:) ) 
    1187 !!       IF( lk_mpp )   CALL mpp_sum( zcumulpos ) 
    1188 !!       IF( lk_mpp )   CALL mpp_sum( zcumulneg )  
    1189 !!       IF( zcumulpos /= 0. ) THEN                          ! distribute negative runoff on positive runoff grid points 
    1190 !!          zcumulneg = 1.e0 + zcumulneg / zcumulpos 
    1191 !!          frcv(jpr_rnf)%z3(:,:,1) = MAX( frcv(jpr_rnf)%z3(:,:,1), 0.e0 ) * zcumulneg 
    1192 !!       ENDIF      
    1193 !!       emp_tot(:,:) = emp_tot(:,:) - frcv(jpr_rnf)%z3(:,:,1)   ! add runoff to e-p  
    1194 !! 
    1195 !!gm  end of internal cooking 
     1423         zemp_tot(:,:) = zemp_tot(:,:) - frcv(jpr_cal)%z3(:,:,1) 
     1424         CALL iom_put( 'calving_cea', frcv(jpr_cal)%z3(:,:,1) ) 
     1425      ENDIF 
     1426 
     1427      IF( ln_mixcpl ) THEN 
     1428         emp_tot(:,:) = emp_tot(:,:) * xcplmask(:,:,0) + zemp_tot(:,:) * zmsk(:,:) 
     1429         emp_ice(:,:) = emp_ice(:,:) * xcplmask(:,:,0) + zemp_ice(:,:) * zmsk(:,:) 
     1430         sprecip(:,:) = sprecip(:,:) * xcplmask(:,:,0) + zsprecip(:,:) * zmsk(:,:) 
     1431         tprecip(:,:) = tprecip(:,:) * xcplmask(:,:,0) + ztprecip(:,:) * zmsk(:,:) 
     1432      ELSE 
     1433         emp_tot(:,:) =                                  zemp_tot(:,:) 
     1434         emp_ice(:,:) =                                  zemp_ice(:,:) 
     1435         sprecip(:,:) =                                  zsprecip(:,:) 
     1436         tprecip(:,:) =                                  ztprecip(:,:) 
     1437      ENDIF 
     1438 
     1439         CALL iom_put( 'snowpre'    , sprecip                                )   ! Snow 
     1440      IF( iom_use('snow_ao_cea') )   & 
     1441         CALL iom_put( 'snow_ao_cea', sprecip(:,:) * p_frld(:,:)             )   ! Snow        over ice-free ocean  (cell average) 
     1442      IF( iom_use('snow_ai_cea') )   & 
     1443         CALL iom_put( 'snow_ai_cea', sprecip(:,:) * zicefr(:,:)             )   ! Snow        over sea-ice         (cell average) 
    11961444 
    11971445      !                                                      ! ========================= ! 
     
    11991447      !                                                      ! ========================= ! 
    12001448      CASE( 'oce only' )                                     ! the required field is directly provided 
    1201          qns_tot(:,:  ) = frcv(jpr_qnsoce)%z3(:,:,1) 
     1449         zqns_tot(:,:  ) = frcv(jpr_qnsoce)%z3(:,:,1) 
    12021450      CASE( 'conservative' )                                      ! the required fields are directly provided 
    1203          qns_tot(:,:  ) = frcv(jpr_qnsmix)%z3(:,:,1) 
     1451         zqns_tot(:,:  ) = frcv(jpr_qnsmix)%z3(:,:,1) 
    12041452         IF ( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
    1205             qns_ice(:,:,1:jpl) = frcv(jpr_qnsice)%z3(:,:,1:jpl) 
     1453            zqns_ice(:,:,1:jpl) = frcv(jpr_qnsice)%z3(:,:,1:jpl) 
    12061454         ELSE 
    12071455            ! Set all category values equal for the moment 
    12081456            DO jl=1,jpl 
    1209                qns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
     1457               zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
    12101458            ENDDO 
    12111459         ENDIF 
    12121460      CASE( 'oce and ice' )       ! the total flux is computed from ocean and ice fluxes 
    1213          qns_tot(:,:  ) =  p_frld(:,:) * frcv(jpr_qnsoce)%z3(:,:,1) 
     1461         zqns_tot(:,:  ) =  p_frld(:,:) * frcv(jpr_qnsoce)%z3(:,:,1) 
    12141462         IF ( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 
    12151463            DO jl=1,jpl 
    1216                qns_tot(:,:   ) = qns_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qnsice)%z3(:,:,jl)    
    1217                qns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,jl) 
     1464               zqns_tot(:,:   ) = zqns_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qnsice)%z3(:,:,jl)    
     1465               zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,jl) 
    12181466            ENDDO 
    12191467         ELSE 
     1468            qns_tot(:,:   ) = qns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    12201469            DO jl=1,jpl 
    1221                qns_tot(:,:   ) = qns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    1222                qns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
     1470               zqns_tot(:,:   ) = zqns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
     1471               zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
    12231472            ENDDO 
    12241473         ENDIF 
    12251474      CASE( 'mixed oce-ice' )     ! the ice flux is cumputed from the total flux, the SST and ice informations 
    12261475! ** NEED TO SORT OUT HOW THIS SHOULD WORK IN THE MULTI-CATEGORY CASE - CURRENTLY NOT ALLOWED WHEN INTERFACE INITIALISED ** 
    1227          qns_tot(:,:  ) = frcv(jpr_qnsmix)%z3(:,:,1) 
    1228          qns_ice(:,:,1) = frcv(jpr_qnsmix)%z3(:,:,1)    & 
     1476         zqns_tot(:,:  ) = frcv(jpr_qnsmix)%z3(:,:,1) 
     1477         zqns_ice(:,:,1) = frcv(jpr_qnsmix)%z3(:,:,1)    & 
    12291478            &            + frcv(jpr_dqnsdt)%z3(:,:,1) * ( pist(:,:,1) - ( (rt0 + psst(:,:  ) ) * p_frld(:,:)   & 
    12301479            &                                                   +          pist(:,:,1)   * zicefr(:,:) ) ) 
    12311480      END SELECT 
    1232       ztmp(:,:) = p_frld(:,:) * sprecip(:,:) * lfus 
    1233       qns_tot(:,:) = qns_tot(:,:)                         &            ! qns_tot update over free ocean with: 
    1234          &          - ztmp(:,:)                           &            ! remove the latent heat flux of solid precip. melting 
    1235          &          - (  emp_tot(:,:)                     &            ! remove the heat content of mass flux (assumed to be at SST) 
    1236          &             - emp_ice(:,:) * zicefr(:,:)  ) * zcptn(:,:)  
    1237       IF( lk_diaar5 )   CALL iom_put( 'hflx_snow_cea', ztmp + sprecip(:,:) * zcptn(:,:) )   ! heat flux from snow (cell average) 
    12381481!!gm 
    1239 !!    currently it is taken into account in leads budget but not in the qns_tot, and thus not in  
     1482!!    currently it is taken into account in leads budget but not in the zqns_tot, and thus not in  
    12401483!!    the flux that enter the ocean.... 
    12411484!!    moreover 1 - it is not diagnose anywhere....  
     
    12461489      IF( srcv(jpr_cal)%laction ) THEN                            ! Iceberg melting  
    12471490         ztmp(:,:) = frcv(jpr_cal)%z3(:,:,1) * lfus               ! add the latent heat of iceberg melting  
    1248          qns_tot(:,:) = qns_tot(:,:) - ztmp(:,:) 
    1249          IF( lk_diaar5 )   CALL iom_put( 'hflx_cal_cea', ztmp + frcv(jpr_cal)%z3(:,:,1) * zcptn(:,:) )   ! heat flux from calving 
    1250       ENDIF 
    1251  
     1491         zqns_tot(:,:) = zqns_tot(:,:) - ztmp(:,:) 
     1492         IF( iom_use('hflx_cal_cea') )   & 
     1493            CALL iom_put( 'hflx_cal_cea', ztmp + frcv(jpr_cal)%z3(:,:,1) * zcptn(:,:) )   ! heat flux from calving 
     1494      ENDIF 
     1495 
     1496      ztmp(:,:) = p_frld(:,:) * zsprecip(:,:) * lfus 
     1497      IF( iom_use('hflx_snow_cea') )    CALL iom_put( 'hflx_snow_cea', ztmp + sprecip(:,:) * zcptn(:,:) )   ! heat flux from snow (cell average) 
     1498 
     1499#if defined key_lim3 
     1500      CALL wrk_alloc( jpi,jpj, zevap, zsnw, zqns_oce, zqprec_ice, zqemp_oce )  
     1501 
     1502      ! --- evaporation --- ! 
     1503      ! clem: evap_ice is set to 0 for LIM3 since we still do not know what to do with sublimation 
     1504      ! the problem is: the atm. imposes both mass evaporation and heat removed from the snow/ice 
     1505      !                 but it is incoherent WITH the ice model   
     1506      DO jl=1,jpl 
     1507         evap_ice(:,:,jl) = 0._wp  ! should be: frcv(jpr_ievp)%z3(:,:,1) 
     1508      ENDDO 
     1509      zevap(:,:) = zemp_tot(:,:) + ztprecip(:,:) ! evaporation over ocean 
     1510 
     1511      ! --- evaporation minus precipitation --- ! 
     1512      emp_oce(:,:) = emp_tot(:,:) - emp_ice(:,:) 
     1513 
     1514      ! --- non solar flux over ocean --- ! 
     1515      !         note: p_frld cannot be = 0 since we limit the ice concentration to amax 
     1516      zqns_oce = 0._wp 
     1517      WHERE( p_frld /= 0._wp )  zqns_oce(:,:) = ( zqns_tot(:,:) - SUM( a_i * zqns_ice, dim=3 ) ) / p_frld(:,:) 
     1518 
     1519      ! --- heat flux associated with emp --- ! 
     1520      zsnw(:,:) = 0._wp 
     1521      CALL lim_thd_snwblow( p_frld, zsnw )  ! snow distribution over ice after wind blowing 
     1522      zqemp_oce(:,:) = -      zevap(:,:)                   * p_frld(:,:)      *   zcptn(:,:)   &      ! evap 
     1523         &             + ( ztprecip(:,:) - zsprecip(:,:) )                    *   zcptn(:,:)   &      ! liquid precip 
     1524         &             +   zsprecip(:,:)                   * ( 1._wp - zsnw ) * ( zcptn(:,:) - lfus ) ! solid precip over ocean 
     1525      qemp_ice(:,:)  = -   frcv(jpr_ievp)%z3(:,:,1)        * zicefr(:,:)      *   zcptn(:,:)   &      ! ice evap 
     1526         &             +   zsprecip(:,:)                   * zsnw             * ( zcptn(:,:) - lfus ) ! solid precip over ice 
     1527 
     1528      ! --- heat content of precip over ice in J/m3 (to be used in 1D-thermo) --- ! 
     1529      zqprec_ice(:,:) = rhosn * ( zcptn(:,:) - lfus ) 
     1530 
     1531      ! --- total non solar flux --- ! 
     1532      zqns_tot(:,:) = zqns_tot(:,:) + qemp_ice(:,:) + zqemp_oce(:,:) 
     1533 
     1534      ! --- in case both coupled/forced are active, we must mix values --- !  
     1535      IF( ln_mixcpl ) THEN 
     1536         qns_tot(:,:) = qns_tot(:,:) * xcplmask(:,:,0) + zqns_tot(:,:)* zmsk(:,:) 
     1537         qns_oce(:,:) = qns_oce(:,:) * xcplmask(:,:,0) + zqns_oce(:,:)* zmsk(:,:) 
     1538         DO jl=1,jpl 
     1539            qns_ice(:,:,jl) = qns_ice(:,:,jl) * xcplmask(:,:,0) +  zqns_ice(:,:,jl)* zmsk(:,:) 
     1540         ENDDO 
     1541         qprec_ice(:,:) = qprec_ice(:,:) * xcplmask(:,:,0) + zqprec_ice(:,:)* zmsk(:,:) 
     1542         qemp_oce (:,:) =  qemp_oce(:,:) * xcplmask(:,:,0) +  zqemp_oce(:,:)* zmsk(:,:) 
     1543!!clem         evap_ice(:,:) = evap_ice(:,:) * xcplmask(:,:,0) 
     1544      ELSE 
     1545         qns_tot  (:,:  ) = zqns_tot  (:,:  ) 
     1546         qns_oce  (:,:  ) = zqns_oce  (:,:  ) 
     1547         qns_ice  (:,:,:) = zqns_ice  (:,:,:) 
     1548         qprec_ice(:,:)   = zqprec_ice(:,:) 
     1549         qemp_oce (:,:)   = zqemp_oce (:,:) 
     1550      ENDIF 
     1551 
     1552      CALL wrk_dealloc( jpi,jpj, zevap, zsnw, zqns_oce, zqprec_ice, zqemp_oce )  
     1553#else 
     1554      ! 
     1555      ! clem: this formulation is certainly wrong... but better than it was before... 
     1556      zqns_tot(:,:) = zqns_tot(:,:)                       &            ! zqns_tot update over free ocean with: 
     1557         &          - ztmp(:,:)                           &            ! remove the latent heat flux of solid precip. melting 
     1558         &          - (  zemp_tot(:,:)                    &            ! remove the heat content of mass flux (assumed to be at SST) 
     1559         &             - zemp_ice(:,:) * zicefr(:,:)  ) * zcptn(:,:)  
     1560 
     1561     IF( ln_mixcpl ) THEN 
     1562         qns_tot(:,:) = qns(:,:) * p_frld(:,:) + SUM( qns_ice(:,:,:) * a_i(:,:,:), dim=3 )   ! total flux from blk 
     1563         qns_tot(:,:) = qns_tot(:,:) * xcplmask(:,:,0) +  zqns_tot(:,:)* zmsk(:,:) 
     1564         DO jl=1,jpl 
     1565            qns_ice(:,:,jl) = qns_ice(:,:,jl) * xcplmask(:,:,0) +  zqns_ice(:,:,jl)* zmsk(:,:) 
     1566         ENDDO 
     1567      ELSE 
     1568         qns_tot(:,:  ) = zqns_tot(:,:  ) 
     1569         qns_ice(:,:,:) = zqns_ice(:,:,:) 
     1570      ENDIF 
     1571      ! 
     1572#endif 
    12521573      !                                                      ! ========================= ! 
    12531574      SELECT CASE( TRIM( sn_rcv_qsr%cldes ) )                !      solar heat fluxes    !   (qsr) 
    12541575      !                                                      ! ========================= ! 
    12551576      CASE( 'oce only' ) 
    1256          qsr_tot(:,:  ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) 
     1577         zqsr_tot(:,:  ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) 
    12571578      CASE( 'conservative' ) 
    1258          qsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
     1579         zqsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
    12591580         IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
    1260             qsr_ice(:,:,1:jpl) = frcv(jpr_qsrice)%z3(:,:,1:jpl) 
     1581            zqsr_ice(:,:,1:jpl) = frcv(jpr_qsrice)%z3(:,:,1:jpl) 
    12611582         ELSE 
    12621583            ! Set all category values equal for the moment 
    12631584            DO jl=1,jpl 
    1264                qsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
     1585               zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
    12651586            ENDDO 
    12661587         ENDIF 
    1267          qsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
    1268          qsr_ice(:,:,1) = frcv(jpr_qsrice)%z3(:,:,1) 
     1588         zqsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
     1589         zqsr_ice(:,:,1) = frcv(jpr_qsrice)%z3(:,:,1) 
    12691590      CASE( 'oce and ice' ) 
    1270          qsr_tot(:,:  ) =  p_frld(:,:) * frcv(jpr_qsroce)%z3(:,:,1) 
     1591         zqsr_tot(:,:  ) =  p_frld(:,:) * frcv(jpr_qsroce)%z3(:,:,1) 
    12711592         IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 
    12721593            DO jl=1,jpl 
    1273                qsr_tot(:,:   ) = qsr_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qsrice)%z3(:,:,jl)    
    1274                qsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,jl) 
     1594               zqsr_tot(:,:   ) = zqsr_tot(:,:) + a_i(:,:,jl) * frcv(jpr_qsrice)%z3(:,:,jl)    
     1595               zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,jl) 
    12751596            ENDDO 
    12761597         ELSE 
     1598            qsr_tot(:,:   ) = qsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    12771599            DO jl=1,jpl 
    1278                qsr_tot(:,:   ) = qsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    1279                qsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
     1600               zqsr_tot(:,:   ) = zqsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
     1601               zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
    12801602            ENDDO 
    12811603         ENDIF 
    12821604      CASE( 'mixed oce-ice' ) 
    1283          qsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
     1605         zqsr_tot(:,:  ) = frcv(jpr_qsrmix)%z3(:,:,1) 
    12841606! ** NEED TO SORT OUT HOW THIS SHOULD WORK IN THE MULTI-CATEGORY CASE - CURRENTLY NOT ALLOWED WHEN INTERFACE INITIALISED ** 
    12851607!       Create solar heat flux over ice using incoming solar heat flux and albedos 
    12861608!       ( see OASIS3 user guide, 5th edition, p39 ) 
    1287          qsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) )   & 
     1609         zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) )   & 
    12881610            &            / (  1.- ( albedo_oce_mix(:,:  ) * p_frld(:,:)       & 
    12891611            &                     + palbi         (:,:,1) * zicefr(:,:) ) ) 
    12901612      END SELECT 
    1291       IF( ln_dm2dc ) THEN   ! modify qsr to include the diurnal cycle 
    1292          qsr_tot(:,:  ) = sbc_dcy( qsr_tot(:,:  ) ) 
     1613      IF( ln_dm2dc .AND. ln_cpl ) THEN   ! modify qsr to include the diurnal cycle 
     1614         zqsr_tot(:,:  ) = sbc_dcy( zqsr_tot(:,:  ) ) 
    12931615         DO jl=1,jpl 
    1294             qsr_ice(:,:,jl) = sbc_dcy( qsr_ice(:,:,jl) ) 
     1616            zqsr_ice(:,:,jl) = sbc_dcy( zqsr_ice(:,:,jl) ) 
    12951617         ENDDO 
    12961618      ENDIF 
    12971619 
    1298       SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) ) 
     1620#if defined key_lim3 
     1621      CALL wrk_alloc( jpi,jpj, zqsr_oce )  
     1622      ! --- solar flux over ocean --- ! 
     1623      !         note: p_frld cannot be = 0 since we limit the ice concentration to amax 
     1624      zqsr_oce = 0._wp 
     1625      WHERE( p_frld /= 0._wp )  zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / p_frld(:,:) 
     1626 
     1627      IF( ln_mixcpl ) THEN   ;   qsr_oce(:,:) = qsr_oce(:,:) * xcplmask(:,:,0) +  zqsr_oce(:,:)* zmsk(:,:) 
     1628      ELSE                   ;   qsr_oce(:,:) = zqsr_oce(:,:)   ;   ENDIF 
     1629 
     1630      CALL wrk_dealloc( jpi,jpj, zqsr_oce )  
     1631#endif 
     1632 
     1633      IF( ln_mixcpl ) THEN 
     1634         qsr_tot(:,:) = qsr(:,:) * p_frld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 )   ! total flux from blk 
     1635         qsr_tot(:,:) = qsr_tot(:,:) * xcplmask(:,:,0) +  zqsr_tot(:,:)* zmsk(:,:) 
     1636         DO jl=1,jpl 
     1637            qsr_ice(:,:,jl) = qsr_ice(:,:,jl) * xcplmask(:,:,0) +  zqsr_ice(:,:,jl)* zmsk(:,:) 
     1638         ENDDO 
     1639      ELSE 
     1640         qsr_tot(:,:  ) = zqsr_tot(:,:  ) 
     1641         qsr_ice(:,:,:) = zqsr_ice(:,:,:) 
     1642      ENDIF 
     1643 
     1644      !                                                      ! ========================= ! 
     1645      SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) )             !          d(qns)/dt        ! 
     1646      !                                                      ! ========================= ! 
    12991647      CASE ('coupled') 
    13001648         IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN 
    1301             dqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl) 
     1649            zdqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl) 
    13021650         ELSE 
    13031651            ! Set all category values equal for the moment 
    13041652            DO jl=1,jpl 
    1305                dqns_ice(:,:,jl) = frcv(jpr_dqnsdt)%z3(:,:,1) 
     1653               zdqns_ice(:,:,jl) = frcv(jpr_dqnsdt)%z3(:,:,1) 
    13061654            ENDDO 
    13071655         ENDIF 
    13081656      END SELECT 
    1309  
    1310       SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) 
     1657       
     1658      IF( ln_mixcpl ) THEN 
     1659         DO jl=1,jpl 
     1660            dqns_ice(:,:,jl) = dqns_ice(:,:,jl) * xcplmask(:,:,0) + zdqns_ice(:,:,jl) * zmsk(:,:) 
     1661         ENDDO 
     1662      ELSE 
     1663         dqns_ice(:,:,:) = zdqns_ice(:,:,:) 
     1664      ENDIF 
     1665       
     1666      !                                                      ! ========================= ! 
     1667      SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) )             !    topmelt and botmelt    ! 
     1668      !                                                      ! ========================= ! 
    13111669      CASE ('coupled') 
    13121670         topmelt(:,:,:)=frcv(jpr_topm)%z3(:,:,:) 
     
    13141672      END SELECT 
    13151673 
    1316       !    Ice Qsr penetration used (only?)in lim2 or lim3  
    1317       ! fraction of net shortwave radiation which is not absorbed in the thin surface layer  
    1318       ! and penetrates inside the ice cover ( Maykut and Untersteiner, 1971 ; Elbert anbd Curry, 1993 ) 
     1674      ! Surface transimission parameter io (Maykut Untersteiner , 1971 ; Ebert and Curry, 1993 ) 
     1675      ! Used for LIM2 and LIM3 
    13191676      ! Coupled case: since cloud cover is not received from atmosphere  
    1320       !               ===> defined as constant value -> definition done in sbc_cpl_init 
    1321       fr1_i0(:,:) = 0.18 
    1322       fr2_i0(:,:) = 0.82 
    1323  
    1324  
    1325       CALL wrk_dealloc( jpi,jpj, zcptn, ztmp, zicefr ) 
    1326       ! 
    1327       IF( nn_timing == 1 )  CALL timing_stop('sbc_cpl_ice_flx') 
     1677      !               ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
     1678      fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 
     1679      fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
     1680 
     1681      CALL wrk_dealloc( jpi,jpj,       zcptn, ztmp, zicefr, zmsk, zemp_tot, zemp_ice, zsprecip, ztprecip, zqns_tot, zqsr_tot ) 
     1682      CALL wrk_dealloc( jpi,jpj,jpl,   zqns_ice, zqsr_ice, zdqns_ice ) 
     1683      ! 
     1684      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_ice_flx') 
    13281685      ! 
    13291686   END SUBROUTINE sbc_cpl_ice_flx 
     
    13361693      !! ** Purpose :   provide the ocean-ice informations to the atmosphere 
    13371694      !! 
    1338       !! ** Method  :   send to the atmosphere through a call to cpl_prism_snd 
     1695      !! ** Method  :   send to the atmosphere through a call to cpl_snd 
    13391696      !!              all the needed fields (as defined in sbc_cpl_init) 
    13401697      !!---------------------------------------------------------------------- 
     
    13431700      INTEGER ::   ji, jj, jl   ! dummy loop indices 
    13441701      INTEGER ::   isec, info   ! local integer 
     1702      REAL(wp) ::   zumax, zvmax 
    13451703      REAL(wp), POINTER, DIMENSION(:,:)   ::   zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 
    13461704      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztmp3, ztmp4    
    13471705      !!---------------------------------------------------------------------- 
    13481706      ! 
    1349       IF( nn_timing == 1 )  CALL timing_start('sbc_cpl_snd') 
    1350       ! 
    1351       CALL wrk_alloc( jpi,jpj, zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 
    1352       CALL wrk_alloc( jpi,jpj,jpl, ztmp3, ztmp4 ) 
    1353  
    1354       isec = ( kt - nit000 ) * NINT(rdttra(1))        ! date of exchanges 
     1707      IF( nn_timing == 1 )   CALL timing_start('sbc_cpl_snd') 
     1708      ! 
     1709      CALL wrk_alloc( jpi,jpj,       zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 
     1710      CALL wrk_alloc( jpi,jpj,jpl,   ztmp3, ztmp4 ) 
     1711 
     1712      isec = ( kt - nit000 ) * NINT( rdt )        ! date of exchanges 
    13551713 
    13561714      zfr_l(:,:) = 1.- fr_i(:,:) 
    1357  
    13581715      !                                                      ! ------------------------- ! 
    13591716      !                                                      !    Surface temperature    !   in Kelvin 
    13601717      !                                                      ! ------------------------- ! 
    13611718      IF( ssnd(jps_toce)%laction .OR. ssnd(jps_tice)%laction .OR. ssnd(jps_tmix)%laction ) THEN 
    1362          SELECT CASE( sn_snd_temp%cldes) 
    1363          CASE( 'oce only'             )   ;   ztmp1(:,:) =   tsn(:,:,1,jp_tem) + rt0 
    1364          CASE( 'weighted oce and ice' )   ;   ztmp1(:,:) = ( tsn(:,:,1,jp_tem) + rt0 ) * zfr_l(:,:)    
    1365             SELECT CASE( sn_snd_temp%clcat ) 
     1719          
     1720         IF ( nn_components == jp_iam_opa ) THEN 
     1721            ztmp1(:,:) = tsn(:,:,1,jp_tem)   ! send temperature as it is (potential or conservative) -> use of ln_useCT on the received part 
     1722         ELSE 
     1723            ! we must send the surface potential temperature  
     1724            IF( ln_useCT )  THEN    ;   ztmp1(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 
     1725            ELSE                    ;   ztmp1(:,:) = tsn(:,:,1,jp_tem) 
     1726            ENDIF 
     1727            ! 
     1728            SELECT CASE( sn_snd_temp%cldes) 
     1729            CASE( 'oce only'             )   ;   ztmp1(:,:) =   ztmp1(:,:) + rt0 
     1730            CASE( 'oce and ice'          )   ;   ztmp1(:,:) =   ztmp1(:,:) + rt0 
     1731               SELECT CASE( sn_snd_temp%clcat ) 
     1732               CASE( 'yes' )    
     1733                  ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) 
     1734               CASE( 'no' ) 
     1735                  WHERE( SUM( a_i, dim=3 ) /= 0. ) 
     1736                     ztmp3(:,:,1) = SUM( tn_ice * a_i, dim=3 ) / SUM( a_i, dim=3 ) 
     1737                  ELSEWHERE 
     1738                     ztmp3(:,:,1) = rt0 
     1739                  END WHERE 
     1740               CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
     1741               END SELECT 
     1742            CASE( 'weighted oce and ice' )   ;   ztmp1(:,:) = ( ztmp1(:,:) + rt0 ) * zfr_l(:,:)    
     1743               SELECT CASE( sn_snd_temp%clcat ) 
     1744               CASE( 'yes' )    
     1745                  ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
     1746               CASE( 'no' ) 
     1747                  ztmp3(:,:,:) = 0.0 
     1748                  DO jl=1,jpl 
     1749                     ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) 
     1750                  ENDDO 
     1751               CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
     1752               END SELECT 
     1753            CASE( 'mixed oce-ice'        )    
     1754               ztmp1(:,:) = ( ztmp1(:,:) + rt0 ) * zfr_l(:,:)  
     1755               DO jl=1,jpl 
     1756                  ztmp1(:,:) = ztmp1(:,:) + tn_ice(:,:,jl) * a_i(:,:,jl) 
     1757               ENDDO 
     1758            CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%cldes' ) 
     1759            END SELECT 
     1760         ENDIF 
     1761         IF( ssnd(jps_toce)%laction )   CALL cpl_snd( jps_toce, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
     1762         IF( ssnd(jps_tice)%laction )   CALL cpl_snd( jps_tice, isec, ztmp3, info ) 
     1763         IF( ssnd(jps_tmix)%laction )   CALL cpl_snd( jps_tmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
     1764      ENDIF 
     1765      !                                                      ! ------------------------- ! 
     1766      !                                                      !           Albedo          ! 
     1767      !                                                      ! ------------------------- ! 
     1768      IF( ssnd(jps_albice)%laction ) THEN                         ! ice  
     1769          SELECT CASE( sn_snd_alb%cldes ) 
     1770          CASE( 'ice' ) 
     1771             SELECT CASE( sn_snd_alb%clcat ) 
     1772             CASE( 'yes' )    
     1773                ztmp3(:,:,1:jpl) = alb_ice(:,:,1:jpl) 
     1774             CASE( 'no' ) 
     1775                WHERE( SUM( a_i, dim=3 ) /= 0. ) 
     1776                   ztmp1(:,:) = SUM( alb_ice (:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) / SUM( a_i(:,:,1:jpl), dim=3 ) 
     1777                ELSEWHERE 
     1778                   ztmp1(:,:) = albedo_oce_mix(:,:) 
     1779                END WHERE 
     1780             CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%clcat' ) 
     1781             END SELECT 
     1782          CASE( 'weighted ice' )   ; 
     1783             SELECT CASE( sn_snd_alb%clcat ) 
     1784             CASE( 'yes' )    
     1785                ztmp3(:,:,1:jpl) =  alb_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
     1786             CASE( 'no' ) 
     1787                WHERE( fr_i (:,:) > 0. ) 
     1788                   ztmp1(:,:) = SUM (  alb_ice(:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) 
     1789                ELSEWHERE 
     1790                   ztmp1(:,:) = 0. 
     1791                END WHERE 
     1792             CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_ice%clcat' ) 
     1793             END SELECT 
     1794          CASE default      ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%cldes' ) 
     1795         END SELECT 
     1796 
     1797         SELECT CASE( sn_snd_alb%clcat ) 
    13661798            CASE( 'yes' )    
    1367                ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
    1368             CASE( 'no' ) 
    1369                ztmp3(:,:,:) = 0.0 
    1370                DO jl=1,jpl 
    1371                   ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) 
    1372                ENDDO 
    1373             CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
    1374             END SELECT 
    1375          CASE( 'mixed oce-ice'        )    
    1376             ztmp1(:,:) = ( tsn(:,:,1,jp_tem) + rt0 ) * zfr_l(:,:)  
    1377             DO jl=1,jpl 
    1378                ztmp1(:,:) = ztmp1(:,:) + tn_ice(:,:,jl) * a_i(:,:,jl) 
    1379             ENDDO 
    1380          CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%cldes' ) 
     1799               CALL cpl_snd( jps_albice, isec, ztmp3, info )      !-> MV this has never been checked in coupled mode 
     1800            CASE( 'no'  )    
     1801               CALL cpl_snd( jps_albice, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )  
    13811802         END SELECT 
    1382          IF( ssnd(jps_toce)%laction )   CALL cpl_prism_snd( jps_toce, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
    1383          IF( ssnd(jps_tice)%laction )   CALL cpl_prism_snd( jps_tice, isec, ztmp3, info ) 
    1384          IF( ssnd(jps_tmix)%laction )   CALL cpl_prism_snd( jps_tmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
    1385       ENDIF 
    1386       ! 
    1387       !                                                      ! ------------------------- ! 
    1388       !                                                      !           Albedo          ! 
    1389       !                                                      ! ------------------------- ! 
    1390       IF( ssnd(jps_albice)%laction ) THEN                         ! ice  
    1391          ztmp3(:,:,1:jpl) = alb_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
    1392          CALL cpl_prism_snd( jps_albice, isec, ztmp3, info ) 
    1393       ENDIF 
     1803      ENDIF 
     1804 
    13941805      IF( ssnd(jps_albmix)%laction ) THEN                         ! mixed ice-ocean 
    13951806         ztmp1(:,:) = albedo_oce_mix(:,:) * zfr_l(:,:) 
     
    13971808            ztmp1(:,:) = ztmp1(:,:) + alb_ice(:,:,jl) * a_i(:,:,jl) 
    13981809         ENDDO 
    1399          CALL cpl_prism_snd( jps_albmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
     1810         CALL cpl_snd( jps_albmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 
    14001811      ENDIF 
    14011812      !                                                      ! ------------------------- ! 
    14021813      !                                                      !  Ice fraction & Thickness !  
    14031814      !                                                      ! ------------------------- ! 
    1404       ! Send ice fraction field  
     1815      ! Send ice fraction field to atmosphere 
    14051816      IF( ssnd(jps_fice)%laction ) THEN 
    14061817         SELECT CASE( sn_snd_thick%clcat ) 
     
    14091820         CASE default    ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick%clcat' ) 
    14101821         END SELECT 
    1411          CALL cpl_prism_snd( jps_fice, isec, ztmp3, info ) 
     1822         IF( ssnd(jps_fice)%laction )   CALL cpl_snd( jps_fice, isec, ztmp3, info ) 
     1823      ENDIF 
     1824       
     1825      ! Send ice fraction field to OPA (sent by SAS in SAS-OPA coupling) 
     1826      IF( ssnd(jps_fice2)%laction ) THEN 
     1827         ztmp3(:,:,1) = fr_i(:,:) 
     1828         IF( ssnd(jps_fice2)%laction )   CALL cpl_snd( jps_fice2, isec, ztmp3, info ) 
    14121829      ENDIF 
    14131830 
     
    14301847            END SELECT 
    14311848         CASE( 'ice and snow'         )    
    1432             ztmp3(:,:,1:jpl) = ht_i(:,:,1:jpl) 
    1433             ztmp4(:,:,1:jpl) = ht_s(:,:,1:jpl) 
     1849            SELECT CASE( sn_snd_thick%clcat ) 
     1850            CASE( 'yes' ) 
     1851               ztmp3(:,:,1:jpl) = ht_i(:,:,1:jpl) 
     1852               ztmp4(:,:,1:jpl) = ht_s(:,:,1:jpl) 
     1853            CASE( 'no' ) 
     1854               WHERE( SUM( a_i, dim=3 ) /= 0. ) 
     1855                  ztmp3(:,:,1) = SUM( ht_i * a_i, dim=3 ) / SUM( a_i, dim=3 ) 
     1856                  ztmp4(:,:,1) = SUM( ht_s * a_i, dim=3 ) / SUM( a_i, dim=3 ) 
     1857               ELSEWHERE 
     1858                 ztmp3(:,:,1) = 0. 
     1859                 ztmp4(:,:,1) = 0. 
     1860               END WHERE 
     1861            CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick%clcat' ) 
     1862            END SELECT 
    14341863         CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick%cldes' ) 
    14351864         END SELECT 
    1436          IF( ssnd(jps_hice)%laction )   CALL cpl_prism_snd( jps_hice, isec, ztmp3, info ) 
    1437          IF( ssnd(jps_hsnw)%laction )   CALL cpl_prism_snd( jps_hsnw, isec, ztmp4, info ) 
     1865         IF( ssnd(jps_hice)%laction )   CALL cpl_snd( jps_hice, isec, ztmp3, info ) 
     1866         IF( ssnd(jps_hsnw)%laction )   CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 
    14381867      ENDIF 
    14391868      ! 
     
    14421871      !                                                      !  CO2 flux from PISCES     !  
    14431872      !                                                      ! ------------------------- ! 
    1444       IF( ssnd(jps_co2)%laction )   CALL cpl_prism_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
     1873      IF( ssnd(jps_co2)%laction )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
    14451874      ! 
    14461875#endif 
     
    14571886         !                                                              i-1  i   i 
    14581887         !                                                               i      i+1 (for I) 
    1459          SELECT CASE( TRIM( sn_snd_crt%cldes ) ) 
    1460          CASE( 'oce only'             )      ! C-grid ==> T 
    1461             DO jj = 2, jpjm1 
    1462                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1463                   zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
    1464                   zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
    1465                END DO 
    1466             END DO 
    1467          CASE( 'weighted oce and ice' )    
    1468             SELECT CASE ( cp_ice_msh ) 
    1469             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
     1888         IF( nn_components == jp_iam_opa ) THEN 
     1889            zotx1(:,:) = un(:,:,1)   
     1890            zoty1(:,:) = vn(:,:,1)   
     1891         ELSE         
     1892            SELECT CASE( TRIM( sn_snd_crt%cldes ) ) 
     1893            CASE( 'oce only'             )      ! C-grid ==> T 
    14701894               DO jj = 2, jpjm1 
    14711895                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    1472                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   
    1473                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj) 
    1474                      zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
    1475                      zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
     1896                     zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
     1897                     zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
    14761898                  END DO 
    14771899               END DO 
    1478             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
    1479                DO jj = 2, jpjm1 
    1480                   DO ji = 2, jpim1   ! NO vector opt. 
    1481                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
    1482                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
    1483                      zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
    1484                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1485                      zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
    1486                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1900            CASE( 'weighted oce and ice' )    
     1901               SELECT CASE ( cp_ice_msh ) 
     1902               CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
     1903                  DO jj = 2, jpjm1 
     1904                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     1905                        zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     1906                        zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj) 
     1907                        zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
     1908                        zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
     1909                     END DO 
    14871910                  END DO 
    1488                END DO 
    1489             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
    1490                DO jj = 2, jpjm1 
    1491                   DO ji = 2, jpim1   ! NO vector opt. 
    1492                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
    1493                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
    1494                      zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
    1495                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1496                      zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
    1497                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1911               CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
     1912                  DO jj = 2, jpjm1 
     1913                     DO ji = 2, jpim1   ! NO vector opt. 
     1914                        zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     1915                        zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
     1916                        zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
     1917                           &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1918                        zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
     1919                           &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1920                     END DO 
    14981921                  END DO 
    1499                END DO 
     1922               CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
     1923                  DO jj = 2, jpjm1 
     1924                     DO ji = 2, jpim1   ! NO vector opt. 
     1925                        zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     1926                        zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
     1927                        zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
     1928                           &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1929                        zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
     1930                           &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1931                     END DO 
     1932                  END DO 
     1933               END SELECT 
     1934               CALL lbc_lnk( zitx1, 'T', -1. )   ;   CALL lbc_lnk( zity1, 'T', -1. ) 
     1935            CASE( 'mixed oce-ice'        ) 
     1936               SELECT CASE ( cp_ice_msh ) 
     1937               CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
     1938                  DO jj = 2, jpjm1 
     1939                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     1940                        zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   & 
     1941                           &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
     1942                        zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   & 
     1943                           &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
     1944                     END DO 
     1945                  END DO 
     1946               CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
     1947                  DO jj = 2, jpjm1 
     1948                     DO ji = 2, jpim1   ! NO vector opt. 
     1949                        zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
     1950                           &         + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
     1951                           &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1952                        zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
     1953                           &         + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
     1954                           &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1955                     END DO 
     1956                  END DO 
     1957               CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
     1958                  DO jj = 2, jpjm1 
     1959                     DO ji = 2, jpim1   ! NO vector opt. 
     1960                        zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
     1961                           &         + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
     1962                           &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1963                        zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
     1964                           &         + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
     1965                           &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     1966                     END DO 
     1967                  END DO 
     1968               END SELECT 
    15001969            END SELECT 
    1501             CALL lbc_lnk( zitx1, 'T', -1. )   ;   CALL lbc_lnk( zity1, 'T', -1. ) 
    1502          CASE( 'mixed oce-ice'        ) 
    1503             SELECT CASE ( cp_ice_msh ) 
    1504             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
    1505                DO jj = 2, jpjm1 
    1506                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    1507                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   & 
    1508                         &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
    1509                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   & 
    1510                         &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
    1511                   END DO 
    1512                END DO 
    1513             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
    1514                DO jj = 2, jpjm1 
    1515                   DO ji = 2, jpim1   ! NO vector opt. 
    1516                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
    1517                         &         + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
    1518                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1519                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
    1520                         &         + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
    1521                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1522                   END DO 
    1523                END DO 
    1524             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
    1525                DO jj = 2, jpjm1 
    1526                   DO ji = 2, jpim1   ! NO vector opt. 
    1527                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
    1528                         &         + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
    1529                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1530                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
    1531                         &         + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
    1532                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
    1533                   END DO 
    1534                END DO 
    1535             END SELECT 
    1536          END SELECT 
    1537          CALL lbc_lnk( zotx1, ssnd(jps_ocx1)%clgrid, -1. )   ;   CALL lbc_lnk( zoty1, ssnd(jps_ocy1)%clgrid, -1. ) 
     1970            CALL lbc_lnk( zotx1, ssnd(jps_ocx1)%clgrid, -1. )   ;   CALL lbc_lnk( zoty1, ssnd(jps_ocy1)%clgrid, -1. ) 
     1971            ! 
     1972         ENDIF 
    15381973         ! 
    15391974         ! 
     
    15652000         ENDIF 
    15662001         ! 
    1567          IF( ssnd(jps_ocx1)%laction )   CALL cpl_prism_snd( jps_ocx1, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info )   ! ocean x current 1st grid 
    1568          IF( ssnd(jps_ocy1)%laction )   CALL cpl_prism_snd( jps_ocy1, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info )   ! ocean y current 1st grid 
    1569          IF( ssnd(jps_ocz1)%laction )   CALL cpl_prism_snd( jps_ocz1, isec, RESHAPE ( zotz1, (/jpi,jpj,1/) ), info )   ! ocean z current 1st grid 
     2002         IF( ssnd(jps_ocx1)%laction )   CALL cpl_snd( jps_ocx1, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info )   ! ocean x current 1st grid 
     2003         IF( ssnd(jps_ocy1)%laction )   CALL cpl_snd( jps_ocy1, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info )   ! ocean y current 1st grid 
     2004         IF( ssnd(jps_ocz1)%laction )   CALL cpl_snd( jps_ocz1, isec, RESHAPE ( zotz1, (/jpi,jpj,1/) ), info )   ! ocean z current 1st grid 
    15702005         ! 
    1571          IF( ssnd(jps_ivx1)%laction )   CALL cpl_prism_snd( jps_ivx1, isec, RESHAPE ( zitx1, (/jpi,jpj,1/) ), info )   ! ice   x current 1st grid 
    1572          IF( ssnd(jps_ivy1)%laction )   CALL cpl_prism_snd( jps_ivy1, isec, RESHAPE ( zity1, (/jpi,jpj,1/) ), info )   ! ice   y current 1st grid 
    1573          IF( ssnd(jps_ivz1)%laction )   CALL cpl_prism_snd( jps_ivz1, isec, RESHAPE ( zitz1, (/jpi,jpj,1/) ), info )   ! ice   z current 1st grid 
     2006         IF( ssnd(jps_ivx1)%laction )   CALL cpl_snd( jps_ivx1, isec, RESHAPE ( zitx1, (/jpi,jpj,1/) ), info )   ! ice   x current 1st grid 
     2007         IF( ssnd(jps_ivy1)%laction )   CALL cpl_snd( jps_ivy1, isec, RESHAPE ( zity1, (/jpi,jpj,1/) ), info )   ! ice   y current 1st grid 
     2008         IF( ssnd(jps_ivz1)%laction )   CALL cpl_snd( jps_ivz1, isec, RESHAPE ( zitz1, (/jpi,jpj,1/) ), info )   ! ice   z current 1st grid 
    15742009         !  
    15752010      ENDIF 
    15762011      ! 
    1577       CALL wrk_dealloc( jpi,jpj, zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 
    1578       CALL wrk_dealloc( jpi,jpj,jpl, ztmp3, ztmp4 ) 
    1579       ! 
    1580       IF( nn_timing == 1 )  CALL timing_stop('sbc_cpl_snd') 
     2012      ! 
     2013      !  Fields sent by OPA to SAS when doing OPA<->SAS coupling 
     2014      !                                                        ! SSH 
     2015      IF( ssnd(jps_ssh )%laction )  THEN 
     2016         !                          ! removed inverse barometer ssh when Patm 
     2017         !                          forcing is used (for sea-ice dynamics) 
     2018         IF( ln_apr_dyn ) THEN   ;   ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     2019         ELSE                    ;   ztmp1(:,:) = sshn(:,:) 
     2020         ENDIF 
     2021         CALL cpl_snd( jps_ssh   , isec, RESHAPE ( ztmp1            , (/jpi,jpj,1/) ), info ) 
     2022 
     2023      ENDIF 
     2024      !                                                        ! SSS 
     2025      IF( ssnd(jps_soce  )%laction )  THEN 
     2026         CALL cpl_snd( jps_soce  , isec, RESHAPE ( tsn(:,:,1,jp_sal), (/jpi,jpj,1/) ), info ) 
     2027      ENDIF 
     2028      !                                                        ! first T level thickness  
     2029      IF( ssnd(jps_e3t1st )%laction )  THEN 
     2030         CALL cpl_snd( jps_e3t1st, isec, RESHAPE ( e3t_n(:,:,1)   , (/jpi,jpj,1/) ), info ) 
     2031      ENDIF 
     2032      !                                                        ! Qsr fraction 
     2033      IF( ssnd(jps_fraqsr)%laction )  THEN 
     2034         CALL cpl_snd( jps_fraqsr, isec, RESHAPE ( fraqsr_1lev(:,:) , (/jpi,jpj,1/) ), info ) 
     2035      ENDIF 
     2036      ! 
     2037      !  Fields sent by SAS to OPA when OASIS coupling 
     2038      !                                                        ! Solar heat flux 
     2039      IF( ssnd(jps_qsroce)%laction )  CALL cpl_snd( jps_qsroce, isec, RESHAPE ( qsr , (/jpi,jpj,1/) ), info ) 
     2040      IF( ssnd(jps_qnsoce)%laction )  CALL cpl_snd( jps_qnsoce, isec, RESHAPE ( qns , (/jpi,jpj,1/) ), info ) 
     2041      IF( ssnd(jps_oemp  )%laction )  CALL cpl_snd( jps_oemp  , isec, RESHAPE ( emp , (/jpi,jpj,1/) ), info ) 
     2042      IF( ssnd(jps_sflx  )%laction )  CALL cpl_snd( jps_sflx  , isec, RESHAPE ( sfx , (/jpi,jpj,1/) ), info ) 
     2043      IF( ssnd(jps_otx1  )%laction )  CALL cpl_snd( jps_otx1  , isec, RESHAPE ( utau, (/jpi,jpj,1/) ), info ) 
     2044      IF( ssnd(jps_oty1  )%laction )  CALL cpl_snd( jps_oty1  , isec, RESHAPE ( vtau, (/jpi,jpj,1/) ), info ) 
     2045      IF( ssnd(jps_rnf   )%laction )  CALL cpl_snd( jps_rnf   , isec, RESHAPE ( rnf , (/jpi,jpj,1/) ), info ) 
     2046      IF( ssnd(jps_taum  )%laction )  CALL cpl_snd( jps_taum  , isec, RESHAPE ( taum, (/jpi,jpj,1/) ), info ) 
     2047 
     2048      CALL wrk_dealloc( jpi,jpj,       zfr_l, ztmp1, ztmp2, zotx1, zoty1, zotz1, zitx1, zity1, zitz1 ) 
     2049      CALL wrk_dealloc( jpi,jpj,jpl,   ztmp3, ztmp4 ) 
     2050      ! 
     2051      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_snd') 
    15812052      ! 
    15822053   END SUBROUTINE sbc_cpl_snd 
    15832054    
    1584 #else 
    1585    !!---------------------------------------------------------------------- 
    1586    !!   Dummy module                                            NO coupling 
    1587    !!---------------------------------------------------------------------- 
    1588    USE par_kind        ! kind definition 
    1589 CONTAINS 
    1590    SUBROUTINE sbc_cpl_snd( kt ) 
    1591       WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', kt 
    1592    END SUBROUTINE sbc_cpl_snd 
    1593    ! 
    1594    SUBROUTINE sbc_cpl_rcv( kt, k_fsbc, k_ice )      
    1595       WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', kt, k_fsbc, k_ice 
    1596    END SUBROUTINE sbc_cpl_rcv 
    1597    ! 
    1598    SUBROUTINE sbc_cpl_ice_tau( p_taui, p_tauj )      
    1599       REAL(wp), INTENT(out), DIMENSION(:,:) ::   p_taui   ! i- & j-components of atmos-ice stress [N/m2] 
    1600       REAL(wp), INTENT(out), DIMENSION(:,:) ::   p_tauj   ! at I-point (B-grid) or U & V-point (C-grid) 
    1601       p_taui(:,:) = 0.   ;   p_tauj(:,:) = 0. ! stupid definition to avoid warning message when compiling... 
    1602       WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?' 
    1603    END SUBROUTINE sbc_cpl_ice_tau 
    1604    ! 
    1605    SUBROUTINE sbc_cpl_ice_flx( p_frld , palbi   , psst    , pist  ) 
    1606       REAL(wp), INTENT(in   ), DIMENSION(:,:  ) ::   p_frld     ! lead fraction                [0 to 1] 
    1607       REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   palbi   ! ice albedo 
    1608       REAL(wp), INTENT(in   ), DIMENSION(:,:  ), OPTIONAL ::   psst    ! sea surface temperature      [Celcius] 
    1609       REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   pist    ! ice surface temperature      [Kelvin] 
    1610       WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', p_frld(1,1), palbi(1,1,1), psst(1,1), pist(1,1,1)  
    1611    END SUBROUTINE sbc_cpl_ice_flx 
    1612     
    1613 #endif 
    1614  
    16152055   !!====================================================================== 
    16162056END MODULE sbccpl 
Note: See TracChangeset for help on using the changeset viewer.