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 8975 – NEMO

Changeset 8975


Ignore:
Timestamp:
2017-12-11T14:04:27+01:00 (6 years ago)
Author:
andmirek
Message:

#1868 first working branch

Location:
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r6755 r8975  
    154154                     CALL iom_rstput( kt, nitrst, numrow, 'sshn'   , sshn      ) 
    155155                     CALL iom_rstput( kt, nitrst, numrow, 'rhop'   , rhop      ) 
     156                     CALL iom_rstput( kt, nitrst, numrow, 'fromCICE'   , vcice      ) 
    156157#if defined key_zdfkpp 
    157158                     CALL iom_rstput( kt, nitrst, numrow, 'rhd'    , rhd       ) 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90

    r6486 r8975  
    4141   PUBLIC   cpl_freq 
    4242   PUBLIC   cpl_finalize 
     43   INTEGER, PUBLIC ::              paral(5)       ! OASIS3 box partition 
    4344 
    4445   INTEGER, PUBLIC            ::   OASIS_Rcv  = 1    !: return code if received field 
     
    7172   TYPE, PUBLIC ::   FLD_CPL               !: Type for coupling field information 
    7273      LOGICAL               ::   laction   ! To be coupled or not 
    73       CHARACTER(len = 8)    ::   clname    ! Name of the coupling field    
     74      CHARACTER(len = 80)   ::   clname    ! Name of the coupling field    
    7475      CHARACTER(len = 1)    ::   clgrid    ! Grid type   
    7576      REAL(wp)              ::   nsgn      ! Control of the sign change 
     
    8081 
    8182   TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC ::   srcv, ssnd   !: Coupling fields 
     83   TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC ::   srcv_c2n, ssnd_n2c 
    8284 
    8385   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   exfld   ! Temporary buffer for receiving 
     
    137139      ! 
    138140      INTEGER :: id_part 
    139       INTEGER :: paral(5)       ! OASIS3 box partition 
     141!     INTEGER :: paral(5)       ! OASIS3 box partition 
    140142      INTEGER :: ishape(2,2)    ! shape of arrays passed to PSMILe 
    141143      INTEGER :: ji,jc,jm       ! local loop indicees 
     
    145147 
    146148      IF(lwp) WRITE(numout,*) 
    147       IF(lwp) WRITE(numout,*) 'cpl_define : initialization in coupled ocean/atmosphere case' 
     149      IF(lwp) WRITE(numout,*) 'cpl_define : initialization in coupled case' 
    148150      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~' 
    149151      IF(lwp) WRITE(numout,*) 
     
    188190      paral(4) = nlej-nldj+1                                    ! local extent in j 
    189191      paral(5) = jpiglo                                         ! global extent in x 
    190        
    191192      IF( ln_ctl ) THEN 
    192193         WRITE(numout,*) ' multiexchg: paral (1:5)', paral 
     
    196197      ENDIF 
    197198       
    198       CALL oasis_def_partition ( id_part, paral, nerror ) 
     199      CALL oasis_def_partition ( id_part, paral, nerror, name="oce" ) 
    199200      ! 
    200201      ! ... Announce send variables.  
    201202      ! 
    202       ssnd(:)%ncplmodel = kcplmodel 
     203      ssnd(:)%ncplmodel = 1 
    203204      ! 
    204205      DO ji = 1, ksnd 
     
    238239                  IF( ln_ctl .AND. ssnd(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 
    239240                  IF( ln_ctl .AND. ssnd(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 
     241               END DO 
     242            END DO 
     243         ENDIF 
     244 
     245         IF ( ssnd_n2c(ji)%laction ) THEN 
     246            IF( ssnd_n2c(ji)%nct > nmaxcat ) THEN 
     247               CALL oasis_abort ( ncomp_id, 'cpl_define', 'Number of categories of '//   & 
     248                  &              TRIM(ssnd_n2c(ji)%clname)//' is larger than nmaxcat, increase nmaxcat' ) 
     249               RETURN 
     250            ENDIF 
     251            DO jc = 1, ssnd_n2c(ji)%nct 
     252               DO jm = 1, kcplmodel 
     253 
     254                  IF ( ssnd_n2c(ji)%nct .GT. 1 ) THEN 
     255                     WRITE(cli2,'(i2.2)') jc 
     256                     zclname = TRIM(ssnd_n2c(ji)%clname)//'_cat'//cli2 
     257                  ELSE 
     258                     zclname = ssnd_n2c(ji)%clname 
     259                  ENDIF 
     260                  IF ( kcplmodel  > 1 ) THEN 
     261                     WRITE(cli2,'(i2.2)') jm 
     262                     zclname = 'model'//cli2//'_'//TRIM(zclname) 
     263                  ENDIF 
     264                  IF( ln_ctl ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_Out 
     265                  CALL oasis_def_var (ssnd_n2c(ji)%nid(jc,jm), zclname, id_part   , (/ 2, 0 /),   & 
     266                     &                OASIS_Out          , ishape , OASIS_REAL, nerror ) 
     267                  IF ( nerror /= OASIS_Ok ) THEN 
     268                     WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 
     269                     CALL oasis_abort ( ssnd_n2c(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 
     270                  ENDIF 
     271                  IF( ln_ctl .AND. ssnd_n2c(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 
     272                  IF( ln_ctl .AND. ssnd_n2c(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 
    240273               END DO 
    241274            END DO 
     
    287320            END DO 
    288321         ENDIF 
     322 
     323         IF ( srcv_c2n(ji)%laction ) THEN  
     324             
     325            IF( srcv_c2n(ji)%nct > nmaxcat ) THEN 
     326               CALL oasis_abort ( ncomp_id, 'cpl_define', 'Number of categories of '//   & 
     327                  &              TRIM(srcv_c2n(ji)%clname)//' is larger than nmaxcat, increase nmaxcat' ) 
     328               RETURN 
     329            ENDIF 
     330             
     331            DO jc = 1, srcv_c2n(ji)%nct 
     332               DO jm = 1, kcplmodel 
     333                   
     334                  IF ( srcv_c2n(ji)%nct .GT. 1 ) THEN 
     335                     WRITE(cli2,'(i2.2)') jc 
     336                     zclname = TRIM(srcv_c2n(ji)%clname)//'_cat'//cli2 
     337                  ELSE 
     338                     zclname = srcv_c2n(ji)%clname 
     339                  ENDIF 
     340                  IF ( kcplmodel  > 1 ) THEN 
     341                     WRITE(cli2,'(i2.2)') jm 
     342                     zclname = 'model'//cli2//'_'//TRIM(zclname) 
     343                  ENDIF 
     344                  IF( ln_ctl ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_In 
     345                  CALL oasis_def_var (srcv_c2n(ji)%nid(jc,jm), zclname, id_part   , (/ 2, 0 /),   & 
     346                     &                OASIS_In           , ishape , OASIS_REAL, nerror ) 
     347                  IF ( nerror /= OASIS_Ok ) THEN 
     348                     WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 
     349                     CALL oasis_abort ( srcv_c2n(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 
     350                  ENDIF 
     351                  IF( ln_ctl .AND. srcv_c2n(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 
     352                  IF( ln_ctl .AND. srcv_c2n(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 
     353               END DO 
     354            END DO 
     355         ENDIF 
    289356      END DO 
    290357       
     
    293360      !------------------------------------------------------------------ 
    294361       
    295       CALL oasis_enddef(nerror) 
    296       IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 
     362!     CALL oasis_enddef(nerror) 
     363!     IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 
    297364      ! 
    298365   END SUBROUTINE cpl_define 
     
    430497      INTEGER               :: ji,jm     ! local loop index 
    431498      INTEGER               :: mop 
     499      INTEGER               :: ncpl 
    432500      !!---------------------------------------------------------------------- 
    433501      cpl_freq = 0   ! defaut definition 
    434502      id = -1        ! defaut definition 
     503      ncpl = 1 
    435504      ! 
    436505      DO ji = 1, nsnd 
     
    459528      ENDDO 
    460529      ! 
     530 
     531      DO ji = 1, nsnd 
     532         IF (ssnd_n2c(ji)%laction ) THEN 
     533            DO jm = 1, 1 
     534               IF( ssnd_n2c(ji)%nid(1,jm) /= -1 ) THEN 
     535                  IF( TRIM(cdfieldname) == TRIM(ssnd_n2c(ji)%clname) ) THEN 
     536                     id = ssnd_n2c(ji)%nid(1,1) 
     537                     mop = OASIS_Out 
     538                     ncpl = 1 
     539                  ENDIF 
     540               ENDIF 
     541            ENDDO 
     542         ENDIF 
     543      ENDDO 
    461544      IF( id /= -1 ) THEN 
    462545#if defined key_oa3mct_v3 
    463          CALL oasis_get_freqs(id, mop, 1, itmp, info) 
     546         CALL oasis_get_freqs(id, mop, ncpl, itmp, info) 
    464547#else 
    465          CALL oasis_get_freqs(id,      1, itmp, info) 
     548         CALL oasis_get_freqs(id, ncpl, itmp, info) 
    466549#endif 
    467550         cpl_freq = itmp(1) 
     
    514597   END SUBROUTINE oasis_get_localcomm 
    515598 
    516    SUBROUTINE oasis_def_partition(k1,k2,k3) 
     599   SUBROUTINE oasis_def_partition(k1,k2,k3, name) 
    517600      INTEGER     , INTENT(  out) ::  k1,k3 
    518601      INTEGER     , INTENT(in   ) ::  k2(5) 
     602      CHARACTER(len=*), INTENT(IN), OPTIONAL :: name 
    519603      k1 = k2(1) ; k3 = k2(5) 
    520604      WRITE(numout,*) 'oasis_def_partition: Error you sould not be there...' 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r7540 r8975  
    3535   LOGICAL , PUBLIC ::   ln_blk_core    !: CORE bulk formulation 
    3636   LOGICAL , PUBLIC ::   ln_blk_mfs     !: MFS  bulk formulation 
    37 #if defined key_oasis3 
     37#if defined key_oasis3 || ! defined key_nemocice_decomp 
    3838   LOGICAL , PUBLIC ::   lk_oasis = .TRUE.  !: OASIS used 
    3939#else 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r7540 r8975  
    5252#endif 
    5353   USE lib_fortran, ONLY: glob_sum 
     54#if ! defined key_nemocice_decomp 
     55   USE OASIS_NEMO_CICE 
     56#endif 
     57 
    5458 
    5559   IMPLICIT NONE 
     
    149153   INTEGER, PARAMETER ::   jpsnd      = 35            ! total number of fields sent 
    150154 
     155!NEMO CICE coupling intervace 
     156!NEMO send: 
     157   INTEGER, PARAMETER, PUBLIC :: id_sst0_np = 1 
     158   INTEGER, PARAMETER, PUBLIC :: id_sstfrz0_np = 2 
     159   INTEGER, PARAMETER, PUBLIC :: id_strax_np = 3 
     160   INTEGER, PARAMETER, PUBLIC :: id_stray_np = 4 
     161   INTEGER, PARAMETER, PUBLIC :: id_flatn_f_np = 5 
     162   INTEGER, PARAMETER, PUBLIC :: id_fcondtopn_f_np = 6 
     163   INTEGER, PARAMETER, PUBLIC :: id_fsurfn_f_np = 7 
     164   INTEGER, PARAMETER, PUBLIC :: id_uatm_np = 8 
     165   INTEGER, PARAMETER, PUBLIC :: id_vatm_np = 9 
     166   INTEGER, PARAMETER, PUBLIC :: id_wind_np = 10  
     167   INTEGER, PARAMETER, PUBLIC :: id_fsw_np = 11 
     168   INTEGER, PARAMETER, PUBLIC :: id_flw_np = 12 
     169   INTEGER, PARAMETER, PUBLIC :: id_Tair_np = 13 
     170   INTEGER, PARAMETER, PUBLIC :: id_potT_np = 14 
     171   INTEGER, PARAMETER, PUBLIC :: id_rhoa_np = 15 
     172   INTEGER, PARAMETER, PUBLIC :: id_Qa_np = 16 
     173   INTEGER, PARAMETER, PUBLIC :: id_zlvl_np = 17 
     174   INTEGER, PARAMETER, PUBLIC :: id_swvdr_np = 18 
     175   INTEGER, PARAMETER, PUBLIC :: id_swvdf_np = 19 
     176   INTEGER, PARAMETER, PUBLIC :: id_swidr_np = 20 
     177   INTEGER, PARAMETER, PUBLIC :: id_swidf_np = 21 
     178   INTEGER, PARAMETER, PUBLIC :: id_fsnow_np = 22 
     179   INTEGER, PARAMETER, PUBLIC :: id_frain_np = 23 
     180   INTEGER, PARAMETER, PUBLIC :: id_sstfrz_np = 24 
     181   INTEGER, PARAMETER, PUBLIC :: id_nfrzmlt_np = 25 
     182   INTEGER, PARAMETER, PUBLIC :: id_sst_m_np = 26 
     183   INTEGER, PARAMETER, PUBLIC :: id_sss_m_np = 27 
     184   INTEGER, PARAMETER, PUBLIC :: id_tsfc_ice_np = 28 
     185   INTEGER, PARAMETER, PUBLIC :: id_uocn_np = 29 
     186   INTEGER, PARAMETER, PUBLIC :: id_vocn_np = 30 
     187   INTEGER, PARAMETER, PUBLIC :: id_ss_tltx_np = 31 
     188   INTEGER, PARAMETER, PUBLIC :: id_ss_tlty_np = 32 
     189!NEMO get: 
     190   INTEGER, PARAMETER, PUBLIC :: id_fr_i0_ng = 1 
     191   INTEGER, PARAMETER, PUBLIC :: id_a_i0_ng = 2 
     192   INTEGER, PARAMETER, PUBLIC :: id_vsno0_ng = 3 
     193   INTEGER, PARAMETER, PUBLIC :: id_vice0_ng = 4 
     194   INTEGER, PARAMETER, PUBLIC :: id_strocnx_ng = 5 
     195   INTEGER, PARAMETER, PUBLIC :: id_strocny_ng = 6 
     196   INTEGER, PARAMETER, PUBLIC :: id_strocnxT_ng = 7 
     197   INTEGER, PARAMETER, PUBLIC :: id_strocnyT_ng = 8 
     198   INTEGER, PARAMETER, PUBLIC :: id_fresh_ai_ng = 9 
     199   INTEGER, PARAMETER, PUBLIC :: id_fsalt_ai_ng = 10 
     200   INTEGER, PARAMETER, PUBLIC :: id_fswthru_ai_ng = 11 
     201   INTEGER, PARAMETER, PUBLIC :: id_fhocn_ai_ng = 12 
     202   INTEGER, PARAMETER, PUBLIC :: id_fr_i_ng = 13 
     203   INTEGER, PARAMETER, PUBLIC :: id_a_i_ng = 14 
     204   INTEGER, PARAMETER, PUBLIC :: id_vsno_ng = 15 
     205   INTEGER, PARAMETER, PUBLIC :: id_vice_ng = 16 
     206   INTEGER, PARAMETER, PUBLIC :: id_a_p_ng = 17 
     207   INTEGER, PARAMETER, PUBLIC :: id_ht_p_ng = 18 
     208!hadgem 
     209   INTEGER, PARAMETER, PUBLIC :: id_u_ice_ng = 19 
     210   INTEGER, PARAMETER, PUBLIC :: id_v_ice_ng = 20 
     211   INTEGER, PARAMETER, PUBLIC :: id_ht_s_ng = 21 
     212   INTEGER, PARAMETER, PUBLIC :: id_ht_i_ng = 22 
     213   INTEGER, PARAMETER, PUBLIC :: id_tn_ice_ng = 23 
     214   INTEGER, PARAMETER, PUBLIC :: id_kn_ice_ng = 24 
     215 
    151216   REAL(wp), PARAMETER :: dms_unit_conv = 1.0e+6      ! Coversion factor to get outgong DMS in standard units for coupling 
    152                                                  ! i.e. specifically nmol/L (= umol/m3) 
     217 
    153218 
    154219   !                                                         !!** namelist namsbc_cpl ** 
     
    173238   LOGICAL     ::   ln_usecplmask          !  use a coupling mask file to merge data received from several models 
    174239                                           !   -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) 
     240   LOGICAL, PARAMETER :: LOASIS_NEMO_CICE = .TRUE. 
    175241   TYPE ::   DYNARR      
    176242      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   z3    
     
    274340         WRITE(numout,*)'~~~~~~~~~~~~' 
    275341      ENDIF 
    276       IF( lwp .AND. ln_cpl ) THEN                        ! control print 
     342!     IF( lwp .AND. ln_cpl ) THEN                        ! control print 
     343      IF( lwp ) THEN 
    277344         WRITE(numout,*)'  received fields (mutiple ice categories)' 
    278345         WRITE(numout,*)'      10m wind module                 = ', TRIM(sn_rcv_w10m%cldes  ), ' (', TRIM(sn_rcv_w10m%clcat  ), ')' 
     
    535602        srcv(jpr_atm_dust)%laction = .TRUE. 
    536603      END IF 
    537      
     604 
    538605      !                                                      ! ------------------------- ! 
    539606      !                                                      !   topmelt and botmelt     !    
     
    645712         ENDIF 
    646713      ENDIF 
    647        
     714 
     715      srcv(:)%laction = .FALSE. 
     716 
    648717      ! =================================================== ! 
    649718      ! Allocate all parts of frcv used for received fields ! 
     
    665734      END IF 
    666735 
     736      ! =================================================== ! 
     737      ! NEMO CICE interface recv definitions                ! 
     738      ! =================================================== ! 
     739      srcv_c2n(:)%laction = .FALSE. 
     740! 
     741!     srcv_c2n(1)%laction = .TRUE.    
     742!     srcv_c2n(1)%clgrid  = 'T'       
     743!     srcv_c2n(1)%nsgn    = 1.       
     744!     srcv_c2n(1)%clname = 'OCN_O1G' 
     745!     srcv_c2n(1)%nct = 1 
     746!     srcv_c2n(1)%ncplmodel = 1 
     747#if ! defined key_nemocice_decomp 
     748!initialization 
     749      srcv_c2n(id_fr_i0_ng)%laction = .TRUE.    
     750      srcv_c2n(id_fr_i0_ng)%clgrid  = 'T'       
     751      srcv_c2n(id_fr_i0_ng)%nsgn    = 1.       
     752      srcv_c2n(id_fr_i0_ng)%clname = 'fr_i0_ng' 
     753      srcv_c2n(id_fr_i0_ng)%nct = 1 
     754      srcv_c2n(id_fr_i0_ng)%ncplmodel = 1 
     755 
     756      srcv_c2n(id_a_i0_ng)%laction = .FALSE.    
     757      srcv_c2n(id_a_i0_ng)%clgrid  = 'T'       
     758      srcv_c2n(id_a_i0_ng)%nsgn    = 1.       
     759      srcv_c2n(id_a_i0_ng)%clname = 'a_i0_ng' 
     760      srcv_c2n(id_a_i0_ng)%nct = 5 
     761      srcv_c2n(id_a_i0_ng)%ncplmodel = 1 
     762 
     763      srcv_c2n(id_vsno0_ng)%laction = .TRUE.    
     764      srcv_c2n(id_vsno0_ng)%clgrid  = 'T'       
     765      srcv_c2n(id_vsno0_ng)%nsgn    = 1.       
     766      srcv_c2n(id_vsno0_ng)%clname = 'vsno0_ng' 
     767      srcv_c2n(id_vsno0_ng)%nct = 1 
     768      srcv_c2n(id_vsno0_ng)%ncplmodel = 1 
     769 
     770      srcv_c2n(id_vice0_ng)%laction = .TRUE.    
     771      srcv_c2n(id_vice0_ng)%clgrid  = 'T'       
     772      srcv_c2n(id_vice0_ng)%nsgn    = 1.       
     773      srcv_c2n(id_vice0_ng)%clname = 'vice0_ng' 
     774      srcv_c2n(id_vice0_ng)%nct = 1 
     775      srcv_c2n(id_vice0_ng)%ncplmodel = 1 
     776!time stepping 
     777      srcv_c2n(id_strocnx_ng)%laction = .TRUE.    
     778      srcv_c2n(id_strocnx_ng)%clgrid  = 'F'       
     779      srcv_c2n(id_strocnx_ng)%nsgn    = 1.       
     780      srcv_c2n(id_strocnx_ng)%clname = 'strocnx_ng' 
     781      srcv_c2n(id_strocnx_ng)%nct = 1 
     782      srcv_c2n(id_strocnx_ng)%ncplmodel = 1 
     783 
     784      srcv_c2n(id_strocny_ng)%laction = .TRUE.    
     785      srcv_c2n(id_strocny_ng)%clgrid  = 'F'       
     786      srcv_c2n(id_strocny_ng)%nsgn    = 1.       
     787      srcv_c2n(id_strocny_ng)%clname = 'strocny_ng' 
     788      srcv_c2n(id_strocny_ng)%nct = 1 
     789      srcv_c2n(id_strocny_ng)%ncplmodel = 1 
     790 
     791      srcv_c2n(id_strocnxT_ng)%laction = .TRUE.    
     792      srcv_c2n(id_strocnxT_ng)%clgrid  = 'T'       
     793      srcv_c2n(id_strocnxT_ng)%nsgn    = 1.       
     794      srcv_c2n(id_strocnxT_ng)%clname = 'strocnxT_ng' 
     795      srcv_c2n(id_strocnxT_ng)%nct = 1 
     796      srcv_c2n(id_strocnxT_ng)%ncplmodel = 1 
     797 
     798      srcv_c2n(id_strocnyT_ng)%laction = .TRUE.    
     799      srcv_c2n(id_strocnyT_ng)%clgrid  = 'T'       
     800      srcv_c2n(id_strocnyT_ng)%nsgn    = 1.       
     801      srcv_c2n(id_strocnyT_ng)%clname = 'strocnyT_ng' 
     802      srcv_c2n(id_strocnyT_ng)%nct = 1 
     803      srcv_c2n(id_strocnyT_ng)%ncplmodel = 1 
     804 
     805      srcv_c2n(id_fresh_ai_ng)%laction = .TRUE.    
     806      srcv_c2n(id_fresh_ai_ng)%clgrid  = 'T'       
     807      srcv_c2n(id_fresh_ai_ng)%nsgn    = 1.       
     808      srcv_c2n(id_fresh_ai_ng)%clname = 'fresh_ai_ng' 
     809      srcv_c2n(id_fresh_ai_ng)%nct = 1 
     810      srcv_c2n(id_fresh_ai_ng)%ncplmodel = 1 
     811 
     812      srcv_c2n(id_fsalt_ai_ng)%laction = .TRUE.    
     813      srcv_c2n(id_fsalt_ai_ng)%clgrid  = 'T'       
     814      srcv_c2n(id_fsalt_ai_ng)%nsgn    = 1.       
     815      srcv_c2n(id_fsalt_ai_ng)%clname = 'fsalt_ai_ng' 
     816      srcv_c2n(id_fsalt_ai_ng)%nct = 1 
     817      srcv_c2n(id_fsalt_ai_ng)%ncplmodel = 1 
     818 
     819      srcv_c2n(id_fswthru_ai_ng)%laction = .TRUE.    
     820      srcv_c2n(id_fswthru_ai_ng)%clgrid  = 'T'       
     821      srcv_c2n(id_fswthru_ai_ng)%nsgn    = 1.       
     822      srcv_c2n(id_fswthru_ai_ng)%clname = 'fswthru_ai_ng' 
     823      srcv_c2n(id_fswthru_ai_ng)%nct = 1 
     824      srcv_c2n(id_fswthru_ai_ng)%ncplmodel = 1 
     825 
     826      srcv_c2n(id_fhocn_ai_ng)%laction = .TRUE.    
     827      srcv_c2n(id_fhocn_ai_ng)%clgrid  = 'T'       
     828      srcv_c2n(id_fhocn_ai_ng)%nsgn    = 1.       
     829      srcv_c2n(id_fhocn_ai_ng)%clname = 'fhocn_ai_ng' 
     830      srcv_c2n(id_fhocn_ai_ng)%nct = 1 
     831      srcv_c2n(id_fhocn_ai_ng)%ncplmodel = 1 
     832 
     833      srcv_c2n(id_fr_i_ng)%laction = .TRUE.    
     834      srcv_c2n(id_fr_i_ng)%clgrid  = 'T'       
     835      srcv_c2n(id_fr_i_ng)%nsgn    = 1.       
     836      srcv_c2n(id_fr_i_ng)%clname = 'fr_i_ng' 
     837      srcv_c2n(id_fr_i_ng)%nct = 1 
     838      srcv_c2n(id_fr_i_ng)%ncplmodel = 1 
     839 
     840      srcv_c2n(id_a_i_ng)%laction = .TRUE.    
     841      srcv_c2n(id_a_i_ng)%clgrid  = 'F'       
     842      srcv_c2n(id_a_i_ng)%nsgn    = 1.       
     843      srcv_c2n(id_a_i_ng)%clname = 'a_i_ng' 
     844      srcv_c2n(id_a_i_ng)%nct = 5 
     845      srcv_c2n(id_a_i_ng)%ncplmodel = 1 
     846 
     847      srcv_c2n(id_vsno_ng)%laction = .TRUE.    
     848      srcv_c2n(id_vsno_ng)%clgrid  = 'F'       
     849      srcv_c2n(id_vsno_ng)%nsgn    = 1.       
     850      srcv_c2n(id_vsno_ng)%clname = 'vsno_ng' 
     851      srcv_c2n(id_vsno_ng)%nct = 1 
     852      srcv_c2n(id_vsno_ng)%ncplmodel = 1 
     853 
     854      srcv_c2n(id_vice_ng)%laction = .TRUE.    
     855      srcv_c2n(id_vice_ng)%clgrid  = 'F'       
     856      srcv_c2n(id_vice_ng)%nsgn    = 1.       
     857      srcv_c2n(id_vice_ng)%clname = 'vice_ng' 
     858      srcv_c2n(id_vice_ng)%nct = 1 
     859      srcv_c2n(id_vice_ng)%ncplmodel = 1 
     860#endif 
    667861      ! ================================ ! 
    668862      !     Define the send interface    ! 
     
    724918         ssnd(jps_fice)%laction = .TRUE.                  ! if ice treated in the ocean (even in climato case) 
    725919         ssnd(jps_fice1)%laction = .TRUE.                 ! First-order regridded ice concentration, to be used 
    726                                                      ! in producing atmos-to-ice fluxes 
     920                                                          ! in producing atmos-to-ice fluxes 
    727921! Currently no namelist entry to determine sending of multi-category ice fraction so use the thickness entry for now 
    728922         IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_fice)%nct = jpl 
     
    9261120         ENDIF 
    9271121      ENDIF 
    928  
    929       ! 
     1122       
     1123      ssnd(:)%laction = .FALSE. 
     1124      ! NEMO cice send interface 
     1125      ssnd_n2c(:)%laction = .FALSE. 
     1126!     ssnd_n2c(1)%laction = .TRUE.    
     1127!     ssnd_n2c(1)%clgrid  = 'T'        
     1128!     ssnd_n2c(1)%nsgn    = 1.         
     1129!     ssnd_n2c(1)%clname = 'OCN_O1P' 
     1130!     ssnd_n2c(1)%nct = 1 
     1131!     ssnd_n2c(1)%ncplmodel = 1 
     1132#if ! defined key_nemocice_decomp 
     1133      ssnd_n2c(id_sst0_np)%laction = .TRUE.    
     1134      ssnd_n2c(id_sst0_np)%clgrid  = 'T'        
     1135      ssnd_n2c(id_sst0_np)%nsgn    = 1.         
     1136      ssnd_n2c(id_sst0_np)%clname = 'sst_np' 
     1137      ssnd_n2c(id_sst0_np)%nct = 1 
     1138      ssnd_n2c(id_sst0_np)%ncplmodel = 1 
     1139 
     1140      ssnd_n2c(id_sstfrz0_np)%laction = .TRUE.    
     1141      ssnd_n2c(id_sstfrz0_np)%clgrid  = 'T'        
     1142      ssnd_n2c(id_sstfrz0_np)%nsgn    = 1.         
     1143      ssnd_n2c(id_sstfrz0_np)%clname = 'sstfrz0_np' 
     1144      ssnd_n2c(id_sstfrz0_np)%nct = 1 
     1145      ssnd_n2c(id_sstfrz0_np)%ncplmodel = 1 
     1146 
     1147      ssnd_n2c(id_strax_np)%laction = .TRUE.    
     1148      ssnd_n2c(id_strax_np)%clgrid  = 'T'        
     1149      ssnd_n2c(id_strax_np)%nsgn    = 1.         
     1150      ssnd_n2c(id_strax_np)%clname = 'strax_np' 
     1151      ssnd_n2c(id_strax_np)%nct = 1 
     1152      ssnd_n2c(id_strax_np)%ncplmodel = 1 
     1153 
     1154      ssnd_n2c(id_stray_np)%laction = .TRUE.    
     1155      ssnd_n2c(id_stray_np)%clgrid  = 'T'        
     1156      ssnd_n2c(id_stray_np)%nsgn    = 1.         
     1157      ssnd_n2c(id_stray_np)%clname = 'stray_np' 
     1158      ssnd_n2c(id_stray_np)%nct = 1 
     1159      ssnd_n2c(id_stray_np)%ncplmodel = 1 
     1160 
     1161      ssnd_n2c(id_flatn_f_np)%laction = .TRUE.    
     1162      ssnd_n2c(id_flatn_f_np)%clgrid  = 'T'        
     1163      ssnd_n2c(id_flatn_f_np)%nsgn    = 1.         
     1164      ssnd_n2c(id_flatn_f_np)%clname = 'flatn_f_np' 
     1165      ssnd_n2c(id_flatn_f_np)%nct = 5 
     1166      ssnd_n2c(id_flatn_f_np)%ncplmodel = 1 
     1167 
     1168      ssnd_n2c(id_fcondtopn_f_np)%laction = .FALSE.    
     1169      ssnd_n2c(id_fcondtopn_f_np)%clgrid  = 'T'        
     1170      ssnd_n2c(id_fcondtopn_f_np)%nsgn    = 1.         
     1171      ssnd_n2c(id_fcondtopn_f_np)%clname = 'fcondtopn_f_np' 
     1172      ssnd_n2c(id_fcondtopn_f_np)%nct = 5 
     1173      ssnd_n2c(id_fcondtopn_f_np)%ncplmodel = 1 
     1174 
     1175      ssnd_n2c(id_fsurfn_f_np)%laction = .TRUE.    
     1176      ssnd_n2c(id_fsurfn_f_np)%clgrid  = 'T'        
     1177      ssnd_n2c(id_fsurfn_f_np)%nsgn    = 1.         
     1178      ssnd_n2c(id_fsurfn_f_np)%clname = 'fsurfn_f_np' 
     1179      ssnd_n2c(id_fsurfn_f_np)%nct = 5 
     1180      ssnd_n2c(id_fsurfn_f_np)%ncplmodel = 1 
     1181 
     1182      ssnd_n2c(id_uatm_np)%laction = .TRUE.    
     1183      ssnd_n2c(id_uatm_np)%clgrid  = 'T'        
     1184      ssnd_n2c(id_uatm_np)%nsgn    = 1.         
     1185      ssnd_n2c(id_uatm_np)%clname = 'uatm_np' 
     1186      ssnd_n2c(id_uatm_np)%nct = 1 
     1187      ssnd_n2c(id_uatm_np)%ncplmodel = 1 
     1188 
     1189      ssnd_n2c(id_vatm_np)%laction = .TRUE.    
     1190      ssnd_n2c(id_vatm_np)%clgrid  = 'T'        
     1191      ssnd_n2c(id_vatm_np)%nsgn    = 1.         
     1192      ssnd_n2c(id_vatm_np)%clname = 'vatm_np' 
     1193      ssnd_n2c(id_vatm_np)%nct = 1 
     1194      ssnd_n2c(id_vatm_np)%ncplmodel = 1 
     1195 
     1196      ssnd_n2c(id_wind_np)%laction = .TRUE.    
     1197      ssnd_n2c(id_wind_np)%clgrid  = 'T'        
     1198      ssnd_n2c(id_wind_np)%nsgn    = 1.         
     1199      ssnd_n2c(id_wind_np)%clname = 'wind_np' 
     1200      ssnd_n2c(id_wind_np)%nct = 1 
     1201      ssnd_n2c(id_wind_np)%ncplmodel = 1 
     1202 
     1203      ssnd_n2c(id_fsw_np)%laction = .TRUE.    
     1204      ssnd_n2c(id_fsw_np)%clgrid  = 'T'        
     1205      ssnd_n2c(id_fsw_np)%nsgn    = 1.         
     1206      ssnd_n2c(id_fsw_np)%clname = 'fsw_np' 
     1207      ssnd_n2c(id_fsw_np)%nct = 1 
     1208      ssnd_n2c(id_fsw_np)%ncplmodel = 1 
     1209 
     1210      ssnd_n2c(id_flw_np)%laction = .TRUE.    
     1211      ssnd_n2c(id_flw_np)%clgrid  = 'T'        
     1212      ssnd_n2c(id_flw_np)%nsgn    = 1.         
     1213      ssnd_n2c(id_flw_np)%clname = 'flw_np' 
     1214      ssnd_n2c(id_flw_np)%nct = 1 
     1215      ssnd_n2c(id_flw_np)%ncplmodel = 1 
     1216 
     1217      ssnd_n2c(id_Tair_np)%laction = .TRUE.    
     1218      ssnd_n2c(id_Tair_np)%clgrid  = 'T'        
     1219      ssnd_n2c(id_Tair_np)%nsgn    = 1.         
     1220      ssnd_n2c(id_Tair_np)%clname = 'Tair_np' 
     1221      ssnd_n2c(id_Tair_np)%nct = 1 
     1222      ssnd_n2c(id_Tair_np)%ncplmodel = 1 
     1223 
     1224      ssnd_n2c(id_potT_np)%laction = .TRUE.    
     1225      ssnd_n2c(id_potT_np)%clgrid  = 'T'        
     1226      ssnd_n2c(id_potT_np)%nsgn    = 1.         
     1227      ssnd_n2c(id_potT_np)%clname = 'potT_np' 
     1228      ssnd_n2c(id_potT_np)%nct = 1 
     1229      ssnd_n2c(id_potT_np)%ncplmodel = 1 
     1230 
     1231      ssnd_n2c(id_rhoa_np)%laction = .TRUE.    
     1232      ssnd_n2c(id_rhoa_np)%clgrid  = 'T'        
     1233      ssnd_n2c(id_rhoa_np)%nsgn    = 1.         
     1234      ssnd_n2c(id_rhoa_np)%clname = 'rhoa_np' 
     1235      ssnd_n2c(id_rhoa_np)%nct = 1 
     1236      ssnd_n2c(id_rhoa_np)%ncplmodel = 1 
     1237 
     1238      ssnd_n2c(id_Qa_np)%laction = .TRUE.    
     1239      ssnd_n2c(id_Qa_np)%clgrid  = 'T'        
     1240      ssnd_n2c(id_Qa_np)%nsgn    = 1.         
     1241      ssnd_n2c(id_Qa_np)%clname = 'Qa_np' 
     1242      ssnd_n2c(id_Qa_np)%nct = 1 
     1243      ssnd_n2c(id_Qa_np)%ncplmodel = 1 
     1244 
     1245      ssnd_n2c(id_zlvl_np)%laction = .TRUE.    
     1246      ssnd_n2c(id_zlvl_np)%clgrid  = 'T'        
     1247      ssnd_n2c(id_zlvl_np)%nsgn    = 1.         
     1248      ssnd_n2c(id_zlvl_np)%clname = 'zlvl_np' 
     1249      ssnd_n2c(id_zlvl_np)%nct = 1 
     1250      ssnd_n2c(id_zlvl_np)%ncplmodel = 1 
     1251 
     1252      ssnd_n2c(id_swvdr_np)%laction = .TRUE.    
     1253      ssnd_n2c(id_swvdr_np)%clgrid  = 'T'        
     1254      ssnd_n2c(id_swvdr_np)%nsgn    = 1.         
     1255      ssnd_n2c(id_swvdr_np)%clname = 'swvdr_np' 
     1256      ssnd_n2c(id_swvdr_np)%nct = 1 
     1257      ssnd_n2c(id_swvdr_np)%ncplmodel = 1 
     1258 
     1259      ssnd_n2c(id_swvdf_np)%laction = .TRUE.    
     1260      ssnd_n2c(id_swvdf_np)%clgrid  = 'T'        
     1261      ssnd_n2c(id_swvdf_np)%nsgn    = 1.         
     1262      ssnd_n2c(id_swvdf_np)%clname = 'swvdf_np' 
     1263      ssnd_n2c(id_swvdf_np)%nct = 1 
     1264      ssnd_n2c(id_swvdf_np)%ncplmodel = 1 
     1265 
     1266      ssnd_n2c(id_swidr_np)%laction = .TRUE.    
     1267      ssnd_n2c(id_swidr_np)%clgrid  = 'T'        
     1268      ssnd_n2c(id_swidr_np)%nsgn    = 1.         
     1269      ssnd_n2c(id_swidr_np)%clname = 'swidr_np' 
     1270      ssnd_n2c(id_swidr_np)%nct = 1 
     1271      ssnd_n2c(id_swidr_np)%ncplmodel = 1 
     1272 
     1273      ssnd_n2c(id_swidf_np)%laction = .TRUE.    
     1274      ssnd_n2c(id_swidf_np)%clgrid  = 'T'        
     1275      ssnd_n2c(id_swidf_np)%nsgn    = 1.         
     1276      ssnd_n2c(id_swidf_np)%clname = 'swidf_np' 
     1277      ssnd_n2c(id_swidf_np)%nct = 1 
     1278      ssnd_n2c(id_swidf_np)%ncplmodel = 1 
     1279 
     1280      ssnd_n2c(id_fsnow_np)%laction = .TRUE.    
     1281      ssnd_n2c(id_fsnow_np)%clgrid  = 'T'        
     1282      ssnd_n2c(id_fsnow_np)%nsgn    = 1.         
     1283      ssnd_n2c(id_fsnow_np)%clname = 'fsnow_np' 
     1284      ssnd_n2c(id_fsnow_np)%nct = 1 
     1285      ssnd_n2c(id_fsnow_np)%ncplmodel = 1 
     1286 
     1287      ssnd_n2c(id_frain_np)%laction = .TRUE.    
     1288      ssnd_n2c(id_frain_np)%clgrid  = 'T'        
     1289      ssnd_n2c(id_frain_np)%nsgn    = 1.         
     1290      ssnd_n2c(id_frain_np)%clname = 'frain_np' 
     1291      ssnd_n2c(id_frain_np)%nct = 1 
     1292      ssnd_n2c(id_frain_np)%ncplmodel = 1 
     1293 
     1294      ssnd_n2c(id_sstfrz_np)%laction = .TRUE.    
     1295      ssnd_n2c(id_sstfrz_np)%clgrid  = 'T'        
     1296      ssnd_n2c(id_sstfrz_np)%nsgn    = 1.         
     1297      ssnd_n2c(id_sstfrz_np)%clname = 'sstfrz_np' 
     1298      ssnd_n2c(id_sstfrz_np)%nct = 1 
     1299      ssnd_n2c(id_sstfrz_np)%ncplmodel = 1 
     1300 
     1301      ssnd_n2c(id_nfrzmlt_np)%laction = .TRUE.    
     1302      ssnd_n2c(id_nfrzmlt_np)%clgrid  = 'T'        
     1303      ssnd_n2c(id_nfrzmlt_np)%nsgn    = 1.         
     1304      ssnd_n2c(id_nfrzmlt_np)%clname = 'nfrzmlt_np' 
     1305      ssnd_n2c(id_nfrzmlt_np)%nct = 1 
     1306      ssnd_n2c(id_nfrzmlt_np)%ncplmodel = 1 
     1307 
     1308      ssnd_n2c(id_sst_m_np)%laction = .TRUE.    
     1309      ssnd_n2c(id_sst_m_np)%clgrid  = 'T'        
     1310      ssnd_n2c(id_sst_m_np)%nsgn    = 1.         
     1311      ssnd_n2c(id_sst_m_np)%clname = 'sst_m_np' 
     1312      ssnd_n2c(id_sst_m_np)%nct = 1 
     1313      ssnd_n2c(id_sst_m_np)%ncplmodel = 1 
     1314 
     1315      ssnd_n2c(id_sss_m_np)%laction = .TRUE.    
     1316      ssnd_n2c(id_sss_m_np)%clgrid  = 'T'        
     1317      ssnd_n2c(id_sss_m_np)%nsgn    = 1.         
     1318      ssnd_n2c(id_sss_m_np)%clname = 'sss_m_np' 
     1319      ssnd_n2c(id_sss_m_np)%nct = 1 
     1320      ssnd_n2c(id_sss_m_np)%ncplmodel = 1 
     1321 
     1322      ssnd_n2c(id_tsfc_ice_np)%laction = .FALSE.    
     1323      ssnd_n2c(id_tsfc_ice_np)%clgrid  = 'F'        
     1324      ssnd_n2c(id_tsfc_ice_np)%nsgn    = 1.         
     1325      ssnd_n2c(id_tsfc_ice_np)%clname = 'tsfc_ice_np' 
     1326      ssnd_n2c(id_tsfc_ice_np)%nct = 5 
     1327      ssnd_n2c(id_tsfc_ice_np)%ncplmodel = 1 
     1328 
     1329      ssnd_n2c(id_uocn_np)%laction = .TRUE.    
     1330      ssnd_n2c(id_uocn_np)%clgrid  = 'T'        
     1331      ssnd_n2c(id_uocn_np)%nsgn    = 1.         
     1332      ssnd_n2c(id_uocn_np)%clname = 'uocn_np' 
     1333      ssnd_n2c(id_uocn_np)%nct = 1 
     1334      ssnd_n2c(id_uocn_np)%ncplmodel = 1 
     1335 
     1336      ssnd_n2c(id_vocn_np)%laction = .TRUE.    
     1337      ssnd_n2c(id_vocn_np)%clgrid  = 'F'        
     1338      ssnd_n2c(id_vocn_np)%nsgn    = 1.         
     1339      ssnd_n2c(id_vocn_np)%clname = 'vocn_np' 
     1340      ssnd_n2c(id_vocn_np)%nct = 1 
     1341      ssnd_n2c(id_vocn_np)%ncplmodel = 1 
     1342 
     1343      ssnd_n2c(id_ss_tltx_np)%laction = .TRUE.    
     1344      ssnd_n2c(id_ss_tltx_np)%clgrid  = 'F'        
     1345      ssnd_n2c(id_ss_tltx_np)%nsgn    = 1.         
     1346      ssnd_n2c(id_ss_tltx_np)%clname = 'ss_tltx_np' 
     1347      ssnd_n2c(id_ss_tltx_np)%nct = 1 
     1348      ssnd_n2c(id_ss_tltx_np)%ncplmodel = 1 
     1349 
     1350      ssnd_n2c(id_ss_tlty_np)%laction = .TRUE.    
     1351      ssnd_n2c(id_ss_tlty_np)%clgrid  = 'F'        
     1352      ssnd_n2c(id_ss_tlty_np)%nsgn    = 1.         
     1353      ssnd_n2c(id_ss_tlty_np)%clname = 'ss_tlty_np' 
     1354      ssnd_n2c(id_ss_tlty_np)%nct = 1 
     1355      ssnd_n2c(id_ss_tlty_np)%ncplmodel = 1 
     1356#endif 
    9301357      ! ================================ ! 
    9311358      !   initialisation of the coupler  ! 
     
    9331360 
    9341361      CALL cpl_define(jprcv, jpsnd, nn_cplmodel) 
    935        
     1362 
    9361363      IF (ln_usecplmask) THEN  
    9371364         xcplmask(:,:,:) = 0. 
     
    9481375      IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 )   & 
    9491376         &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
     1377      if(ncpl_qsr_freq.LT.1) ncpl_qsr_freq = 1 ! cpl_freq("OCN_O1P")  
    9501378      ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
    9511379 
     
    10931521               IF( srcv(jpr_otx2)%laction ) THEN 
    10941522                  CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty )    
    1095                ELSE   
     1523               ELSE 
    10961524                  CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty )   
    10971525               ENDIF 
     
    13211749         ELSE                                       ;   zqsr(:,:) = 0._wp 
    13221750         ENDIF 
    1323          IF( ln_dm2dc .AND. ln_cpl )   zqsr(:,:) = sbc_dcy( zqsr )   ! modify qsr to include the diurnal cycle 
     1751         IF( ln_dm2dc .AND. ln_cpl .AND. .NOT.LOASIS_NEMO_CICE )   zqsr(:,:) = sbc_dcy( zqsr )   ! modify qsr to include the diurnal cycle 
    13241752         IF( ln_mixcpl ) THEN   ;   qsr(:,:) = qsr(:,:) * xcplmask(:,:,0) + zqsr(:,:) * zmsk(:,:) 
    13251753         ELSE                   ;   qsr(:,:) =                              zqsr(:,:) 
     
    20082436            &                     + palbi         (:,:,1) * zicefr(:,:) ) ) 
    20092437      END SELECT 
    2010       IF( ln_dm2dc .AND. ln_cpl ) THEN   ! modify qsr to include the diurnal cycle 
     2438      IF( ln_dm2dc .AND. ln_cpl .AND. .NOT.LOASIS_NEMO_CICE) THEN   ! modify qsr to include the diurnal cycle 
    20112439         zqsr_tot(:,:  ) = sbc_dcy( zqsr_tot(:,:  ) ) 
    20122440         DO jl=1,jpl 
     
    21502578               SELECT CASE( sn_snd_temp%clcat ) 
    21512579               CASE( 'yes' )    
    2152            ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
     2580                ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 
    21532581               CASE( 'no' ) 
    2154            ztmp3(:,:,:) = 0.0 
    2155            DO jl=1,jpl 
     2582                ztmp3(:,:,:) = 0.0 
     2583                   DO jl=1,jpl 
    21562584                     ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) 
    2157            ENDDO 
     2585                   ENDDO 
    21582586               CASE default                  ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 
    21592587               END SELECT 
     
    22362664         CASE( 'no' )    ;   ztmp3(:,:,1) = fr_i(:,:) 
    22372665         CASE default    ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick1%clcat' ) 
    2238     END SELECT 
     2666        END SELECT 
    22392667         CALL cpl_snd (jps_fice1, isec, ztmp3, info) 
    22402668      ENDIF 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90

    r6500 r8975  
    5858                uatm,vatm,wind,fsw,flw,Tair,potT,Qa,rhoa,zlvl,   & 
    5959                swvdr,swvdf,swidr,swidf,Tf,                      & 
    60       !! When using NEMO with CICE, this change requires use of  
    61       !! one of the following two CICE branches: 
    62       !! - at CICE5.0,   hadax/r1015_GSI8_with_GSI7 
    63       !! - at CICE5.1.2, hadax/vn5.1.2_GSI8 
     60!! When using NEMO with CICE, this change requires use of  
     61!! one of the following two CICE branches: 
     62!! - at CICE5.0,   hadax/r1015_GSI8_with_GSI7 
     63!! - at CICE5.1.2, hadax/vn5.1.2_GSI8 
    6464                keffn_top,Tn_top 
    6565 
     
    7373   USE CICE_RunMod 
    7474   USE CICE_FinalMod 
     75   USE cpl_oasis3 
     76   USE mod_oasis 
     77   USE OASIS_NEMO_CICE 
    7578 
    7679   IMPLICIT NONE 
     
    173176      REAL(wp), DIMENSION(:,:,:), POINTER :: ztfrz3d 
    174177      INTEGER  ::   ji, jj, jl, jk                    ! dummy loop indices 
     178      INTEGER, PARAMETER :: zkt = 1 
    175179      !!--------------------------------------------------------------------- 
    176180 
     
    186190      ! Initialize CICE 
    187191      CALL CICE_Initialize 
    188  
    189192      ! Do some CICE consistency checks 
    190193      IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
     
    202205      IF( sbc_ice_alloc()      /= 0 )   CALL ctl_stop( 'STOP', 'sbc_ice_alloc : unable to allocate arrays' ) 
    203206      IF( sbc_ice_cice_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_ice_cice_alloc : unable to allocate cice arrays' ) 
    204  
     207#if ! defined key_nemocice_decomp 
     208     call nemo_cice_cpl_define() 
     209#endif 
    205210      ! Ensure that no temperature points are below freezing if not a NEMO restart 
    206211      IF( .NOT. ln_rstart ) THEN 
     
    214219         CALL wrk_dealloc( jpi,jpj,jpk, ztfrz3d )  
    215220 
    216 #if defined key_nemocice_decomp 
    217221         ! Pass initial SST from NEMO to CICE so ice is initialised correctly if 
    218222         ! there is no restart file. 
    219223         ! Values from a CICE restart file would overwrite this 
    220          CALL nemo2cice( tsn(:,:,1,jp_tem) , sst , 'T' , 1.)  
    221 #endif 
     224         CALL nemo2cice( tsn(:,:,1,jp_tem) , sst , 'T' , 1., zkt, ssnd_n2c(id_sst0_np)%nid(1,1), srcv_n2c(id_sst_ig)%nid(1,1))  
    222225 
    223226      ENDIF   
    224227 
    225228      ! calculate surface freezing temperature and send to CICE 
    226       CALL  eos_fzp(sss_m(:,:), sstfrz(:,:), fsdept_n(:,:,1))  
    227       CALL nemo2cice(sstfrz,Tf, 'T', 1. ) 
    228  
    229       CALL cice2nemo(aice,fr_i, 'T', 1. ) 
     229      CALL eos_fzp(sss_m(:,:), sstfrz(:,:), fsdept_n(:,:,1))  
     230      CALL nemo2cice(sstfrz,Tf, 'T', 1., zkt, ssnd_n2c(id_sstfrz0_np)%nid(1,1), srcv_n2c(id_Tf0_ig)%nid(1,1) ) 
     231 
     232      CALL cice2nemo(aice,fr_i, 'T', 1., zkt, ssnd_c2n(id_aice0_ip)%nid(1,1), srcv_c2n(id_fr_i0_ng)%nid(1,1)) 
    230233      IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
     234        if(lwp) write(numout,*) 'jp_flx OR jp_purecpl' 
     235        if(lwp) call flush(numout) 
    231236         DO jl=1,ncat 
    232             CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. ) 
     237            CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1., zkt, ssnd_c2n(id_aicen0_ip)%nid(1,jl), srcv_c2n(id_a_i0_ng)%nid(1,1) ) 
    233238         ENDDO 
    234239      ENDIF 
     
    250255      !                                      ! embedded sea ice 
    251256      IF( nn_ice_embd /= 0 ) THEN            ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 
    252          CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 
    253          CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 
     257         if(lwp) write(numout,*) 'nn_ice_embd' 
     258         if(lwp) call flush(numout) 
     259         CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1., zkt, ssnd_c2n(id_vsno0_ip)%nid(1,1), srcv_c2n(id_vsno0_ng)%nid(1,1) ) 
     260         CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1., zkt, ssnd_c2n(id_vice0_ip)%nid(1,1), srcv_c2n(id_vice0_ng)%nid(1,1) ) 
    254261         snwice_mass  (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:)  ) 
    255262         snwice_mass_b(:,:) = snwice_mass(:,:) 
     
    299306         ENDIF 
    300307      ENDIF 
    301   
     308         if(lwp) write(numout,*) 'END cice_sbc_init' 
     309         if(lwp) call flush(numout) 
    302310      CALL wrk_dealloc( jpi,jpj, ztmp1, ztmp2 ) 
    303311      ! 
     
    319327      REAL(wp), DIMENSION(:,:,:), POINTER :: ztmpn 
    320328      REAL(wp) ::   zintb, zintn  ! dummy argument 
     329      INTEGER :: kinfo, isec 
    321330      !!--------------------------------------------------------------------- 
    322331 
     
    330339      ENDIF 
    331340 
    332       ztmp(:,:)=0.0 
    333  
    334341! Aggregate ice concentration already set in cice_sbc_out (or cice_sbc_init on  
    335342! the first time-step) 
    336343 
    337 ! forced and coupled case  
    338  
     344      ztmp(:,:)=0.0 
    339345      IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
    340346 
     
    349355            ENDDO 
    350356         ENDDO 
    351          CALL nemo2cice(ztmp,strax,'F', -1. ) 
     357         CALL nemo2cice(ztmp,strax,'F', -1., kt, ssnd_n2c(id_strax_np)%nid(1,1), srcv_n2c(id_strax_ig)%nid(1,1) ) 
    352358 
    353359! y comp of wind stress (CI_2) 
     
    359365            ENDDO 
    360366         ENDDO 
    361          CALL nemo2cice(ztmp,stray,'F', -1. ) 
     367         CALL nemo2cice(ztmp,stray,'F', -1., kt, ssnd_n2c(id_stray_np)%nid(1,1), srcv_n2c(id_stray_ig)%nid(1,1)) 
    362368 
    363369 
     
    382388               ztmpn(:,:,jl)=qla_ice(:,:,jl)*a_i(:,:,jl) 
    383389            ENDDO 
    384     ELSE 
     390        ELSE 
    385391           !In coupled mode - qla_ice calculated in sbc_cpl for each category 
    386392           ztmpn(:,:,1:ncat)=qla_ice(:,:,1:ncat) 
     
    388394 
    389395         DO jl=1,ncat 
    390             CALL nemo2cice(ztmpn(:,:,jl),flatn_f(:,:,jl,:),'T', 1. ) 
     396            CALL nemo2cice(ztmpn(:,:,jl),flatn_f(:,:,jl,:),'T', 1., kt, ssnd_n2c(id_flatn_f_np)%nid(1,jl), srcv_n2c(id_flatn_f_ig)%nid(1,jl)) 
    391397 
    392398! GBM conductive flux through ice (CI_6) 
     
    397403               ztmp(:,:) = botmelt(:,:,jl) 
    398404            ENDIF 
    399             CALL nemo2cice(ztmp,fcondtopn_f(:,:,jl,:),'T', 1. ) 
     405            CALL nemo2cice(ztmp,fcondtopn_f(:,:,jl,:),'T', 1., kt, ssnd_n2c(id_fcondtopn_f_np)%nid(1,jl), srcv_n2c(id_fcondtopn_f_ig)%nid(1,jl)) 
    400406 
    401407! GBM surface heat flux (CI_7) 
     
    406412               ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl)) 
    407413            ENDIF 
    408             CALL nemo2cice(ztmp,fsurfn_f(:,:,jl,:),'T', 1. ) 
     414            CALL nemo2cice(ztmp,fsurfn_f(:,:,jl,:),'T', 1., kt,  ssnd_n2c(id_fsurfn_f_np)%nid(1,jl), srcv_n2c(id_fsurfn_f_ig)%nid(1,jl)) 
    409415         ENDDO 
    410416 
     
    414420! x comp and y comp of atmosphere surface wind (CICE expects on T points) 
    415421         ztmp(:,:) = wndi_ice(:,:) 
    416          CALL nemo2cice(ztmp,uatm,'T', -1. ) 
     422         CALL nemo2cice(ztmp,uatm,'T', -1., kt, ssnd_n2c(id_uatm_np)%nid(1,1), srcv_n2c(id_uatm_ig)%nid(1,1) ) 
    417423         ztmp(:,:) = wndj_ice(:,:) 
    418          CALL nemo2cice(ztmp,vatm,'T', -1. ) 
     424         CALL nemo2cice(ztmp,vatm,'T', -1., kt, ssnd_n2c(id_vatm_np)%nid(1,1), srcv_n2c(id_vatm_ig)%nid(1,1) ) 
    419425         ztmp(:,:) = SQRT ( wndi_ice(:,:)**2 + wndj_ice(:,:)**2 ) 
    420          CALL nemo2cice(ztmp,wind,'T', 1. )    ! Wind speed (m/s) 
     426         CALL nemo2cice(ztmp,wind,'T', 1., kt, ssnd_n2c(id_wind_np)%nid(1,1), srcv_n2c(id_wind_ig)%nid(1,1) )    ! Wind speed (m/s) 
    421427         ztmp(:,:) = qsr_ice(:,:,1) 
    422          CALL nemo2cice(ztmp,fsw,'T', 1. )     ! Incoming short-wave (W/m^2) 
     428         CALL nemo2cice(ztmp,fsw,'T', 1., kt, ssnd_n2c(id_fsw_np)%nid(1,1), srcv_n2c(id_fsw_ig)%nid(1,1) )     ! Incoming short-wave (W/m^2) 
    423429         ztmp(:,:) = qlw_ice(:,:,1) 
    424          CALL nemo2cice(ztmp,flw,'T', 1. )     ! Incoming long-wave (W/m^2) 
     430         CALL nemo2cice(ztmp,flw,'T', 1., kt, ssnd_n2c(id_flw_np)%nid(1,1), srcv_n2c(id_flw_ig)%nid(1,1) )     ! Incoming long-wave (W/m^2) 
    425431         ztmp(:,:) = tatm_ice(:,:) 
    426          CALL nemo2cice(ztmp,Tair,'T', 1. )    ! Air temperature (K) 
    427          CALL nemo2cice(ztmp,potT,'T', 1. )    ! Potential temp (K) 
     432         CALL nemo2cice(ztmp,Tair,'T', 1., kt, ssnd_n2c(id_Tair_np)%nid(1,1), srcv_n2c(id_Tair_ig)%nid(1,1) )    ! Air temperature (K) 
     433         CALL nemo2cice(ztmp,potT,'T', 1., kt, ssnd_n2c(id_potT_np)%nid(1,1), srcv_n2c(id_potT_ig)%nid(1,1) )    ! Potential temp (K) 
    428434! Following line uses MAX(....) to avoid problems if tatm_ice has unset halo rows   
    429435         ztmp(:,:) = 101000. / ( 287.04 * MAX(1.0,tatm_ice(:,:)) )     
    430436                                               ! Constant (101000.) atm pressure assumed 
    431          CALL nemo2cice(ztmp,rhoa,'T', 1. )    ! Air density (kg/m^3) 
     437         CALL nemo2cice(ztmp,rhoa,'T', 1., kt, ssnd_n2c(id_rhoa_np)%nid(1,1), srcv_n2c(id_rhoa_ig)%nid(1,1) )    ! Air density (kg/m^3) 
    432438         ztmp(:,:) = qatm_ice(:,:) 
    433          CALL nemo2cice(ztmp,Qa,'T', 1. )      ! Specific humidity (kg/kg) 
     439         CALL nemo2cice(ztmp,Qa,'T', 1., kt, ssnd_n2c(id_Qa_np)%nid(1,1), srcv_n2c(id_Qa_ig)%nid(1,1) )      ! Specific humidity (kg/kg) 
    434440         ztmp(:,:)=10.0 
    435          CALL nemo2cice(ztmp,zlvl,'T', 1. )    ! Atmos level height (m) 
     441         CALL nemo2cice(ztmp,zlvl,'T', 1., kt, ssnd_n2c(id_zlvl_np)%nid(1,1), srcv_n2c(id_zlvl_ig)%nid(1,1) )    ! Atmos level height (m) 
    436442 
    437443! May want to check all values are physically realistic (as in CICE routine  
     
    440446! Divide shortwave into spectral bands (as in prepare_forcing) 
    441447         ztmp(:,:)=qsr_ice(:,:,1)*frcvdr       ! visible direct 
    442          CALL nemo2cice(ztmp,swvdr,'T', 1. )              
     448         CALL nemo2cice(ztmp,swvdr,'T', 1., kt, ssnd_n2c(id_swvdr_np)%nid(1,1), srcv_n2c(id_swvdr_ig)%nid(1,1) )              
    443449         ztmp(:,:)=qsr_ice(:,:,1)*frcvdf       ! visible diffuse 
    444          CALL nemo2cice(ztmp,swvdf,'T', 1. )               
     450         CALL nemo2cice(ztmp,swvdf,'T', 1., kt, ssnd_n2c(id_swvdf_np)%nid(1,1), srcv_n2c(id_swvdf_ig)%nid(1,1) )               
    445451         ztmp(:,:)=qsr_ice(:,:,1)*frcidr       ! near IR direct 
    446          CALL nemo2cice(ztmp,swidr,'T', 1. ) 
     452         CALL nemo2cice(ztmp,swidr,'T', 1., kt, ssnd_n2c(id_swidr_np)%nid(1,1), srcv_n2c(id_swidr_ig)%nid(1,1) ) 
    447453         ztmp(:,:)=qsr_ice(:,:,1)*frcidf       ! near IR diffuse 
    448          CALL nemo2cice(ztmp,swidf,'T', 1. ) 
     454         CALL nemo2cice(ztmp,swidf,'T', 1., kt, ssnd_n2c(id_swidf_np)%nid(1,1), srcv_n2c(id_swidf_ig)%nid(1,1) ) 
    449455 
    450456      ENDIF 
     
    454460      IF( iom_use('snowpre') )   CALL iom_put('snowpre',MAX( (1.0-fr_i(:,:))*sprecip(:,:) ,0.0)) !!Joakim edit   
    455461      ztmp(:,:)=MAX(fr_i(:,:)*sprecip(:,:),0.0)   
    456       CALL nemo2cice(ztmp,fsnow,'T', 1. )  
     462      CALL nemo2cice(ztmp,fsnow,'T', 1., kt, ssnd_n2c(id_fsnow_np)%nid(1,1), srcv_n2c(id_fsnow_ig)%nid(1,1) )  
    457463 
    458464! Rainfall 
    459465      IF( iom_use('precip') )   CALL iom_put('precip', (1.0-fr_i(:,:))*(tprecip(:,:)-sprecip(:,:)) ) !!Joakim edit 
    460466      ztmp(:,:)=fr_i(:,:)*(tprecip(:,:)-sprecip(:,:)) 
    461       CALL nemo2cice(ztmp,frain,'T', 1. )  
     467      CALL nemo2cice(ztmp,frain,'T', 1., kt, ssnd_n2c(id_frain_np)%nid(1,1), srcv_n2c(id_frain_ig)%nid(1,1) )  
    462468 
    463469! Recalculate freezing temperature and send to CICE  
    464470      CALL eos_fzp(sss_m(:,:), sstfrz(:,:), fsdept_n(:,:,1))  
    465       CALL nemo2cice(sstfrz,Tf,'T', 1. ) 
     471      CALL nemo2cice(sstfrz,Tf,'T', 1., kt, ssnd_n2c(id_sstfrz_np)%nid(1,1), srcv_n2c(id_Tf_ig)%nid(1,1) ) 
    466472 
    467473! Freezing/melting potential 
    468474! Calculated over NEMO leapfrog timestep (hence 2*dt) 
    469475      nfrzmlt(:,:)=rau0*rcp*fse3t_m(:,:)*(sstfrz(:,:)-sst_m(:,:))/(2.0*dt)  
    470       CALL nemo2cice(nfrzmlt,frzmlt,'T', 1. ) 
     476      CALL nemo2cice(nfrzmlt,frzmlt,'T', 1., kt, ssnd_n2c(id_nfrzmlt_np)%nid(1,1), srcv_n2c(id_frzmlt_ig)%nid(1,1) ) 
    471477 
    472478! SST  and SSS 
    473479 
    474       CALL nemo2cice(sst_m,sst,'T', 1. ) 
    475       CALL nemo2cice(sss_m,sss,'T', 1. ) 
     480      CALL nemo2cice(sst_m,sst,'T', 1., kt, ssnd_n2c(id_sst_m_np)%nid(1,1), srcv_n2c(id_sst_m_ig)%nid(1,1) ) 
     481      CALL nemo2cice(sss_m,sss,'T', 1., kt, ssnd_n2c(id_sss_m_np)%nid(1,1), srcv_n2c(id_sss_m_ig)%nid(1,1) ) 
    476482 
    477483      IF( ksbc == jp_purecpl ) THEN 
    478484! Sea ice surface skin temperature 
    479485         DO jl=1,ncat 
    480            CALL nemo2cice(tsfc_ice(:,:,jl), trcrn(:,:,nt_tsfc,jl,:),'T',1.) 
     486           CALL nemo2cice(tsfc_ice(:,:,jl), trcrn(:,:,nt_tsfc,jl,:),'T',1., kt, ssnd_n2c(id_tsfc_ice_np)%nid(1,jl), srcv_n2c(id_trcrn_ig)%nid(1,jl)) 
    481487         ENDDO  
    482488      ENDIF 
     
    489495         ENDDO 
    490496      ENDDO 
    491       CALL nemo2cice(ztmp,uocn,'F', -1. ) 
     497      CALL nemo2cice(ztmp,uocn,'F', -1., kt, ssnd_n2c(id_uocn_np)%nid(1,1), srcv_n2c(id_uocn_ig)%nid(1,1) ) 
    492498 
    493499! V point to F point 
     
    497503         ENDDO 
    498504      ENDDO 
    499       CALL nemo2cice(ztmp,vocn,'F', -1. ) 
     505      CALL nemo2cice(ztmp,vocn,'F', -1., kt, ssnd_n2c(id_vocn_np)%nid(1,1), srcv_n2c(id_vocn_ig)%nid(1,1) ) 
    500506 
    501507      IF( nn_ice_embd == 2 ) THEN             !== embedded sea ice: compute representative ice top surface ==! 
     
    525531         ENDDO 
    526532      ENDDO 
    527       CALL nemo2cice(ztmp,ss_tltx,'F', -1. ) 
     533      CALL nemo2cice(ztmp,ss_tltx,'F', -1., kt, ssnd_n2c(id_ss_tltx_np)%nid(1,1), srcv_n2c(id_ss_tltx_ig)%nid(1,1) ) 
    528534 
    529535! T point to F point 
     
    535541         ENDDO 
    536542      ENDDO 
    537       CALL nemo2cice(ztmp,ss_tlty,'F', -1. ) 
     543      CALL nemo2cice(ztmp,ss_tlty,'F', -1., kt, ssnd_n2c(id_ss_tlty_np)%nid(1,1), srcv_n2c(id_ss_tlty_ig)%nid(1,1) ) 
    538544 
    539545      CALL wrk_dealloc( jpi,jpj, ztmp, zpice ) 
     
    555561      INTEGER  ::   ji, jj, jl                 ! dummy loop indices 
    556562      REAL(wp), DIMENSION(:,:), POINTER :: ztmp1, ztmp2 
     563      INTEGER :: kinfo, isec 
     564      REAL(wp) :: amaxv, aminv 
    557565      !!--------------------------------------------------------------------- 
    558566 
     
    564572         IF(lwp) WRITE(numout,*)'cice_sbc_out' 
    565573      ENDIF 
    566        
     574!     isec = (kt-1)*rdt 
     575!     ztmp1 = 2.  
     576!     CALL oasis_get ( srcv_n2c(1)%nid(1,1), isec, ztmp1(nldi:nlei, nldj:nlej), kinfo )  
     577!     amaxv = maxval(ztmp1(nldi:nlei, nldj:nlej)) 
     578!     aminv = minval(ztmp1(nldi:nlei, nldj:nlej)) 
     579!     vcice = ztmp1 
     580!     call mpp_max(amaxv) 
     581!     call mpp_min(aminv) 
     582!     if(lwp) write(numout,*) 'MAX/MIN OASIS: ', amaxv, aminv, kinfo 
     583!     write(*,*) amaxv, aminv, 'NEMO from CICE ',narea 
    567584! x comp of ocean-ice stress  
    568       CALL cice2nemo(strocnx,ztmp1,'F', -1. ) 
     585      CALL cice2nemo(strocnx,ztmp1,'F', -1., kt, ssnd_c2n(id_strocnx_ip)%nid(1,1), srcv_c2n(id_strocnx_ng)%nid(1,1)) 
    569586      ss_iou(:,:)=0.0 
    570587! F point to U point 
     
    577594 
    578595! y comp of ocean-ice stress  
    579       CALL cice2nemo(strocny,ztmp1,'F', -1. ) 
     596      CALL cice2nemo(strocny,ztmp1,'F', -1., kt, ssnd_c2n(id_strocny_ip)%nid(1,1), srcv_c2n(id_strocny_ng)%nid(1,1) ) 
    580597      ss_iov(:,:)=0.0 
    581598! F point to V point 
     
    598615! Also need ice/ocean stress on T points so that taum can be updated  
    599616! This interpolation is already done in CICE so best to use those values  
    600       CALL cice2nemo(strocnxT,ztmp1,'T',-1.)  
    601       CALL cice2nemo(strocnyT,ztmp2,'T',-1.)  
     617      CALL cice2nemo(strocnxT,ztmp1,'T',-1., kt, ssnd_c2n(id_strocnxT_ip)%nid(1,1), srcv_c2n(id_strocnxT_ng)%nid(1,1))  
     618      CALL cice2nemo(strocnyT,ztmp2,'T',-1., kt, ssnd_c2n(id_strocnyT_ip)%nid(1,1), srcv_c2n(id_strocnyT_ng)%nid(1,1))  
    602619  
    603620! Update taum with modulus of ice-ocean stress  
     
    622639 
    623640#if defined key_cice4 
    624       CALL cice2nemo(fresh_gbm,ztmp1,'T', 1. ) 
    625       CALL cice2nemo(fsalt_gbm,ztmp2,'T', 1. ) 
     641      CALL cice2nemo(fresh_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fresh_ai_ip)%nid(1,1), srcv_c2n(id_fresh_ai_ng)%nid(1,1)) 
     642      CALL cice2nemo(fsalt_gbm,ztmp2,'T', 1., kt, ssnd_c2n(id_fsalt_ai_ip)%nid(1,1), srcv_c2n(id_fsalt_ai_ng)%nid(1,1) ) 
    626643#else 
    627       CALL cice2nemo(fresh_ai,ztmp1,'T', 1. ) 
    628       CALL cice2nemo(fsalt_ai,ztmp2,'T', 1. ) 
     644      CALL cice2nemo(fresh_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fresh_ai_ip)%nid(1,1), srcv_c2n(id_fresh_ai_ng)%nid(1,1) ) 
     645      CALL cice2nemo(fsalt_ai,ztmp2,'T', 1., kt, ssnd_c2n(id_fsalt_ai_ip)%nid(1,1), srcv_c2n(id_fsalt_ai_ng)%nid(1,1) ) 
    629646#endif 
    630647 
     
    661678! [fswthru will be zero unless running with calc_Tsfc=T in CICE] 
    662679#if defined key_cice4 
    663       CALL cice2nemo(fswthru_gbm,ztmp1,'T', 1. ) 
     680      CALL cice2nemo(fswthru_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fswthru_ai_ip)%nid(1,1), srcv_c2n(id_fswthru_ai_ng)%nid(1,1) ) 
    664681#else 
    665       CALL cice2nemo(fswthru_ai,ztmp1,'T', 1. ) 
     682      CALL cice2nemo(fswthru_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fswthru_ai_ip)%nid(1,1), srcv_c2n(id_fswthru_ai_ng)%nid(1,1) ) 
    666683#endif 
    667684      qsr(:,:)=qsr(:,:)+ztmp1(:,:) 
     
    675692 
    676693#if defined key_cice4 
    677       CALL cice2nemo(fhocn_gbm,ztmp1,'T', 1. ) 
     694      CALL cice2nemo(fhocn_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fhocn_ai_ip)%nid(1,1), srcv_c2n(id_fhocn_ai_ng)%nid(1,1) ) 
    678695#else 
    679       CALL cice2nemo(fhocn_ai,ztmp1,'T', 1. ) 
     696      CALL cice2nemo(fhocn_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fhocn_ai_ip)%nid(1,1), srcv_c2n(id_fhocn_ai_ng)%nid(1,1) ) 
    680697#endif 
    681698      qns(:,:)=qns(:,:)+nfrzmlt(:,:)+ztmp1(:,:) 
     
    685702! Prepare for the following CICE time-step 
    686703 
    687       CALL cice2nemo(aice,fr_i,'T', 1. ) 
     704      CALL cice2nemo(aice,fr_i,'T', 1., kt, ssnd_c2n(id_aice_ip)%nid(1,1), srcv_c2n(id_fr_i_ng)%nid(1,1) ) 
    688705      IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
    689706         DO jl=1,ncat 
    690             CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. ) 
     707            CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1., kt, ssnd_c2n(id_aicen_ip)%nid(1,jl), srcv_c2n(id_a_i_ng)%nid(1,jl) ) 
    691708         ENDDO 
    692709      ENDIF 
     
    706723      !                                      ! embedded sea ice 
    707724      IF( nn_ice_embd /= 0 ) THEN            ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 
    708          CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 
    709          CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 
     725         CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1., kt, ssnd_c2n(id_vsno_ip)%nid(1,1), srcv_c2n(id_vsno_ng)%nid(1,1) ) 
     726         CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1., kt, ssnd_c2n(id_vice_ip)%nid(1,1), srcv_c2n(id_vice_ng)%nid(1,1) ) 
    710727         snwice_mass  (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:)  ) 
    711728         snwice_mass_b(:,:) = snwice_mass(:,:) 
     
    747764! x and y comp of ice velocity 
    748765 
    749       CALL cice2nemo(uvel,u_ice,'F', -1. ) 
    750       CALL cice2nemo(vvel,v_ice,'F', -1. ) 
     766      CALL cice2nemo(uvel,u_ice,'F', -1., kt, ssnd_c2n(id_uvel_ip)%nid(1,1) , srcv_c2n(id_u_ice_ng)%nid(1,1) ) 
     767      CALL cice2nemo(vvel,v_ice,'F', -1., kt, ssnd_c2n(id_vvel_ip)%nid(1,1), srcv_c2n(id_v_ice_ng)%nid(1,1) ) 
    751768 
    752769! Ice concentration (CO_1) = a_i calculated at end of cice_sbc_out   
     
    755772 
    756773      DO jl = 1,ncat 
    757          CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1. ) 
    758          CALL cice2nemo(vicen(:,:,jl,:),ht_i(:,:,jl),'T', 1. ) 
     774         CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1., kt, ssnd_c2n(id_vsnon_ip)%nid(1,jl), srcv_c2n(id_ht_s_ng)%nid(1,jl)) 
     775         CALL cice2nemo(vicen(:,:,jl,:),ht_i(:,:,jl),'T', 1., kt, ssnd_c2n(id_vicen_ip)%nid(1,jl), srcv_c2n(id_ht_i_ng)%nid(1,jl)) 
    759776      ENDDO 
    760777 
     
    762779! Meltpond fraction and depth 
    763780      DO jl = 1,ncat 
    764          CALL cice2nemo(apeffn(:,:,jl,:),a_p(:,:,jl),'T', 1. ) 
    765          CALL cice2nemo(trcrn(:,:,nt_hpnd,jl,:),ht_p(:,:,jl),'T', 1. ) 
     781         CALL cice2nemo(apeffn(:,:,jl,:),a_p(:,:,jl),'T', 1., kt, ssnd_c2n(id_apeffn_ip)%nid(1,jl), srcv_c2n(id_a_p_ng)%nid(1,jl) ) 
     782         CALL cice2nemo(trcrn(:,:,nt_hpnd,jl,:),ht_p(:,:,jl),'T', 1., kt, ssnd_c2n(id_trcrn_ip)%nid(1,jl), srcv_c2n(id_ht_p_ng)%nid(1,jl) ) 
    766783      ENDDO 
    767784#endif 
     
    776793      IF (heat_capacity) THEN 
    777794         DO jl = 1,ncat 
    778             CALL cice2nemo(Tn_top(:,:,jl,:),tn_ice(:,:,jl),'T', 1. ) 
    779             CALL cice2nemo(keffn_top(:,:,jl,:),kn_ice(:,:,jl),'T', 1. ) 
     795            CALL cice2nemo(Tn_top(:,:,jl,:),tn_ice(:,:,jl),'T', 1., kt, ssnd_c2n(id_Tn_top_ip)%nid(1,jl), srcv_c2n(id_tn_ice_ng)%nid(1,jl) ) 
     796            CALL cice2nemo(keffn_top(:,:,jl,:),kn_ice(:,:,jl),'T', 1., kt, ssnd_c2n(id_keffn_top_ip)%nid(1,jl), srcv_c2n(id_kn_ice_ng)%nid(1,jl) ) 
    780797         ENDDO 
    781798! Convert surface temperature to Kelvin 
     
    926943   END SUBROUTINE cice_sbc_force 
    927944 
    928    SUBROUTINE nemo2cice( pn, pc, cd_type, psgn) 
     945   SUBROUTINE nemo2cice( pn, pc, cd_type, psgn, kt, idn, idc) 
    929946      !!--------------------------------------------------------------------- 
    930947      !!                    ***  ROUTINE nemo2cice  *** 
     
    944961#endif 
    945962      !!--------------------------------------------------------------------- 
    946  
     963      INTEGER, INTENT( in ) :: idn, idc 
    947964      CHARACTER(len=1), INTENT( in ) ::   & 
    948965          cd_type       ! nature of pn grid-point 
     
    952969          !             !   =-1 , the sign is modified following the type of b.c. used 
    953970          !             !   = 1 , no sign change 
     971      INTEGER, INTENT(IN) :: kt 
    954972      REAL(wp), DIMENSION(jpi,jpj) :: pn 
    955 #if !defined key_nemocice_decomp 
    956       REAL(wp), DIMENSION(jpiglo,jpjglo) :: png2 
    957       REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg 
    958 #endif 
    959973      REAL (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: pc 
    960974      INTEGER (int_kind) :: & 
     
    964978 
    965979      INTEGER  ::   ji, jj, jn                      ! dummy loop indices 
     980      INTEGER  ::  isec, kinfo, iblk 
     981      type (block) :: bk 
    966982 
    967983!     A. Ensure all haloes are filled in NEMO field (pn) 
     
    980996 
    981997#else 
    982  
    983 !     B. Gather pn into global array (png) 
    984  
    985       IF ( jpnij > 1) THEN 
    986          CALL mppsync 
    987          CALL mppgather (pn,0,png)  
    988          CALL mppsync 
    989       ELSE 
    990          png(:,:,1)=pn(:,:) 
    991       ENDIF 
    992  
    993 !     C. Map png into CICE global array (pcg) 
    994  
    995 ! Need to make sure this is robust to changes in NEMO halo rows.... 
    996 ! (may be OK but not 100% sure) 
    997  
    998       IF (nproc==0) THEN      
    999 !        pcg(:,:)=0.0 
    1000          DO jn=1,jpnij 
    1001             DO jj=nldjt(jn),nlejt(jn) 
    1002                DO ji=nldit(jn),nleit(jn) 
    1003                   png2(ji+nimppt(jn)-1,jj+njmppt(jn)-1)=png(ji,jj,jn) 
    1004                ENDDO 
    1005             ENDDO 
    1006          ENDDO 
    1007          DO jj=1,ny_global 
    1008             DO ji=1,nx_global 
    1009                pcg(ji,jj)=png2(ji+ji_off,jj+jj_off) 
    1010             ENDDO 
    1011          ENDDO 
    1012       ENDIF 
    1013  
     998!MA 
     999!MA!     B. Gather pn into global array (png) 
     1000!MA 
     1001!MA      IF ( jpnij > 1) THEN 
     1002!MA         CALL mppsync 
     1003!MA         CALL mppgather (pn,0,png)  
     1004!MA         CALL mppsync 
     1005!MA      ELSE 
     1006!MA         png(:,:,1)=pn(:,:) 
     1007!MA      ENDIF 
     1008 
     1009!MA!     C. Map png into CICE global array (pcg) 
     1010 
     1011!MA! Need to make sure this is robust to changes in NEMO halo rows.... 
     1012!MA! (may be OK but not 100% sure) 
     1013 
     1014!MA      IF (nproc==0) THEN      
     1015!MA!        pcg(:,:)=0.0 
     1016!MA         DO jn=1,jpnij 
     1017!MA            DO jj=nldjt(jn),nlejt(jn) 
     1018!MA               DO ji=nldit(jn),nleit(jn) 
     1019!MA                  png2(ji+nimppt(jn)-1,jj+njmppt(jn)-1)=png(ji,jj,jn) 
     1020!MA               ENDDO 
     1021!MA            ENDDO 
     1022!MA         ENDDO 
     1023!MA         DO jj=1,ny_global 
     1024!MA            DO ji=1,nx_global 
     1025!MA               pcg(ji,jj)=png2(ji+ji_off,jj+jj_off) 
     1026!MA            ENDDO 
     1027!MA         ENDDO 
     1028!MA      ENDIF 
     1029 
     1030! forced and coupled case  
     1031      isec = (kt-1)*rdt 
     1032      iblk = 1 
     1033      bk = get_block(blocks_ice(iblk), iblk) 
     1034      CALL oasis_put ( idn, isec, pn(nldi:nlei, nldj:nlej), kinfo ) 
     1035      CALL oasis_get ( idc, isec, pc(bk%ilo:bk%ihi,bk%jlo:bk%jhi,1), kinfo ) 
    10141036#endif 
    10151037 
     
    10331055#else 
    10341056!     D. Scatter pcg to CICE blocks (pc) + update halos 
    1035       CALL scatter_global(pc, pcg, 0, distrb_info, grid_loc, field_type) 
     1057!MA     CALL scatter_global(pc, pcg, 0, distrb_info, grid_loc, field_type) 
     1058      ! Ensure CICE halos are up to date 
     1059      CALL ice_HaloUpdate (pc, halo_info, grid_loc, field_type) 
    10361060#endif 
    10371061 
    10381062   END SUBROUTINE nemo2cice 
    10391063 
    1040    SUBROUTINE cice2nemo ( pc, pn, cd_type, psgn ) 
     1064   SUBROUTINE cice2nemo ( pc, pn, cd_type, psgn, kt, idc, idn ) 
    10411065      !!--------------------------------------------------------------------- 
    10421066      !!                    ***  ROUTINE cice2nemo  *** 
     
    10651089          !             !   = 1 , no sign change 
    10661090      REAL(wp), DIMENSION(jpi,jpj) :: pn 
    1067  
    1068 #if defined key_nemocice_decomp 
     1091      INTEGER, INTENT( in ) :: idc, idn 
     1092      INTEGER, INTENT(IN) :: kt 
     1093 
     1094!#if defined key_nemocice_decomp 
    10691095      INTEGER (int_kind) :: & 
    10701096         field_type,        & ! id for type of field (scalar, vector, angle) 
    10711097         grid_loc             ! id for location on horizontal grid 
    10721098                              ! (center, NEcorner, Nface, Eface) 
    1073 #else 
    1074       REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg 
    1075 #endif 
     1099!#else 
     1100!MA     REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg 
     1101!#endif 
     1102      type(block) :: bk 
    10761103 
    10771104      REAL (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: pc 
    10781105 
    10791106      INTEGER  ::   ji, jj, jn                      ! dummy loop indices 
    1080  
    1081  
    1082 #if defined key_nemocice_decomp 
     1107      INTEGER :: kinfo, isec, iblk 
    10831108 
    10841109      SELECT CASE ( cd_type ) 
     
    10981123      CALL ice_HaloUpdate (pc, halo_info, grid_loc, field_type) 
    10991124 
    1100  
     1125#if defined key_nemocice_decomp 
    11011126      pn(:,:)=0.0 
    11021127      DO jj=1,jpjm1 
     
    11081133#else 
    11091134 
    1110 !      A. Gather CICE blocks (pc) into global array (pcg)  
    1111  
    1112       CALL gather_global(pcg, pc, 0, distrb_info) 
    1113  
    1114 !     B. Map pcg into NEMO global array (png) 
    1115  
    1116 ! Need to make sure this is robust to changes in NEMO halo rows.... 
    1117 ! (may be OK but not spent much time thinking about it) 
    1118 ! Note that non-existent pcg elements may be used below, but 
    1119 ! the lbclnk call on pn will replace these with sensible values 
    1120  
    1121       IF (nproc==0) THEN 
    1122          png(:,:,:)=0.0 
    1123          DO jn=1,jpnij 
    1124             DO jj=nldjt(jn),nlejt(jn) 
    1125                DO ji=nldit(jn),nleit(jn) 
    1126                   png(ji,jj,jn)=pcg(ji+nimppt(jn)-1-ji_off,jj+njmppt(jn)-1-jj_off) 
    1127                ENDDO 
    1128             ENDDO 
    1129          ENDDO 
    1130       ENDIF 
     1135!MA!      A. Gather CICE blocks (pc) into global array (pcg)  
     1136 
     1137!MA      CALL gather_global(pcg, pc, 0, distrb_info) 
     1138 
     1139!MA!     B. Map pcg into NEMO global array (png) 
     1140 
     1141!MA! Need to make sure this is robust to changes in NEMO halo rows.... 
     1142!MA! (may be OK but not spent much time thinking about it) 
     1143!MA! Note that non-existent pcg elements may be used below, but 
     1144!MA! the lbclnk call on pn will replace these with sensible values 
     1145 
     1146!MA      IF (nproc==0) THEN 
     1147!MA         png(:,:,:)=0.0 
     1148!MA         DO jn=1,jpnij 
     1149!MA            DO jj=nldjt(jn),nlejt(jn) 
     1150!MA               DO ji=nldit(jn),nleit(jn) 
     1151!MA                  png(ji,jj,jn)=pcg(ji+nimppt(jn)-1-ji_off,jj+njmppt(jn)-1-jj_off) 
     1152!MA               ENDDO 
     1153!MA            ENDDO 
     1154!MA         ENDDO 
     1155!MA      ENDIF 
    11311156 
    11321157!     C. Scatter png into NEMO field (pn) for each processor 
    11331158 
    1134       IF ( jpnij > 1) THEN 
    1135          CALL mppsync 
    1136          CALL mppscatter (png,0,pn)  
    1137          CALL mppsync 
    1138       ELSE 
    1139          pn(:,:)=png(:,:,1) 
    1140       ENDIF 
    1141  
     1159!MA      IF ( jpnij > 1) THEN 
     1160!MA         CALL mppsync 
     1161!MA         CALL mppscatter (png,0,pn)  
     1162!MA         CALL mppsync 
     1163!MA      ELSE 
     1164!MA         pn(:,:)=png(:,:,1) 
     1165!MA      ENDIF 
     1166      isec = (kt-1)*rdt 
     1167      iblk = 1 
     1168      bk = get_block(blocks_ice(iblk), iblk) 
     1169      CALL oasis_put ( idc, isec, pc(bk%ilo:bk%ihi,bk%jlo:bk%jhi,1), kinfo ) 
     1170      CALL oasis_get ( idn, isec, pn(nldi:nlei, nldj:nlej), kinfo ) 
    11421171#endif 
    11431172 
     
    11561185 
    11571186   SUBROUTINE sbc_ice_cice ( kt, ksbc )     ! Dummy routine 
     1187      INTEGER, INTENT(IN) :: kt, ksbc 
    11581188      WRITE(*,*) 'sbc_ice_cice: You should not have seen this print! error?', kt 
    11591189   END SUBROUTINE sbc_ice_cice 
    11601190 
    1161    SUBROUTINE cice_sbc_init (ksbc)    ! Dummy routine 
     1191   SUBROUTINE cice_sbc_init (kt, ksbc)    ! Dummy routine 
     1192      INTEGER, INTENT(IN) :: kt, ksbc 
    11621193      WRITE(*,*) 'cice_sbc_init: You should not have seen this print! error?' 
    11631194   END SUBROUTINE cice_sbc_init 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r6498 r8975  
    267267      ! 
    268268      IF( lk_oasis )   CALL sbc_cpl_init (nn_ice)   ! OASIS initialisation. must be done before: (1) first time step 
    269       !                                                     !                                            (2) the use of nn_fsbc 
    270  
     269      IF( nn_ice == 4      )   CALL cice_sbc_init( nsbc )      ! CICE initialisation 
     270      call flush(numout) 
     271                                                     !                                            (2) the use of nn_fsbc 
    271272!     nn_fsbc initialization if OPA-SAS coupling via OASIS 
    272273!     sas model time step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 
     
    304305      IF( nn_ice == 3      )   CALL sbc_lim_init               ! LIM3 initialisation 
    305306 
    306       IF( nn_ice == 4      )   CALL cice_sbc_init( nsbc )      ! CICE initialisation 
    307        
    308307   END SUBROUTINE sbc_init 
    309308 
  • branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/oce.F90

    r6755 r8975  
    3232   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhd    !: in situ density anomalie rhd=(rho-rau0)/rau0  [no units] 
    3333   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhop   !: potential volumic mass                           [kg/m3] 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   vcice 
    3435 
    3536   !! free surface                                      !  before  ! now    ! after  ! 
     
    9798      !!                   ***  FUNCTION oce_alloc  *** 
    9899      !!---------------------------------------------------------------------- 
    99       INTEGER :: ierr(4) 
     100      INTEGER :: ierr(5) 
    100101      !!---------------------------------------------------------------------- 
    101102      ! 
     
    129130         &     riceload(jpi,jpj),                             STAT=ierr(2) ) 
    130131         ! 
     132      ALLOCATE(vcice (jpi,jpj)) 
    131133      ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), snwice_fmass(jpi,jpj) , STAT=ierr(3) ) 
    132134         ! 
Note: See TracChangeset for help on using the changeset viewer.