Changeset 3658


Ignore:
Timestamp:
Jan 7, 2019 8:28:54 PM (5 years ago)
Author:
knoop
Message:

OpenACC: flow_statistics partly ported to GPU

Location:
palm/trunk/SOURCE
Files:
3 edited

Legend:

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

    r3651 r3658  
    427427!--    Initialize (local) summation array
    428428       sums_l = 0.0_wp
     429#ifdef _OPENACC
     430       !$ACC KERNELS PRESENT(sums_l)
     431       sums_l = 0.0_wp
     432       !$ACC END KERNELS
     433#endif
    429434
    430435!
     
    500505       !$ tn = omp_get_thread_num()
    501506       !$OMP DO
     507       !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k, flag) &
     508       !$ACC PRESENT(wall_flags_0, u, v, pt, rmask, sums_l)
    502509       DO  i = nxl, nxr
    503510          DO  j =  nys, nyn
    504511             DO  k = nzb, nzt+1
    505512                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 22 ) )
     513                !$ACC ATOMIC
    506514                sums_l(k,1,tn)  = sums_l(k,1,tn)  + u(k,j,i)  * rmask(j,i,sr)  &
    507515                                                              * flag
     516                !$ACC ATOMIC
    508517                sums_l(k,2,tn)  = sums_l(k,2,tn)  + v(k,j,i)  * rmask(j,i,sr)  &
    509518                                                              * flag
     519                !$ACC ATOMIC
    510520                sums_l(k,4,tn)  = sums_l(k,4,tn)  + pt(k,j,i) * rmask(j,i,sr)  &
    511521                                                              * flag
     
    513523          ENDDO
    514524       ENDDO
     525       !$ACC UPDATE HOST(sums_l(:,1,tn), sums_l(:,2,tn), sums_l(:,4,tn))
    515526
    516527!
     
    670681       hom(:,1,2,sr) = sums(:,2)             ! v
    671682       hom(:,1,4,sr) = sums(:,4)             ! pt
     683       !$ACC UPDATE DEVICE(hom(:,1,1,sr), hom(:,1,2,sr), hom(:,1,4,sr))
    672684
    673685
     
    714726       !$ tn = omp_get_thread_num()
    715727       !$OMP DO
     728       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j, k, m) &
     729       !$ACC PRIVATE(sums_l_etot, flag) &
     730       !$ACC PRESENT(wall_flags_0, rmask, momentumflux_output_conversion) &
     731       !$ACC PRESENT(hom(:,1,4,sr)) &
     732       !$ACC PRESENT(e, u, v, w, km, kh, p, pt) &
     733       !$ACC PRESENT(surf_def_h(0), surf_lsm_h, surf_usm_h) &
     734       !$ACC PRESENT(sums_l)
    716735       DO  i = nxl, nxr
    717736          DO  j =  nys, nyn
     
    721740!
    722741!--             Prognostic and diagnostic variables
     742                !$ACC ATOMIC
    723743                sums_l(k,3,tn)  = sums_l(k,3,tn)  + w(k,j,i)  * rmask(j,i,sr)  &
    724744                                                              * flag
     745                !$ACC ATOMIC
    725746                sums_l(k,8,tn)  = sums_l(k,8,tn)  + e(k,j,i)  * rmask(j,i,sr)  &
    726747                                                              * flag
     748                !$ACC ATOMIC
    727749                sums_l(k,9,tn)  = sums_l(k,9,tn)  + km(k,j,i) * rmask(j,i,sr)  &
    728750                                                              * flag
     751                !$ACC ATOMIC
    729752                sums_l(k,10,tn) = sums_l(k,10,tn) + kh(k,j,i) * rmask(j,i,sr)  &
    730753                                                              * flag
     754                !$ACC ATOMIC
    731755                sums_l(k,40,tn) = sums_l(k,40,tn) + ( p(k,j,i)                 &
    732756                                         / momentumflux_output_conversion(k) ) &
    733757                                                              * flag
    734758
     759                !$ACC ATOMIC
    735760                sums_l(k,33,tn) = sums_l(k,33,tn) + &
    736761                                  ( pt(k,j,i)-hom(k,1,4,sr) )**2 * rmask(j,i,sr)&
    737762                                                                 * flag
    738 
     763#ifndef _OPENACC
    739764                IF ( humidity )  THEN
    740765                   sums_l(k,70,tn) = sums_l(k,70,tn) + &
     
    747772                                                                  * flag
    748773                ENDIF
     774#endif
    749775!
    750776!--             Higher moments
    751777!--             (Computation of the skewness of w further below)
     778                !$ACC ATOMIC
    752779                sums_l(k,38,tn) = sums_l(k,38,tn) + w(k,j,i)**3 * rmask(j,i,sr) &
    753780                                                                * flag
     
    763790!--          quantities is seperated from the previous loop in order to
    764791!--          allow vectorization of that loop.
     792             !$ACC ATOMIC
    765793             sums_l(nzb+4,pr_palm,tn) = sums_l(nzb+4,pr_palm,tn) + sums_l_etot
    766794!
     
    769797                  surf_def_h(0)%start_index(j,i) )  THEN
    770798                m = surf_def_h(0)%start_index(j,i)
     799                !$ACC ATOMIC
    771800                sums_l(nzb,pr_palm,tn)   = sums_l(nzb,pr_palm,tn) +            &
    772801                                        surf_def_h(0)%us(m)   * rmask(j,i,sr)
     802                !$ACC ATOMIC
    773803                sums_l(nzb+1,pr_palm,tn) = sums_l(nzb+1,pr_palm,tn) +          &
    774804                                        surf_def_h(0)%usws(m) * rmask(j,i,sr)
     805                !$ACC ATOMIC
    775806                sums_l(nzb+2,pr_palm,tn) = sums_l(nzb+2,pr_palm,tn) +          &
    776807                                        surf_def_h(0)%vsws(m) * rmask(j,i,sr)
     808                !$ACC ATOMIC
    777809                sums_l(nzb+3,pr_palm,tn) = sums_l(nzb+3,pr_palm,tn) +          &
    778810                                        surf_def_h(0)%ts(m)   * rmask(j,i,sr)
     811#ifndef _OPENACC
    779812                IF ( humidity )  THEN
    780813                   sums_l(nzb+12,pr_palm,tn) = sums_l(nzb+12,pr_palm,tn) +     &
     
    785818                                            surf_def_h(0)%ss(m)   * rmask(j,i,sr)
    786819                ENDIF
     820#endif
    787821!
    788822!--             Summation of surface temperature.
     823                !$ACC ATOMIC
    789824                sums_l(nzb+14,pr_palm,tn) = sums_l(nzb+14,pr_palm,tn)   +      &
    790825                                            surf_def_h(0)%pt_surface(m) *      &
     
    793828             IF ( surf_lsm_h%end_index(j,i) >= surf_lsm_h%start_index(j,i) )  THEN
    794829                m = surf_lsm_h%start_index(j,i)
     830                !$ACC ATOMIC
    795831                sums_l(nzb,pr_palm,tn)   = sums_l(nzb,pr_palm,tn) +            &
    796832                                        surf_lsm_h%us(m)   * rmask(j,i,sr)
     833                !$ACC ATOMIC
    797834                sums_l(nzb+1,pr_palm,tn) = sums_l(nzb+1,pr_palm,tn) +          &
    798835                                        surf_lsm_h%usws(m) * rmask(j,i,sr)
     836                !$ACC ATOMIC
    799837                sums_l(nzb+2,pr_palm,tn) = sums_l(nzb+2,pr_palm,tn) +          &
    800838                                        surf_lsm_h%vsws(m) * rmask(j,i,sr)
     839                !$ACC ATOMIC
    801840                sums_l(nzb+3,pr_palm,tn) = sums_l(nzb+3,pr_palm,tn) +          &
    802841                                        surf_lsm_h%ts(m)   * rmask(j,i,sr)
     842#ifndef _OPENACC
    803843                IF ( humidity )  THEN
    804844                   sums_l(nzb+12,pr_palm,tn) = sums_l(nzb+12,pr_palm,tn) +     &
     
    809849                                            surf_lsm_h%ss(m)   * rmask(j,i,sr)
    810850                ENDIF
     851#endif
    811852!
    812853!--             Summation of surface temperature.
     854                !$ACC ATOMIC
    813855                sums_l(nzb+14,pr_palm,tn) = sums_l(nzb+14,pr_palm,tn)   +      &
    814856                                            surf_lsm_h%pt_surface(m)    *      &
     
    817859             IF ( surf_usm_h%end_index(j,i) >= surf_usm_h%start_index(j,i) )  THEN
    818860                m = surf_usm_h%start_index(j,i)
     861                !$ACC ATOMIC
    819862                sums_l(nzb,pr_palm,tn)   = sums_l(nzb,pr_palm,tn) +            &
    820863                                        surf_usm_h%us(m)   * rmask(j,i,sr)
     864                !$ACC ATOMIC
    821865                sums_l(nzb+1,pr_palm,tn) = sums_l(nzb+1,pr_palm,tn) +          &
    822866                                        surf_usm_h%usws(m) * rmask(j,i,sr)
     867                !$ACC ATOMIC
    823868                sums_l(nzb+2,pr_palm,tn) = sums_l(nzb+2,pr_palm,tn) +          &
    824869                                        surf_usm_h%vsws(m) * rmask(j,i,sr)
     870                !$ACC ATOMIC
    825871                sums_l(nzb+3,pr_palm,tn) = sums_l(nzb+3,pr_palm,tn) +          &
    826872                                        surf_usm_h%ts(m)   * rmask(j,i,sr)
     873#ifndef _OPENACC
    827874                IF ( humidity )  THEN
    828875                   sums_l(nzb+12,pr_palm,tn) = sums_l(nzb+12,pr_palm,tn) +     &
     
    833880                                            surf_usm_h%ss(m)   * rmask(j,i,sr)
    834881                ENDIF
     882#endif
    835883!
    836884!--             Summation of surface temperature.
     885                !$ACC ATOMIC
    837886                sums_l(nzb+14,pr_palm,tn) = sums_l(nzb+14,pr_palm,tn)   +      &
    838887                                            surf_usm_h%pt_surface(m)    *      &
     
    841890          ENDDO
    842891       ENDDO
     892       !$ACC UPDATE &
     893       !$ACC HOST(sums_l(:,3,tn), sums_l(:,8,tn), sums_l(:,9,tn)) &
     894       !$ACC HOST(sums_l(:,10,tn), sums_l(:,40,tn), sums_l(:,33,tn)) &
     895       !$ACC HOST(sums_l(:,38,tn)) &
     896       !$ACC HOST(sums_l(nzb:nzb+4,pr_palm,tn), sums_l(nzb+14:nzb+14,pr_palm,tn))
    843897
    844898!
     
    882936!--    term.
    883937       !$OMP DO
     938       !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k, flag, w2, ust2, vst2) &
     939       !$ACC PRESENT(wall_flags_0, u, v, w, rmask, hom(:,1,1:2,sr)) &
     940       !$ACC PRESENT(sums_l)
    884941       DO  i = nxl, nxr
    885942          DO  j =  nys, nyn
     
    892949                w2   = w(k,j,i)**2
    893950
     951                !$ACC ATOMIC
    894952                sums_l(nzb+5,pr_palm,tn) = sums_l(nzb+5,pr_palm,tn)            &
    895953                                 + 0.5_wp * ( ust2 + vst2 + w2 )               &
     
    899957          ENDDO
    900958       ENDDO
     959       !$ACC UPDATE HOST(sums_l(nzb+5:nzb+5,pr_palm,tn))
    901960
    902961!
     
    904963
    905964       !$OMP DO
     965       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j, k, l, m) &
     966       !$ACC PRIVATE(ki, flag, ust, vst, pts) &
     967       !$ACC PRESENT(kh, km, u, v, w, pt) &
     968       !$ACC PRESENT(wall_flags_0, rmask, ddzu, rho_air_zw, hom(:,1,1:4,sr)) &
     969       !$ACC PRESENT(heatflux_output_conversion, momentumflux_output_conversion) &
     970       !$ACC PRESENT(surf_def_h(0:2), surf_lsm_h, surf_usm_h) &
     971       !$ACC PRESENT(sums_l)
    906972       DO  i = nxl, nxr
    907973          DO  j = nys, nyn
     
    923989!
    924990!--             Momentum flux w"u"
     991                !$ACC ATOMIC
    925992                sums_l(k,12,tn) = sums_l(k,12,tn) - 0.25_wp * (                &
    926993                               km(k,j,i)+km(k+1,j,i)+km(k,j,i-1)+km(k+1,j,i-1) &
     
    9341001!
    9351002!--             Momentum flux w"v"
     1003                !$ACC ATOMIC
    9361004                sums_l(k,14,tn) = sums_l(k,14,tn) - 0.25_wp * (                &
    9371005                               km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) &
     
    9451013!
    9461014!--             Heat flux w"pt"
     1015                !$ACC ATOMIC
    9471016                sums_l(k,16,tn) = sums_l(k,16,tn)                              &
    9481017                                         - 0.5_wp * ( kh(k,j,i) + kh(k+1,j,i) )&
     
    9531022                                               * flag
    9541023
    955 
    9561024!
    9571025!--             Salinity flux w"sa"
     1026#ifndef _OPENACC
    9581027                IF ( ocean_mode )  THEN
    9591028                   sums_l(k,65,tn) = sums_l(k,65,tn)                           &
     
    10001069                                                              * flag
    10011070                ENDIF
     1071#endif
    10021072
    10031073             ENDDO
     
    10071077             IF ( use_surface_fluxes )  THEN
    10081078                DO  l = 0, 1
    1009                    ki = MERGE( -1, 0, l == 0 )
     1079                   ! The original code using MERGE doesn't work with the PGI
     1080                   ! compiler when running on the GPU.
     1081                   ! ki = MERGE( -1, 0, l == 0 )
     1082                   ki = -1 + l
    10101083                   IF ( surf_def_h(l)%ns >= 1 )  THEN
    10111084                      DO  m = surf_def_h(l)%start_index(j,i),                  &
     
    10131086                         k = surf_def_h(l)%k(m)
    10141087
     1088                         !$ACC ATOMIC
    10151089                         sums_l(k+ki,12,tn) = sums_l(k+ki,12,tn) + &
    10161090                                    momentumflux_output_conversion(k+ki) * &
    10171091                                    surf_def_h(l)%usws(m) * rmask(j,i,sr)     ! w"u"
     1092                         !$ACC ATOMIC
    10181093                         sums_l(k+ki,14,tn) = sums_l(k+ki,14,tn) + &
    10191094                                    momentumflux_output_conversion(k+ki) * &
    10201095                                    surf_def_h(l)%vsws(m) * rmask(j,i,sr)     ! w"v"
     1096                         !$ACC ATOMIC
    10211097                         sums_l(k+ki,16,tn) = sums_l(k+ki,16,tn) + &
    10221098                                    heatflux_output_conversion(k+ki) * &
    10231099                                    surf_def_h(l)%shf(m)  * rmask(j,i,sr)     ! w"pt"
     1100#if 0
    10241101                         sums_l(k+ki,58,tn) = sums_l(k+ki,58,tn) + &
    10251102                                    0.0_wp * rmask(j,i,sr)        ! u"pt"
    10261103                         sums_l(k+ki,61,tn) = sums_l(k+ki,61,tn) + &
    10271104                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
     1105#endif
     1106#ifndef _OPENACC
    10281107                         IF ( ocean_mode )  THEN
    10291108                            sums_l(k+ki,65,tn) = sums_l(k+ki,65,tn) + &
     
    10581137                                        surf_def_h(l)%ssws(m) * rmask(j,i,sr) ! w"s"
    10591138                         ENDIF
     1139#endif
    10601140
    10611141                      ENDDO
     
    10661146                     surf_lsm_h%start_index(j,i) )  THEN
    10671147                   m = surf_lsm_h%start_index(j,i)
     1148                   !$ACC ATOMIC
    10681149                   sums_l(nzb,12,tn) = sums_l(nzb,12,tn) + &
    10691150                                    momentumflux_output_conversion(nzb) * &
    10701151                                    surf_lsm_h%usws(m) * rmask(j,i,sr)     ! w"u"
     1152                   !$ACC ATOMIC
    10711153                   sums_l(nzb,14,tn) = sums_l(nzb,14,tn) + &
    10721154                                    momentumflux_output_conversion(nzb) * &
    10731155                                    surf_lsm_h%vsws(m) * rmask(j,i,sr)     ! w"v"
     1156                   !$ACC ATOMIC
    10741157                   sums_l(nzb,16,tn) = sums_l(nzb,16,tn) + &
    10751158                                    heatflux_output_conversion(nzb) * &
    10761159                                    surf_lsm_h%shf(m)  * rmask(j,i,sr)     ! w"pt"
     1160#if 0
    10771161                   sums_l(nzb,58,tn) = sums_l(nzb,58,tn) + &
    10781162                                    0.0_wp * rmask(j,i,sr)        ! u"pt"
    10791163                   sums_l(nzb,61,tn) = sums_l(nzb,61,tn) + &
    10801164                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
     1165#endif
     1166#ifndef _OPENACC
    10811167                   IF ( ocean_mode )  THEN
    10821168                      sums_l(nzb,65,tn) = sums_l(nzb,65,tn) + &
     
    11111197                                        surf_lsm_h%ssws(m) * rmask(j,i,sr) ! w"s"
    11121198                   ENDIF
    1113 
     1199#endif
    11141200
    11151201                ENDIF
     
    11171203                     surf_usm_h%start_index(j,i) )  THEN
    11181204                   m = surf_usm_h%start_index(j,i)
     1205                   !$ACC ATOMIC
    11191206                   sums_l(nzb,12,tn) = sums_l(nzb,12,tn) + &
    11201207                                    momentumflux_output_conversion(nzb) * &
    11211208                                    surf_usm_h%usws(m) * rmask(j,i,sr)     ! w"u"
     1209                   !$ACC ATOMIC
    11221210                   sums_l(nzb,14,tn) = sums_l(nzb,14,tn) + &
    11231211                                    momentumflux_output_conversion(nzb) * &
    11241212                                    surf_usm_h%vsws(m) * rmask(j,i,sr)     ! w"v"
     1213                   !$ACC ATOMIC
    11251214                   sums_l(nzb,16,tn) = sums_l(nzb,16,tn) + &
    11261215                                    heatflux_output_conversion(nzb) * &
    11271216                                    surf_usm_h%shf(m)  * rmask(j,i,sr)     ! w"pt"
     1217#if 0
    11281218                   sums_l(nzb,58,tn) = sums_l(nzb,58,tn) + &
    11291219                                    0.0_wp * rmask(j,i,sr)        ! u"pt"
    11301220                   sums_l(nzb,61,tn) = sums_l(nzb,61,tn) + &
    11311221                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
     1222#endif
     1223#ifndef _OPENACC
    11321224                   IF ( ocean_mode )  THEN
    11331225                      sums_l(nzb,65,tn) = sums_l(nzb,65,tn) + &
     
    11621254                                        surf_usm_h%ssws(m) * rmask(j,i,sr) ! w"s"
    11631255                   ENDIF
    1164 
     1256#endif
    11651257
    11661258                ENDIF
     
    11681260             ENDIF
    11691261
     1262#ifndef _OPENACC
    11701263             IF ( .NOT. neutral )  THEN
    11711264                IF ( surf_def_h(0)%end_index(j,i) >=                           &
     
    12841377#endif
    12851378             ENDIF
     1379#endif
    12861380!
    12871381!--          Subgridscale fluxes at the top surface
    12881382             IF ( use_top_fluxes )  THEN
    12891383                m = surf_def_h(2)%start_index(j,i)
    1290                 sums_l(nzt:nzt+1,12,tn) = sums_l(nzt:nzt+1,12,tn) + &
    1291                                     momentumflux_output_conversion(nzt:nzt+1) * &
     1384                !$ACC ATOMIC
     1385                sums_l(nzt,12,tn) = sums_l(nzt,12,tn) + &
     1386                                    momentumflux_output_conversion(nzt) * &
    12921387                                    surf_def_h(2)%usws(m) * rmask(j,i,sr)    ! w"u"
    1293                 sums_l(nzt:nzt+1,14,tn) = sums_l(nzt:nzt+1,14,tn) + &
    1294                                     momentumflux_output_conversion(nzt:nzt+1) * &
     1388                !$ACC ATOMIC
     1389                sums_l(nzt+1,12,tn) = sums_l(nzt+1,12,tn) + &
     1390                                    momentumflux_output_conversion(nzt+1) * &
     1391                                    surf_def_h(2)%usws(m) * rmask(j,i,sr)    ! w"u"
     1392                !$ACC ATOMIC
     1393                sums_l(nzt,14,tn) = sums_l(nzt,14,tn) + &
     1394                                    momentumflux_output_conversion(nzt) * &
    12951395                                    surf_def_h(2)%vsws(m) * rmask(j,i,sr)    ! w"v"
    1296                 sums_l(nzt:nzt+1,16,tn) = sums_l(nzt:nzt+1,16,tn) + &
    1297                                     heatflux_output_conversion(nzt:nzt+1) * &
     1396                !$ACC ATOMIC
     1397                sums_l(nzt+1,14,tn) = sums_l(nzt+1,14,tn) + &
     1398                                    momentumflux_output_conversion(nzt+1) * &
     1399                                    surf_def_h(2)%vsws(m) * rmask(j,i,sr)    ! w"v"
     1400                !$ACC ATOMIC
     1401                sums_l(nzt,16,tn) = sums_l(nzt,16,tn) + &
     1402                                    heatflux_output_conversion(nzt) * &
    12981403                                    surf_def_h(2)%shf(m)  * rmask(j,i,sr)   ! w"pt"
     1404                !$ACC ATOMIC
     1405                sums_l(nzt+1,16,tn) = sums_l(nzt+1,16,tn) + &
     1406                                    heatflux_output_conversion(nzt+1) * &
     1407                                    surf_def_h(2)%shf(m)  * rmask(j,i,sr)   ! w"pt"
     1408#if 0
    12991409                sums_l(nzt:nzt+1,58,tn) = sums_l(nzt:nzt+1,58,tn) + &
    13001410                                    0.0_wp * rmask(j,i,sr)        ! u"pt"
    13011411                sums_l(nzt:nzt+1,61,tn) = sums_l(nzt:nzt+1,61,tn) + &
    13021412                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
    1303 
     1413#endif
     1414#ifndef _OPENACC
    13041415                IF ( ocean_mode )  THEN
    13051416                   sums_l(nzt,65,tn) = sums_l(nzt,65,tn) + &
     
    13371448                                        surf_def_h(2)%ssws(m) * rmask(j,i,sr) ! w"s"
    13381449                ENDIF
     1450#endif
    13391451             ENDIF
    13401452
     
    13541466
    13551467!--             Higher moments
     1468                !$ACC ATOMIC
    13561469                sums_l(k,35,tn) = sums_l(k,35,tn) + pts * w(k,j,i)**2 *        &
    13571470                                                    rmask(j,i,sr) * flag
     1471                !$ACC ATOMIC
    13581472                sums_l(k,36,tn) = sums_l(k,36,tn) + pts**2 * w(k,j,i) *        &
    13591473                                                    rmask(j,i,sr) * flag
     
    13621476!--             Salinity flux and density (density does not belong to here,
    13631477!--             but so far there is no other suitable place to calculate)
     1478#ifndef _OPENACC
    13641479                IF ( ocean_mode )  THEN
    13651480                   IF( .NOT. ws_scheme_sca .OR. sr /= 0 )  THEN
     
    14471562                                                       rmask(j,i,sr) * flag
    14481563                ENDIF
     1564#endif
    14491565
    14501566!
    14511567!--             Energy flux w*e*
    14521568!--             has to be adjusted
     1569                !$ACC ATOMIC
    14531570                sums_l(k,37,tn) = sums_l(k,37,tn) + w(k,j,i) * 0.5_wp *        &
    14541571                                             ( ust**2 + vst**2 + w(k,j,i)**2 ) &
     
    14601577       ENDDO
    14611578       !$OMP END PARALLEL
     1579
     1580       !$ACC UPDATE &
     1581       !$ACC HOST(sums_l(:,12,tn), sums_l(:,14,tn), sums_l(:,16,tn)) &
     1582       !$ACC HOST(sums_l(:,35,tn), sums_l(:,36,tn), sums_l(:,37,tn))
    14621583!
    14631584!--    Treat land-surface quantities according to new wall model structure.
  • palm/trunk/SOURCE/time_integration.f90

    r3648 r3658  
    442442               rho_air_zw, rho_ocean, s, s_p, sa_p, te_m, tend, tpt_m, tu_m,   &
    443443               tv_m, tw_m, u, ug, u_init, u_p, u_stokes_zu, v, vg, v_init, vpt,&
    444                v_p, v_stokes_zu, w, w_p, zu
     444               v_p, v_stokes_zu, w, w_p, zu, heatflux_output_conversion,       &
     445               momentumflux_output_conversion
    445446
    446447    USE biometeorology_mod,                                                    &
     
    585586    USE statistics,                                                            &
    586587        ONLY:  flow_statistics_called, hom, pr_palm, sums_ls_l,                &
    587                rmask, statistic_regions, weight_substep, sums_l_l,             &
     588               rmask, statistic_regions, weight_substep, sums_l, sums_l_l,     &
    588589               sums_us2_ws_l, sums_wsus_ws_l, sums_vs2_ws_l, sums_wsvs_ws_l,   &
    589590               sums_ws2_ws_l, sums_wspts_ws_l, sums_wsqs_ws_l, sums_wssas_ws_l,&
     
    685686!$ACC COPYIN(ddzu(1:nzt+1), dd2zu(1:nzt)) &
    686687!$ACC COPYIN(ddzw(1:nzt+1)) &
     688!$ACC COPYIN(heatflux_output_conversion(nzb:nzt+1)) &
     689!$ACC COPYIN(momentumflux_output_conversion(nzb:nzt+1)) &
    687690!$ACC COPYIN(rdf(nzb+1:nzt), rdf_sc(nzb+1:nzt)) &
    688691!$ACC COPYIN(ptdf_x(nxlg:nxrg), ptdf_y(nysg:nyng)) &
     
    715718! Copy data from statistics
    716719!$ACC DATA &
    717 !$ACC COPYIN(hom(nzb+1:nzb_max,1,1:3,0)) &
     720!$ACC COPYIN(hom(0:nz+1,1:2,1:4,0)) &
    718721!$ACC COPYIN(rmask(nysg:nyng,nxlg:nxrg,0:statistic_regions)) &
    719722!$ACC COPYIN(weight_substep(1:intermediate_timestep_count_max)) &
     723!$ACC COPY(sums_l(nzb:nzt+1,1:pr_palm,0)) &
    720724!$ACC COPY(sums_l_l(nzb:nzt+1,0:statistic_regions,0)) &
    721725!$ACC COPY(sums_us2_ws_l(nzb:nzt+1,0)) &
     
    734738!$ACC COPY(sums_salsa_ws_l(nzb:nzt+1,0))
    735739
     740#ifdef _OPENACC
     741    CALL enter_surface_arrays
     742#endif
     743
    736744!
    737745!-- At beginning determine the first time step
     
    849857       ENDIF   
    850858       
    851 #ifdef _OPENACC
    852        CALL enter_surface_arrays
    853 #endif
    854        
    855859!
    856860!--    Start of intermediate step loop
     
    13691373!
    13701374!--    Will be used at some point by flow_statistics.
    1371        !$ACC UPDATE HOST(e, u, v, w, pt) &
    1372        !$ACC HOST(kh(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
    1373        !$ACC HOST(km(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     1375       !$ACC UPDATE &
    13741376       !$ACC HOST(sums_l_l(nzb:nzt+1,0:statistic_regions,0)) &
    13751377       !$ACC HOST(sums_us2_ws_l(nzb:nzt+1,0)) &
     
    13871389       !$ACC HOST(sums_wsss_ws_l(nzb:nzt+1,0)) &
    13881390       !$ACC HOST(sums_salsa_ws_l(nzb:nzt+1,0))
    1389 #ifdef _OPENACC
    1390        CALL exit_surface_arrays
    1391 #endif
    13921391
    13931392!
     
    18101809    ENDDO   ! time loop
    18111810
     1811#ifdef _OPENACC
     1812    CALL exit_surface_arrays
     1813#endif
    18121814!$ACC END DATA
    18131815!$ACC END DATA
  • palm/trunk/SOURCE/timestep.f90

    r3655 r3658  
    211211
    212212    CALL cpu_log( log_point(12), 'calculate_timestep', 'start' )
     213
     214    !$ACC UPDATE &
     215    !$ACC HOST(u(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     216    !$ACC HOST(v(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     217    !$ACC HOST(w(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     218    !$ACC HOST(kh(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     219    !$ACC HOST(km(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
     220
    213221!
    214222!--    Save former time step as reference
Note: See TracChangeset for help on using the changeset viewer.