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

Changeset 868


Ignore:
Timestamp:
2008-03-14T19:53:00+01:00 (16 years ago)
Author:
rblod
Message:

First optimisation of LIM3, limrhg optimisation induces computation change

Location:
trunk/NEMO/LIM_SRC_3
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC_3/limadv.F90

    r834 r868  
    2525   PUBLIC lim_adv_x    ! called by lim_trp 
    2626   PUBLIC lim_adv_y    ! called by lim_trp 
     27 
     28   !! * Substitutions 
     29#  include "vectopt_loop_substitute.h90" 
    2730 
    2831   !! * Module variables 
     
    110113 
    111114      !  Calculate fluxes and moments between boxes i<-->i+1               
    112       DO jj = 2, jpjm1                    !  Flux from i to i+1 WHEN u GT 0  
     115      DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0  
    113116!i bug   DO ji = 1, jpim1  
    114117!i    DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0  
     
    138141      END DO 
    139142 
    140       DO jj = 2, jpjm1                      !  Flux from i+1 to i when u LT 0. 
    141 !i    DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0. 
    142          DO ji = 1, jpim1 
     143      DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0. 
     144!i    DO jj = 1, fs_jpjm1                   !  Flux from i+1 to i when u LT 0. 
     145         DO ji = 1, fs_jpim1 
    143146            zalf          = MAX( rzero, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)  
    144147            zalg  (ji,jj) = zalf 
     
    159162 
    160163      DO jj = 2, jpjm1                     !  Readjust moments remaining in the box.  
    161          DO ji = 2, jpim1 
     164         DO ji = fs_2, jpi 
    162165            zbt  =       zbet(ji-1,jj) 
    163166            zbt1 = 1.0 - zbet(ji-1,jj) 
     
    174177      !   Put the temporary moments into appropriate neighboring boxes.     
    175178      DO jj = 2, jpjm1                     !   Flux from i to i+1 IF u GT 0. 
    176          DO ji = 2, jpim1 
     179         DO ji = fs_2, fs_jpim1 
    177180            zbt  =       zbet(ji-1,jj) 
    178181            zbt1 = 1.0 - zbet(ji-1,jj) 
     
    195198 
    196199      DO jj = 2, jpjm1                     !  Flux from i+1 to i IF u LT 0. 
    197          DO ji = 2, jpim1 
     200         DO ji = fs_2, fs_jpim1 
    198201            zbt  =       zbet(ji,jj) 
    199202            zbt1 = 1.0 - zbet(ji,jj) 
     
    305308!!bug  DO jj = 2, jpjm1 
    306309       DO jj = 1, jpj 
    307           DO ji = 2, jpim1 
     310          DO ji = 1, jpi 
    308311!!bug     DO ji = 1, jpim1 
    309312             !  Flux from j to j+1 WHEN v GT 0    
     
    333336 
    334337       DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0. 
    335           DO ji = 2, jpim1 
     338          DO ji = 1, jpi 
    336339!i     DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0. 
    337340!i        DO ji = 2, jpim1 
     
    354357  
    355358       !  Readjust moments remaining in the box.  
    356        DO jj = 2, jpjm1 
    357           DO ji = 2, jpim1 
     359       DO jj = 2, jpj 
     360          DO ji = 1, jpi 
    358361             zbt  =         zbet(ji,jj-1) 
    359362             zbt1 = ( 1.0 - zbet(ji,jj-1) ) 
     
    370373       !   Put the temporary moments into appropriate neighboring boxes.     
    371374       DO jj = 2, jpjm1                    !   Flux from j to j+1 IF v GT 0. 
    372           DO ji = 2, jpim1 
     375          DO ji = 1, jpi 
    373376             zbt  =         zbet(ji,jj-1) 
    374377             zbt1 = ( 1.0 - zbet(ji,jj-1) ) 
     
    395398 
    396399       DO jj = 2, jpjm1                   !  Flux from j+1 to j IF v LT 0. 
    397           DO ji = 2, jpim1 
     400          DO ji = 1, jpi 
    398401             zbt  =         zbet(ji,jj) 
    399402             zbt1 = ( 1.0 - zbet(ji,jj) ) 
  • trunk/NEMO/LIM_SRC_3/limdyn.F90

    r867 r868  
    3333   PUBLIC lim_dyn  ! routine called by ice_step 
    3434 
     35   !! * Substitutions 
     36#  include "vectopt_loop_substitute.h90" 
     37 
    3538   !! * Module variables 
    3639   REAL(wp)  ::  rone    = 1.e0   ! constant value 
     
    172175            zsang  = SIGN(1.e0, gphif(1,jj-1) ) * sangvg 
    173176 
    174             DO ji = 2, jpim1 
     177            DO ji = fs_2, fs_jpim1 
    175178               ! computation of wind stress over ocean in X and Y direction 
    176179#if defined key_coupled && defined key_lim_cp1 
     
    216219         ! computation of friction velocity 
    217220         DO jj = 2, jpjm1 
    218             DO ji = 2, jpim1 
     221            DO ji = fs_2, fs_jpim1 
    219222 
    220223               zu_ice   = u_ice(ji,jj) - u_io(ji,jj) 
     
    245248               ! virer ca (key_lim_cp1) 
    246249          DO jj = 2, jpjm1 
    247              DO ji = 2, jpim1 
     250             DO ji = fs_2, fs_jpim1 
    248251#if defined key_coupled && defined key_lim_cp1 
    249252                tio_u(ji,jj) = - (  gtaux(ji  ,jj  ) + gtaux(ji-1,jj  )       & 
  • trunk/NEMO/LIM_SRC_3/limhdf.F90

    r834 r868  
    147147         END DO 
    148148 
     149         ! lateral boundary condition on zrlx 
     150         CALL lbc_lnk( zrlx, 'T', 1. ) 
     151 
    149152         ! convergence test 
    150153         zconv = 0.e0 
    151154         DO jj = 2, jpjm1 
    152             DO ji = 2, jpim1 
     155            DO ji = fs_2, fs_jpim1 
    153156               zconv = MAX( zconv, ABS( zrlx(ji,jj) - ptab(ji,jj) )  ) 
    154157            END DO 
     
    156159         IF( lk_mpp )   CALL mpp_max( zconv )   ! max over the global domain 
    157160 
    158          DO jj = 2, jpjm1 
    159             DO ji = 2 , jpim1 
     161         DO jj = 1, jpj 
     162            DO ji = 1 , jpi 
    160163               ptab(ji,jj) = zrlx(ji,jj) 
    161164            END DO 
    162165         END DO 
    163166 
    164          ! lateral boundary condition on ptab 
    165          CALL lbc_lnk( ptab, 'T', 1. ) 
    166167         !                                         !========================== 
    167168      END DO                                       ! end of sub-time step loop 
    168169      !                                            !========================== 
    169  
    170       ptab(:,:) = ptab(:,:) 
    171170 
    172171      IF(ln_ctl)   THEN 
  • trunk/NEMO/LIM_SRC_3/limitd_me.F90

    r867 r868  
    977977      IF ( raftswi .EQ. 1 ) THEN 
    978978 
    979       DO jl = 1, jpl 
    980          DO jj = 1, jpj 
    981             DO ji = 1, jpi 
    982                IF ( aridge(ji,jj,jl) + araft(ji,jj,jl) - athorn(ji,jj,jl) .GT. & 
    983                epsi11 ) THEN 
    984                   WRITE(numout,*) ' ALERTE 96 : wrong participation function ... ' 
    985                   WRITE(numout,*) ' ji, jj, jl : ', ji, jj, jl 
    986                   WRITE(numout,*) ' lat, lon   : ', gphit(ji,jj), glamt(ji,jj) 
    987                   WRITE(numout,*) ' aridge     : ', aridge(ji,jj,1:jpl) 
    988                   WRITE(numout,*) ' araft      : ', araft(ji,jj,1:jpl) 
    989                   WRITE(numout,*) ' athorn     : ', athorn(ji,jj,1:jpl) 
    990                ENDIF 
     979      IF( MAXVAL(aridge + araft - athorn(:,:,1:jpl)) .GT. epsi11 ) THEN 
     980         DO jl = 1, jpl 
     981            DO jj = 1, jpj 
     982               DO ji = 1, jpi 
     983                  IF ( aridge(ji,jj,jl) + araft(ji,jj,jl) - athorn(ji,jj,jl) .GT. & 
     984                  epsi11 ) THEN 
     985                     WRITE(numout,*) ' ALERTE 96 : wrong participation function ... ' 
     986                     WRITE(numout,*) ' ji, jj, jl : ', ji, jj, jl 
     987                     WRITE(numout,*) ' lat, lon   : ', gphit(ji,jj), glamt(ji,jj) 
     988                     WRITE(numout,*) ' aridge     : ', aridge(ji,jj,1:jpl) 
     989                     WRITE(numout,*) ' araft      : ', araft(ji,jj,1:jpl) 
     990                     WRITE(numout,*) ' athorn     : ', athorn(ji,jj,1:jpl) 
     991                  ENDIF 
     992               END DO 
    991993            END DO 
    992994         END DO 
    993       END DO 
     995      ENDIF 
    994996 
    995997      ENDIF 
     
    12381240               vsnon_init(ji,jj,jl) = v_s(ji,jj,jl) 
    12391241 
    1240                esnon_init(ji,jj,jl) = e_s(ji,jj,1,jl) 
    12411242               smv_i_init(ji,jj,jl) = smv_i(ji,jj,jl) 
    12421243               oa_i_init (ji,jj,jl) = oa_i(ji,jj,jl) 
     
    12441245         END DO ! jj 
    12451246      END DO !jl 
     1247 
     1248      esnon_init(:,:,:) = e_s(:,:,1,:) 
    12461249             
    12471250      DO jl = 1, jpl   
     
    12831286         large_afrft = .false. 
    12841287 
     1288!CDIR NODEP 
    12851289         DO ij = 1, icells 
    12861290            ji = indxi(ij) 
     
    14261430      !-------------------------------------------------------------------- 
    14271431         DO jk = 1, nlay_i 
     1432!CDIR NODEP 
    14281433            DO ij = 1, icells 
    14291434            ji = indxi(ij) 
     
    14681473         IF ( con_i ) THEN 
    14691474            DO jk = 1, nlay_i 
     1475!CDIR NODEP 
    14701476               DO ij = 1, icells 
    14711477                  ji = indxi(ij) 
     
    14781484 
    14791485         IF (large_afrac) THEN  ! there is a bug 
     1486!CDIR NODEP 
    14801487            DO ij = 1, icells 
    14811488               ji = indxi(ij) 
     
    14901497         ENDIF                  ! large_afrac 
    14911498         IF (large_afrft) THEN  ! there is a bug 
     1499!CDIR NODEP 
    14921500            DO ij = 1, icells 
    14931501               ji = indxi(ij) 
     
    15081516         DO jl2  = ice_cat_bounds(1,1), ice_cat_bounds(1,2)  
    15091517         ! over categories to which ridged ice is transferred 
     1518!CDIR NODEP 
    15101519            DO ij = 1, icells 
    15111520               ji = indxi(ij) 
     
    15421551            ! Transfer ice energy to category jl2 by ridging 
    15431552            DO jk = 1, nlay_i 
     1553!CDIR NODEP 
    15441554               DO ij = 1, icells 
    15451555                  ji = indxi(ij) 
     
    15551565         DO jl2  = ice_cat_bounds(1,1), ice_cat_bounds(1,2)  
    15561566 
     1567!CDIR NODEP 
    15571568            DO ij = 1, icells 
    15581569               ji = indxi(ij) 
     
    15791590            ! Transfer rafted ice energy to category jl2  
    15801591            DO jk = 1, nlay_i 
     1592!CDIR NODEP 
    15811593               DO ij = 1, icells 
    15821594                  ji = indxi(ij) 
     
    17291741           jl,     & ! ice category index 
    17301742           jk,     & ! ice layer index 
    1731            icells, & ! number of cells with ice to zap 
    1732            ij        ! combined i/j horizontal index 
    1733  
    1734       INTEGER, DIMENSION(1:(jpi+1)*(jpj+1)) :: & 
    1735            indxi,  & ! compressed indices for i/j directions 
    1736            indxj 
     1743!           ij,     &   ! combined i/j horizontal index 
     1744           icells      ! number of cells with ice to zap 
     1745 
     1746!      INTEGER, DIMENSION(1:(jpi+1)*(jpj+1)) :: & 
     1747!           indxi,  & ! compressed indices for i/j directions 
     1748!           indxj 
     1749 
     1750      INTEGER, DIMENSION(jpi,jpj) :: zmask 
     1751 
    17371752 
    17381753      REAL(wp) :: & 
     
    17451760      ! Abort model in case of negative area. 
    17461761      !----------------------------------------------------------------- 
    1747  
    1748          icells = 0 
    1749          DO jj = 1, jpj 
     1762         IF( MAXVAL(a_i(:,:,jl)) .LT. -epsi11 ) THEN 
     1763            DO jj = 1, jpj 
     1764               DO ji = 1, jpi 
     1765                  IF ( a_i(ji,jj,jl) .LT. -epsi11 ) THEN 
     1766                     WRITE (numout,*) ' ALERTE 98 '  
     1767                     WRITE (numout,*) ' Negative ice area: ji, jj, jl: ', ji, jj,jl 
     1768                     WRITE (numout,*) ' a_i    ', a_i(ji,jj,jl) 
     1769                  ENDIF 
     1770               END DO 
     1771            END DO  
     1772         ENDIF 
     1773  
     1774       icells = 0 
     1775       zmask = 0.e0 
     1776       DO jj = 1, jpj 
    17501777         DO ji = 1, jpi 
    1751             IF ( a_i(ji,jj,jl) .LT. -1.0e-11 ) THEN  
    1752                WRITE (numout,*) ' ALERTE 98 ' 
    1753                WRITE (numout,*) ' Negative ice area: ji, jj, jl: ', ji, jj,jl  
    1754                WRITE (numout,*) ' a_i    ', a_i(ji,jj,jl) 
    1755             ELSEIF ( ( a_i(ji,jj,jl) .GE. -epsi11 .AND. a_i(ji,jj,jl) .LT. 0.0)       & 
     1778            IF ( ( a_i(ji,jj,jl) .GE. -epsi11 .AND. a_i(ji,jj,jl) .LT. 0.0)       & 
    17561779                                         .OR.                                         & 
    17571780                     ( a_i(ji,jj,jl) .GT. 0.0     .AND. a_i(ji,jj,jl) .LE. 1.0e-11 )  & 
     
    17611784                                         .OR.                                         & 
    17621785                     ( v_i(ji,jj,jl) .GT. 0.0     .AND. v_i(ji,jj,jl) .LT. 1.e-12 ) ) THEN 
    1763                icells = icells + 1 
    1764                indxi(icells) = ji 
    1765                indxj(icells) = jj 
     1786                zmask(ji,jj) = 1 
    17661787            ENDIF 
    17671788         END DO 
    17681789         END DO 
    1769          WRITE(numout,*) icells, ' cells of ice zapped in the ocean ' 
     1790         WRITE(numout,*) SUM(zmask), ' cells of ice zapped in the ocean ' 
    17701791 
    17711792      !----------------------------------------------------------------- 
     
    17741795 
    17751796         DO jk = 1, nlay_i 
    1776             DO ij = 1, icells 
    1777                ji = indxi(ij) 
    1778                jj = indxj(ij) 
     1797            DO jj = 1 , jpj 
     1798               DO ji = 1 , jpi 
    17791799 
    17801800               xtmp = e_i(ji,jj,jk,jl) / area(ji,jj) / rdt_ice 
    17811801               xtmp = xtmp * unit_fac 
    17821802!              fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 
    1783                e_i(ji,jj,jk,jl) = 0.0 
    1784  
    1785             END DO           ! ij 
     1803               e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * ( 1 - zmask(ji,jj) ) 
     1804               END DO           ! ji 
     1805            END DO           ! jj 
    17861806         END DO           ! jk 
    17871807 
    1788          DO ij = 1, icells 
    1789             ji = indxi(ij) 
    1790             jj = indxj(ij) 
     1808         DO jj = 1 , jpj 
     1809            DO ji = 1 , jpi 
    17911810 
    17921811      !----------------------------------------------------------------- 
     
    18031822!           fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 
    18041823 
    1805             t_s(ji,jj,1,jl) = rtt 
     1824            xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) / rdt_ice !RB   ??????? 
     1825 
     1826            t_s(ji,jj,1,jl) = rtt * zmask(ji,jj) + t_s(ji,jj,1,jl) * ( 1 - zmask(ji,jj) ) 
    18061827 
    18071828      !----------------------------------------------------------------- 
     
    18221843!           fsalt_hist(i,j) = fsalt_hist(i,j) + xtmp 
    18231844 
    1824             ato_i(ji,jj)   = ato_i(ji,jj) + a_i(ji,jj,jl) 
    1825             a_i(ji,jj,jl)  = 0.0 
    1826             v_i(ji,jj,jl)  = 0.0 
    1827             v_s(ji,jj,jl)  = 0.0 
    1828             t_su(ji,jj,jl) = t_bo(ji,jj) 
    1829             oa_i(ji,jj,jl)  = 0.0 
    1830             smv_i(ji,jj,jl) = 0.0 
    1831  
    1832          END DO                 ! ij 
     1845            ato_i(ji,jj)   = a_i(ji,jj,jl)  * zmask(ji,jj) + ato_i(ji,jj) 
     1846            a_i(ji,jj,jl)  = a_i(ji,jj,jl) * ( 1 - zmask(ji,jj) ) 
     1847            v_i(ji,jj,jl)  = v_i(ji,jj,jl) * ( 1 - zmask(ji,jj) ) 
     1848            v_s(ji,jj,jl)  = v_s(ji,jj,jl) * ( 1 - zmask(ji,jj) ) 
     1849            t_su(ji,jj,jl) = t_su(ji,jj,jl) * (1 -zmask(ji,jj) ) + t_bo(ji,jj) * zmask(ji,jj) 
     1850            oa_i(ji,jj,jl) = oa_i(ji,jj,jl) * ( 1 - zmask(ji,jj) ) 
     1851            smv_i(ji,jj,jl) = smv_i(ji,jj,jl) * ( 1 - zmask(ji,jj) ) 
     1852 
     1853            END DO                 ! ji 
     1854         END DO                 ! jj 
    18331855 
    18341856      END DO                 ! jl  
  • trunk/NEMO/LIM_SRC_3/limitd_th.F90

    r867 r868  
    985985 
    986986         DO jk = 1, nlay_i 
     987!CDIR NODEP 
    987988            DO ji = 1, nbrem 
    988989               zji = nind_i(ji) 
  • trunk/NEMO/LIM_SRC_3/limrhg.F90

    r866 r868  
    3131   PUBLIC lim_rhg  ! routine called by lim_dyn 
    3232 
     33   !! * Substitutions 
     34#  include "vectopt_loop_substitute.h90" 
     35 
    3336   !! * Module variables 
    3437   REAL(wp)  ::           &  ! constant values 
     
    111114 
    112115      INTEGER  :: & 
    113          iter, jter                    !: temporary integers 
     116         jter                          !: temporary integers 
    114117 
    115118      CHARACTER (len=50) ::   charout 
     
    182185! 
    183186      ! Put every vector to 0 
    184       zpresh(:,:)  = 0.0 ; zpreshc(:,:) = 0.0 ; zfrld1(:,:)  = 0.0 
    185       zmass1(:,:)  = 0.0 ; zcorl1(:,:)  = 0.0 ; zcorl2(:,:)  = 0.0 
    186       za1ct(:,:)   = 0.0 ; za2ct(:,:)   = 0.0  
    187       zc1(:,:)     = 0.0 ; zusw(:,:)    = 0.0 
    188       u_oce1(:,:)  = 0.0 ; v_oce1(:,:)  = 0.0 ; u_oce2(:,:)  = 0.0 
    189       v_oce2(:,:)  = 0.0 ; u_ice2(:,:)  = 0.0 ; v_ice1(:,:)  = 0.0 
    190       zf1(:,:)     = 0.0 ; zf2(:,:) = 0.0 
     187      zpresh(:,:) = 0.0 ; zc1(:,:) = 0.0 
     188      zpreshc(:,:) = 0.0 
     189      u_ice2(:,:)  = 0.0 ; v_ice1(:,:)  = 0.0 
    191190      zdd(:,:)     = 0.0 ; zdt(:,:)     = 0.0 ; zds(:,:)     = 0.0 
    192       deltat(:,:)  = 0.0 ; deltac(:,:)  = 0.0  
    193       zpresh(:,:)  = 0.0  
    194191 
    195192      ! Ice strength on T-points 
     
    197194 
    198195      ! Ice mass and temp variables 
    199       DO jj = k_j1 , k_jpj-1 
     196!CDIR NOVERRCHK 
     197      DO jj = k_j1 , k_jpj 
     198!CDIR NOVERRCHK 
    200199         DO ji = 1 , jpi 
    201200            zc1(ji,jj)    = tms(ji,jj) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 
     
    207206      END DO 
    208207 
    209       CALL lbc_lnk( zc1(:,:),    'T',  1. ) 
    210       CALL lbc_lnk( zpresh(:,:), 'T',  1. ) 
    211  
    212       CALL lbc_lnk( tmi(:,:), 'T',  1. ) 
    213  
    214208      ! Ice strength on grid cell corners (zpreshc) 
    215209      ! needed for calculation of shear stress  
     210!CDIR NOVERRCHK 
    216211      DO jj = k_j1+1, k_jpj-1 
    217          DO ji = 2, jpim1 
     212!CDIR NOVERRCHK 
     213         DO ji = 2, jpim1 !RB caution no fs_ (ji+1,jj+1) 
    218214             zstms          =  tms(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + & 
    219215                &              tms(ji,jj+1)   * wght(ji+1,jj+1,1,2) + & 
     
    249245          
    250246      DO jj = k_j1+1, k_jpj-1 
    251          DO ji = 2, jpim1 
     247         DO ji = fs_2, fs_jpim1 
    252248 
    253249            zt11 = tms(ji,jj)*e1t(ji,jj) 
     
    276272 
    277273            ! Ocean has no slip boundary condition 
    278 ! GG bug 
    279 !           v_oce1(ji,jj)  = 0.5*( (v_io(ji,jj)+v_io(ji,jj-1))*e1t(ji+1,jj)    & 
    280 !               &                 +(v_io(ji+1,jj)+v_io(ji+1,jj-1))*e1t(ji,jj)) & 
    281 !               &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj)   
    282274            v_oce1(ji,jj)  = 0.5*( (v_io(ji,jj)+v_io(ji,jj-1))*e1t(ji,jj)    & 
    283275                &                 +(v_io(ji+1,jj)+v_io(ji+1,jj-1))*e1t(ji+1,jj)) & 
    284276                &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj)   
    285277 
    286 ! GG bug 
    287 !           u_oce2(ji,jj)  = 0.5*((u_io(ji,jj)+u_io(ji-1,jj))*e2t(ji,jj+1)     & 
    288 !               &                 +(u_io(ji,jj+1)+u_io(ji-1,jj+1))*e2t(ji,jj)) & 
    289 !               &                / (e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 
    290278            u_oce2(ji,jj)  = 0.5*((u_io(ji,jj)+u_io(ji-1,jj))*e2t(ji,jj)     & 
    291279                &                 +(u_io(ji,jj+1)+u_io(ji-1,jj+1))*e2t(ji,jj+1)) & 
     
    330318      zs12(:,:) = stress12_i(:,:) 
    331319 
    332       v_ice1(:,:) = 0.0 
    333       u_ice2(:,:) = 0.0 
    334  
    335       zdd(:,:) = 0.0 
    336       zdt(:,:) = 0.0 
    337       zds(:,:) = 0.0 
    338       deltat(:,:) = 0.0 
    339320                                                      !----------------------! 
    340       DO iter = 1 , nevp                              !    loop over iter    ! 
     321      DO jter = 1 , nevp                              !    loop over jter    ! 
    341322                                                      !----------------------!         
    342323         DO jj = k_j1, k_jpj-1 
     
    346327 
    347328         DO jj = k_j1+1, k_jpj-1 
    348             DO ji = 2, jpim1 
     329            DO ji = fs_2, fs_jpim1 
    349330 
    350331         !   
     
    407388           END DO 
    408389 
    409            CALL lbc_lnk( zdd(:,:), 'T', 1. ) 
    410            CALL lbc_lnk( zdt(:,:), 'T', 1. ) 
    411            CALL lbc_lnk( zds(:,:), 'F', 1. ) 
    412  
     390!CDIR NOVERRCHK 
    413391           DO jj = k_j1+1, k_jpj-1 
    414               DO ji = 2, jpim1 
     392!CDIR NOVERRCHK 
     393              DO ji = fs_2, fs_jpim1 
    415394 
    416395                 !- Calculate Delta at centre of grid cells 
     
    446425           CALL lbc_lnk( zs2(:,:), 'T', 1. ) 
    447426 
     427!CDIR NOVERRCHK 
    448428           DO jj = k_j1+1, k_jpj-1 
    449               DO ji = 2, jpim1 
     429!CDIR NOVERRCHK 
     430              DO ji = fs_2, fs_jpim1 
    450431                 !- Calculate Delta on corners 
    451432                 zddc  =      ( ( v_ice1(ji,jj+1)/e1u(ji,jj+1)                & 
     
    482463           ! Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) 
    483464           DO jj = k_j1+1, k_jpj-1 
    484               DO ji = 2, jpim1 
     465              DO ji = fs_2, fs_jpim1 
    485466                !- contribution of zs1, zs2 and zs12 to zf1 
    486467                zf1(ji,jj) = 0.5*( (zs1(ji+1,jj)-zs1(ji,jj))*e2u(ji,jj) & 
     
    501482         ! Both the Coriolis term and the ice-ocean drag are solved semi-implicitly. 
    502483         ! 
    503            IF (MOD(iter,2).eq.0) THEN  
    504  
     484           IF (MOD(jter,2).eq.0) THEN  
     485 
     486!CDIR NOVERRCHK 
    505487              DO jj = k_j1+1, k_jpj-1 
    506                  DO ji = 2, jpim1 
     488!CDIR NOVERRCHK 
     489                 DO ji = fs_2, fs_jpim1 
    507490                    zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass1(ji,jj))))*tmu(ji,jj) 
    508491                    zsang        = SIGN ( 1.0 , fcor(ji,jj) ) * sangvg 
     
    510493 
    511494                    ! SB modif because ocean has no slip boundary condition 
    512 ! GG bug 
    513 !                   zv_ice1       = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj)     & 
    514 !                     &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj))   & 
    515 !                     &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj) 
    516495                    zv_ice1       = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji,jj)         & 
    517496                      &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji+1,jj))   & 
     
    530509              CALL lbc_lnk( u_ice(:,:), 'U', -1. ) 
    531510 
     511!CDIR NOVERRCHK 
    532512              DO jj = k_j1+1, k_jpj-1 
    533                  DO ji = 2, jpim1 
    534  
    535                     zmask        = (1.0-max(rzero,sign(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
    536                     zsang        = sign(1.0,fcor(ji,jj))*sangvg 
     513!CDIR NOVERRCHK 
     514                 DO ji = fs_2, fs_jpim1 
     515 
     516                    zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
     517                    zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    537518                    z0           = zmass2(ji,jj)/dtevp 
    538519                    ! SB modif because ocean has no slip boundary condition 
    539 ! GG bug 
    540 !                   zu_ice2       = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1)     & 
    541 !               &                 + (u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj))   & 
    542 !               &               /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 
    543520                    zu_ice2       = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj)     & 
    544521                &                 + (u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj+1))   & 
     
    558535 
    559536         ELSE  
     537!CDIR NOVERRCHK 
    560538              DO jj = k_j1+1, k_jpj-1 
    561                  DO ji = 2, jpim1 
    562                     zmask        = (1.0-max(rzero,sign(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
    563                     zsang        = sign(1.0,fcor(ji,jj))*sangvg 
     539!CDIR NOVERRCHK 
     540                 DO ji = fs_2, fs_jpim1 
     541                    zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
     542                    zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    564543                    z0           = zmass2(ji,jj)/dtevp 
    565544                    ! SB modif because ocean has no slip boundary condition 
    566 ! GG Bug 
    567 !                   zu_ice2       = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1)      & 
    568 !                      &                 +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj))   & 
    569 !                      &               /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj)    
    570545                    zu_ice2       = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj)      & 
    571546                       &                 +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj+1))   & 
     
    585560              CALL lbc_lnk( v_ice(:,:), 'V', -1. ) 
    586561 
     562!CDIR NOVERRCHK 
    587563              DO jj = k_j1+1, k_jpj-1 
    588                  DO ji = 2, jpim1 
     564!CDIR NOVERRCHK 
     565                 DO ji = fs_2, fs_jpim1 
    589566                    zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass1(ji,jj))))*tmu(ji,jj) 
    590567                    zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
     
    613590      ENDIF  
    614591 
    615       !---  Convergence test. 
    616       DO jj = k_j1+1 , k_jpj-1 
    617          zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ) ,           & 
    618                        ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 
    619       END DO 
    620       zresm = MAXVAL( zresr( 1:jpi , k_j1+1:k_jpj-1 ) ) 
     592      IF(ln_ctl) THEN 
     593         !---  Convergence test. 
     594         DO jj = k_j1+1 , k_jpj-1 
     595            zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ) ,           & 
     596                          ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 
     597         END DO 
     598         zresm = MAXVAL( zresr( 1:jpi , k_j1+1:k_jpj-1 ) ) 
     599         IF( lk_mpp )   CALL mpp_max( zresm )   ! max over the global domain 
     600      ENDIF 
    621601 
    622602      !                                                   ! ==================== ! 
    623       END DO                                              !  end loop over iter  ! 
     603      END DO                                              !  end loop over jter  ! 
    624604      !                                                   ! ==================== ! 
    625605 
     
    632612      ! ocean velocity,  
    633613      ! This prevents high velocity when ice is thin 
     614!CDIR NOVERRCHK 
    634615      DO jj = k_j1+1, k_jpj-1 
    635          DO ji = 2, jpim1 
     616!CDIR NOVERRCHK 
     617         DO ji = fs_2, fs_jpim1 
    636618            zindb  = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - 1.0e-6 ) )  
    637619            zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06 ) 
     
    643625      END DO 
    644626 
     627      DO jj = k_j1+1, k_jpj-1  
     628         DO ji = fs_2, fs_jpim1 
     629            zindb  = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - 1.0e-6 ) )  
     630            zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06 ) 
     631            IF ( zdummy .LE. 5.0e-2 ) THEN 
     632                v_ice1(ji,jj)  = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj)   & 
     633                   &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj)) & 
     634                   &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj) 
     635 
     636                u_ice2(ji,jj)  = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1)   & 
     637                   &                 +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj)) & 
     638                   &               /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 
     639             ENDIF ! zdummy 
     640         END DO 
     641      END DO 
     642 
     643      CALL lbc_lnk( u_ice2(:,:), 'U', -1. )  
     644      CALL lbc_lnk( v_ice1(:,:), 'V', -1. ) 
     645 
    645646      ! Recompute delta, shear and div, inputs for mechanical redistribution  
     647!CDIR NOVERRCHK 
    646648      DO jj = k_j1+1, k_jpj-1 
    647          DO ji = 2, jpim1 
     649!CDIR NOVERRCHK 
     650         DO ji = fs_2, fs_jpim1 
    648651            !- zdd(:,:), zdt(:,:): divergence and tension at centre  
    649652            !- zds(:,:): shear on northeast corner of grid cells 
     
    680683               &        * tmi(ji+1,jj) * tmi(ji+1,jj+1) 
    681684 
    682              !- Calculate Delta at centre of grid cells 
    683              v_ice1(ji,jj)  = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj)   & 
    684                 &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj)) & 
    685                 &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj)  
    686  
    687              u_ice2(ji,jj)  = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1)   & 
    688                 &                 +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj)) & 
    689                 &               /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 
    690  
    691685             zdst       = (  e2u( ji  , jj   ) * v_ice1(ji,jj)          & 
    692686               &          - e2u( ji-1, jj   ) * v_ice1(ji-1,jj)         & 
     
    710704! 
    711705      ! * Invariants of the stress tensor are required for limitd_me 
    712       ! * Store the stress tensor for the next time step 
    713706      ! accelerates convergence and improves stability 
    714707      DO jj = k_j1+1, k_jpj-1 
    715          DO ji = 2, jpim1 
    716             divu_i(ji,jj)  = zdd(ji,jj) 
    717             delta_i(ji,jj) = deltat (ji,jj) 
    718             shear_i(ji,jj) = zds (ji,jj) 
    719             stress1_i(ji,jj)  = zs1(ji,jj) 
    720             stress2_i(ji,jj)  = zs2(ji,jj) 
    721             stress12_i(ji,jj) = zs12(ji,jj) 
     708         DO ji = fs_2, fs_jpim1 
     709            divu_i (ji,jj) = zdd   (ji,jj) 
     710            delta_i(ji,jj) = deltat(ji,jj) 
     711            shear_i(ji,jj) = zds   (ji,jj) 
    722712         END DO 
    723713      END DO 
    724714 
    725715      ! Lateral boundary condition 
    726       CALL lbc_lnk( divu_i(:,:) , 'T', 1. ) 
     716      CALL lbc_lnk( divu_i (:,:), 'T', 1. ) 
    727717      CALL lbc_lnk( delta_i(:,:), 'T', 1. ) 
    728718      CALL lbc_lnk( shear_i(:,:), 'F', 1. ) 
    729       CALL lbc_lnk( stress1_i(:,:), 'T', 1. ) 
    730       CALL lbc_lnk( stress2_i(:,:), 'T', 1. ) 
    731       CALL lbc_lnk( stress12_i(:,:), 'F', 1. ) 
     719 
     720      ! * Store the stress tensor for the next time step 
     721      stress1_i (:,:) = zs1 (:,:) 
     722      stress2_i (:,:) = zs2 (:,:) 
     723      stress12_i(:,:) = zs12(:,:) 
    732724 
    733725! 
     
    738730      ! print the residual for convergence 
    739731      IF(ln_ctl) THEN 
    740          WRITE(charout,FMT="('lim_rhg  : res =',D23.16, ' iter =',I4)") zresm, iter 
     732         WRITE(charout,FMT="('lim_rhg  : res =',D23.16, ' iter =',I4)") zresm, jter 
    741733         CALL prt_ctl_info(charout) 
    742734         CALL prt_ctl(tab2d_1=u_ice, clinfo1=' lim_rhg  : u_ice :', tab2d_2=v_ice, clinfo2=' v_ice :') 
  • trunk/NEMO/LIM_SRC_3/limtrp.F90

    r867 r868  
    127127         zvbord = 1.0 + ( 1.0 - bound ) 
    128128         DO jj = 1, jpjm1 
    129             DO ji = 1, jpim1 
     129            DO ji = 1, fs_jpim1 
    130130               zui_u(ji,jj) = u_ice(ji,jj) 
    131131               zvi_v(ji,jj) = v_ice(ji,jj) 
  • trunk/NEMO/LIM_SRC_3/limvar.F90

    r834 r868  
    236236      ! Ice thickness, snow thickness, ice salinity, ice age 
    237237      !------------------------------------------------------- 
     238!CDIR NOVERRCHK 
    238239      DO jl = 1, jpl 
     240!CDIR NOVERRCHK 
    239241         DO jj = 1, jpj 
     242!CDIR NOVERRCHK 
    240243            DO ji = 1, jpi 
    241244               zindb          = 1.0-MAX(0.0,SIGN(1.0,- a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     
    249252      IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )THEN 
    250253 
     254!CDIR NOVERRCHK 
    251255      DO jl = 1, jpl 
     256!CDIR NOVERRCHK 
    252257         DO jj = 1, jpj 
     258!CDIR NOVERRCHK 
    253259            DO ji = 1, jpi 
    254260               zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     
    266272      ! Ice temperatures 
    267273      !------------------- 
     274!CDIR NOVERRCHK 
    268275      DO jl = 1, jpl 
     276!CDIR NOVERRCHK 
    269277        DO jk = 1, nlay_i 
     278!CDIR NOVERRCHK 
    270279          DO jj = 1, jpj 
     280!CDIR NOVERRCHK 
    271281            DO ji = 1, jpi 
    272282              !Energy of melting q(S,T) [J.m-3] 
     
    298308      zfac1 = 1. / ( rhosn * cpic ) 
    299309      zfac2 = lfus / cpic   
     310!CDIR NOVERRCHK 
    300311      DO jl = 1, jpl 
     312!CDIR NOVERRCHK 
    301313        DO jk = 1, nlay_s 
     314!CDIR NOVERRCHK 
    302315          DO jj = 1, jpj 
     316!CDIR NOVERRCHK 
    303317            DO ji = 1, jpi 
    304318              !Energy of melting q(S,T) [J.m-3] 
     
    321335      !------------------- 
    322336      tm_i(:,:) = 0.0 
     337!CDIR NOVERRCHK 
    323338      DO jl = 1, jpl 
     339!CDIR NOVERRCHK 
    324340         DO jk = 1, nlay_i 
     341!CDIR NOVERRCHK 
    325342            DO jj = 1, jpj 
     343!CDIR NOVERRCHK 
    326344               DO ji = 1, jpi 
    327345                  zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) 
     
    462480         zalpha(:,:,:) = 0.0 
    463481 
     482!CDIR NOVERRCHK 
    464483         DO jl = 1, jpl 
     484!CDIR NOVERRCHK 
    465485            DO jj = 1, jpj 
     486!CDIR NOVERRCHK 
    466487               DO ji = 1, jpi 
    467488                  ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 
     
    511532         sm_i(:,:,:) = 2.30 
    512533 
     534!CDIR NOVERRCHK 
    513535         DO jl = 1, jpl 
     536!CDIR NOVERRCHK 
    514537            DO jk = 1, nlay_i 
     538!CDIR NOVERRCHK 
    515539               DO jj = 1, jpj 
     540!CDIR NOVERRCHK 
    516541                  DO ji = 1, jpi 
    517542                     zargtemp  = ( jk - 0.5 ) / nlay_i 
     
    567592       zeps = 1.0e-13 
    568593       bv_i(:,:) = 0.0 
     594!CDIR NOVERRCHK 
    569595       DO jl = 1, jpl 
     596!CDIR NOVERRCHK 
    570597          DO jk = 1, nlay_i 
     598!CDIR NOVERRCHK 
    571599             DO jj = 1, jpj 
     600!CDIR NOVERRCHK 
    572601                DO ji = 1, jpi 
    573602                   zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     
    639668         ! Slope of the linear profile zs_zero 
    640669         !------------------------------------- 
     670!CDIR NOVERRCHK 
    641671         DO ji = kideb, kiut  
    642672               z_slope_s(ji) = 2.0 * sm_i_b(ji) / MAX( 0.01      & 
     
    650680         dummy_fac2 = 1. / nlay_i 
    651681 
     682!CDIR NOVERRCHK 
    652683         DO jk = 1, nlay_i 
     684!CDIR NOVERRCHK 
    653685            DO ji = kideb, kiut 
    654686               zji    =  MOD( npb(ji) - 1, jpi ) + 1 
     
    688720         sm_i_b(:) = 2.30 
    689721 
     722!CDIR NOVERRCHK 
    690723         DO ji = kideb, kiut 
     724!CDIR NOVERRCHK 
    691725            DO jk = 1, nlay_i 
    692726               zargtemp  = ( jk - 0.5 ) / nlay_i 
Note: See TracChangeset for help on using the changeset viewer.