Ignore:
Timestamp:
Sep 14, 2012 2:35:53 PM (9 years ago)
Author:
raasch
Message:

subdomains must have identical size, i.e. grid_matching = "match" not allowed any more
parameter grid_matching removed
some obsolete variables removed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/transpose.f90

    r684 r1003  
    44! Current revisions:
    55! -----------------
    6 !
     6! indices nxa, nya, etc. replaced by nx, ny, etc.
    77!
    88! Former revisions:
     
    5454    INTEGER ::  i, j, k, l, m, ys
    5555   
    56     REAL ::  f_in(0:nxa,nys_x:nyn_xa,nzb_x:nzt_xa),                     &
    57              f_inv(nys_x:nyn_xa,nzb_x:nzt_xa,0:nxa),                    &
    58              f_out(0:nya,nxl_y:nxr_ya,nzb_y:nzt_ya),                    &
     56    REAL ::  f_in(0:nx,nys_x:nyn_x,nzb_x:nzt_x),   &
     57             f_inv(nys_x:nyn_x,nzb_x:nzt_x,0:nx),  &
     58             f_out(0:ny,nxl_y:nxr_y,nzb_y:nzt_y),  &
    5959             work(nnx*nny*nnz)
    6060
     
    6666!$OMP  PARALLEL PRIVATE ( i, j, k )
    6767!$OMP  DO
    68     DO  i = 0, nxa
    69        DO  k = nzb_x, nzt_xa
    70           DO  j = nys_x, nyn_xa
     68    DO  i = 0, nx
     69       DO  k = nzb_x, nzt_x
     70          DO  j = nys_x, nyn_x
    7171             f_inv(j,k,i) = f_in(i,j,k)
    7272          ENDDO
     
    8989!$OMP  DO
    9090    DO  l = 0, pdims(2) - 1
    91        m  = l * ( nxr_ya - nxl_y + 1 ) * ( nzt_ya - nzb_y + 1 ) * &
    92                 ( nyn_xa - nys_x + 1 )
    93        ys = 0 + l * ( nyn_xa - nys_x + 1 )
    94        DO  i = nxl_y, nxr_ya
    95           DO  k = nzb_y, nzt_ya
    96              DO  j = ys, ys + nyn_xa - nys_x
     91       m  = l * ( nxr_y - nxl_y + 1 ) * ( nzt_y - nzb_y + 1 ) * &
     92                ( nyn_x - nys_x + 1 )
     93       ys = 0 + l * ( nyn_x - nys_x + 1 )
     94       DO  i = nxl_y, nxr_y
     95          DO  k = nzb_y, nzt_y
     96             DO  j = ys, ys + nyn_x - nys_x
    9797                m = m + 1
    9898                f_out(j,i,k) = work(m)
     
    128128    INTEGER ::  i, j, k, l, m, xs
    129129   
    130     REAL ::  f_in(0:nxa,nys_x:nyn_xa,nzb_x:nzt_xa),             &
    131              f_inv(nys:nyna,nxl:nxra,1:nza),                    &
    132              f_out(1:nza,nys:nyna,nxl:nxra),                    &
     130    REAL ::  f_in(0:nx,nys_x:nyn_x,nzb_x:nzt_x),  &
     131             f_inv(nys:nyn,nxl:nxr,1:nz),         &
     132             f_out(1:nz,nys:nyn,nxl:nxr),         &
    133133             work(nnx*nny*nnz)
    134134
     
    144144!$OMP  DO
    145145       DO  l = 0, pdims(1) - 1
    146           m  = l * ( nzt_xa - nzb_x + 1 ) * nnx * ( nyn_xa - nys_x + 1 )
     146          m  = l * ( nzt_x - nzb_x + 1 ) * nnx * ( nyn_x - nys_x + 1 )
    147147          xs = 0 + l * nnx
    148           DO  k = nzb_x, nzt_xa
     148          DO  k = nzb_x, nzt_x
    149149             DO  i = xs, xs + nnx - 1
    150                 DO  j = nys_x, nyn_xa
     150                DO  j = nys_x, nyn_x
    151151                   m = m + 1
    152152                   work(m) = f_in(i,j,k)
     
    170170!$OMP  PARALLEL PRIVATE ( i, j, k )
    171171!$OMP  DO
    172        DO  k = 1, nza
    173           DO  i = nxl, nxra
    174              DO  j = nys, nyna
     172       DO  k = 1, nz
     173          DO  i = nxl, nxr
     174             DO  j = nys, nyn
    175175                f_out(k,j,i) = f_inv(j,i,k)
    176176             ENDDO
     
    183183!$OMP  PARALLEL PRIVATE ( i, j, k )
    184184!$OMP  DO
    185        DO  i = nxl, nxra
    186           DO  j = nys, nyna
    187              DO  k = 1, nza
     185       DO  i = nxl, nxr
     186          DO  j = nys, nyn
     187             DO  k = 1, nz
    188188                f_inv(j,i,k) = f_in(i,j,k)
    189189             ENDDO
     
    194194!$OMP  PARALLEL PRIVATE ( i, j, k )
    195195!$OMP  DO
    196        DO  k = 1, nza
    197           DO  i = nxl, nxra
    198              DO  j = nys, nyna
     196       DO  k = 1, nz
     197          DO  i = nxl, nxr
     198             DO  j = nys, nyn
    199199                f_out(k,j,i) = f_inv(j,i,k)
    200200             ENDDO
     
    231231    INTEGER ::  i, j, k, l, m, ys
    232232   
    233     REAL ::  f_in(0:nya,nxl_y:nxr_ya,nzb_y:nzt_ya),                     &
    234              f_inv(nys_x:nyn_xa,nzb_x:nzt_xa,0:nxa),                    &
    235              f_out(0:nxa,nys_x:nyn_xa,nzb_x:nzt_xa),                    &
     233    REAL ::  f_in(0:ny,nxl_y:nxr_y,nzb_y:nzt_y),  &
     234             f_inv(nys_x:nyn_x,nzb_x:nzt_x,0:nx), &
     235             f_out(0:nx,nys_x:nyn_x,nzb_x:nzt_x), &
    236236             work(nnx*nny*nnz)
    237237
     
    243243!$OMP  DO
    244244    DO  l = 0, pdims(2) - 1
    245        m  = l * ( nxr_ya - nxl_y + 1 ) * ( nzt_ya - nzb_y + 1 ) * &
    246                 ( nyn_xa - nys_x + 1 )
    247        ys = 0 + l * ( nyn_xa - nys_x + 1 )
    248        DO  i = nxl_y, nxr_ya
    249           DO  k = nzb_y, nzt_ya
    250              DO  j = ys, ys + nyn_xa - nys_x
     245       m  = l * ( nxr_y - nxl_y + 1 ) * ( nzt_y - nzb_y + 1 ) * &
     246                ( nyn_x - nys_x + 1 )
     247       ys = 0 + l * ( nyn_x - nys_x + 1 )
     248       DO  i = nxl_y, nxr_y
     249          DO  k = nzb_y, nzt_y
     250             DO  j = ys, ys + nyn_x - nys_x
    251251                m = m + 1
    252252                work(m) = f_in(j,i,k)
     
    270270!$OMP  PARALLEL PRIVATE ( i, j, k )
    271271!$OMP  DO
    272     DO  i = 0, nxa
    273        DO  k = nzb_x, nzt_xa
    274           DO  j = nys_x, nyn_xa
     272    DO  i = 0, nx
     273       DO  k = nzb_x, nzt_x
     274          DO  j = nys_x, nyn_x
    275275             f_out(i,j,k) = f_inv(j,k,i)
    276276          ENDDO
     
    306306    INTEGER ::  i, j, k, l, m, recvcount_yx, sendcount_yx, xs
    307307
    308     REAL ::  f_in(1:nza,nys:nyna,nxl:nxra), f_inv(nxl:nxra,1:nza,nys:nyna), &
    309              f_out(0:nxa,nys_x:nyn_xa,nzb_x:nzt_xa),                        &
     308    REAL ::  f_in(1:nz,nys:nyn,nxl:nxr), f_inv(nxl:nxr,1:nz,nys:nyn), &
     309             f_out(0:nx,nys_x:nyn_x,nzb_x:nzt_x),                     &
    310310             work(nnx*nny*nnz)
    311311
     
    315315!-- Rearrange indices of input array in order to make data to be send
    316316!-- by MPI contiguous
    317     DO  k = 1, nza
    318        DO  j = nys, nyna
    319           DO  i = nxl, nxra
     317    DO  k = 1, nz
     318       DO  j = nys, nyn
     319          DO  i = nxl, nxr
    320320             f_inv(i,k,j) = f_in(k,j,i)
    321321          ENDDO
     
    337337    DO  l = 0, pdims(1) - 1
    338338       xs = 0 + l * nnx
    339        DO  j = nys_x, nyn_xa
    340           DO  k = 1, nza
     339       DO  j = nys_x, nyn_x
     340          DO  k = 1, nz
    341341             DO  i = xs, xs + nnx - 1
    342342                m = m + 1
     
    372372    INTEGER ::  i, j, k, l, m, zs
    373373   
    374     REAL ::  f_in(0:nya,nxl_y:nxr_ya,nzb_y:nzt_ya),                     &
    375              f_inv(nxl_y:nxr_ya,nzb_y:nzt_ya,0:nya),                    &
    376              f_out(nxl_z:nxr_za,nys_z:nyn_za,1:nza),                    &
     374    REAL ::  f_in(0:ny,nxl_y:nxr_y,nzb_y:nzt_y),  &
     375             f_inv(nxl_y:nxr_y,nzb_y:nzt_y,0:ny), &
     376             f_out(nxl_z:nxr_z,nys_z:nyn_z,1:nz), &
    377377             work(nnx*nny*nnz)
    378378
     
    384384!$OMP  PARALLEL PRIVATE ( i, j, k )
    385385!$OMP  DO
    386     DO  j = 0, nya
    387        DO  k = nzb_y, nzt_ya
    388           DO  i = nxl_y, nxr_ya
     386    DO  j = 0, ny
     387       DO  k = nzb_y, nzt_y
     388          DO  i = nxl_y, nxr_y
    389389             f_inv(i,k,j) = f_in(j,i,k)
    390390          ENDDO
     
    401401!$OMP  PARALLEL PRIVATE ( i, j, k )
    402402!$OMP  DO
    403        DO  j = 0, nya
    404           DO  k = nzb_y, nzt_ya
    405              DO  i = nxl_y, nxr_ya
     403       DO  j = 0, ny
     404          DO  k = nzb_y, nzt_y
     405             DO  i = nxl_y, nxr_y
    406406                f_out(i,j,k) = f_inv(i,k,j)
    407407             ENDDO
     
    426426!$OMP  DO
    427427    DO  l = 0, pdims(1) - 1
    428        m  = l * ( nyn_za - nys_z + 1 ) * ( nzt_ya - nzb_y + 1 ) * &
    429                 ( nxr_za - nxl_z + 1 )
    430        zs = 1 + l * ( nzt_ya - nzb_y + 1 )
    431        DO  j = nys_z, nyn_za
    432           DO  k = zs, zs + nzt_ya - nzb_y
    433              DO  i = nxl_z, nxr_za
     428       m  = l * ( nyn_z - nys_z + 1 ) * ( nzt_y - nzb_y + 1 ) * &
     429                ( nxr_z - nxl_z + 1 )
     430       zs = 1 + l * ( nzt_y - nzb_y + 1 )
     431       DO  j = nys_z, nyn_z
     432          DO  k = zs, zs + nzt_y - nzb_y
     433             DO  i = nxl_z, nxr_z
    434434                m = m + 1
    435435                f_out(i,j,k) = work(m)
     
    465465    INTEGER ::  i, j, k, l, m, xs
    466466   
    467     REAL ::  f_in(1:nza,nys:nyna,nxl:nxra), f_inv(nys:nyna,nxl:nxra,1:nza), &
    468              f_out(0:nxa,nys_x:nyn_xa,nzb_x:nzt_xa),                        &
     467    REAL ::  f_in(1:nz,nys:nyn,nxl:nxr), f_inv(nys:nyn,nxl:nxr,1:nz), &
     468             f_out(0:nx,nys_x:nyn_x,nzb_x:nzt_x),                     &
    469469             work(nnx*nny*nnz)
    470470
     
    476476!$OMP  PARALLEL PRIVATE ( i, j, k )
    477477!$OMP  DO
    478     DO  k = 1,nza
    479        DO  i = nxl, nxra
    480           DO  j = nys, nyna
     478    DO  k = 1,nz
     479       DO  i = nxl, nxr
     480          DO  j = nys, nyn
    481481             f_inv(j,i,k) = f_in(k,j,i)
    482482          ENDDO
     
    493493!$OMP  PARALLEL PRIVATE ( i, j, k )
    494494!$OMP  DO
    495        DO  k = 1, nza
    496           DO  i = nxl, nxra
    497              DO  j = nys, nyna
     495       DO  k = 1, nz
     496          DO  i = nxl, nxr
     497             DO  j = nys, nyn
    498498                f_out(i,j,k) = f_inv(j,i,k)
    499499             ENDDO
     
    518518!$OMP  DO
    519519    DO  l = 0, pdims(1) - 1
    520        m  = l * ( nzt_xa - nzb_x + 1 ) * nnx * ( nyn_xa - nys_x + 1 )
     520       m  = l * ( nzt_x - nzb_x + 1 ) * nnx * ( nyn_x - nys_x + 1 )
    521521       xs = 0 + l * nnx
    522        DO  k = nzb_x, nzt_xa
     522       DO  k = nzb_x, nzt_x
    523523          DO  i = xs, xs + nnx - 1
    524              DO  j = nys_x, nyn_xa
     524             DO  j = nys_x, nyn_x
    525525                m = m + 1
    526526                f_out(i,j,k) = work(m)
     
    556556    INTEGER ::  i, j, k, l, m, zs
    557557   
    558     REAL ::  f_in(nxl_z:nxr_za,nys_z:nyn_za,1:nza),                     &
    559              f_inv(nxl_y:nxr_ya,nzb_y:nzt_ya,0:nya),                    &
    560              f_out(0:nya,nxl_y:nxr_ya,nzb_y:nzt_ya),                    &
     558    REAL ::  f_in(nxl_z:nxr_z,nys_z:nyn_z,1:nz),  &
     559             f_inv(nxl_y:nxr_y,nzb_y:nzt_y,0:ny), &
     560             f_out(0:ny,nxl_y:nxr_y,nzb_y:nzt_y), &
    561561             work(nnx*nny*nnz)
    562562
     
    572572!$OMP  DO
    573573       DO  l = 0, pdims(1) - 1
    574           m  = l * ( nyn_za - nys_z + 1 ) * ( nzt_ya - nzb_y + 1 ) * &
    575                    ( nxr_za - nxl_z + 1 )
    576           zs = 1 + l * ( nzt_ya - nzb_y + 1 )
    577           DO  j = nys_z, nyn_za
    578              DO  k = zs, zs + nzt_ya - nzb_y
    579                 DO  i = nxl_z, nxr_za
     574          m  = l * ( nyn_z - nys_z + 1 ) * ( nzt_y - nzb_y + 1 ) * &
     575                   ( nxr_z - nxl_z + 1 )
     576          zs = 1 + l * ( nzt_y - nzb_y + 1 )
     577          DO  j = nys_z, nyn_z
     578             DO  k = zs, zs + nzt_y - nzb_y
     579                DO  i = nxl_z, nxr_z
    580580                   m = m + 1
    581581                   work(m) = f_in(i,j,k)
     
    599599!$OMP  PARALLEL PRIVATE ( i, j, k )
    600600!$OMP  DO
    601        DO  j = 0, nya
    602           DO  k = nzb_y, nzt_ya
    603              DO  i = nxl_y, nxr_ya
     601       DO  j = 0, ny
     602          DO  k = nzb_y, nzt_y
     603             DO  i = nxl_y, nxr_y
    604604                f_out(j,i,k) = f_inv(i,k,j)
    605605             ENDDO
     
    612612!$OMP  PARALLEL PRIVATE ( i, j, k )
    613613!$OMP  DO
    614        DO  k = nzb_y, nzt_ya
    615           DO  j = 0, nya
    616              DO  i = nxl_y, nxr_ya
     614       DO  k = nzb_y, nzt_y
     615          DO  j = 0, ny
     616             DO  i = nxl_y, nxr_y
    617617                f_inv(i,k,j) = f_in(i,j,k)
    618618             ENDDO
     
    624624!$OMP  PARALLEL PRIVATE ( i, j, k )
    625625!$OMP  DO
    626        DO  k = nzb_y, nzt_ya
    627           DO  i = nxl_y, nxr_ya
    628              DO  j = 0, nya
     626       DO  k = nzb_y, nzt_y
     627          DO  i = nxl_y, nxr_y
     628             DO  j = 0, ny
    629629                f_out(j,i,k) = f_inv(i,k,j)
    630630             ENDDO
     
    662662    INTEGER ::  i, j, k, l, m, ys
    663663   
    664     REAL ::  f_in(1:nza,nys:nyna,nxl:nxra), f_inv(nys:nyna,nxl:nxra,1:nza), &
    665              f_out(0:nya,nxl_yd:nxr_yda,nzb_yd:nzt_yda),                    &
     664    REAL ::  f_in(1:nz,nys:nyn,nxl:nxr), f_inv(nys:nyn,nxl:nxr,1:nz), &
     665             f_out(0:ny,nxl_yd:nxr_yd,nzb_yd:nzt_yd),                 &
    666666             work(nnx*nny*nnz)
    667667
     
    671671!-- Rearrange indices of input array in order to make data to be send
    672672!-- by MPI contiguous
    673     DO  i = nxl, nxra
    674        DO  j = nys, nyna
    675           DO  k = 1, nza
     673    DO  i = nxl, nxr
     674       DO  j = nys, nyn
     675          DO  k = 1, nz
    676676             f_inv(j,i,k) = f_in(k,j,i)
    677677          ENDDO
     
    685685!-- of the data is necessary and no transposition has to be done.
    686686    IF ( pdims(2) == 1 )  THEN
    687        DO  k = 1, nza
    688           DO  i = nxl, nxra
    689              DO  j = nys, nyna
     687       DO  k = 1, nz
     688          DO  i = nxl, nxr
     689             DO  j = nys, nyn
    690690                f_out(j,i,k) = f_inv(j,i,k)
    691691             ENDDO
     
    709709    DO  l = 0, pdims(2) - 1
    710710       ys = 0 + l * nny
    711        DO  k = nzb_yd, nzt_yda
    712           DO  i = nxl_yd, nxr_yda
     711       DO  k = nzb_yd, nzt_yd
     712          DO  i = nxl_yd, nxr_yd
    713713             DO  j = ys, ys + nny - 1
    714714                m = m + 1
Note: See TracChangeset for help on using the changeset viewer.