Ignore:
Timestamp:
Jan 22, 2019 10:56:42 PM (4 years ago)
Author:
knoop
Message:

Enabled OpenACC usage without using the cudaFFT library.
Added respective palmtest build configuration and testcase.

File:
1 edited

Legend:

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

    r3655 r3690  
    101101! the beginning, i.e. routine split is called within tridia_init.
    102102!
     103
     104#define __acc_fft_device ( defined( _OPENACC ) && ( defined ( __cuda_fft ) ) )
     105
    103106!
    104107! Description:
     
    173176       CALL split
    174177
     178#if __acc_fft_device
    175179       !$ACC ENTER DATA &
    176180       !$ACC COPYIN(ddzuw(0:nz-1,1:3)) &
    177181       !$ACC COPYIN(tri(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1,1:2))
     182#endif
    178183
    179184    END SUBROUTINE tridia_init
     
    297302
    298303          REAL(wp), DIMENSION(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1)   ::  ar1 !<
     304#if __acc_fft_device
    299305          !$ACC DECLARE CREATE(ar1)
     306#endif
    300307
    301308!
    302309!--       Forward substitution
     310#if __acc_fft_device
    303311          !$ACC PARALLEL PRESENT(ar, ar1, tri) PRIVATE(i,j,k)
     312#endif
    304313          DO  k = 0, nz - 1
     314#if __acc_fft_device
    305315             !$ACC LOOP COLLAPSE(2)
     316#endif
    306317             DO  j = nys_z, nyn_z
    307318                DO  i = nxl_z, nxr_z
     
    316327             ENDDO
    317328          ENDDO
     329#if __acc_fft_device
    318330          !$ACC END PARALLEL
     331#endif
    319332
    320333!
     
    323336!--       by zero appearing if the pressure bc is set to neumann at the top of
    324337!--       the model domain.
     338#if __acc_fft_device
    325339          !$ACC PARALLEL PRESENT(ar, ar1, ddzuw, tri) PRIVATE(i,j,k)
     340#endif
    326341          DO  k = nz-1, 0, -1
     342#if __acc_fft_device
    327343             !$ACC LOOP COLLAPSE(2)
     344#endif
    328345             DO  j = nys_z, nyn_z
    329346                DO  i = nxl_z, nxr_z
     
    338355             ENDDO
    339356          ENDDO
     357#if __acc_fft_device
    340358          !$ACC END PARALLEL
     359#endif
    341360
    342361!
     
    346365          IF ( ibc_p_b == 1  .AND.  ibc_p_t == 1 )  THEN
    347366             IF ( nys_z == 0  .AND.  nxl_z == 0 )  THEN
     367#if __acc_fft_device
    348368                !$ACC PARALLEL LOOP PRESENT(ar)
     369#endif
    349370                DO  k = 1, nz
    350371                   ar(nxl_z,nys_z,k) = 0.0_wp
Note: See TracChangeset for help on using the changeset viewer.