Index: /branches/dev_r1821_sbccpl_icecat/NEMO/OPA_SRC/SBC/sbccpl.F90
===================================================================
--- /branches/dev_r1821_sbccpl_icecat/NEMO/OPA_SRC/SBC/sbccpl.F90	(revision 2062)
+++ /branches/dev_r1821_sbccpl_icecat/NEMO/OPA_SRC/SBC/sbccpl.F90	(revision 2063)
@@ -88,10 +88,7 @@
    INTEGER, PARAMETER ::   jpr_cal    = 29            ! calving
    INTEGER, PARAMETER ::   jpr_taum   = 30            ! wind stress module
-#if ! defined key_cpl_carbon_cycle
-   INTEGER, PARAMETER ::   jprcv      = 30            ! total number of fields received
-#else
    INTEGER, PARAMETER ::   jpr_co2    = 31
    INTEGER, PARAMETER ::   jprcv      = 31            ! total number of fields received
-#endif   
+   !
    INTEGER, PARAMETER ::   jps_fice   =  1            ! ice fraction 
    INTEGER, PARAMETER ::   jps_toce   =  2            ! ocean temperature
@@ -108,46 +105,36 @@
    INTEGER, PARAMETER ::   jps_ivy1   = 13            !
    INTEGER, PARAMETER ::   jps_ivz1   = 14            !
-#if ! defined key_cpl_carbon_cycle
-   INTEGER, PARAMETER ::   jpsnd      = 14            ! total number of fields sended
-#else
    INTEGER, PARAMETER ::   jps_co2    = 15
    INTEGER, PARAMETER ::   jpsnd      = 15            ! total number of fields sended
-#endif   
-   !                                                         !!** namelist namsbc_cpl **
-   ! Send to the atmosphere                                   !
-   CHARACTER(len=100) ::   cn_snd_temperature = 'oce only'    ! 'oce only' 'weighted oce and ice' or 'mixed oce-ice'
-   CHARACTER(len=100) ::   cn_snd_albedo      = 'none'        ! 'none' 'weighted ice' or 'mixed oce-ice'
-   CHARACTER(len=100) ::   cn_snd_thickness   = 'none'        ! 'none' or 'weighted ice and snow'
-   CHARACTER(len=100) ::   cn_snd_crt_nature  = 'none'        ! 'none' 'oce only' 'weighted oce and ice' or 'mixed oce-ice'   
-   CHARACTER(len=100) ::   cn_snd_crt_refere  = 'spherical'   ! 'spherical' or 'cartesian'
-   CHARACTER(len=100) ::   cn_snd_crt_orient  = 'local grid'  ! 'eastward-northward' or 'local grid'
-   CHARACTER(len=100) ::   cn_snd_crt_grid    = 'T'           ! always at 'T' point
-#if defined key_cpl_carbon_cycle 
-   CHARACTER(len=100) ::   cn_snd_co2         = 'none'        ! 'none' or 'coupled'
-#endif
-   ! Received from the atmosphere                             !
-   CHARACTER(len=100) ::   cn_rcv_tau_nature  = 'oce only'    ! 'oce only' 'oce and ice' or 'mixed oce-ice'
-   CHARACTER(len=100) ::   cn_rcv_tau_refere  = 'spherical'   ! 'spherical' or 'cartesian'
-   CHARACTER(len=100) ::   cn_rcv_tau_orient  = 'local grid'  ! 'eastward-northward' or 'local grid'
-   CHARACTER(len=100) ::   cn_rcv_tau_grid    = 'T'           ! 'T', 'U,V', 'U,V,I', 'T,I', or 'T,U,V'
-   CHARACTER(len=100) ::   cn_rcv_w10m        = 'none'        ! 'none' or 'coupled'
-   CHARACTER(len=100) ::   cn_rcv_dqnsdt      = 'none'        ! 'none' or 'coupled'
-   CHARACTER(len=100) ::   cn_rcv_qsr         = 'oce only'    ! 'oce only' 'conservative' 'oce and ice' or 'mixed oce-ice'
-   CHARACTER(len=100) ::   cn_rcv_qns         = 'oce only'    ! 'oce only' 'conservative' 'oce and ice' or 'mixed oce-ice'
-   CHARACTER(len=100) ::   cn_rcv_emp         = 'oce only'    ! 'oce only' 'conservative' or 'oce and ice'
-   CHARACTER(len=100) ::   cn_rcv_rnf         = 'coupled'     ! 'coupled' 'climato' or 'mixed'
-   CHARACTER(len=100) ::   cn_rcv_cal         = 'none'        ! 'none' or 'coupled'
-   CHARACTER(len=100) ::   cn_rcv_taumod      = 'none'        ! 'none' or 'coupled'
-#if defined key_cpl_carbon_cycle 
-   CHARACTER(len=100) ::   cn_rcv_co2         = 'none'        ! 'none' or 'coupled'
-#endif
+   !
+   !                                                  !!** namelist namsbc_cpl **
+   TYPE ::   FLD_C
+      CHARACTER(len = 32) ::   cldes                  ! desciption of the coupling strategy
+      CHARACTER(len = 32) ::   clcat                  ! multiple ice categories strategy
+      CHARACTER(len = 32) ::   clvref                 ! reference of vector ('spherical' or 'cartesian')
+      CHARACTER(len = 32) ::   clvor                  ! orientation of vector fields ('eastward-northward' or 'local grid')
+      CHARACTER(len = 32) ::   clvgrd                 ! grids on which is located the vector fields
+   END TYPE FLD_C
+   ! Send to the atmosphere                           !
+   TYPE(FLD_C) ::   sn_snd_temp                       ! 'oce only' 'weighted oce and ice' or 'mixed oce-ice'
+   TYPE(FLD_C) ::   sn_snd_alb                        ! 'none' 'weighted ice' or 'mixed oce-ice'
+   TYPE(FLD_C) ::   sn_snd_thick                      ! 'none' or 'weighted ice and snow'
+   TYPE(FLD_C) ::   sn_snd_crt                        ! 'none' 'oce only' 'weighted oce and ice' or 'mixed oce-ice'  
+   TYPE(FLD_C) ::   sn_snd_co2                        ! 'none' or 'coupled'
+   ! Received from the atmosphere                     !
+   TYPE(FLD_C) ::   sn_rcv_w10m                       ! 'none' or 'coupled'
+   TYPE(FLD_C) ::   sn_rcv_taumod                     ! 'none' or 'coupled'
+   TYPE(FLD_C) ::   sn_rcv_tau                        ! 'oce only' 'oce and ice' or 'mixed oce-ice'
+   TYPE(FLD_C) ::   sn_rcv_dqnsdt                     ! 'none' or 'coupled'
+   TYPE(FLD_C) ::   sn_rcv_qsr                        ! 'oce only' 'conservative' 'oce and ice' or 'mixed oce-ice'
+   TYPE(FLD_C) ::   sn_rcv_qns                        ! 'oce only' 'conservative' 'oce and ice' or 'mixed oce-ice'
+   TYPE(FLD_C) ::   sn_rcv_emp                        ! 'oce only' 'conservative' or 'oce and ice'
+   TYPE(FLD_C) ::   sn_rcv_rnf                        ! 'coupled' 'climato' or 'mixed'
+   TYPE(FLD_C) ::   sn_rcv_cal                        ! 'none' or 'coupled'
+   TYPE(FLD_C) ::   sn_rcv_co2                        ! 'none' or 'coupled'
 
 !!   CHARACTER(len=100), PUBLIC ::   cn_rcv_rnf   !: ???             ==>>  !!gm   treat this case in a different maner
    
-   CHARACTER(len=100), DIMENSION(4) ::   cn_snd_crt           ! array combining cn_snd_crt_*
-   CHARACTER(len=100), DIMENSION(4) ::   cn_rcv_tau           ! array combining cn_rcv_tau_*
-
    REAL(wp), DIMENSION(jpi,jpj)       ::   albedo_oce_mix     ! ocean albedo sent to atmosphere (mix clear/overcast sky)
-
    REAL(wp), DIMENSION(jpi,jpj,jprcv) ::   frcv               ! all fields recieved from the atmosphere
    INTEGER , DIMENSION(        jprcv) ::   nrcvinfo           ! OASIS info argument
@@ -178,14 +165,10 @@
       !!
       INTEGER                      ::   jn           ! dummy loop index
+      CHARACTER(len = 256) ::   clname      ! generic name of the NetCDF flux file
       REAL(wp), DIMENSION(jpi,jpj) ::   zacs, zaos   ! 2D workspace (clear & overcast sky albedos)
       !!
-      NAMELIST/namsbc_cpl/  cn_snd_temperature, cn_snd_albedo    , cn_snd_thickness,                 &          
-         cn_snd_crt_nature, cn_snd_crt_refere , cn_snd_crt_orient, cn_snd_crt_grid ,                 &
-         cn_rcv_w10m      , cn_rcv_taumod     ,                                                      &
-         cn_rcv_tau_nature, cn_rcv_tau_refere , cn_rcv_tau_orient, cn_rcv_tau_grid ,                 &
-         cn_rcv_dqnsdt    , cn_rcv_qsr        , cn_rcv_qns       , cn_rcv_emp      , cn_rcv_rnf , cn_rcv_cal
-#if defined key_cpl_carbon_cycle 
-      NAMELIST/namsbc_cpl_co2/  cn_snd_co2, cn_rcv_co2
-#endif
+      NAMELIST/namsbc_cpl/  sn_snd_temp, sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2,   &
+         &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr,   &
+         &                  sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf  , sn_rcv_cal   , sn_rcv_co2
       !!---------------------------------------------------------------------
 
@@ -193,4 +176,25 @@
       !      Namelist informations       !
       ! ================================ !
+
+      ! default definitions
+      !                    !     description       !  multiple  !    vector   !      vector          ! vector !
+      !                    !                       ! categories !  reference  !    orientation       ! grids  !
+      ! send
+      sn_snd_temp   = FLD_C( 'weighted oce and ice',    'no'    ,     ''      ,         ''           ,   ''   ) 
+      sn_snd_alb    = FLD_C( 'weighted ice'        ,    'no'    ,     ''      ,         ''           ,   ''   ) 
+      sn_snd_thick  = FLD_C( 'none'                ,    'no'    ,     ''      ,         ''           ,   ''   ) 
+      sn_snd_crt    = FLD_C( 'none'                ,    'no'    , 'spherical' , 'eastward-northward' ,  'T'   )     
+      sn_snd_co2    = FLD_C( 'none'                ,    'no'    ,     ''      ,         ''           ,   ''   )     
+      ! receive
+      sn_rcv_w10m   = FLD_C( 'none'                ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_taumod = FLD_C( 'coupled'             ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_tau    = FLD_C( 'oce only'            ,    'no'    , 'cartesian' , 'eastward-northward',  'U,V'  )  
+      sn_rcv_dqnsdt = FLD_C( 'coupled'             ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_qsr    = FLD_C( 'oce and ice'         ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_qns    = FLD_C( 'oce and ice'         ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_emp    = FLD_C( 'conservative'        ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_rnf    = FLD_C( 'coupled'             ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_cal    = FLD_C( 'coupled'             ,    'no'    ,     ''      ,         ''          ,   ''    )
+      sn_rcv_co2    = FLD_C( 'none'                ,    'no'    ,     ''      ,         ''          ,   ''    )
 
       REWIND( numnam )                    ! ... read namlist namsbc_cpl
@@ -201,46 +205,28 @@
          WRITE(numout,*)'sbc_cpl_init : namsbc_cpl namelist '
          WRITE(numout,*)'~~~~~~~~~~~~'
-         WRITE(numout,*)'   received fields'
-         WRITE(numout,*)'       10m wind module                    cn_rcv_w10m        = ', cn_rcv_w10m 
-         WRITE(numout,*)'       surface stress - nature            cn_rcv_tau_nature  = ', cn_rcv_tau_nature
-         WRITE(numout,*)'                      - referential       cn_rcv_tau_refere  = ', cn_rcv_tau_refere
-         WRITE(numout,*)'                      - orientation       cn_rcv_tau_orient  = ', cn_rcv_tau_orient
-         WRITE(numout,*)'                      - mesh              cn_rcv_tau_grid    = ', cn_rcv_tau_grid
-         WRITE(numout,*)'       non-solar heat flux sensitivity    cn_rcv_dqnsdt      = ', cn_rcv_dqnsdt
-         WRITE(numout,*)'       solar heat flux                    cn_rcv_qsr         = ', cn_rcv_qsr  
-         WRITE(numout,*)'       non-solar heat flux                cn_rcv_qns         = ', cn_rcv_qns
-         WRITE(numout,*)'       freshwater budget                  cn_rcv_emp         = ', cn_rcv_emp
-         WRITE(numout,*)'       runoffs                            cn_rcv_rnf         = ', cn_rcv_rnf
-         WRITE(numout,*)'       calving                            cn_rcv_cal         = ', cn_rcv_cal 
-         WRITE(numout,*)'       stress module                      cn_rcv_taumod      = ', cn_rcv_taumod
-         WRITE(numout,*)'   sent fields'
-         WRITE(numout,*)'       surface temperature                cn_snd_temperature = ', cn_snd_temperature
-         WRITE(numout,*)'       albedo                             cn_snd_albedo      = ', cn_snd_albedo
-         WRITE(numout,*)'       ice/snow thickness                 cn_snd_thickness   = ', cn_snd_thickness  
-         WRITE(numout,*)'       surface current - nature           cn_snd_crt_nature  = ', cn_snd_crt_nature 
-         WRITE(numout,*)'                       - referential      cn_snd_crt_refere  = ', cn_snd_crt_refere 
-         WRITE(numout,*)'                       - orientation      cn_snd_crt_orient  = ', cn_snd_crt_orient
-         WRITE(numout,*)'                       - mesh             cn_snd_crt_grid    = ', cn_snd_crt_grid 
-      ENDIF
-
-#if defined key_cpl_carbon_cycle 
-      REWIND( numnam )                    ! ... read namlist namsbc_cpl_co2
-      READ  ( numnam, namsbc_cpl_co2 )
-      IF(lwp) THEN                        ! control print
-         WRITE(numout,*)
-         WRITE(numout,*)'sbc_cpl_init : namsbc_cpl_co2 namelist '
-         WRITE(numout,*)'~~~~~~~~~~~~'
-         WRITE(numout,*)'   received fields'
-         WRITE(numout,*)'       atm co2                            cn_rcv_co2         = ', cn_rcv_co2
-         WRITE(numout,*)'   sent fields'
-         WRITE(numout,*)'      oce co2 flux                        cn_snd_co2         = ', cn_snd_co2
-          WRITE(numout,*)
-      ENDIF
-#endif
-      ! save current & stress in an array and suppress possible blank in the name
-      cn_snd_crt(1) = TRIM( cn_snd_crt_nature )   ;   cn_snd_crt(2) = TRIM( cn_snd_crt_refere )
-      cn_snd_crt(3) = TRIM( cn_snd_crt_orient )   ;   cn_snd_crt(4) = TRIM( cn_snd_crt_grid   )
-      cn_rcv_tau(1) = TRIM( cn_rcv_tau_nature )   ;   cn_rcv_tau(2) = TRIM( cn_rcv_tau_refere )
-      cn_rcv_tau(3) = TRIM( cn_rcv_tau_orient )   ;   cn_rcv_tau(4) = TRIM( cn_rcv_tau_grid   )
+         WRITE(numout,*)'  received fields (mutiple ice categogies)'
+         WRITE(numout,*)'      10m wind module                 = ', TRIM(sn_rcv_w10m%cldes  ), ' (', TRIM(sn_rcv_w10m%clcat  ), ')'
+         WRITE(numout,*)'      stress module                   = ', TRIM(sn_rcv_taumod%cldes), ' (', TRIM(sn_rcv_taumod%clcat), ')'
+         WRITE(numout,*)'      surface stress                  = ', TRIM(sn_rcv_tau%cldes   ), ' (', TRIM(sn_rcv_tau%clcat   ), ')'
+         WRITE(numout,*)'                     - referential    = ', sn_rcv_tau%clvref
+         WRITE(numout,*)'                     - orientation    = ', sn_rcv_tau%clvor
+         WRITE(numout,*)'                     - mesh           = ', sn_rcv_tau%clvgrd
+         WRITE(numout,*)'      non-solar heat flux sensitivity = ', TRIM(sn_rcv_dqnsdt%cldes), ' (', TRIM(sn_rcv_dqnsdt%clcat), ')'
+         WRITE(numout,*)'      solar heat flux                 = ', TRIM(sn_rcv_qsr%cldes   ), ' (', TRIM(sn_rcv_qsr%clcat   ), ')'
+         WRITE(numout,*)'      non-solar heat flux             = ', TRIM(sn_rcv_qns%cldes   ), ' (', TRIM(sn_rcv_qns%clcat   ), ')'
+         WRITE(numout,*)'      freshwater budget               = ', TRIM(sn_rcv_emp%cldes   ), ' (', TRIM(sn_rcv_emp%clcat   ), ')'
+         WRITE(numout,*)'      runoffs                         = ', TRIM(sn_rcv_rnf%cldes   ), ' (', TRIM(sn_rcv_rnf%clcat   ), ')'
+         WRITE(numout,*)'      calving                         = ', TRIM(sn_rcv_cal%cldes   ), ' (', TRIM(sn_rcv_cal%clcat   ), ')'
+         WRITE(numout,*)'      atm co2                         = ', TRIM(sn_rcv_co2%cldes   ), ' (', TRIM(sn_rcv_co2%clcat   ), ')'
+         WRITE(numout,*)'  sent fields (mutiple ice categogies)'
+         WRITE(numout,*)'      surface temperature             = ', TRIM(sn_snd_temp%cldes  ), ' (', TRIM(sn_snd_temp%clcat  ), ')'
+         WRITE(numout,*)'      albedo                          = ', TRIM(sn_snd_alb%cldes   ), ' (', TRIM(sn_snd_alb%clcat   ), ')'
+         WRITE(numout,*)'      ice/snow thickness              = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')'
+         WRITE(numout,*)'      surface current                 = ', TRIM(sn_snd_crt%cldes   ), ' (', TRIM(sn_snd_crt%clcat   ), ')'
+         WRITE(numout,*)'                      - referential   = ', sn_snd_crt%clvref 
+         WRITE(numout,*)'                      - orientation   = ', sn_snd_crt%clvor
+         WRITE(numout,*)'                      - mesh          = ', sn_snd_crt%clvgrd
+         WRITE(numout,*)'      oce co2 flux                    = ', TRIM(sn_snd_co2%cldes   ), ' (', TRIM(sn_snd_co2%clcat   ), ')'
+      ENDIF
      
       ! ================================ !
@@ -274,8 +260,9 @@
       srcv(jpr_itz2)%clname = 'O_ITauz2'      ! 3rd   -      -         -     - 
       ! 
-      srcv(jpr_otx1:jpr_itz2)%nsgn = -1                           ! Vectors: change of sign at north fold
+      ! Vectors: change of sign at north fold ONLY if on the local grid
+      IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' )   srcv(jpr_otx1:jpr_itz2)%nsgn = -1.
       
       !                                                           ! Set grid and action
-      SELECT CASE( TRIM( cn_rcv_tau(4) ) )      !  'T', 'U,V', 'U,V,I', 'U,V,F', 'T,I', 'T,F', or 'T,U,V'
+      SELECT CASE( TRIM( sn_rcv_tau%clvgrd ) )        !  'T', 'U,V', 'U,V,I', 'U,V,F', 'T,I', 'T,F', or 'T,U,V'
       CASE( 'T' ) 
          srcv(jpr_otx1:jpr_itz2)%clgrid  = 'T'        ! oce and ice components given at T-point
@@ -323,11 +310,11 @@
          srcv(jpr_itx1:jpr_itz2)%laction = .TRUE.     ! receive ice components on grid 1 & 2
       CASE default   
-         CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_tau(4)' )
+         CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_tau%clvgrd' )
       END SELECT
       !
-      IF( TRIM( cn_rcv_tau(2) ) == 'spherical' )   &           ! spherical: 3rd component not received
+      IF( TRIM( sn_rcv_tau%clvref ) == 'spherical' )   &           ! spherical: 3rd component not received
          &     srcv( (/jpr_otz1, jpr_otz2, jpr_itz1, jpr_itz2/) )%laction = .FALSE. 
       !
-      IF( TRIM( cn_rcv_tau(1) ) /= 'oce and ice' ) THEN        ! 'oce and ice' case ocean stress on ocean mesh used
+      IF( TRIM( sn_rcv_tau%cldes ) /= 'oce and ice' ) THEN        ! 'oce and ice' case ocean stress on ocean mesh used
          srcv(jpr_itx1:jpr_itz2)%laction = .FALSE.    ! ice components not received
          srcv(jpr_itx1)%clgrid = 'U'                  ! ocean stress used after its transformation
@@ -347,9 +334,9 @@
       srcv(jpr_semp)%clname = 'OISubMSn'      ! ice solid water budget = sublimation - solid precipitation
       srcv(jpr_oemp)%clname = 'OOEvaMPr'      ! ocean water budget = ocean Evap - ocean precip
-      SELECT CASE( TRIM( cn_rcv_emp ) )
+      SELECT CASE( TRIM( sn_rcv_emp%cldes ) )
       CASE( 'oce only'      )   ;   srcv(                                 jpr_oemp   )%laction = .TRUE. 
       CASE( 'conservative'  )   ;   srcv( (/jpr_rain, jpr_snow, jpr_ievp, jpr_tevp/) )%laction = .TRUE.
       CASE( 'oce and ice'   )   ;   srcv( (/jpr_ievp, jpr_sbpr, jpr_semp, jpr_oemp/) )%laction = .TRUE.
-      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_emp' )
+      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_emp%cldes' )
       END SELECT
 
@@ -357,9 +344,9 @@
       !                                                      !     Runoffs & Calving     !   
       !                                                      ! ------------------------- !
-      srcv(jpr_rnf   )%clname = 'O_Runoff'   ;   IF( TRIM( cn_rcv_rnf ) == 'coupled' )   srcv(jpr_rnf)%laction = .TRUE.
-                                                 IF( TRIM( cn_rcv_rnf ) == 'climato' )   THEN   ;   ln_rnf = .TRUE.
-                                                 ELSE                                           ;   ln_rnf = .FALSE.
+      srcv(jpr_rnf   )%clname = 'O_Runoff'   ;   IF( TRIM( sn_rcv_rnf%cldes ) == 'coupled' )   srcv(jpr_rnf)%laction = .TRUE.
+                                                 IF( TRIM( sn_rcv_rnf%cldes ) == 'climato' )   THEN   ;   ln_rnf = .TRUE.
+                                                 ELSE                                                 ;   ln_rnf = .FALSE.
                                                  ENDIF
-      srcv(jpr_cal   )%clname = 'OCalving'   ;   IF( TRIM( cn_rcv_cal ) == 'coupled' )   srcv(jpr_cal)%laction = .TRUE.
+      srcv(jpr_cal   )%clname = 'OCalving'   ;   IF( TRIM( sn_rcv_cal%cldes ) == 'coupled' )   srcv(jpr_cal)%laction = .TRUE.
 
       !                                                      ! ------------------------- !
@@ -369,10 +356,10 @@
       srcv(jpr_qnsice)%clname = 'O_QnsIce'
       srcv(jpr_qnsmix)%clname = 'O_QnsMix'
-      SELECT CASE( TRIM( cn_rcv_qns ) )
+      SELECT CASE( TRIM( sn_rcv_qns%cldes ) )
       CASE( 'oce only'      )   ;   srcv(               jpr_qnsoce   )%laction = .TRUE.
       CASE( 'conservative'  )   ;   srcv( (/jpr_qnsice, jpr_qnsmix/) )%laction = .TRUE.
       CASE( 'oce and ice'   )   ;   srcv( (/jpr_qnsice, jpr_qnsoce/) )%laction = .TRUE.
       CASE( 'mixed oce-ice' )   ;   srcv(               jpr_qnsmix   )%laction = .TRUE. 
-      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qns' )
+      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_qns%cldes' )
       END SELECT
 
@@ -383,10 +370,10 @@
       srcv(jpr_qsrice)%clname = 'O_QsrIce'
       srcv(jpr_qsrmix)%clname = 'O_QsrMix'
-      SELECT CASE( TRIM( cn_rcv_qsr ) )
+      SELECT CASE( TRIM( sn_rcv_qsr%cldes ) )
       CASE( 'oce only'      )   ;   srcv(               jpr_qsroce   )%laction = .TRUE.
       CASE( 'conservative'  )   ;   srcv( (/jpr_qsrice, jpr_qsrmix/) )%laction = .TRUE.
       CASE( 'oce and ice'   )   ;   srcv( (/jpr_qsrice, jpr_qsroce/) )%laction = .TRUE.
       CASE( 'mixed oce-ice' )   ;   srcv(               jpr_qsrmix   )%laction = .TRUE. 
-      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qsr' )
+      CASE default              ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_rcv_qsr%cldes' )
       END SELECT
 
@@ -395,12 +382,12 @@
       !                                                      ! ------------------------- !
       srcv(jpr_dqnsdt)%clname = 'O_dQnsdT'   
-      IF( TRIM( cn_rcv_dqnsdt ) == 'coupled' )   srcv(jpr_dqnsdt)%laction = .TRUE.
+      IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'coupled' )   srcv(jpr_dqnsdt)%laction = .TRUE.
       !
       ! non solar sensitivity mandatory for ice model
-      IF( TRIM( cn_rcv_dqnsdt ) == 'none' .AND. k_ice /= 0 ) &
-         CALL ctl_stop( 'sbc_cpl_init: cn_rcv_dqnsdt must be coupled in namsbc_cpl namelist' )
+      IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 ) &
+         CALL ctl_stop( 'sbc_cpl_init: sn_rcv_dqnsdt%cldes must be coupled in namsbc_cpl namelist' )
       ! non solar sensitivity mandatory for mixed oce-ice solar radiation coupling technique
-      IF( TRIM( cn_rcv_dqnsdt ) == 'none' .AND. TRIM( cn_rcv_qns ) == 'mixed oce-ice' ) &
-         CALL ctl_stop( 'sbc_cpl_init: namsbc_cpl namelist mismatch between cn_rcv_qns and cn_rcv_dqnsdt' )
+      IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. TRIM( sn_rcv_qns%cldes ) == 'mixed oce-ice' ) &
+         CALL ctl_stop( 'sbc_cpl_init: namsbc_cpl namelist mismatch between sn_rcv_qns%cldes and sn_rcv_dqnsdt%cldes' )
       !                                                      ! ------------------------- !
       !                                                      !    Ice Qsr penetration    !   
@@ -415,18 +402,16 @@
       !                                                      !      10m wind module      !   
       !                                                      ! ------------------------- !
-      srcv(jpr_w10m)%clname = 'O_Wind10'   ;   IF( TRIM(cn_rcv_w10m  ) == 'coupled' )   srcv(jpr_w10m)%laction = .TRUE. 
+      srcv(jpr_w10m)%clname = 'O_Wind10'   ;   IF( TRIM(sn_rcv_w10m %cldes ) == 'coupled' )   srcv(jpr_w10m)%laction = .TRUE. 
       !
       !                                                      ! ------------------------- !
       !                                                      !   wind stress module      !   
       !                                                      ! ------------------------- !
-      srcv(jpr_taum)%clname = 'O_TauMod'   ;   IF( TRIM(cn_rcv_taumod) == 'coupled' )   srcv(jpr_taum)%laction = .TRUE.
+      srcv(jpr_taum)%clname = 'O_TauMod'   ;   IF( TRIM(sn_rcv_taumod%cldes) == 'coupled' )   srcv(jpr_taum)%laction = .TRUE.
       lhftau = srcv(jpr_taum)%laction
 
-#if defined key_cpl_carbon_cycle
       !                                                      ! ------------------------- !
       !                                                      !      Atmospheric CO2      !
       !                                                      ! ------------------------- !
-      srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(cn_rcv_co2   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE.
-#endif
+      srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE.
      
       ! ================================ !
@@ -446,9 +431,9 @@
       ssnd(jps_tice)%clname = 'O_TepIce'
       ssnd(jps_tmix)%clname = 'O_TepMix'
-      SELECT CASE( TRIM( cn_snd_temperature ) )
+      SELECT CASE( TRIM( sn_snd_temp%cldes ) )
       CASE( 'oce only'             )   ;   ssnd(   jps_toce             )%laction = .TRUE.
       CASE( 'weighted oce and ice' )   ;   ssnd( (/jps_toce, jps_tice/) )%laction = .TRUE.
       CASE( 'mixed oce-ice'        )   ;   ssnd(   jps_tmix             )%laction = .TRUE.
-      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_snd_temperature' )
+      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_temp%cldes' )
       END SELECT
      
@@ -458,9 +443,9 @@
       ssnd(jps_albice)%clname = 'O_AlbIce' 
       ssnd(jps_albmix)%clname = 'O_AlbMix'
-      SELECT CASE( TRIM( cn_snd_albedo ) )
+      SELECT CASE( TRIM( sn_snd_alb%cldes ) )
       CASE( 'none'          )       ! nothing to do
       CASE( 'weighted ice'  )   ;   ssnd(jps_albice)%laction = .TRUE.
       CASE( 'mixed oce-ice' )   ;   ssnd(jps_albmix)%laction = .TRUE.
-      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_snd_albedo' )
+      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_alb%cldes' )
       END SELECT
       !
@@ -468,5 +453,5 @@
       !     1. sending mixed oce-ice albedo or
       !     2. receiving mixed oce-ice solar radiation 
-      IF ( TRIM ( cn_snd_albedo ) == 'mixed oce-ice' .OR. TRIM ( cn_rcv_qsr ) == 'mixed oce-ice' ) THEN
+      IF ( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN
          CALL albedo_oce( zaos, zacs )
          ! Due to lack of information on nebulosity : mean clear/overcast sky
@@ -481,5 +466,5 @@
       ssnd(jps_hsnw)%clname = 'O_SnwTck'
       IF( k_ice /= 0 )   ssnd(jps_fice)%laction = .TRUE.       ! if ice treated in the ocean (even in climato case)
-      IF( TRIM( cn_snd_thickness ) == 'weighted ice and snow' )   ssnd( (/jps_hice, jps_hsnw/) )%laction = .TRUE.
+      IF( TRIM( sn_snd_thick%cldes ) == 'weighted ice and snow' )   ssnd( (/jps_hice, jps_hsnw/) )%laction = .TRUE.
          
       !                                                      ! ------------------------- !
@@ -493,23 +478,22 @@
       ssnd(jps_ocx1:jps_ivz1)%nsgn = -1    ! vectors: change of the sign at the north fold
 
-      IF( cn_snd_crt(4) /= 'T' )   CALL ctl_stop( 'cn_snd_crt(4) must be equal to T' )
+      IF( sn_snd_crt%clvgrd /= 'T' )   CALL ctl_stop( 'sn_snd_crt%clvgrd must be equal to T' )
       ssnd(jps_ocx1:jps_ivz1)%clgrid  = 'T'      ! all oce and ice components on the same unique grid
 
       ssnd(jps_ocx1:jps_ivz1)%laction = .TRUE.   ! default: all are send
-      IF( TRIM( cn_snd_crt(2) ) == 'spherical' )   ssnd( (/jps_ocz1, jps_ivz1/) )%laction = .FALSE. 
-      SELECT CASE( TRIM( cn_snd_crt(1) ) )
+      IF( TRIM( sn_snd_crt%clvref ) == 'spherical' )   ssnd( (/jps_ocz1, jps_ivz1/) )%laction = .FALSE. 
+      SELECT CASE( TRIM( sn_snd_crt%cldes ) )
       CASE( 'none'                 )   ;   ssnd(jps_ocx1:jps_ivz1)%laction = .FALSE.
       CASE( 'oce only'             )   ;   ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE.
       CASE( 'weighted oce and ice' )   !   nothing to do
       CASE( 'mixed oce-ice'        )   ;   ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE.
-      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_snd_crt(1)' )
+      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crt%cldes' )
       END SELECT
 
-#if defined key_cpl_carbon_cycle
       !                                                      ! ------------------------- !
       !                                                      !          CO2 flux         !
       !                                                      ! ------------------------- !
-      ssnd(jps_co2)%clname = 'O_CO2FLX' ;  IF( TRIM(cn_snd_co2) == 'coupled' )    ssnd(jps_co2 )%laction = .TRUE.
-#endif
+      ssnd(jps_co2)%clname = 'O_CO2FLX' ;  IF( TRIM(sn_snd_co2%cldes) == 'coupled' )    ssnd(jps_co2 )%laction = .TRUE.
+
       !
       ! ================================ !
@@ -594,5 +578,5 @@
          IF(  nrcvinfo(jpr_otx1) == OASIS_Rcv ) THEN
             !
-            IF( TRIM( cn_rcv_tau(2) ) == 'cartesian' ) THEN            ! 2 components on the sphere
+            IF( TRIM( sn_rcv_tau%clvref ) == 'cartesian' ) THEN        ! 2 components on the sphere
                !                                                       ! (cartesian to spherical -> 3 to 2 components)
                !
@@ -611,6 +595,6 @@
             ENDIF
             !
-            IF( TRIM( cn_rcv_tau(3) ) == 'eastward-northward' ) THEN   ! 2 components oriented along the local grid
-               !                                                       ! (geographical to local grid -> rotate the components)
+            IF( TRIM( sn_rcv_tau%clvor ) == 'eastward-northward' ) THEN   ! 2 components oriented along the local grid
+               !                                                          ! (geographical to local grid -> rotate the components)
                CALL rot_rep( frcv(:,:,jpr_otx1), frcv(:,:,jpr_oty1), srcv(jpr_otx1)%clgrid, 'en->i', ztx )   
                frcv(:,:,jpr_otx1) = ztx(:,:)      ! overwrite 1st component on the 1st grid
@@ -722,5 +706,5 @@
          !
          !                                                       ! total freshwater fluxes over the ocean (emp, emps)
-         SELECT CASE( TRIM( cn_rcv_emp ) )                                    ! evaporation - precipitation
+         SELECT CASE( TRIM( sn_rcv_emp%cldes ) )                 ! evaporation - precipitation
          CASE( 'conservative' )
             emp(:,:) = frcv(:,:,jpr_tevp) - ( frcv(:,:,jpr_rain) + frcv(:,:,jpr_snow) )
@@ -728,5 +712,5 @@
             emp(:,:) = frcv(:,:,jpr_oemp)
          CASE default
-            CALL ctl_stop( 'sbc_cpl_rcv: wrong definition of cn_rcv_emp' )
+            CALL ctl_stop( 'sbc_cpl_rcv: wrong definition of sn_rcv_emp%cldes' )
          END SELECT
          !
@@ -737,5 +721,5 @@
 !!gm :  this seems to be internal cooking, not sure to need that in a generic interface 
 !!gm                                       at least should be optional...
-!!         IF( TRIM( cn_rcv_rnf ) == 'coupled' ) THEN     ! add to the total freshwater budget
+!!         IF( TRIM( sn_rcv_rnf%cldes ) == 'coupled' ) THEN     ! add to the total freshwater budget
 !!            ! remove negative runoff
 !!            zcumulpos = SUM( MAX( frcv(:,:,jpr_rnf), 0.e0 ) * e1t(:,:) * e2t(:,:) * tmask_i(:,:) ) 
@@ -819,5 +803,5 @@
             !                                                   ! ======================= !
             !  
-            IF( TRIM( cn_rcv_tau(2) ) == 'cartesian' ) THEN            ! 2 components on the sphere
+            IF( TRIM( sn_rcv_tau%clvref ) == 'cartesian' ) THEN        ! 2 components on the sphere
                !                                                       ! (cartesian to spherical -> 3 to 2 components)
                CALL geo2oce( frcv(:,:,jpr_itx1), frcv(:,:,jpr_ity1), frcv(:,:,jpr_itz1),   &
@@ -835,6 +819,6 @@
             ENDIF
             !
-            IF( TRIM( cn_rcv_tau(3) ) == 'eastward-northward' ) THEN   ! 2 components oriented along the local grid
-               !                                                       ! (geographical to local grid -> rotate the components)
+            IF( TRIM( sn_rcv_tau%clvor ) == 'eastward-northward' ) THEN   ! 2 components oriented along the local grid
+               !                                                          ! (geographical to local grid -> rotate the components)
                CALL rot_rep( frcv(:,:,jpr_itx1), frcv(:,:,jpr_ity1), srcv(jpr_itx1)%clgrid, 'en->i', ztx )   
                frcv(:,:,jpr_itx1) = ztx(:,:)      ! overwrite 1st component on the 1st grid
@@ -1054,5 +1038,5 @@
       !                                                           ! solid precipitation  - sublimation       (emp_ice)
       !                                                           ! solid Precipitation                      (sprecip)
-      SELECT CASE( TRIM( cn_rcv_emp ) )
+      SELECT CASE( TRIM( sn_rcv_emp%cldes ) )
       CASE( 'conservative'  )   ! received fields: jpr_rain, jpr_snow, jpr_ievp, jpr_tevp
          pemp_tot(:,:) = frcv(:,:,jpr_tevp) - frcv(:,:,jpr_rain) - frcv(:,:,jpr_snow)
@@ -1103,5 +1087,5 @@
 
       !                                                      ! ========================= !
-      SELECT CASE( TRIM( cn_rcv_qns ) )                      !   non solar heat fluxes   !   (qns)
+      SELECT CASE( TRIM( sn_rcv_qns%cldes ) )                !   non solar heat fluxes   !   (qns)
       !                                                      ! ========================= !
       CASE( 'conservative' )                                      ! the required fields are directly provided
@@ -1140,5 +1124,5 @@
 
       !                                                      ! ========================= !
-      SELECT CASE( TRIM( cn_rcv_qsr ) )                      !      solar heat fluxes    !   (qsr)
+      SELECT CASE( TRIM( sn_rcv_qsr%cldes ) )                !      solar heat fluxes    !   (qsr)
       !                                                      ! ========================= !
       CASE( 'conservative' )
@@ -1157,5 +1141,5 @@
       END SELECT
 
-      SELECT CASE( TRIM( cn_rcv_dqnsdt ) )
+      SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) )
       CASE ('coupled')
           pdqns_ice(:,:,1) = frcv(:,:,jpr_dqnsdt)
@@ -1190,10 +1174,10 @@
       !                                                      !    Surface temperature    !   in Kelvin
       !                                                      ! ------------------------- !
-      SELECT CASE( cn_snd_temperature)
+      SELECT CASE( sn_snd_temp%cldes )
       CASE( 'oce only'             )   ;   ztmp1(:,:) =   tn(:,:,1) + rt0
       CASE( 'weighted oce and ice' )   ;   ztmp1(:,:) = ( tn(:,:,1) + rt0 ) * zfr_l(:,:)   
                                            ztmp2(:,:) =   tn_ice(:,:,1)     *  fr_i(:,:)
       CASE( 'mixed oce-ice'        )   ;   ztmp1(:,:) = ( tn(:,:,1) + rt0 ) * zfr_l(:,:) + tn_ice(:,:,1) * fr_i(:,:)
-      CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of cn_snd_temperature' )
+      CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp' )
       END SELECT
       IF( ssnd(jps_toce)%laction )   CALL cpl_prism_snd( jps_toce, isec, ztmp1, info )
@@ -1237,5 +1221,5 @@
          !                                                              i-1  i   i
          !                                                               i      i+1 (for I)
-         SELECT CASE( TRIM( cn_snd_crt(1) ) )
+         SELECT CASE( TRIM( sn_snd_crt%cldes ) )
          CASE( 'oce only'             )      ! C-grid ==> T
             DO jj = 2, jpjm1
@@ -1318,5 +1302,5 @@
          !
          !
-         IF( TRIM( cn_snd_crt(3) ) == 'eastward-northward' ) THEN             ! Rotation of the components
+         IF( TRIM( sn_snd_crt%clvor ) == 'eastward-northward' ) THEN              ! Rotation of the components
             !                                                                     ! Ocean component
             CALL rot_rep( zotx1, zoty1, ssnd(jps_ocx1)%clgrid, 'ij->e', ztmp1 )       ! 1st component 
@@ -1333,5 +1317,5 @@
          !
          ! spherical coordinates to cartesian -> 2 components to 3 components
-         IF( TRIM( cn_snd_crt(2) ) == 'cartesian' ) THEN
+         IF( TRIM( sn_snd_crt%clvref ) == 'cartesian' ) THEN
             ztmp1(:,:) = zotx1(:,:)                     ! ocean currents
             ztmp2(:,:) = zoty1(:,:)
