Ignore:
Timestamp:
May 11, 2007 9:35:14 AM (14 years ago)
Author:
raasch
Message:

openmp bugfixes found by NEC benchmarker

File:
1 edited

Legend:

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

    r77 r85  
    44! Actual revisions:
    55! -----------------
    6 !
     6! Division through dt_3d replaced by multiplication of the inverse.
     7! For performance optimisation, this is done in the loop calculating the
     8! divergence instead of using a seperate loop.
    79!
    810! Former revisions:
     
    4850    INTEGER ::  i, j, k, sr
    4951
    50     REAL    ::  localsum, threadsum
     52    REAL    ::  ddt_3d, localsum, threadsum
    5153
    5254    REAL, DIMENSION(1:2) ::  volume_flow_l, volume_flow_offset
     
    5557
    5658    CALL cpu_log( log_point(8), 'pres', 'start' )
     59
     60
     61    ddt_3d = 1.0 / dt_3d
    5762
    5863!
     
    167172       DO  j = nys, nyn
    168173          DO  k = nzb_s_inner(j,i)+1, nzt
    169              d(k,j,i) = ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
    170                         ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
    171                         ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k)
     174             d(k,j,i) = ( ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
     175                          ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
     176                          ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) ) * ddt_3d
    172177          ENDDO
    173178!
     
    184189                                       - g * ( pt(k+1,j,i) - sums(k+1,4) ) / &
    185190                                         sums(k+1,4)                         &
    186                                        ) * ddzw(k+1)
     191                                       ) * ddzw(k+1) * ddt_3d
    187192          ENDIF
    188193
     
    193198          ENDDO
    194199
    195 !
    196 !--       Velocity corrections are made with Euler step size. Right hand side
    197 !--       of Poisson equation has to be set appropriately
    198           DO  k = nzb_s_inner(j,i)+1, nzt
    199              d(k,j,i) = d(k,j,i) / dt_3d
    200           ENDDO
    201 
    202200       ENDDO
    203201    ENDDO
    204202
    205     localsum = localsum + threadsum
     203    localsum = ( localsum + threadsum ) * dt_3d
    206204    !$OMP END PARALLEL
    207205#else
     
    212210          DO  j = nys, nyn
    213211             DO  k = nzb_s_inner(j,i)+1, nzt
    214                 d(k,j,i) = ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
    215                            ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
    216                            ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k)
     212                d(k,j,i) = ( ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
     213                             ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
     214                             ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) ) * ddt_3d
    217215             ENDDO
    218216          ENDDO
     
    230228                           - g * ( pt(k+1,j,i) - sums(k+1,4) ) / &
    231229                             sums(k+1,4)                         &
    232                                         ) * ddzw(k+1)
     230                                        ) * ddzw(k+1) * ddt_3d
    233231          ENDDO
    234232       ENDDO
     
    242240          DO  j = nys, nyn
    243241             DO  k = nzb_s_inner(j,i)+1, nzt
    244                 d(k,j,i) = ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
    245                            ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
    246                            ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k)
     242                d(k,j,i) = ( ( u(k,j,i+1) - u(k,j,i) ) * ddx + &
     243                             ( v(k,j+1,i) - v(k,j,i) ) * ddy + &
     244                             ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) ) * ddt_3d
    247245             ENDDO
    248246          ENDDO
     
    263261       ENDDO
    264262    ENDDO
    265     localsum = localsum + threadsum
     263    localsum = ( localsum + threadsum ) * dt_3d
    266264    !$OMP END PARALLEL
    267 
    268 !
    269 !-- Velocity corrections are made with Euler step size. Right hand side
    270 !-- of Poisson equation has to be set appropriately
    271     !$OMP DO SCHEDULE( STATIC )
    272     DO  i = nxl, nxr
    273        DO  j = nys, nyn
    274           DO  k = nzb_s_inner(j,i)+1, nzt
    275              d(k,j,i) = d(k,j,i) / dt_3d
    276           ENDDO
    277        ENDDO
    278     ENDDO
    279265#endif
    280266
Note: See TracChangeset for help on using the changeset viewer.