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

OpenACC port for SPEC

File:
1 edited

Legend:

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

    r3550 r3634  
    2525! -----------------
    2626! $Id$
     27! OpenACC port for SPEC
     28!
     29! 3550 2018-11-21 16:01:01Z gronemeier
    2730! - calculate diss production same in vector and cache optimization
    2831! - move boundary condition for e and diss to boundary_conds
     
    16191622       ENDDO  !k loop
    16201623
     1624       !$ACC ENTER DATA COPYIN(l_black(nzb:nzt+1))
     1625
    16211626    ENDIF  !LES or RANS mode
    16221627
     
    16241629!-- Set lateral boundary conditions for l_wall
    16251630    CALL exchange_horiz( l_wall, nbgp )
     1631
     1632    !$ACC ENTER DATA COPYIN(l_grid(nzb:nzt+1)) &
     1633    !$ACC COPYIN(l_wall(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
    16261634
    16271635    CONTAINS
     
    17771785!--    Default surfaces, upward-facing
    17781786       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     1787       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     1788       !$ACC PRESENT(surf_def_h(0), u, v, drho_air_zw, zu)
    17791789       DO  m = 1, surf_def_h(0)%ns
    17801790
     
    18111821!--    Default surfaces, downward-facing surfaces
    18121822       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     1823       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     1824       !$ACC PRESENT(surf_def_h(1), u, v, drho_air_zw, zu, km)
    18131825       DO  m = 1, surf_def_h(1)%ns
    18141826
     
    18421854!--    Natural surfaces, upward-facing
    18431855       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     1856       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     1857       !$ACC PRESENT(surf_lsm_h, u, v, drho_air_zw, zu)
    18441858       DO  m = 1, surf_lsm_h%ns
    18451859
     
    18761890!--    Urban surfaces, upward-facing
    18771891       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     1892       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     1893       !$ACC PRESENT(surf_usm_h, u, v, drho_air_zw, zu)
    18781894       DO  m = 1, surf_usm_h%ns
    18791895
     
    19701986             CALL advec_s_up( e )
    19711987          ELSE
     1988             !$ACC KERNELS PRESENT(tend)
    19721989             tend = 0.0_wp
     1990             !$ACC END KERNELS
    19731991             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    19741992                IF ( ws_scheme_sca )  THEN
     
    20062024!--    reasons in the course of the integration. In such cases the old TKE
    20072025!--    value is reduced by 90%.
     2026       !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
     2027       !$ACC PRESENT(e, tend, te_m, wall_flags_0) &
     2028       !$ACC PRESENT(tsc(3:3)) &
     2029       !$ACC PRESENT(e_p)
    20082030       DO  i = nxl, nxr
    20092031          DO  j = nys, nyn
     
    20242046       IF ( timestep_scheme(1:5) == 'runge' )  THEN
    20252047          IF ( intermediate_timestep_count == 1 )  THEN
     2048             !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
     2049             !$ACC PRESENT(tend, te_m)
    20262050             DO  i = nxl, nxr
    20272051                DO  j = nys, nyn
     
    20332057          ELSEIF ( intermediate_timestep_count < &
    20342058                   intermediate_timestep_count_max )  THEN
     2059             !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
     2060             !$ACC PRESENT(tend, te_m)
    20352061             DO  i = nxl, nxr
    20362062                DO  j = nys, nyn
     
    23802406!-- points first, gradients at surface-bounded grid points will be
    23812407!-- overwritten further below.
     2408    !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j, l) &
     2409    !$ACC PRIVATE(surf_s, surf_e) &
     2410    !$ACC PRIVATE(dudx(:), dudy(:), dudz(:), dvdx(:), dvdy(:), dvdz(:), dwdx(:), dwdy(:), dwdz(:)) &
     2411    !$ACC PRESENT(e, u, v, w, diss, dd2zu, ddzw, km, wall_flags_0) &
     2412    !$ACC PRESENT(tend) &
     2413    !$ACC PRESENT(surf_def_h(0:1), surf_def_v(0:3)) &
     2414    !$ACC PRESENT(surf_lsm_h, surf_lsm_v(0:3)) &
     2415    !$ACC PRESENT(surf_usm_h, surf_usm_v(0:3))
    23822416    DO  i = nxl, nxr
    23832417       DO  j = nys, nyn
     2418          !$ACC LOOP PRIVATE(k)
    23842419          DO  k = nzb+1, nzt
    23852420
     
    24232458                surf_s = surf_def_v(l)%start_index(j,i)
    24242459                surf_e = surf_def_v(l)%end_index(j,i)
     2460                !$ACC LOOP PRIVATE(m, k, usvs, wsvs, km_neutral, sign_dir)
    24252461                DO  m = surf_s, surf_e
    24262462                   k           = surf_def_v(l)%k(m)
     
    24412477                surf_s = surf_lsm_v(l)%start_index(j,i)
    24422478                surf_e = surf_lsm_v(l)%end_index(j,i)
     2479                !$ACC LOOP PRIVATE(m, k, usvs, wsvs, km_neutral, sign_dir)
    24432480                DO  m = surf_s, surf_e
    24442481                   k           = surf_lsm_v(l)%k(m)
     
    24592496                surf_s = surf_usm_v(l)%start_index(j,i)
    24602497                surf_e = surf_usm_v(l)%end_index(j,i)
     2498                !$ACC LOOP PRIVATE(m, k, usvs, wsvs, km_neutral, sign_dir)
    24612499                DO  m = surf_s, surf_e
    24622500                   k           = surf_usm_v(l)%k(m)
     
    24792517                surf_s = surf_def_v(l)%start_index(j,i)
    24802518                surf_e = surf_def_v(l)%end_index(j,i)
     2519                !$ACC LOOP PRIVATE(m, k, vsus, wsus, km_neutral, sign_dir)
    24812520                DO  m = surf_s, surf_e
    24822521                   k     = surf_def_v(l)%k(m)
     
    24972536                surf_s = surf_lsm_v(l)%start_index(j,i)
    24982537                surf_e = surf_lsm_v(l)%end_index(j,i)
     2538                !$ACC LOOP PRIVATE(m, k, vsus, wsus, km_neutral, sign_dir)
    24992539                DO  m = surf_s, surf_e
    25002540                   k     = surf_lsm_v(l)%k(m)
     
    25152555                surf_s = surf_usm_v(l)%start_index(j,i)
    25162556                surf_e = surf_usm_v(l)%end_index(j,i)
     2557                !$ACC LOOP PRIVATE(m, k, vsus, wsus, km_neutral, sign_dir)
    25172558                DO  m = surf_s, surf_e
    25182559                   k     = surf_usm_v(l)%k(m)
     
    25342575             surf_s = surf_def_h(0)%start_index(j,i)
    25352576             surf_e = surf_def_h(0)%end_index(j,i)
     2577             !$ACC LOOP PRIVATE(m, k)
    25362578             DO  m = surf_s, surf_e
    25372579                k = surf_def_h(0)%k(m)
     
    25502592             surf_s = surf_lsm_h%start_index(j,i)
    25512593             surf_e = surf_lsm_h%end_index(j,i)
     2594             !$ACC LOOP PRIVATE(m, k)
    25522595             DO  m = surf_s, surf_e
    25532596                k = surf_lsm_h%k(m)
     
    25612604             surf_s = surf_usm_h%start_index(j,i)
    25622605             surf_e = surf_usm_h%end_index(j,i)
     2606             !$ACC LOOP PRIVATE(m, k)
    25632607             DO  m = surf_s, surf_e
    25642608                k = surf_usm_h%k(m)
     
    25732617             surf_s = surf_def_h(1)%start_index(j,i)
    25742618             surf_e = surf_def_h(1)%end_index(j,i)
     2619             !$ACC LOOP PRIVATE(m, k)
    25752620             DO  m = surf_s, surf_e
    25762621                k = surf_def_h(1)%k(m)
     
    25852630
    25862631
     2632          !$ACC LOOP PRIVATE(k, def, flag)
    25872633          DO  k = nzb+1, nzt
    25882634
     
    26842730          ELSE ! or IF ( .NOT. ocean_mode )  THEN
    26852731
     2732             !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
     2733             !$ACC PRIVATE(surf_s, surf_e) &
     2734             !$ACC PRIVATE(tmp_flux(nzb+1:nzt)) &
     2735             !$ACC PRESENT(e, diss, kh, pt, dd2zu, drho_air_zw, wall_flags_0) &
     2736             !$ACC PRESENT(tend) &
     2737             !$ACC PRESENT(surf_def_h(0:2)) &
     2738             !$ACC PRESENT(surf_lsm_h) &
     2739             !$ACC PRESENT(surf_usm_h)
    26862740             DO  i = nxl, nxr
    26872741                DO  j = nys, nyn
    26882742
     2743                   !$ACC LOOP PRIVATE(k)
    26892744                   DO  k = nzb+1, nzt
    26902745                      tmp_flux(k) = -1.0_wp * kh(k,j,i) * ( pt(k+1,j,i) - pt(k-1,j,i) ) * dd2zu(k)
     
    26972752                         surf_s = surf_def_h(l)%start_index(j,i)
    26982753                         surf_e = surf_def_h(l)%end_index(j,i)
     2754                         !$ACC LOOP PRIVATE(m, k)
    26992755                         DO  m = surf_s, surf_e
    27002756                            k = surf_def_h(l)%k(m)
     
    27062762                      surf_s = surf_lsm_h%start_index(j,i)
    27072763                      surf_e = surf_lsm_h%end_index(j,i)
     2764                      !$ACC LOOP PRIVATE(m, k)
    27082765                      DO  m = surf_s, surf_e
    27092766                         k = surf_lsm_h%k(m)
     
    27142771                      surf_s = surf_usm_h%start_index(j,i)
    27152772                      surf_e = surf_usm_h%end_index(j,i)
     2773                      !$ACC LOOP PRIVATE(m, k)
    27162774                      DO  m = surf_s, surf_e
    27172775                         k = surf_usm_h%k(m)
     
    27232781                      surf_s = surf_def_h(2)%start_index(j,i)
    27242782                      surf_e = surf_def_h(2)%end_index(j,i)
     2783                      !$ACC LOOP PRIVATE(m, k)
    27252784                      DO  m = surf_s, surf_e
    27262785                         k = surf_def_h(2)%k(m)
     
    27322791
    27332792!--                   Compute tendency for TKE-production from shear
     2793                     !$ACC LOOP PRIVATE(k, flag)
    27342794                      DO  k = nzb+1, nzt
    27352795                         flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_0(k,j,i),0) )
     
    36283688
    36293689    USE arrays_3d,                                                             &
    3630         ONLY:  ddzu, ddzw, drho_air, rho_air_zw
     3690        ONLY:  ddzu, dd2zu, ddzw, drho_air, rho_air_zw
     3691
     3692    USE control_parameters,                                                    &
     3693        ONLY:  atmos_ocean_sign, use_single_reference_value,                   &
     3694               wall_adjustment, wall_adjustment_factor
    36313695
    36323696    USE grid_variables,                                                        &
     
    36533717    REAL(wp)     ::  ll             !< adjusted l
    36543718    REAL(wp)     ::  var_reference  !< reference temperature
     3719#ifdef _OPENACC
     3720!
     3721!-- From mixing_length_les:
     3722    REAL(wp)     :: l_stable        !< mixing length according to stratification
     3723!
     3724!-- From mixing_length_rans:
     3725    REAL(wp)     :: duv2_dz2        !< squared vertical gradient of wind vector
     3726    REAL(wp)     :: l_diss          !< mixing length for dissipation
     3727    REAL(wp)     :: rif             !< Richardson flux number
     3728!
     3729!-- From both:
     3730    REAL(wp)     :: dvar_dz         !< vertical gradient of var
     3731#endif
    36553732
    36563733#if defined( __nopointer )
     
    36593736    REAL(wp), DIMENSION(:,:,:), POINTER ::  var  !< temperature
    36603737#endif
    3661     REAL(wp), DIMENSION(nzb+1:nzt,nys:nyn) ::  dissipation  !< TKE dissipation
     3738    REAL(wp)    ::  dissipation  !< TKE dissipation
    36623739
    36633740
    36643741!
    36653742!-- Calculate the tendency terms
     3743    !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
     3744    !$ACC PRIVATE(flag, l, ll, dissipation) &
     3745    !$ACC PRIVATE(l_stable, duv2_dz2, l_diss, rif, dvar_dz) &
     3746    !$ACC PRESENT(e, u, v, km, var, wall_flags_0) &
     3747    !$ACC PRESENT(ddzu, dd2zu, ddzw, rho_air_zw, drho_air) &
     3748    !$ACC PRESENT(l_black, l_grid, l_wall) &
     3749    !$ACC PRESENT(diss, tend)
    36663750    DO  i = nxl, nxr
    36673751       DO  j = nys, nyn
     
    36753759             IF ( les_dynamic .OR. les_mw )  THEN
    36763760
     3761#ifdef _OPENACC
     3762!
     3763!--             Cannot call subroutine mixing_length_les because after adding all required
     3764!--             OpenACC directives the execution crashed reliably when inside the called
     3765!--             subroutine. I'm not sure why that is...
     3766                dvar_dz = atmos_ocean_sign * ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
     3767                IF ( dvar_dz > 0.0_wp ) THEN
     3768                   IF ( use_single_reference_value )  THEN
     3769                      l_stable = 0.76_wp * SQRT( e(k,j,i) )                                &
     3770                                         / SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
     3771                   ELSE
     3772                      l_stable = 0.76_wp * SQRT( e(k,j,i) )                                &
     3773                                         / SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
     3774                   ENDIF
     3775                ELSE
     3776                   l_stable = l_grid(k)
     3777                ENDIF
     3778!
     3779!--             Adjustment of the mixing length
     3780                IF ( wall_adjustment )  THEN
     3781                   l  = MIN( wall_adjustment_factor * l_wall(k,j,i), l_grid(k), l_stable )
     3782                   ll = MIN( wall_adjustment_factor * l_wall(k,j,i), l_grid(k) )
     3783                ELSE
     3784                   l  = MIN( l_grid(k), l_stable )
     3785                   ll = l_grid(k)
     3786                ENDIF
     3787#else
    36773788                CALL mixing_length_les( i, j, k, l, ll, var, var_reference )
    3678 
    3679                 dissipation(k,j) = ( 0.19_wp + 0.74_wp * l / ll )              &
    3680                                    * e(k,j,i) * SQRT( e(k,j,i) ) / l
     3789#endif
     3790
     3791                dissipation = ( 0.19_wp + 0.74_wp * l / ll )                   &
     3792                              * e(k,j,i) * SQRT( e(k,j,i) ) / l
    36813793
    36823794             ELSEIF ( rans_tke_l )  THEN
    36833795
     3796#ifdef _OPENACC
     3797!
     3798!--             Same reason as above...
     3799                dvar_dz = atmos_ocean_sign * ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
     3800
     3801                duv2_dz2 =   ( ( u(k+1,j,i) - u(k-1,j,i) ) * dd2zu(k) )**2                 &
     3802                           + ( ( v(k+1,j,i) - v(k-1,j,i) ) * dd2zu(k) )**2                 &
     3803                           + 1E-30_wp
     3804
     3805                IF ( use_single_reference_value )  THEN
     3806                   rif = g / var_reference * dvar_dz / duv2_dz2
     3807                ELSE
     3808                   rif = g / var(k,j,i) * dvar_dz / duv2_dz2
     3809                ENDIF
     3810
     3811                rif = MAX( rif, -5.0_wp )
     3812                rif = MIN( rif,  1.0_wp )
     3813
     3814!
     3815!--             Calculate diabatic mixing length using Dyer-profile functions
     3816                IF ( rif >= 0.0_wp )  THEN
     3817                   l      = MIN( l_black(k) / ( 1.0_wp + 5.0_wp * rif ), l_wall(k,j,i) )
     3818                   l_diss = l
     3819                ELSE
     3820!
     3821!--                In case of unstable stratification, use mixing length of neutral case
     3822!--                for l, but consider profile functions for l_diss
     3823                   l      = l_wall(k,j,i)
     3824                   l_diss = l * SQRT( 1.0_wp - 16.0_wp * rif )
     3825                ENDIF
     3826#else
    36843827                CALL mixing_length_rans( i, j, k, l, ll, var, var_reference )
    3685 
    3686                 dissipation(k,j) = c_0**3 * e(k,j,i) * SQRT( e(k,j,i) ) / ll
    3687 
    3688                 diss(k,j,i) = dissipation(k,j) * flag
     3828#endif
     3829
     3830                dissipation = c_0**3 * e(k,j,i) * SQRT( e(k,j,i) ) / ll
     3831
     3832                diss(k,j,i) = dissipation * flag
    36893833
    36903834             ELSEIF ( rans_tke_e )  THEN
    36913835
    3692                 dissipation(k,j) = diss(k,j,i)
     3836                dissipation = diss(k,j,i)
    36933837
    36943838             ENDIF
     
    37103854                                           ) * ddzw(k) * drho_air(k)           &
    37113855                                         ) * flag * dsig_e                     &
    3712                           - dissipation(k,j) * flag
     3856                          - dissipation * flag
     3857!
     3858!--          Store dissipation if needed for calculating the sgs particle
     3859!--          velocities
     3860             IF ( .NOT. rans_tke_e .AND. ( use_sgs_for_particles  .OR.         &
     3861                  wang_kernel  .OR.  collision_turbulence  ) )  THEN
     3862                diss(k,j,i) = dissipation * flag
     3863             ENDIF
    37133864
    37143865          ENDDO
    37153866       ENDDO
    3716 
    3717 !
    3718 !--    Store dissipation if needed for calculating the sgs particle
    3719 !--    velocities
    3720        IF ( .NOT. rans_tke_e .AND. ( use_sgs_for_particles  .OR.               &
    3721             wang_kernel  .OR.  collision_turbulence  ) )  THEN
    3722           DO  j = nys, nyn
    3723              DO  k = nzb+1, nzt
    3724                 diss(k,j,i) = dissipation(k,j) * MERGE( 1.0_wp, 0.0_wp,        &
    3725                                                BTEST( wall_flags_0(k,j,i), 0 ) )
    3726              ENDDO
    3727           ENDDO
    3728        ENDIF
    3729 
    37303867    ENDDO
    37313868
     
    42574394!-- Downward facing surfaces
    42584395    !$OMP PARALLEL DO PRIVATE(i,j,k)
     4396    !$ACC PARALLEL LOOP PRIVATE(i,j,k) &
     4397    !$ACC PRESENT(bc_h(1), kh, km)
    42594398    DO  m = 1, bc_h(1)%ns
    42604399       i = bc_h(1)%i(m)
     
    42674406!-- Downward facing surfaces
    42684407    !$OMP PARALLEL DO PRIVATE(i,j,k)
     4408    !$ACC PARALLEL LOOP PRIVATE(i,j,k) &
     4409    !$ACC PRESENT(bc_h(0), kh, km)
    42694410    DO  m = 1, bc_h(0)%ns
    42704411       i = bc_h(0)%i(m)
     
    42774418!-- Model top
    42784419    !$OMP PARALLEL DO
     4420    !$ACC PARALLEL LOOP COLLAPSE(2) &
     4421    !$ACC PRESENT(kh, km)
    42794422    DO  i = nxlg, nxrg
    42804423       DO  j = nysg, nyng
     
    43154458 SUBROUTINE tcm_diffusivities_default( var, var_reference )
    43164459 
     4460    USE arrays_3d,                                                             &
     4461        ONLY:  dd2zu
     4462
     4463    USE control_parameters,                                                    &
     4464        ONLY:  atmos_ocean_sign, use_single_reference_value,                   &
     4465               wall_adjustment, wall_adjustment_factor
     4466
    43174467    USE statistics,                                                            &
    43184468        ONLY :  rmask, sums_l_l
     
    43314481    REAL(wp)     ::  ll                  !< adjusted mixing length
    43324482    REAL(wp)     ::  var_reference       !< reference temperature
     4483#ifdef _OPENACC
     4484!
     4485!-- From mixing_length_les:
     4486    REAL(wp)     :: l_stable        !< mixing length according to stratification
     4487    REAL(wp)     :: dvar_dz         !< vertical gradient of var
     4488#endif
    43334489
    43344490#if defined( __nopointer )
     
    43444500!
    43454501!-- Initialization for calculation of the mixing length profile
     4502    !$ACC KERNELS PRESENT(sums_l_l)
    43464503    sums_l_l = 0.0_wp
     4504    !$ACC END KERNELS
    43474505
    43484506!
     
    43534511    IF ( les_dynamic .OR. les_mw )  THEN
    43544512       !$OMP DO
     4513       !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(sr) &
     4514       !$ACC PRIVATE(flag, dvar_dz, l_stable, l, ll) &
     4515       !$ACC PRESENT(wall_flags_0, var, dd2zu, e, l_wall, l_grid, rmask) &
     4516       !$ACC PRESENT(kh, km, sums_l_l)
    43554517       DO  i = nxlg, nxrg
    43564518          DO  j = nysg, nyng
     
    43614523!
    43624524!--             Determine the mixing length for LES closure
     4525#ifdef _OPENACC
     4526!
     4527!--             Cannot call subroutine mixing_length_les because after adding all required
     4528!--             OpenACC directives the execution crashed reliably when inside the called
     4529!--             subroutine. I'm not sure why that is...
     4530                dvar_dz = atmos_ocean_sign * ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
     4531                IF ( dvar_dz > 0.0_wp ) THEN
     4532                   IF ( use_single_reference_value )  THEN
     4533                      l_stable = 0.76_wp * SQRT( e(k,j,i) )                                &
     4534                                         / SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
     4535                   ELSE
     4536                      l_stable = 0.76_wp * SQRT( e(k,j,i) )                                &
     4537                                         / SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
     4538                   ENDIF
     4539                ELSE
     4540                   l_stable = l_grid(k)
     4541                ENDIF
     4542!
     4543!--             Adjustment of the mixing length
     4544                IF ( wall_adjustment )  THEN
     4545                   l  = MIN( wall_adjustment_factor * l_wall(k,j,i), l_grid(k), l_stable )
     4546                   ll = MIN( wall_adjustment_factor * l_wall(k,j,i), l_grid(k) )
     4547                ELSE
     4548                   l  = MIN( l_grid(k), l_stable )
     4549                   ll = l_grid(k)
     4550                ENDIF
     4551#else
    43634552                CALL mixing_length_les( i, j, k, l, ll, var, var_reference )
     4553#endif
     4554
    43644555!
    43654556!--             Compute diffusion coefficients for momentum and heat
     
    44294620    ENDIF
    44304621
     4622    !$ACC KERNELS PRESENT(sums_l_l)
    44314623    sums_l_l(nzt+1,:,tn) = sums_l_l(nzt,:,tn)   ! quasi boundary-condition for
    44324624                                                ! data output
     4625    !$ACC END KERNELS
    44334626!$OMP END PARALLEL
    44344627
Note: See TracChangeset for help on using the changeset viewer.