Ignore:
Timestamp:
Sep 27, 2012 9:23:24 AM (9 years ago)
Author:
raasch
Message:

Starting with changes required for GPU optimization. OpenACC statements for using NVIDIA GPUs added.
Adjustment of mixing length to the Prandtl mixing length at first grid point above ground removed.
mask array is set zero for ghost boundaries

File:
1 edited

Legend:

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

    r392 r1015  
    44! Current revisions:
    55! -----------------
    6 !
    7 !
     6! accelerator version (*_acc) added
    87!
    98! Former revisions:
     
    3635
    3736    PRIVATE
    38     PUBLIC coriolis
     37    PUBLIC coriolis, coriolis_acc
    3938
    4039    INTERFACE coriolis
     
    4241       MODULE PROCEDURE coriolis_ij
    4342    END INTERFACE coriolis
     43
     44    INTERFACE coriolis_acc
     45       MODULE PROCEDURE coriolis_acc
     46    END INTERFACE coriolis_acc
    4447
    4548 CONTAINS
     
    116119
    117120    END SUBROUTINE coriolis
     121
     122
     123!------------------------------------------------------------------------------!
     124! Call for all grid points - accelerator version
     125!------------------------------------------------------------------------------!
     126    SUBROUTINE coriolis_acc( component )
     127
     128       USE arrays_3d
     129       USE control_parameters
     130       USE indices
     131       USE pegrid
     132
     133       IMPLICIT NONE
     134
     135       INTEGER ::  component, i, j, k
     136
     137
     138!
     139!--    Compute Coriolis terms for the three velocity components
     140       SELECT CASE ( component )
     141
     142!
     143!--       u-component
     144          CASE ( 1 )
     145             !$acc  kernels present( nzb_u_inner, tend, v, vg, w )
     146             !$acc  loop
     147             DO  i = nxlu, nxr
     148                DO  j = nys, nyn
     149                   !$acc loop vector( 32 )
     150                   DO  k = 1, nzt
     151                      IF  ( k > nzb_u_inner(j,i) )  THEN
     152                         tend(k,j,i) = tend(k,j,i) + f  *    ( 0.25 *          &
     153                                      ( v(k,j,i-1) + v(k,j,i) + v(k,j+1,i-1) + &
     154                                        v(k,j+1,i) ) - vg(k) )                 &
     155                                                - fs *    ( 0.25 *             &
     156                                      ( w(k-1,j,i-1) + w(k-1,j,i) + w(k,j,i-1) &
     157                                        + w(k,j,i)   )                         &
     158                                                             )
     159                      ENDIF
     160                   ENDDO
     161                ENDDO
     162             ENDDO
     163             !$acc end kernels
     164
     165!
     166!--       v-component
     167          CASE ( 2 )
     168             !$acc  kernels present( nzb_v_inner, tend, u, ug )
     169             !$acc  loop
     170             DO  i = nxl, nxr
     171                DO  j = nysv, nyn
     172                   !$acc loop vector( 32 )
     173                   DO  k = 1, nzt
     174                      IF  ( k > nzb_v_inner(j,i) )  THEN
     175                         tend(k,j,i) = tend(k,j,i) - f *     ( 0.25 *          &
     176                                      ( u(k,j-1,i) + u(k,j,i) + u(k,j-1,i+1) + &
     177                                        u(k,j,i+1) ) - ug(k) )
     178                      ENDIF
     179                   ENDDO
     180                ENDDO
     181             ENDDO
     182             !$acc end kernels
     183
     184!
     185!--       w-component
     186          CASE ( 3 )
     187             !$acc  kernels present( nzb_w_inner, tend, u )
     188             !$acc  loop
     189             DO  i = nxl, nxr
     190                DO  j = nys, nyn
     191                   !$acc loop vector( 32 )
     192                   DO  k = 1, nzt
     193                      IF  ( k > nzb_w_inner(j,i) )  THEN
     194                         tend(k,j,i) = tend(k,j,i) + fs * 0.25 *             &
     195                                      ( u(k,j,i) + u(k+1,j,i) + u(k,j,i+1) + &
     196                                        u(k+1,j,i+1) )
     197                      ENDIF
     198                   ENDDO
     199                ENDDO
     200             ENDDO
     201             !$acc end kernels
     202
     203          CASE DEFAULT
     204
     205             WRITE( message_string, * ) ' wrong component: ', component
     206             CALL message( 'coriolis', 'PA0173', 1, 2, 0, 6, 0 )
     207
     208       END SELECT
     209
     210    END SUBROUTINE coriolis_acc
    118211
    119212
Note: See TracChangeset for help on using the changeset viewer.