Ignore:
Timestamp:
Jan 17, 2017 4:38:49 PM (7 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_e.f90

    r2101 r2118  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! OpenACC version of subroutine removed
    2323!
    2424! Former revisions:
     
    3434! 1873 2016-04-18 14:50:06Z maronga
    3535! Module renamed (removed _mod)
    36 !
    3736!
    3837! 1850 2016-04-08 13:29:27Z maronga
     
    108107
    109108    PRIVATE
    110     PUBLIC diffusion_e, diffusion_e_acc
     109    PUBLIC diffusion_e
    111110   
    112111
     
    116115    END INTERFACE diffusion_e
    117116 
    118     INTERFACE diffusion_e_acc
    119        MODULE PROCEDURE diffusion_e_acc
    120     END INTERFACE diffusion_e_acc
    121 
    122117 CONTAINS
    123118
     
    337332
    338333    END SUBROUTINE diffusion_e
    339 
    340 
    341 !------------------------------------------------------------------------------!
    342 ! Description:
    343 ! ------------
    344 !> Call for all grid points - accelerator version
    345 !------------------------------------------------------------------------------!
    346     SUBROUTINE diffusion_e_acc( var, var_reference )
    347 
    348        USE arrays_3d,                                                          &
    349            ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw,        &
    350                   drho_air, rho_air_zw
    351          
    352        USE control_parameters,                                                 &
    353            ONLY:  atmos_ocean_sign, g, use_single_reference_value,             &
    354                   wall_adjustment, wall_adjustment_factor
    355 
    356        USE grid_variables,                                                     &
    357            ONLY:  ddx2, ddy2
    358            
    359        USE indices,                                                            &
    360            ONLY:  i_left, i_right, j_north, j_south, nxlg, nxrg, nyng, nysg,   &
    361                   nzb, nzb_s_inner, nzt
    362            
    363        USE kinds
    364 
    365        USE microphysics_mod,                                                   &
    366            ONLY:  collision_turbulence
    367 
    368        USE particle_attributes,                                                &
    369            ONLY:  use_sgs_for_particles, wang_kernel
    370 
    371        IMPLICIT NONE
    372 
    373        INTEGER(iwp) ::  i              !<
    374        INTEGER(iwp) ::  j              !<
    375        INTEGER(iwp) ::  k              !<
    376        REAL(wp)     ::  dissipation    !<
    377        REAL(wp)     ::  dvar_dz        !<
    378        REAL(wp)     ::  l              !<
    379        REAL(wp)     ::  ll             !<
    380        REAL(wp)     ::  l_stable       !<
    381        REAL(wp)     ::  var_reference  !<
    382 
    383 #if defined( __nopointer )
    384        REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  var  !<
    385 #else
    386        REAL(wp), DIMENSION(:,:,:), POINTER ::  var  !<
    387 #endif
    388 
    389 
    390 !
    391 !--    This if clause must be outside the k-loop because otherwise
    392 !--    runtime errors occur with -C hopt on NEC
    393        IF ( use_single_reference_value )  THEN
    394 
    395           !$acc kernels present( ddzu, ddzw, dd2zu, diss, e, km, l_grid ) &
    396           !$acc         present( nzb_s_inner, tend, var, zu, zw )
    397           DO  i = i_left, i_right
    398              DO  j = j_south, j_north
    399                 DO  k = 1, nzt
    400 
    401                    IF ( k > nzb_s_inner(j,i) )  THEN
    402 !
    403 !--                   Calculate the mixing length (for dissipation)
    404                       dvar_dz = atmos_ocean_sign * &
    405                                 ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
    406                       IF ( dvar_dz > 0.0_wp ) THEN
    407                          l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
    408                                        SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
    409                       ELSE
    410                          l_stable = l_grid(k)
    411                       ENDIF
    412 !
    413 !--                   Adjustment of the mixing length
    414                       IF ( wall_adjustment )  THEN
    415                          l  = MIN( wall_adjustment_factor *          &
    416                                    ( zu(k) - zw(nzb_s_inner(j,i)) ), &
    417                                    l_grid(k), l_stable )
    418                          ll = MIN( wall_adjustment_factor *          &
    419                                    ( zu(k) - zw(nzb_s_inner(j,i)) ), &
    420                                    l_grid(k) )
    421                       ELSE
    422                          l  = MIN( l_grid(k), l_stable )
    423                          ll = l_grid(k)
    424                       ENDIF
    425 !
    426 !--                   Calculate the tendency terms
    427                       dissipation = ( 0.19_wp + 0.74_wp * l / ll ) * &
    428                                           e(k,j,i) * SQRT( e(k,j,i) ) / l
    429 
    430                       tend(k,j,i) = tend(k,j,i)                                  &
    431                                         + (                                    &
    432                           ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
    433                         - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
    434                                           ) * ddx2                             &
    435                                         + (                                    &
    436                           ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
    437                         - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
    438                                           ) * ddy2                             &
    439                                         + (                                    &
    440                ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
    441                                                              * rho_air_zw(k)   &
    442              - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
    443                                                              * rho_air_zw(k-1) &
    444                                           ) * ddzw(k) * drho_air(k)            &
    445                                   - dissipation
    446 
    447 !
    448 !--                   Store dissipation if needed for calculating the sgs particle
    449 !--                   velocities
    450                       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.      &
    451                            collision_turbulence )  THEN
    452                          diss(k,j,i) = dissipation
    453                       ENDIF
    454 
    455                    ENDIF
    456 
    457                 ENDDO
    458              ENDDO
    459           ENDDO
    460           !$acc end kernels
    461 
    462        ELSE
    463 
    464           !$acc kernels present( ddzu, ddzw, dd2zu, diss, e, km, l_grid ) &
    465           !$acc         present( nzb_s_inner, tend, var, zu, zw )
    466           DO  i = i_left, i_right
    467              DO  j = j_south, j_north
    468                 DO  k = 1, nzt
    469 
    470                    IF ( k > nzb_s_inner(j,i) )  THEN
    471 !
    472 !--                   Calculate the mixing length (for dissipation)
    473                       dvar_dz = atmos_ocean_sign * &
    474                                 ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
    475                       IF ( dvar_dz > 0.0_wp ) THEN
    476                          l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
    477                                               SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
    478                       ELSE
    479                          l_stable = l_grid(k)
    480                       ENDIF
    481 !
    482 !--                   Adjustment of the mixing length
    483                       IF ( wall_adjustment )  THEN
    484                          l  = MIN( wall_adjustment_factor *          &
    485                                    ( zu(k) - zw(nzb_s_inner(j,i)) ), &
    486                                      l_grid(k), l_stable )
    487                          ll = MIN( wall_adjustment_factor *          &
    488                                    ( zu(k) - zw(nzb_s_inner(j,i)) ), &
    489                                    l_grid(k) )
    490                       ELSE
    491                          l  = MIN( l_grid(k), l_stable )
    492                          ll = l_grid(k)
    493                       ENDIF
    494 !
    495 !--                   Calculate the tendency terms
    496                       dissipation = ( 0.19_wp + 0.74_wp * l / ll ) * &
    497                                           e(k,j,i) * SQRT( e(k,j,i) ) / l
    498 
    499                       tend(k,j,i) = tend(k,j,i)                                &
    500                                         + (                                    &
    501                           ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
    502                         - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
    503                                           ) * ddx2                             &
    504                                         + (                                    &
    505                           ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
    506                         - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
    507                                           ) * ddy2                             &
    508                                         + (                                    &
    509                ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
    510                                                              * rho_air_zw(k)   &
    511              - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
    512                                                              * rho_air_zw(k-1) &
    513                                           ) * ddzw(k) * drho_air(k)            &
    514                                   - dissipation
    515 
    516 !
    517 !--                   Store dissipation if needed for calculating the sgs
    518 !--                   particle  velocities
    519                       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.      &
    520                            collision_turbulence )  THEN
    521                          diss(k,j,i) = dissipation
    522                       ENDIF
    523 
    524                    ENDIF
    525 
    526                 ENDDO
    527              ENDDO
    528           ENDDO
    529           !$acc end kernels
    530 
    531        ENDIF
    532 
    533 !
    534 !--    Boundary condition for dissipation
    535        IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.                     &
    536             collision_turbulence )  THEN
    537           !$acc kernels present( diss, nzb_s_inner )
    538           DO  i = i_left, i_right
    539              DO  j = j_south, j_north
    540                 diss(nzb_s_inner(j,i),j,i) = diss(nzb_s_inner(j,i)+1,j,i)
    541              ENDDO
    542           ENDDO
    543           !$acc end kernels
    544        ENDIF
    545 
    546     END SUBROUTINE diffusion_e_acc
    547334
    548335
Note: See TracChangeset for help on using the changeset viewer.