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 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/SBC/sbcice_cice.F90 – NEMO

Ignore:
Timestamp:
2020-05-14T21:46:00+02:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12925 (ticket #2170)

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

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser

    • Property svn:externals
      •  

        old new  
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/SBC/sbcice_cice.F90

    r12178 r12928  
    1313   USE dom_oce         ! ocean space and time domain 
    1414   USE domvvl 
    15    USE phycst, only : rcp, rau0, r1_rau0, rhos, rhoi 
     15   USE phycst, only : rcp, rho0, r1_rho0, rhos, rhoi 
    1616   USE in_out_manager  ! I/O manager 
    1717   USE iom, ONLY : iom_put,iom_use              ! I/O manager library !!Joakim edit 
     
    8888   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:), PRIVATE ::   png     ! local array used in sbc_cice_ice 
    8989 
     90   !! * Substitutions 
     91#  include "do_loop_substitute.h90" 
    9092   !!---------------------------------------------------------------------- 
    9193   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    132134         IF      ( ksbc == jp_flx ) THEN 
    133135            CALL cice_sbc_force(kt) 
    134          ELSE IF ( ksbc == jp_purecpl ) THEN 
     136         ELSE IF( ksbc == jp_purecpl ) THEN 
    135137            CALL sbc_cpl_ice_flx( fr_i ) 
    136138         ENDIF 
     
    140142         CALL cice_sbc_out ( kt, ksbc ) 
    141143 
    142          IF ( ksbc == jp_purecpl )  CALL cice_sbc_hadgam(kt+1) 
     144         IF( ksbc == jp_purecpl )  CALL cice_sbc_hadgam(kt+1) 
    143145 
    144146      ENDIF                                          ! End sea-ice time step only 
     
    147149 
    148150 
    149    SUBROUTINE cice_sbc_init( ksbc ) 
     151   SUBROUTINE cice_sbc_init( ksbc, Kbb, Kmm ) 
    150152      !!--------------------------------------------------------------------- 
    151153      !!                    ***  ROUTINE cice_sbc_init  *** 
     
    154156      !!--------------------------------------------------------------------- 
    155157      INTEGER, INTENT( in  ) ::   ksbc                ! surface forcing type 
     158      INTEGER, INTENT( in  ) ::   Kbb, Kmm            ! time level indices 
    156159      REAL(wp), DIMENSION(jpi,jpj) :: ztmp1, ztmp2 
    157160      REAL(wp) ::   zcoefu, zcoefv, zcoeff            ! local scalar 
     
    168171      ! there is no restart file. 
    169172      ! Values from a CICE restart file would overwrite this 
    170       IF ( .NOT. ln_rstart ) THEN     
    171          CALL nemo2cice( tsn(:,:,1,jp_tem) , sst , 'T' , 1.)  
     173      IF( .NOT. ln_rstart ) THEN     
     174         CALL nemo2cice( ts(:,:,1,jp_tem,Kmm) , sst , 'T' , 1.)  
    172175      ENDIF   
    173176#endif 
     
    177180 
    178181! Do some CICE consistency checks 
    179       IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
    180          IF ( calc_strair .OR. calc_Tsfc ) THEN 
     182      IF( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
     183         IF( calc_strair .OR. calc_Tsfc ) THEN 
    181184            CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=F and calc_Tsfc=F in ice_in' ) 
    182185         ENDIF 
    183       ELSEIF (ksbc == jp_blk) THEN 
    184          IF ( .NOT. (calc_strair .AND. calc_Tsfc) ) THEN 
     186      ELSEIF(ksbc == jp_blk) THEN 
     187         IF( .NOT. (calc_strair .AND. calc_Tsfc) ) THEN 
    185188            CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=T and calc_Tsfc=T in ice_in' ) 
    186189         ENDIF 
     
    194197! Ensure ocean temperatures are nowhere below freezing if not a NEMO restart 
    195198      IF( .NOT. ln_rstart ) THEN 
    196          tsn(:,:,:,jp_tem) = MAX (tsn(:,:,:,jp_tem),Tocnfrz) 
    197          tsb(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) 
     199         ts(:,:,:,jp_tem,Kmm) = MAX (ts(:,:,:,jp_tem,Kmm),Tocnfrz) 
     200         ts(:,:,:,jp_tem,Kbb) = ts(:,:,:,jp_tem,Kmm) 
    198201      ENDIF 
    199202 
     
    202205 
    203206      CALL cice2nemo(aice,fr_i, 'T', 1. ) 
    204       IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
     207      IF( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
    205208         DO jl=1,ncat 
    206209            CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. ) 
     
    210213! T point to U point 
    211214! T point to V point 
    212       DO jj=1,jpjm1 
    213          DO ji=1,jpim1 
    214             fr_iu(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji+1,jj))*umask(ji,jj,1) 
    215             fr_iv(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji,jj+1))*vmask(ji,jj,1) 
    216          ENDDO 
    217       ENDDO 
     215      DO_2D_10_10 
     216         fr_iu(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji+1,jj))*umask(ji,jj,1) 
     217         fr_iv(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji,jj+1))*vmask(ji,jj,1) 
     218      END_2D 
    218219 
    219220      CALL lbc_lnk_multi( 'sbcice_cice', fr_iu , 'U', 1.,  fr_iv , 'V', 1. ) 
     
    227228      IF( .NOT.ln_rstart ) THEN 
    228229         IF( ln_ice_embd ) THEN            ! embedded sea-ice: deplete the initial ssh below sea-ice area 
    229             sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 
    230             sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 
     230            ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 
     231            ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 
    231232 
    232233!!gm This should be put elsewhere....   (same remark for limsbc) 
     
    235236               ! 
    236237               DO jk = 1,jpkm1                     ! adjust initial vertical scale factors 
    237                   e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
    238                   e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
     238                  e3t(:,:,jk,Kmm) = e3t_0(:,:,jk)*( 1._wp + ssh(:,:,Kmm)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
     239                  e3t(:,:,jk,Kbb) = e3t_0(:,:,jk)*( 1._wp + ssh(:,:,Kbb)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
    239240               ENDDO 
    240                e3t_a(:,:,:) = e3t_b(:,:,:) 
     241               e3t(:,:,:,Krhs) = e3t(:,:,:,Kbb) 
    241242               ! Reconstruction of all vertical scale factors at now and before time-steps 
    242243               ! ============================================================================= 
    243244               ! Horizontal scale factor interpolations 
    244245               ! -------------------------------------- 
    245                CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 
    246                CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 
    247                CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    248                CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    249                CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 
     246               CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3u(:,:,:,Kbb), 'U' ) 
     247               CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' ) 
     248               CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3u(:,:,:,Kmm), 'U' ) 
     249               CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3v(:,:,:,Kmm), 'V' ) 
     250               CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' ) 
    250251               ! Vertical scale factor interpolations 
    251252               ! ------------------------------------ 
    252                CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W'  ) 
    253                CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    254                CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
    255                CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
    256                CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
     253               CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w (:,:,:,Kmm), 'W'  ) 
     254               CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3uw(:,:,:,Kmm), 'UW' ) 
     255               CALL dom_vvl_interpol( e3v(:,:,:,Kmm), e3vw(:,:,:,Kmm), 'VW' ) 
     256               CALL dom_vvl_interpol( e3u(:,:,:,Kbb), e3uw(:,:,:,Kbb), 'UW' ) 
     257               CALL dom_vvl_interpol( e3v(:,:,:,Kbb), e3vw(:,:,:,Kbb), 'VW' ) 
    257258               ! t- and w- points depth 
    258259               ! ---------------------- 
    259                gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    260                gdepw_n(:,:,1) = 0.0_wp 
    261                gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
     260               gdept(:,:,1,Kmm) = 0.5_wp * e3w(:,:,1,Kmm) 
     261               gdepw(:,:,1,Kmm) = 0.0_wp 
     262               gde3w(:,:,1)     = gdept(:,:,1,Kmm) - ssh(:,:,Kmm) 
    262263               DO jk = 2, jpk 
    263                   gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 
    264                   gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 
    265                   gde3w_n(:,:,jk) = gdept_n(:,:,jk  ) - sshn   (:,:) 
     264                  gdept(:,:,jk,Kmm) = gdept(:,:,jk-1,Kmm) + e3w(:,:,jk,Kmm) 
     265                  gdepw(:,:,jk,Kmm) = gdepw(:,:,jk-1,Kmm) + e3t(:,:,jk-1,Kmm) 
     266                  gde3w(:,:,jk)     = gdept(:,:,jk  ,Kmm) - sshn   (:,:) 
    266267               END DO 
    267268            ENDIF 
     
    297298! forced and coupled case  
    298299 
    299       IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
     300      IF( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
    300301 
    301302         ztmpn(:,:,:)=0.0 
     
    303304! x comp of wind stress (CI_1) 
    304305! U point to F point 
    305          DO jj=1,jpjm1 
    306             DO ji=1,jpi 
    307                ztmp(ji,jj) = 0.5 * (  fr_iu(ji,jj) * utau(ji,jj)      & 
    308                                     + fr_iu(ji,jj+1) * utau(ji,jj+1) ) * fmask(ji,jj,1) 
    309             ENDDO 
    310          ENDDO 
     306         DO_2D_10_11 
     307            ztmp(ji,jj) = 0.5 * (  fr_iu(ji,jj) * utau(ji,jj)      & 
     308                                 + fr_iu(ji,jj+1) * utau(ji,jj+1) ) * fmask(ji,jj,1) 
     309         END_2D 
    311310         CALL nemo2cice(ztmp,strax,'F', -1. ) 
    312311 
    313312! y comp of wind stress (CI_2) 
    314313! V point to F point 
    315          DO jj=1,jpj 
    316             DO ji=1,jpim1 
    317                ztmp(ji,jj) = 0.5 * (  fr_iv(ji,jj) * vtau(ji,jj)      & 
    318                                     + fr_iv(ji+1,jj) * vtau(ji+1,jj) ) * fmask(ji,jj,1) 
    319             ENDDO 
    320          ENDDO 
     314         DO_2D_11_10 
     315            ztmp(ji,jj) = 0.5 * (  fr_iv(ji,jj) * vtau(ji,jj)      & 
     316                                 + fr_iv(ji+1,jj) * vtau(ji+1,jj) ) * fmask(ji,jj,1) 
     317         END_2D 
    321318         CALL nemo2cice(ztmp,stray,'F', -1. ) 
    322319 
    323320! Surface downward latent heat flux (CI_5) 
    324          IF (ksbc == jp_flx) THEN 
     321         IF(ksbc == jp_flx) THEN 
    325322            DO jl=1,ncat 
    326323               ztmpn(:,:,jl)=qla_ice(:,:,1)*a_i(:,:,jl) 
     
    330327            qla_ice(:,:,1)= - ( emp_ice(:,:)+sprecip(:,:) ) * rLsub 
    331328! End of temporary code 
    332             DO jj=1,jpj 
    333                DO ji=1,jpi 
    334                   IF (fr_i(ji,jj).eq.0.0) THEN 
    335                      DO jl=1,ncat 
    336                         ztmpn(ji,jj,jl)=0.0 
    337                      ENDDO 
    338                      ! This will then be conserved in CICE 
    339                      ztmpn(ji,jj,1)=qla_ice(ji,jj,1) 
    340                   ELSE 
    341                      DO jl=1,ncat 
    342                         ztmpn(ji,jj,jl)=qla_ice(ji,jj,1)*a_i(ji,jj,jl)/fr_i(ji,jj) 
    343                      ENDDO 
    344                   ENDIF 
    345                ENDDO 
    346             ENDDO 
     329            DO_2D_11_11 
     330               IF(fr_i(ji,jj).eq.0.0) THEN 
     331                  DO jl=1,ncat 
     332                     ztmpn(ji,jj,jl)=0.0 
     333                  ENDDO 
     334                  ! This will then be conserved in CICE 
     335                  ztmpn(ji,jj,1)=qla_ice(ji,jj,1) 
     336               ELSE 
     337                  DO jl=1,ncat 
     338                     ztmpn(ji,jj,jl)=qla_ice(ji,jj,1)*a_i(ji,jj,jl)/fr_i(ji,jj) 
     339                  ENDDO 
     340               ENDIF 
     341            END_2D 
    347342         ENDIF 
    348343         DO jl=1,ncat 
     
    351346! GBM conductive flux through ice (CI_6) 
    352347!  Convert to GBM 
    353             IF (ksbc == jp_flx) THEN 
     348            IF(ksbc == jp_flx) THEN 
    354349               ztmp(:,:) = botmelt(:,:,jl)*a_i(:,:,jl) 
    355350            ELSE 
     
    360355! GBM surface heat flux (CI_7) 
    361356!  Convert to GBM 
    362             IF (ksbc == jp_flx) THEN 
     357            IF(ksbc == jp_flx) THEN 
    363358               ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl))*a_i(:,:,jl)  
    364359            ELSE 
     
    368363         ENDDO 
    369364 
    370       ELSE IF (ksbc == jp_blk) THEN 
     365      ELSE IF(ksbc == jp_blk) THEN 
    371366 
    372367! Pass bulk forcing fields to CICE (which will calculate heat fluxes etc itself) 
     
    422417! Freezing/melting potential 
    423418! Calculated over NEMO leapfrog timestep (hence 2*dt) 
    424       nfrzmlt(:,:) = rau0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
     419      nfrzmlt(:,:) = rho0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
    425420 
    426421      ztmp(:,:) = nfrzmlt(:,:) 
     
    434429! x comp and y comp of surface ocean current 
    435430! U point to F point 
    436       DO jj=1,jpjm1 
    437          DO ji=1,jpi 
    438             ztmp(ji,jj)=0.5*(ssu_m(ji,jj)+ssu_m(ji,jj+1))*fmask(ji,jj,1) 
    439          ENDDO 
    440       ENDDO 
     431      DO_2D_10_11 
     432         ztmp(ji,jj)=0.5*(ssu_m(ji,jj)+ssu_m(ji,jj+1))*fmask(ji,jj,1) 
     433      END_2D 
    441434      CALL nemo2cice(ztmp,uocn,'F', -1. ) 
    442435 
    443436! V point to F point 
    444       DO jj=1,jpj 
    445          DO ji=1,jpim1 
    446             ztmp(ji,jj)=0.5*(ssv_m(ji,jj)+ssv_m(ji+1,jj))*fmask(ji,jj,1) 
    447          ENDDO 
    448       ENDDO 
     437      DO_2D_11_10 
     438         ztmp(ji,jj)=0.5*(ssv_m(ji,jj)+ssv_m(ji+1,jj))*fmask(ji,jj,1) 
     439      END_2D 
    449440      CALL nemo2cice(ztmp,vocn,'F', -1. ) 
    450441 
     
    459450         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 
    460451          ! 
    461          zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rau0 
     452         zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rho0 
    462453          ! 
    463454         ! 
     
    468459! x comp and y comp of sea surface slope (on F points) 
    469460! T point to F point 
    470       DO jj = 1, jpjm1 
    471          DO ji = 1, jpim1 
    472             ztmp(ji,jj)=0.5 * (  (zpice(ji+1,jj  )-zpice(ji,jj  )) * r1_e1u(ji,jj  )    & 
    473                &               + (zpice(ji+1,jj+1)-zpice(ji,jj+1)) * r1_e1u(ji,jj+1)  ) * fmask(ji,jj,1) 
    474          END DO 
    475       END DO 
     461      DO_2D_10_10 
     462         ztmp(ji,jj)=0.5 * (  (zpice(ji+1,jj  )-zpice(ji,jj  )) * r1_e1u(ji,jj  )    & 
     463            &               + (zpice(ji+1,jj+1)-zpice(ji,jj+1)) * r1_e1u(ji,jj+1)  ) * fmask(ji,jj,1) 
     464      END_2D 
    476465      CALL nemo2cice( ztmp,ss_tltx,'F', -1. ) 
    477466 
    478467! T point to F point 
    479       DO jj = 1, jpjm1 
    480          DO ji = 1, jpim1 
    481             ztmp(ji,jj)=0.5 * (  (zpice(ji  ,jj+1)-zpice(ji  ,jj)) * r1_e2v(ji  ,jj)    & 
    482                &               + (zpice(ji+1,jj+1)-zpice(ji+1,jj)) * r1_e2v(ji+1,jj)  ) *  fmask(ji,jj,1) 
    483          END DO 
    484       END DO 
     468      DO_2D_10_10 
     469         ztmp(ji,jj)=0.5 * (  (zpice(ji  ,jj+1)-zpice(ji  ,jj)) * r1_e2v(ji  ,jj)    & 
     470            &               + (zpice(ji+1,jj+1)-zpice(ji+1,jj)) * r1_e2v(ji+1,jj)  ) *  fmask(ji,jj,1) 
     471      END_2D 
    485472      CALL nemo2cice(ztmp,ss_tlty,'F', -1. ) 
    486473      ! 
     
    508495      ss_iou(:,:)=0.0 
    509496! F point to U point 
    510       DO jj=2,jpjm1 
    511          DO ji=2,jpim1 
    512             ss_iou(ji,jj) = 0.5 * ( ztmp1(ji,jj-1) + ztmp1(ji,jj) ) * umask(ji,jj,1) 
    513          ENDDO 
    514       ENDDO 
     497      DO_2D_00_00 
     498         ss_iou(ji,jj) = 0.5 * ( ztmp1(ji,jj-1) + ztmp1(ji,jj) ) * umask(ji,jj,1) 
     499      END_2D 
    515500      CALL lbc_lnk( 'sbcice_cice', ss_iou , 'U', -1. ) 
    516501 
     
    520505! F point to V point 
    521506 
    522       DO jj=1,jpjm1 
    523          DO ji=2,jpim1 
    524             ss_iov(ji,jj) = 0.5 * ( ztmp1(ji-1,jj) + ztmp1(ji,jj) ) * vmask(ji,jj,1) 
    525          ENDDO 
    526       ENDDO 
     507      DO_2D_10_00 
     508         ss_iov(ji,jj) = 0.5 * ( ztmp1(ji-1,jj) + ztmp1(ji,jj) ) * vmask(ji,jj,1) 
     509      END_2D 
    527510      CALL lbc_lnk( 'sbcice_cice', ss_iov , 'V', -1. ) 
    528511 
     
    546529! Freshwater fluxes  
    547530 
    548       IF (ksbc == jp_flx) THEN 
     531      IF(ksbc == jp_flx) THEN 
    549532! Note that emp from the forcing files is evap*(1-aice)-(tprecip-aice*sprecip) 
    550533! What we want here is evap*(1-aice)-tprecip*(1-aice) hence manipulation below 
     
    552535! Better to use evap and tprecip? (but for now don't read in evap in this case) 
    553536         emp(:,:)  = emp(:,:)+fr_i(:,:)*(tprecip(:,:)-sprecip(:,:)) 
    554       ELSE IF (ksbc == jp_blk) THEN 
     537      ELSE IF(ksbc == jp_blk) THEN 
    555538         emp(:,:)  = (1.0-fr_i(:,:))*emp(:,:)         
    556       ELSE IF (ksbc == jp_purecpl) THEN 
     539      ELSE IF(ksbc == jp_purecpl) THEN 
    557540! emp_tot is set in sbc_cpl_ice_flx (called from cice_sbc_in above)  
    558541! This is currently as required with the coupling fields from the UM atmosphere 
     
    584567! Scale qsr and qns according to ice fraction (bulk formulae only) 
    585568 
    586       IF (ksbc == jp_blk) THEN 
     569      IF(ksbc == jp_blk) THEN 
    587570         qsr(:,:)=qsr(:,:)*(1.0-fr_i(:,:)) 
    588571         qns(:,:)=qns(:,:)*(1.0-fr_i(:,:)) 
    589572      ENDIF 
    590573! Take into account snow melting except for fully coupled when already in qns_tot 
    591       IF (ksbc == jp_purecpl) THEN 
     574      IF(ksbc == jp_purecpl) THEN 
    592575         qsr(:,:)= qsr_tot(:,:) 
    593576         qns(:,:)= qns_tot(:,:) 
     
    606589      CALL lbc_lnk( 'sbcice_cice', qsr , 'T', 1. ) 
    607590 
    608       DO jj=1,jpj 
    609          DO ji=1,jpi 
    610             nfrzmlt(ji,jj)=MAX(nfrzmlt(ji,jj),0.0) 
    611          ENDDO 
    612       ENDDO 
     591      DO_2D_11_11 
     592         nfrzmlt(ji,jj)=MAX(nfrzmlt(ji,jj),0.0) 
     593      END_2D 
    613594 
    614595#if defined key_cice4 
     
    624605 
    625606      CALL cice2nemo(aice,fr_i,'T', 1. ) 
    626       IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
     607      IF( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 
    627608         DO jl=1,ncat 
    628609            CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. ) 
     
    632613! T point to U point 
    633614! T point to V point 
    634       DO jj=1,jpjm1 
    635          DO ji=1,jpim1 
    636             fr_iu(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji+1,jj))*umask(ji,jj,1) 
    637             fr_iv(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji,jj+1))*vmask(ji,jj,1) 
    638          ENDDO 
    639       ENDDO 
     615      DO_2D_10_10 
     616         fr_iu(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji+1,jj))*umask(ji,jj,1) 
     617         fr_iv(ji,jj)=0.5*(fr_i(ji,jj)+fr_i(ji,jj+1))*vmask(ji,jj,1) 
     618      END_2D 
    640619 
    641620      CALL lbc_lnk_multi( 'sbcice_cice', fr_iu , 'U', 1., fr_iv , 'V', 1. ) 
     
    762741         sn_bot5 = FLD_N( 'botmeltn5_1m' ,    -1.    ,  'botmeltn5' ,  .true.    , .true.  ,  ' yearly'  , ''       , ''         ,  ''    ) 
    763742 
    764          REWIND( numnam_ref )              ! Namelist namsbc_cice in reference namelist :  
    765743         READ  ( numnam_ref, namsbc_cice, IOSTAT = ios, ERR = 901) 
    766744901      IF( ios /= 0 )   CALL ctl_nam ( ios , 'namsbc_cice in reference namelist' ) 
    767745 
    768          REWIND( numnam_cfg )              ! Namelist namsbc_cice in configuration namelist : Parameters of the run 
    769746         READ  ( numnam_cfg, namsbc_cice, IOSTAT = ios, ERR = 902 ) 
    770747902      IF( ios >  0 )   CALL ctl_nam ( ios , 'namsbc_cice in configuration namelist' ) 
     
    879856!     B. Gather pn into global array (png) 
    880857 
    881       IF ( jpnij > 1) THEN 
     858      IF( jpnij > 1) THEN 
    882859         CALL mppsync 
    883860         CALL mppgather (pn,0,png)  
     
    892869! (may be OK but not 100% sure) 
    893870 
    894       IF (nproc==0) THEN      
     871      IF(nproc==0) THEN      
    895872!        pcg(:,:)=0.0 
    896873         DO jn=1,jpnij 
     
    996973 
    997974      pn(:,:)=0.0 
    998       DO jj=1,jpjm1 
    999          DO ji=1,jpim1 
    1000             pn(ji,jj)=pc(ji+1-ji_off,jj+1-jj_off,1) 
    1001          ENDDO 
    1002       ENDDO 
     975      DO_2D_10_10 
     976         pn(ji,jj)=pc(ji+1-ji_off,jj+1-jj_off,1) 
     977      END_2D 
    1003978 
    1004979#else 
     
    1015990! the lbclnk call on pn will replace these with sensible values 
    1016991 
    1017       IF (nproc==0) THEN 
     992      IF(nproc==0) THEN 
    1018993         png(:,:,:)=0.0 
    1019994         DO jn=1,jpnij 
     
    10281003!     C. Scatter png into NEMO field (pn) for each processor 
    10291004 
    1030       IF ( jpnij > 1) THEN 
     1005      IF( jpnij > 1) THEN 
    10311006         CALL mppsync 
    10321007         CALL mppscatter (png,0,pn)  
     
    10561031   END SUBROUTINE sbc_ice_cice 
    10571032 
    1058    SUBROUTINE cice_sbc_init (ksbc)    ! Dummy routine 
     1033   SUBROUTINE cice_sbc_init (ksbc, Kbb, Kmm)    ! Dummy routine 
    10591034      IMPLICIT NONE 
    10601035      INTEGER, INTENT( in ) :: ksbc 
     1036      INTEGER, INTENT( in ) :: Kbb, Kmm 
    10611037      WRITE(*,*) 'cice_sbc_init: You should not have seen this print! error?', ksbc 
    10621038   END SUBROUTINE cice_sbc_init 
Note: See TracChangeset for help on using the changeset viewer.