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 4584 for branches – NEMO

Changeset 4584 for branches


Ignore:
Timestamp:
2014-03-26T10:48:29+01:00 (10 years ago)
Author:
pabouttier
Message:

Fix wrong loop in lbcnfd_tam, see Ticket #1278. Add calls to mpp_sum in adjoint tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_v3_4_STABLE_2012/NEMOGCM/NEMO/OPATAM_SRC/LBC/lbcnfd_tam.F90

    r3611 r4584  
    5555      INTEGER  ::   ji, jk 
    5656      INTEGER  ::   ijt, iju, ijpj, ijpjm1 
     57      !  
     58      REAL(wp) :: ztmp 
    5759      !!---------------------------------------------------------------------- 
    5860 
     
    7375            DO ji = jpiglo, jpiglo/2+1, -1 
    7476               ijt = jpiglo-ji+2 
    75                pt3d(ijt,ijpjm1,jk) = pt3d(ijt,ijpjm1,jk) + psgn * pt3d(ji,ijpjm1,jk) 
     77               ztmp = psgn * pt3d(ji,ijpjm1,jk) 
    7678               pt3d(ji ,ijpjm1,jk) = 0.0_wp 
    77             END DO 
     79               pt3d(ijt,ijpjm1,jk) = pt3d(ijt,ijpjm1,jk) + ztmp 
     80            END DO 
     81 
    7882            DO ji = jpiglo, 2, -1 
    7983               ijt = jpiglo-ji+2 
     
    8488            DO ji = jpiglo-1, jpiglo/2, -1 
    8589               iju = jpiglo-ji+1 
    86                pt3d(iju,ijpjm1,jk) = pt3d(iju,ijpjm1,jk) + psgn * pt3d(ji,ijpjm1,jk) 
     90               ztmp = psgn * pt3d(ji,ijpjm1,jk) 
    8791               pt3d(ji ,ijpjm1,jk) = 0.0_wp 
    88             END DO 
     92               pt3d(iju,ijpjm1,jk) = pt3d(iju,ijpjm1,jk) + ztmp 
     93            END DO 
     94 
    8995            DO ji = jpiglo-1, 1, -1 
    9096               iju = jpiglo-ji+1 
     
    128134            DO ji = jpiglo, jpiglo/2+1, -1 
    129135               ijt = jpiglo-ji+1 
    130                pt3d(ijt,ijpjm1,jk) = pt3d(ijt,ijpjm1,jk) + psgn * pt3d(ji,ijpjm1,jk) 
     136               ztmp = psgn * pt3d(ji,ijpjm1,jk) 
    131137               pt3d(ji ,ijpjm1,jk) = 0.0_wp 
     138               pt3d(ijt,ijpjm1,jk) = pt3d(ijt,ijpjm1,jk) + ztmp 
    132139            END DO 
    133140            DO ji = jpiglo, 1, -1 
     
    139146            DO ji = jpiglo-1, jpiglo/2+1, -1 
    140147               iju = jpiglo-ji 
    141                pt3d(iju,ijpjm1,jk) = pt3d(iju,ijpjm1,jk) + psgn * pt3d(ji,ijpjm1,jk) 
     148               ztmp = psgn * pt3d(ji,ijpjm1,jk) 
    142149               pt3d(ji ,ijpjm1,jk) = 0.0_wp 
     150               pt3d(iju,ijpjm1,jk) = pt3d(iju,ijpjm1,jk) + ztmp 
    143151            END DO 
    144152            DO ji = jpiglo-1, 1, -1 
     
    187195      INTEGER  ::   ji, jl, ipr2dj 
    188196      INTEGER  ::   ijt, iju, ijpj, ijpjm1 
     197      ! 
     198      REAL(wp) :: ztmp 
    189199      !!---------------------------------------------------------------------- 
    190200 
     
    211221            DO ji = jpiglo, jpiglo/2+1, -1 
    212222               ijt=jpiglo-ji+2 
    213                pt2d(ijt,ijpj-1) = pt2d(ijt,ijpj-1) + psgn * pt2d(ji,ijpj-1) 
     223               ztmp = psgn * pt2d(ji,ijpj-1) 
    214224               pt2d(ji,ijpj-1) = 0.0_wp 
     225               pt2d(ijt,ijpj-1) = pt2d(ijt,ijpj-1) + ztmp 
    215226            END DO 
    216227            DO jl = ipr2dj, 0, -1 
    217228               DO ji = jpiglo, 2, -1 
    218229                  ijt=jpiglo-ji+2 
    219                   pt2d(ijt,ijpj-2-jl) = pt2d(ijt,ijpj-2-jl) + psgn * pt2d(ji,ijpj+jl) 
     230                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    220231                  pt2d(ji ,ijpj+jl  ) = 0.0_wp 
     232                  pt2d(ijt,ijpj-2-jl) = pt2d(ijt,ijpj-2-jl) + ztmp 
    221233               END DO 
    222234            END DO 
     
    224236            DO ji = jpiglo-1, jpiglo/2, -1 
    225237               iju = jpiglo-ji+1 
    226                pt2d(iju,ijpjm1) = pt2d(iju,ijpjm1) + psgn * pt2d(ji,ijpjm1) 
     238               ztmp = psgn * pt2d(ji,ijpjm1) 
    227239               pt2d(ji,ijpjm1) = 0.0_wp 
     240               pt2d(iju,ijpjm1) = pt2d(iju,ijpjm1) + ztmp 
    228241            END DO 
    229242            DO jl = ipr2dj, 0, -1 
    230243               DO ji = jpiglo-1, 1, -1 
    231244                  iju = jpiglo-ji+1 
    232                   pt2d(iju,ijpj-2-jl) = pt2d(iju,ijpj-2-jl) + psgn * pt2d(ji,ijpj+jl) 
     245                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    233246                  pt2d(ji ,ijpj+jl  ) = 0.0_wp 
     247                  pt2d(iju,ijpj-2-jl) = pt2d(iju,ijpj-2-jl) + ztmp 
    234248               END DO 
    235249            END DO 
     
    238252               DO ji = jpiglo, 2, -1 
    239253                  ijt = jpiglo-ji+2 
    240                   pt2d(ijt,ijpj-3-jl) = pt2d(ijt,ijpj-3-jl) + psgn * pt2d(ji,ijpj+jl) 
     254                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    241255                  pt2d(ji ,ijpj+jl  ) = 0.0_wp 
     256                  pt2d(ijt,ijpj-3-jl) = pt2d(ijt,ijpj-3-jl) + ztmp 
    242257               END DO 
    243258            END DO 
     
    246261               DO ji = jpiglo-1, 1, -1 
    247262                  iju = jpiglo-ji+1 
    248                   pt2d(iju,ijpj-3-jl) = pt2d(iju,ijpj-3-jl) + psgn * pt2d(ji,ijpj+jl) 
     263                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    249264                  pt2d(ji,ijpj+jl) = 0.0_wp 
     265                  pt2d(iju,ijpj-3-jl) = pt2d(iju,ijpj-3-jl) + ztmp 
    250266               END DO 
    251267            END DO 
     
    254270               DO ji = jpiglo, 3, -1 
    255271                  iju = jpiglo - ji + 3 
    256                   pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + psgn * pt2d(ji,ijpj+jl) 
     272                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    257273                  pt2d(ji,ijpj+jl) = 0.0_wp 
    258                END DO 
    259                pt2d(3,ijpj-1+jl) = pt2d(3,ijpj-1+jl) + psgn * pt2d(2,ijpj+jl) 
     274                  pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + ztmp 
     275               END DO 
     276               ztmp = psgn * pt2d(2,ijpj+jl) 
    260277               pt2d(2,ijpj+jl) = 0.0_wp 
     278               pt2d(3,ijpj-1+jl) = pt2d(3,ijpj-1+jl) + ztmp 
    261279            END DO 
    262280         CASE ( 'J' )                                     ! first ice U-V point 
     
    264282               DO ji = 3, jpiglo 
    265283                  iju = jpiglo - ji + 3 
    266                   pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + psgn * pt2d(ji,ijpj+jl) 
     284                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    267285                  pt2d(ji,ijpj+jl) = 0.0_wp 
     286                  pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + ztmp 
    268287               END DO 
    269288               pt2d(3,ijpj-1+jl) = pt2d(3,ijpj-1+jl) + psgn * pt2d(2,ijpj+jl) 
     
    277296                  pt2d(ji,ijpj+jl) = 0.0_wp 
    278297               END DO 
    279                pt2d(3,ijpj-1+jl) = pt2d(3,ijpj-1+jl) + psgn * pt2d(ji,ijpj+jl) 
    280                pt2d(3,ijpj-1+jl) = 0.0_wp 
     298               ztmp = psgn * pt2d(2,ijpj+jl) 
     299               pt2d(2,ijpj+jl) = 0.0_wp 
     300               pt2d(3,ijpj-1+jl) = pt2d(3,ijpj-1+jl) + ztmp 
    281301            END DO 
    282302         END SELECT 
     
    289309               DO ji = jpiglo, 1, -1 
    290310                  ijt = jpiglo-ji+1 
    291                   pt2d(ijt,ijpj-1-jl) = pt2d(ijt,ijpj-1-jl) + psgn * pt2d(ji,ijpj+jl) 
     311                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    292312                  pt2d(ji ,ijpj+jl  ) = 0.0_wp 
     313                  pt2d(ijt,ijpj-1-jl) = pt2d(ijt,ijpj-1-jl) + ztmp 
    293314               END DO 
    294315            END DO 
     
    297318               DO ji = jpiglo-1, 1, -1 
    298319                  iju = jpiglo-ji 
    299                   pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + psgn * pt2d(ji,ijpj+jl) 
     320                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    300321                  pt2d(ji,ijpj+jl) = 0.0_wp 
     322                  pt2d(iju,ijpj-1-jl) = pt2d(iju,ijpj-1-jl) + ztmp 
    301323               END DO 
    302324            END DO 
     
    304326            DO ji = jpiglo, jpiglo/2+1, -1 
    305327               ijt = jpiglo-ji+1 
    306                pt2d(ijt,ijpjm1) = pt2d(ijt,ijpjm1) + psgn * pt2d(ji,ijpjm1) 
     328               ztmp = psgn * pt2d(ji,ijpjm1) 
    307329               pt2d(ji ,ijpjm1) = 0.0_wp 
     330               pt2d(ijt,ijpjm1) = pt2d(ijt,ijpjm1) + ztmp 
    308331            END DO 
    309332            DO jl = ipr2dj, 0, -1 
    310333               DO ji = jpiglo, 1, -1 
    311334                  ijt = jpiglo-ji+1 
    312                   pt2d(ijt,ijpj-2-jl) = pt2d(ijt,ijpj-2-jl) + psgn * pt2d(ji,ijpj+jl) 
     335                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    313336                  pt2d(ji,ijpj+jl) = 0.0_wp 
     337                  pt2d(ijt,ijpj-2-jl) = pt2d(ijt,ijpj-2-jl) + ztmp 
    314338               END DO 
    315339            END DO 
     
    317341            DO ji = jpiglo-1, jpiglo/2+1, -1 
    318342               iju = jpiglo-ji 
    319                pt2d(iju,ijpjm1) = pt2d(iju,ijpjm1) + psgn * pt2d(ji,ijpjm1) 
     343               ztmp = psgn * pt2d(ji,ijpjm1) 
    320344               pt2d(ji ,ijpjm1) = 0.0_wp 
     345               pt2d(iju,ijpjm1) = pt2d(iju,ijpjm1) + ztmp 
    321346            END DO 
    322347            DO jl = ipr2dj, 0, -1 
    323348               DO ji = jpiglo-1, 1, -1 
    324349                  iju = jpiglo-ji 
    325                   pt2d(iju,ijpj-2-jl) = pt2d(iju,ijpj-2-jl) + psgn * pt2d(ji,ijpj+jl) 
     350                  ztmp = psgn * pt2d(ji,ijpj+jl) 
    326351                  pt2d(ji ,ijpj+jl  ) = 0.0_wp 
     352                  pt2d(iju,ijpj-2-jl) = pt2d(iju,ijpj-2-jl) + ztmp 
    327353               END DO 
    328354            END DO 
     
    415441      & prntst_adj 
    416442   USE dom_oce       , ONLY: & ! Ocean space and time domain 
    417       & e1u,                 & 
    418       & e2u,                 & 
    419       & e1v,                 & 
    420       & e2v,                 & 
    421       & e1t,                 & 
    422       & e2t,                 & 
    423 #if defined key_zco 
    424       & e3t_0,               & 
    425 #else 
    426       & e3u,                 & 
    427       & e3v,                 & 
    428 #endif 
    429443      & tmask,               & 
    430444      & umask,               & 
     
    486500 
    487501      zijpj = 4 
     502 
     503      SELECT CASE ( jpni ) 
     504      CASE ( 1 )     ;   ijpj = nlcj      ! 1 proc only  along the i-direction 
     505      CASE DEFAULT   ;   ijpj = 4         ! several proc along the i-direction 
     506      END SELECT 
    488507 
    489508      ALLOCATE( & 
     
    600619 
    601620        ! DOT_PRODUCT 
    602         zsp1 = sum( & 
    603          &                       PACK(zu_tlout(:,:,:),.TRUE.) * & 
     621        zsp1 = sum( PACK(zu_tlout(:,:,:),.TRUE.) * & 
    604622         &                       PACK( zu_adin(:,:,:),.TRUE.) ) 
    605623 
     
    616634        zt_adout(:,:,:) = zt_ad(:,:,:) 
    617635 
    618         zsp2 = sum( & 
    619          &                       PACK(zu_tlin(:,:,:),.TRUE.) * & 
     636        zsp2 = sum( PACK(zu_tlin(:,:,:),.TRUE.) * & 
    620637         &                       PACK( zu_adout(:,:,:),.TRUE.) ) 
     638 
     639        CALL mpp_sum( zsp1 ) 
     640        CALL mpp_sum( zsp2 ) 
    621641 
    622642        cl_name = 'lbc_nfd  U  3d' 
    623643        CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
    624644 
    625         zsp1 = sum( & 
    626          &                       PACK(zv_tlout(:,:,:),.TRUE.) * & 
     645        zsp1 = sum( PACK(zv_tlout(:,:,:),.TRUE.) * & 
    627646         &                       PACK( zv_adin(:,:,:),.TRUE.) ) 
    628647 
    629         zsp2 = sum( & 
    630          &                       PACK(zv_tlin(:,:,:),.TRUE.) * & 
     648        zsp2 = sum( PACK(zv_tlin(:,:,:),.TRUE.) * & 
    631649         &                       PACK( zv_adout(:,:,:),.TRUE.) ) 
     650 
     651        CALL mpp_sum( zsp1 ) 
     652        CALL mpp_sum( zsp2 ) 
    632653        cl_name = 'lbc_nfd  V  3d' 
    633654        CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
    634655 
    635         zsp1 = sum( & 
    636          &                       PACK(zt_tlout(:,:,:),.TRUE.) * & 
     656        zsp1 = sum( PACK(zt_tlout(:,:,:),.TRUE.) * & 
    637657         &                       PACK( zt_adin(:,:,:),.TRUE.) ) 
    638658 
    639         zsp2 = sum( & 
    640          &                       PACK(zt_tlin(:,:,:),.TRUE.) * & 
     659        zsp2 = sum( PACK(zt_tlin(:,:,:),.TRUE.) * & 
    641660         &                       PACK( zt_adout(:,:,:),.TRUE.) ) 
     661 
     662        CALL mpp_sum( zsp1 ) 
     663        CALL mpp_sum( zsp2 ) 
     664 
    642665      cl_name = 'lbc_nfd  T  3d' 
    643666      CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
     
    680703      & prntst_adj 
    681704   USE dom_oce       , ONLY: & ! Ocean space and time domain 
    682       & e1u,                 & 
    683       & e2u,                 & 
    684       & e1v,                 & 
    685       & e2v,                 & 
    686       & e1t,                 & 
    687       & e2t,                 & 
    688 #if defined key_zco 
    689       & e3t_0,               & 
    690 #else 
    691       & e3u,                 & 
    692       & e3v,                 & 
    693 #endif 
    694705      & tmask,               & 
    695706      & umask,               & 
     
    752763      ! Allocate memory 
    753764 
    754       zijpj = 4 
     765      SELECT CASE ( jpni ) 
     766      CASE ( 1 )     ;   ijpj = nlcj      ! 1 proc only  along the i-direction 
     767      CASE DEFAULT   ;   ijpj = 4         ! several proc along the i-direction 
     768      END SELECT 
    755769 
    756770      ALLOCATE( & 
     
    859873        END DO 
    860874 
    861         zsp1 = sum( & 
    862          &                       PACK(zu_tlout(:,:),.TRUE.) * & 
     875        zsp1 = sum( PACK(zu_tlout(:,:),.TRUE.) * & 
    863876         &                       PACK( zu_adin(:,:),.TRUE.) ) 
    864877        zu_ad(:,:) = zu_adin(:,:) 
     
    874887        zt_adout(:,:) = zt_ad(:,:) 
    875888 
    876         zsp2 = sum( & 
    877          &                       PACK(zu_tlin(:,:),.TRUE.) * & 
     889        zsp2 = sum( PACK(zu_tlin(:,:),.TRUE.) * & 
    878890         &                       PACK( zu_adout(:,:),.TRUE.) ) 
     891 
     892        CALL mpp_sum( zsp1 ) 
     893        CALL mpp_sum( zsp2 ) 
     894 
    879895        cl_name = 'lbc_nfd  U  2d' 
    880896        CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
    881897 
    882         zsp1 = sum( & 
    883          &                       PACK(zv_tlout(:,:),.TRUE.) * & 
     898        zsp1 = sum( PACK(zv_tlout(:,:),.TRUE.) * & 
    884899         &                       PACK( zv_adin(:,:),.TRUE.) ) 
    885900 
    886         zsp2 = sum( & 
    887          &                       PACK(zv_tlin(:,:),.TRUE.) * & 
     901        zsp2 = sum( PACK(zv_tlin(:,:),.TRUE.) * & 
    888902         &                       PACK( zv_adout(:,:),.TRUE.) ) 
     903         
     904        CALL mpp_sum( zsp1 ) 
     905        CALL mpp_sum( zsp2 ) 
     906 
    889907        cl_name = 'lbc_nfd  V  2d' 
    890908        CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
    891909 
    892         zsp1 = sum( & 
    893          &                       PACK(zt_tlout(:,:),.TRUE.) * & 
     910        zsp1 = sum( PACK(zt_tlout(:,:),.TRUE.) * & 
    894911         &                       PACK( zt_adin(:,:),.TRUE.) ) 
    895912 
    896         zsp2 = sum( & 
    897          &                       PACK(zt_tlin(:,:),.TRUE.) * & 
     913        zsp2 = sum( PACK(zt_tlin(:,:),.TRUE.) * & 
    898914         &                       PACK( zt_adout(:,:),.TRUE.) ) 
     915 
     916        CALL mpp_sum( zsp1 ) 
     917        CALL mpp_sum( zsp2 ) 
     918 
    899919        cl_name = 'lbc_nfd  T  2d' 
    900920        CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 ) 
Note: See TracChangeset for help on using the changeset viewer.