Ignore:
Timestamp:
Dec 18, 2018 12:31:28 PM (5 years ago)
Author:
knoop
Message:

OpenACC port for SPEC

File:
1 edited

Legend:

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

    r3597 r3634  
    2626! -----------------
    2727! $Id$
     28! OpenACC port for SPEC
     29!
     30! 3597 2018-12-04 08:40:18Z maronga
    2831! Added routine for calculating near surface air potential temperature (moved
    2932! from urban_surface_mod)
     
    10091012       ibit = MERGE( 1, 0, .NOT. downward )
    10101013
     1014       !$ACC PARALLEL LOOP PRIVATE(i, j, k, w_lfc) &
     1015       !$ACC PRESENT(surf, u, v)
    10111016       DO  m = 1, surf%ns
    10121017
     
    12971302             ELSE
    12981303                !$OMP PARALLEL DO PRIVATE( k, z_mo )
     1304                !$ACC PARALLEL LOOP PRIVATE(k, z_mo) &
     1305                !$ACC PRESENT(surf, drho_air_zw)
    12991306                DO  m = 1, surf%ns
    13001307
     
    13191326       IF ( TRIM( most_method ) == 'newton' )  THEN
    13201327
     1328          !$ACC PARALLEL LOOP PRIVATE(i, j, z_mo) &
     1329          !$ACC PRIVATE(ol_old, ol_m, ol_l, ol_u, f, f_d_ol) &
     1330          !$ACC PRESENT(surf)
    13211331          DO  m = 1, surf%ns
    13221332
     
    15751585          IF ( .NOT. downward )  THEN
    15761586             !$OMP PARALLEL  DO PRIVATE( z_mo )
     1587             !$ACC PARALLEL LOOP PRIVATE(z_mo) &
     1588             !$ACC PRESENT(surf)
    15771589             DO  m = 1, surf%ns
    15781590
     
    15911603          ELSE
    15921604             !$OMP PARALLEL  DO PRIVATE( z_mo )
     1605             !$ACC PARALLEL LOOP PRIVATE(z_mo) &
     1606             !$ACC PRESENT(surf)
    15931607             DO  m = 1, surf%ns
    15941608
     
    16051619       ELSE
    16061620          !$OMP PARALLEL DO PRIVATE( z_mo )
     1621          !$ACC PARALLEL LOOP PRIVATE(z_mo) &
     1622          !$ACC PRESENT(surf)
    16071623          DO  m = 1, surf%ns
    16081624             z_mo = surf%z_mo(m)
     
    16241640
    16251641       !$OMP PARALLEL DO PRIVATE( i, j, k )
     1642       !$ACC PARALLEL LOOP PRIVATE(i, j, k) &
     1643       !$ACC PRESENT(surf, pt)
    16261644       DO  m = 1, surf%ns
    16271645
     
    16301648          k   = surf%k(m)
    16311649
     1650#ifndef _OPENACC
    16321651          IF ( bulk_cloud_model ) THEN
    16331652             surf%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
     
    16371656             surf%qv1(m) = q(k,j,i)
    16381657          ELSE
     1658#endif
    16391659             surf%pt1(m) = pt(k,j,i)
     1660#ifndef _OPENACC
    16401661             IF ( humidity )  THEN
    16411662                surf%qv1(m) = q(k,j,i)
    16421663             ELSE
     1664#endif
    16431665                surf%qv1(m) = 0.0_wp
     1666#ifndef _OPENACC
    16441667             ENDIF
    16451668          ENDIF
     
    16481671             surf%vpt1(m) = pt(k,j,i) * ( 1.0_wp + 0.61_wp * q(k,j,i) )
    16491672          ENDIF
     1673#endif
    16501674         
    16511675       ENDDO
     
    16581682!-- ( only for upward-facing surfs )
    16591683    SUBROUTINE calc_pt_surface
     1684
     1685       IMPLICIT NONE
     1686
     1687       INTEGER(iwp) ::  k_off    !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)
     1688       INTEGER(iwp) ::  m       !< loop variable over all horizontal surf elements
     1689       
     1690       k_off = surf%koff
     1691       !$OMP PARALLEL DO PRIVATE( i, j, k )
     1692       !$ACC PARALLEL LOOP PRIVATE(i, j, k) &
     1693       !$ACC PRESENT(surf, pt)
     1694       DO  m = 1, surf%ns
     1695
     1696          i   = surf%i(m)           
     1697          j   = surf%j(m)
     1698          k   = surf%k(m)
     1699
     1700          surf%pt_surface(m) = pt(k+k_off,j,i)
     1701
     1702       ENDDO
     1703
     1704    END SUBROUTINE calc_pt_surface
     1705
     1706!
     1707!-- Set mixing ratio at surface grid level. ( Only for upward-facing surfs. )
     1708    SUBROUTINE calc_q_surface
     1709
     1710       IMPLICIT NONE
     1711
     1712       INTEGER(iwp) ::  k_off   !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)
     1713       INTEGER(iwp) ::  m       !< loop variable over all horizontal surf elements
     1714       
     1715       k_off = surf%koff
     1716       !$OMP PARALLEL DO PRIVATE( i, j, k )
     1717       DO  m = 1, surf%ns
     1718
     1719          i   = surf%i(m)           
     1720          j   = surf%j(m)
     1721          k   = surf%k(m)
     1722
     1723          surf%q_surface(m) = q(k+k_off,j,i)
     1724
     1725       ENDDO
     1726
     1727    END SUBROUTINE calc_q_surface
     1728   
     1729!
     1730!-- Set virtual potential temperature at surface grid level.
     1731!-- ( only for upward-facing surfs )
     1732    SUBROUTINE calc_vpt_surface
    16601733
    16611734       IMPLICIT NONE
     
    16721745          k   = surf%k(m)
    16731746
    1674           surf%pt_surface(m) = pt(k+k_off,j,i)
    1675 
    1676        ENDDO
    1677 
    1678     END SUBROUTINE calc_pt_surface
    1679 
    1680 !
    1681 !-- Set mixing ratio at surface grid level. ( Only for upward-facing surfs. )
    1682     SUBROUTINE calc_q_surface
    1683 
    1684        IMPLICIT NONE
    1685 
    1686        INTEGER(iwp) ::  k_off   !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)
    1687        INTEGER(iwp) ::  m       !< loop variable over all horizontal surf elements
    1688        
    1689        k_off = surf%koff
    1690        !$OMP PARALLEL DO PRIVATE( i, j, k )
    1691        DO  m = 1, surf%ns
    1692 
    1693           i   = surf%i(m)           
    1694           j   = surf%j(m)
    1695           k   = surf%k(m)
    1696 
    1697           surf%q_surface(m) = q(k+k_off,j,i)
    1698 
    1699        ENDDO
    1700 
    1701     END SUBROUTINE calc_q_surface
    1702    
    1703 !
    1704 !-- Set virtual potential temperature at surface grid level.
    1705 !-- ( only for upward-facing surfs )
    1706     SUBROUTINE calc_vpt_surface
    1707 
    1708        IMPLICIT NONE
    1709 
    1710        INTEGER(iwp) ::  k_off    !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)
    1711        INTEGER(iwp) ::  m       !< loop variable over all horizontal surf elements
    1712        
    1713        k_off = surf%koff
    1714        !$OMP PARALLEL DO PRIVATE( i, j, k )
    1715        DO  m = 1, surf%ns
    1716 
    1717           i   = surf%i(m)           
    1718           j   = surf%j(m)
    1719           k   = surf%k(m)
    1720 
    17211747          surf%vpt_surface(m) = vpt(k+k_off,j,i)
    17221748
     
    17411767
    17421768          !$OMP PARALLEL DO PRIVATE( i, j, k )
     1769          !$ACC PARALLEL LOOP PRIVATE(i, j, k) &
     1770          !$ACC PRESENT(surf, drho_air_zw)
    17431771          DO  m = 1, surf%ns
    17441772
     
    20392067          IF ( .NOT. downward )  THEN
    20402068             !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
     2069             !$ACC PARALLEL LOOP PRIVATE(i, j, k, z_mo) &
     2070             !$ACC PRESENT(surf, u, rho_air_zw)
    20412071             DO  m = 1, surf%ns 
    20422072   
     
    20862116          IF ( .NOT. downward )  THEN
    20872117             !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
     2118             !$ACC PARALLEL LOOP PRIVATE(i, j, k, z_mo) &
     2119             !$ACC PRESENT(surf, v, rho_air_zw)
    20882120             DO  m = 1, surf%ns 
    20892121                i = surf%i(m)           
     
    23922424!-- Integrated stability function for momentum
    23932425    FUNCTION psi_m( zeta )
     2426       !$ACC ROUTINE SEQ
    23942427       
    23952428       USE kinds
     
    24292462!-- Integrated stability function for heat and moisture
    24302463    FUNCTION psi_h( zeta )
     2464       !$ACC ROUTINE SEQ
    24312465       
    24322466       USE kinds
     
    24692503!------------------------------------------------------------------------------!
    24702504    FUNCTION phi_m( zeta )
     2505       !$ACC ROUTINE SEQ
    24712506   
    24722507       IMPLICIT NONE
Note: See TracChangeset for help on using the changeset viewer.