Ignore:
Timestamp:
Jan 17, 2017 4:38:49 PM (4 years ago)
Author:
raasch
Message:

all OpenACC directives and related parts removed from the code

File:
1 edited

Legend:

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

    r2101 r2118  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! OpenACC version of subroutine removed
    2323!
    2424! Former revisions:
     
    3535! Module renamed (removed _mod)
    3636!
    37 !
    3837! 1850 2016-04-08 13:29:27Z maronga
    3938! Module renamed
    40 !
    4139!
    4240! 1740 2016-01-13 08:19:40Z raasch
     
    9290
    9391    PRIVATE
    94     PUBLIC diffusion_v, diffusion_v_acc
     92    PUBLIC diffusion_v
    9593
    9694    INTERFACE diffusion_v
     
    9896       MODULE PROCEDURE diffusion_v_ij
    9997    END INTERFACE diffusion_v
    100 
    101     INTERFACE diffusion_v_acc
    102        MODULE PROCEDURE diffusion_v_acc
    103     END INTERFACE diffusion_v_acc
    10498
    10599 CONTAINS
     
    275269! Description:
    276270! ------------
    277 !> Call for all grid points - accelerator version
    278 !------------------------------------------------------------------------------!
    279     SUBROUTINE diffusion_v_acc
    280 
    281        USE arrays_3d,                                                          &
    282            ONLY:  ddzu, ddzw, km, tend, u, v, vsws, vswst, w,                  &
    283                   drho_air, rho_air_zw
    284        
    285        USE control_parameters,                                                 &
    286            ONLY:  constant_top_momentumflux, topography, use_surface_fluxes,   &
    287                   use_top_fluxes
    288        
    289        USE grid_variables,                                                     &
    290            ONLY:  ddx, ddy, ddy2, fxm, fxp, wall_v
    291        
    292        USE indices,                                                            &
    293            ONLY:  i_left, i_right, j_north, j_south, nxl, nxr, nyn, nys, nzb,  &
    294                   nzb_diff_v, nzb_v_inner, nzb_v_outer, nzt, nzt_diff
    295        
    296        USE kinds
    297 
    298        IMPLICIT NONE
    299 
    300        INTEGER(iwp) ::  i     !<
    301        INTEGER(iwp) ::  j     !<
    302        INTEGER(iwp) ::  k     !<
    303        REAL(wp)     ::  kmxm  !<
    304        REAL(wp)     ::  kmxp  !<
    305        REAL(wp)     ::  kmzm  !<
    306        REAL(wp)     ::  kmzp  !<
    307 
    308        REAL(wp), DIMENSION(nzb:nzt+1,nys:nyn,nxl:nxr) ::  vsus  !<
    309        !$acc declare create ( vsus )
    310 
    311 !
    312 !--    First calculate horizontal momentum flux v'u' at vertical walls,
    313 !--    if neccessary
    314        IF ( topography /= 'flat' )  THEN
    315           CALL wall_fluxes_acc( vsus, 0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp,          &
    316                                 nzb_v_inner, nzb_v_outer, wall_v )
    317        ENDIF
    318 
    319        !$acc kernels present ( u, v, w, km, tend, vsws, vswst )                &
    320        !$acc         present ( ddzu, ddzw, fxm, fxp, wall_v )                  &
    321        !$acc         present ( nzb_v_inner, nzb_v_outer, nzb_diff_v )
    322        DO  i = i_left, i_right
    323           DO  j = j_south, j_north
    324 !
    325 !--          Compute horizontal diffusion
    326              DO  k = 1, nzt
    327                 IF ( k > nzb_v_outer(j,i) )  THEN
    328 !
    329 !--                Interpolate eddy diffusivities on staggered gridpoints
    330                    kmxp = 0.25_wp *                                            &
    331                           ( km(k,j,i)+km(k,j,i+1)+km(k,j-1,i)+km(k,j-1,i+1) )
    332                    kmxm = 0.25_wp *                                            &
    333                           ( km(k,j,i)+km(k,j,i-1)+km(k,j-1,i)+km(k,j-1,i-1) )
    334 
    335                    tend(k,j,i) = tend(k,j,i)                                   &
    336                          & + ( kmxp * ( v(k,j,i+1) - v(k,j,i)     ) * ddx      &
    337                          &   + kmxp * ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy      &
    338                          &   - kmxm * ( v(k,j,i) - v(k,j,i-1) ) * ddx          &
    339                          &   - kmxm * ( u(k,j,i) - u(k,j-1,i) ) * ddy          &
    340                          &   ) * ddx                                           &
    341                          & + 2.0_wp * (                                        &
    342                          &           km(k,j,i)   * ( v(k,j+1,i) - v(k,j,i) )   &
    343                          &         - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) )   &
    344                          &            ) * ddy2
    345                 ENDIF
    346              ENDDO
    347 
    348 !
    349 !--          Wall functions at the left and right walls, respectively
    350              DO  k = 1, nzt
    351                 IF( k > nzb_v_inner(j,i)  .AND.  k <= nzb_v_outer(j,i)  .AND.  &
    352                     wall_v(j,i) /= 0.0_wp )  THEN
    353 
    354                    kmxp = 0.25_wp *                                            &
    355                           ( km(k,j,i)+km(k,j,i+1)+km(k,j-1,i)+km(k,j-1,i+1) )
    356                    kmxm = 0.25_wp *                                            &
    357                           ( km(k,j,i)+km(k,j,i-1)+km(k,j-1,i)+km(k,j-1,i-1) )
    358                    
    359                    tend(k,j,i) = tend(k,j,i)                                   &
    360                                  + 2.0_wp * (                                  &
    361                                        km(k,j,i)   * ( v(k,j+1,i) - v(k,j,i) ) &
    362                                      - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) ) &
    363                                             ) * ddy2                           &
    364                                  + (   fxp(j,i) * (                            &
    365                                   kmxp * ( v(k,j,i+1) - v(k,j,i)     ) * ddx   &
    366                                 + kmxp * ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy   &
    367                                                   )                            &
    368                                      - fxm(j,i) * (                            &
    369                                   kmxm * ( v(k,j,i) - v(k,j,i-1) ) * ddx       &
    370                                 + kmxm * ( u(k,j,i) - u(k,j-1,i) ) * ddy       &
    371                                                   )                            &
    372                                      + wall_v(j,i) * vsus(k,j,i)               &
    373                                    ) * ddx
    374                 ENDIF
    375              ENDDO
    376 
    377 !
    378 !--          Compute vertical diffusion. In case of simulating a Prandtl
    379 !--          layer, index k starts at nzb_v_inner+2.
    380              DO  k = 1, nzt_diff
    381                 IF ( k >= nzb_diff_v(j,i) )  THEN
    382 !
    383 !--                Interpolate eddy diffusivities on staggered gridpoints
    384                    kmzp = 0.25_wp *                                            &
    385                           ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
    386                    kmzm = 0.25_wp *                                            &
    387                           ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
    388 
    389                    tend(k,j,i) = tend(k,j,i)                                   &
    390                          & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i)   ) * ddzu(k+1)&
    391                          &            + ( w(k,j,i)   - w(k,j-1,i) ) * ddy      &
    392                          &            ) * rho_air_zw(k)                        &
    393                          &   - kmzm * ( ( v(k,j,i)   - v(k-1,j,i)   ) * ddzu(k)&
    394                          &            + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy    &
    395                          &            ) * rho_air_zw(k-1)                      &
    396                          &   ) * ddzw(k) * drho_air(k)
    397                 ENDIF
    398              ENDDO
    399 
    400           ENDDO
    401        ENDDO
    402 
    403 !
    404 !--    Vertical diffusion at the first grid point above the surface,
    405 !--    if the momentum flux at the bottom is given by the Prandtl law
    406 !--    or if it is prescribed by the user.
    407 !--    Difference quotient of the momentum flux is not formed over
    408 !--    half of the grid spacing (2.0*ddzw(k)) any more, since the
    409 !--    comparison with other (LES) models showed that the values of
    410 !--    the momentum flux becomes too large in this case.
    411 !--    The term containing w(k-1,..) (see above equation) is removed here
    412 !--    because the vertical velocity is assumed to be zero at the surface.
    413        IF ( use_surface_fluxes )  THEN
    414 
    415           DO  i = i_left, i_right
    416              DO  j = j_south, j_north
    417          
    418                 k = nzb_v_inner(j,i)+1
    419 !
    420 !--             Interpolate eddy diffusivities on staggered gridpoints
    421                 kmzp = 0.25_wp *                                               &
    422                        ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
    423 
    424                 tend(k,j,i) = tend(k,j,i)                                      &
    425                       & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i)   ) * ddzu(k+1)   &
    426                       &            + ( w(k,j,i)   - w(k,j-1,i) ) * ddy         &
    427                       &            ) * rho_air_zw(k)                           &
    428                       &   - ( -vsws(j,i) )                                     &
    429                       &   ) * ddzw(k) * drho_air(k)
    430              ENDDO
    431           ENDDO
    432 
    433        ENDIF
    434 
    435 !
    436 !--    Vertical diffusion at the first gridpoint below the top boundary,
    437 !--    if the momentum flux at the top is prescribed by the user
    438        IF ( use_top_fluxes  .AND.  constant_top_momentumflux )  THEN
    439 
    440           k = nzt
    441 
    442           DO  i = i_left, i_right
    443              DO  j = j_south, j_north
    444 
    445 !
    446 !--             Interpolate eddy diffusivities on staggered gridpoints
    447                 kmzm = 0.25_wp *                                               &
    448                        ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
    449 
    450                 tend(k,j,i) = tend(k,j,i)                                      &
    451                       & + ( ( -vswst(j,i) )                                    &
    452                       &   - kmzm * ( ( v(k,j,i)   - v(k-1,j,i)   ) * ddzu(k)   &
    453                       &            + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy       &
    454                       &            ) * rho_air_zw(k-1)                         &
    455                       &   ) * ddzw(k) * drho_air(k)
    456              ENDDO
    457           ENDDO
    458 
    459        ENDIF
    460        !$acc end kernels
    461 
    462     END SUBROUTINE diffusion_v_acc
    463 
    464 
    465 !------------------------------------------------------------------------------!
    466 ! Description:
    467 ! ------------
    468271!> Call for grid point i,j
    469272!------------------------------------------------------------------------------!
Note: See TracChangeset for help on using the changeset viewer.