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/time_integration.f90

    r3597 r3634  
    2525! -----------------
    2626! $Id$
     27! OpenACC port for SPEC
     28!
     29! 3597 2018-12-04 08:40:18Z maronga
    2730! Removed call to calculation of near air (10 cm) potential temperature (now in
    2831! surface layer fluxes)
     
    421424
    422425    USE arrays_3d,                                                             &
    423         ONLY:  diss, diss_p, dzu, e, e_p, nc, nc_p, nr, nr_p, prho, pt, pt_p, pt_init, &
    424                q_init, q, qc, qc_p, ql, ql_c, ql_v, ql_vp, qr, qr_p, q_p,      &
    425                ref_state, rho_ocean, s, s_p, sa_p, tend, u, u_p, v, vpt,       &
    426                v_p, w, w_p
     426        ONLY:  d, diss, diss_p, ddzu, dd2zu, ddzw, drho_air, drho_air_zw, dzu, &
     427               dzw, e, e_p, kh, km, nc, nc_p, nr, nr_p, p, prho, pt, pt_p,     &
     428               pt_init, ptdf_x, ptdf_y, q_init, q, qc, qc_p, ql, ql_c, ql_v,   &
     429               ql_vp, qr, qr_p, q_p, rdf, rdf_sc, ref_state, rho_air,          &
     430               rho_air_zw, rho_ocean, s, s_p, sa_p, te_m, tend, tpt_m, tu_m,   &
     431               tv_m, tw_m, u, ug, u_init, u_p, u_stokes_zu, v, vg, v_init, vpt,&
     432               v_p, v_stokes_zu, w, w_p, zu
    427433
    428434    USE biometeorology_mod,                                                    &
     
    479485               time_dopr_listing, time_dopts, time_dosp, time_dosp_av,         &
    480486               time_dots, time_do_av, time_do_sla, time_disturb, time_dvrp,    &
    481                time_run_control, time_since_reference_point,                   &
     487               time_run_control, time_since_reference_point, tsc,              &
    482488               turbulent_inflow, turbulent_outflow, urban_surface,             &
    483489               use_initial_profile_as_reference,                               &
     
    499505
    500506    USE indices,                                                               &
    501         ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, nzb, nzt
     507        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt, &
     508               nz, nzb_max, advc_flags_1, advc_flags_2, wall_flags_0
    502509
    503510    USE indoor_model_mod,                                                      &
     
    556563              salsa_boundary_conds, salsa_gas, salsa_gases_from_chem,          &
    557564              skip_time_do_salsa                     
     565   
     566    USE salsa_util_mod,                                                        &
     567           ONLY:  sums_salsa_ws_l     
    558568
    559569    USE spectra_mod,                                                           &
     
    562572
    563573    USE statistics,                                                            &
    564         ONLY:  flow_statistics_called, hom, pr_palm, sums_ls_l
     574        ONLY:  flow_statistics_called, hom, pr_palm, sums_ls_l,                &
     575               rmask, statistic_regions, weight_substep, sums_l_l,             &
     576               sums_us2_ws_l, sums_wsus_ws_l, sums_vs2_ws_l, sums_wsvs_ws_l,   &
     577               sums_ws2_ws_l, sums_wspts_ws_l, sums_wsqs_ws_l, sums_wssas_ws_l,&
     578               sums_wsqcs_ws_l, sums_wsqrs_ws_l, sums_wsncs_ws_l,              &
     579               sums_wsnrs_ws_l, sums_wsss_ws_l
    565580
    566581    USE surface_layer_fluxes_mod,                                              &
     
    568583
    569584    USE surface_mod,                                                           &
    570         ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
     585        ONLY:  bc_h, surf_def_h, surf_lsm_h, surf_usm_h,                       &
     586               enter_surface_arrays, exit_surface_arrays
    571587
    572588    USE surface_output_mod,                                                    &
     
    623639    REAL(wp) ::  time_since_reference_point_save  !< original value of
    624640                                                  !< time_since_reference_point
     641
     642
     643! Copy data from arrays_3d
     644!$ACC DATA &
     645!$ACC COPY(d(nzb+1:nzt,nys:nyn,nxl:nxr)) &
     646!$ACC COPY(e(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     647!$ACC COPY(u(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     648!$ACC COPY(v(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     649!$ACC COPY(w(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     650!$ACC COPY(kh(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     651!$ACC COPY(km(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     652!$ACC COPY(p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     653!$ACC COPY(pt(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
     654
     655!$ACC DATA &
     656!$ACC COPY(e_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     657!$ACC COPY(u_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     658!$ACC COPY(v_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     659!$ACC COPY(w_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     660!$ACC COPY(pt_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     661!$ACC COPY(tend(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     662!$ACC COPY(te_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     663!$ACC COPY(tu_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     664!$ACC COPY(tv_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     665!$ACC COPY(tw_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     666!$ACC COPY(tpt_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
     667
     668!$ACC DATA &
     669!$ACC COPYIN(rho_air(nzb:nzt+1), drho_air(nzb:nzt+1)) &
     670!$ACC COPYIN(rho_air_zw(nzb:nzt+1), drho_air_zw(nzb:nzt+1)) &
     671!$ACC COPYIN(zu(nzb:nzt+1)) &
     672!$ACC COPYIN(dzu(1:nzt+1), dzw(1:nzt+1)) &
     673!$ACC COPYIN(ddzu(1:nzt+1), dd2zu(1:nzt)) &
     674!$ACC COPYIN(ddzw(1:nzt+1)) &
     675!$ACC COPYIN(rdf(nzb+1:nzt), rdf_sc(nzb+1:nzt)) &
     676!$ACC COPYIN(ptdf_x(nxlg:nxrg), ptdf_y(nysg:nyng)) &
     677!$ACC COPYIN(ref_state(0:nz+1)) &
     678!$ACC COPYIN(u_init(0:nz+1), v_init(0:nz+1)) &
     679!$ACC COPYIN(u_stokes_zu(nzb:nzt+1), v_stokes_zu(nzb:nzt+1)) &
     680!$ACC COPYIN(pt_init(0:nz+1)) &
     681!$ACC COPYIN(ug(0:nz+1), vg(0:nz+1))
     682
     683! Copy data from control_parameters
     684!$ACC DATA &
     685!$ACC COPYIN(tsc(1:5))
     686
     687! Copy data from indices
     688!$ACC DATA &
     689!$ACC COPYIN(advc_flags_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     690!$ACC COPYIN(advc_flags_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     691!$ACC COPYIN(wall_flags_0(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
     692
     693! Copy data from surface_mod
     694!$ACC DATA &
     695!$ACC COPYIN(bc_h(0:1)) &
     696!$ACC COPYIN(bc_h(0)%i(1:bc_h(0)%ns)) &
     697!$ACC COPYIN(bc_h(0)%j(1:bc_h(0)%ns)) &
     698!$ACC COPYIN(bc_h(0)%k(1:bc_h(0)%ns)) &
     699!$ACC COPYIN(bc_h(1)%i(1:bc_h(1)%ns)) &
     700!$ACC COPYIN(bc_h(1)%j(1:bc_h(1)%ns)) &
     701!$ACC COPYIN(bc_h(1)%k(1:bc_h(1)%ns))
     702
     703! Copy data from statistics
     704!$ACC DATA &
     705!$ACC COPYIN(hom(nzb+1:nzb_max,1,1:3,0)) &
     706!$ACC COPYIN(rmask(nysg:nyng,nxlg:nxrg,0:statistic_regions)) &
     707!$ACC COPYIN(weight_substep(1:intermediate_timestep_count_max)) &
     708!$ACC COPY(sums_l_l(nzb:nzt+1,0:statistic_regions,0)) &
     709!$ACC COPY(sums_us2_ws_l(nzb:nzt+1,0)) &
     710!$ACC COPY(sums_wsus_ws_l(nzb:nzt+1,0)) &
     711!$ACC COPY(sums_vs2_ws_l(nzb:nzt+1,0)) &
     712!$ACC COPY(sums_wsvs_ws_l(nzb:nzt+1,0)) &
     713!$ACC COPY(sums_ws2_ws_l(nzb:nzt+1,0)) &
     714!$ACC COPY(sums_wspts_ws_l(nzb:nzt+1,0)) &
     715!$ACC COPY(sums_wssas_ws_l(nzb:nzt+1,0)) &
     716!$ACC COPY(sums_wsqs_ws_l(nzb:nzt+1,0)) &
     717!$ACC COPY(sums_wsqcs_ws_l(nzb:nzt+1,0)) &
     718!$ACC COPY(sums_wsqrs_ws_l(nzb:nzt+1,0)) &
     719!$ACC COPY(sums_wsncs_ws_l(nzb:nzt+1,0)) &
     720!$ACC COPY(sums_wsnrs_ws_l(nzb:nzt+1,0)) &
     721!$ACC COPY(sums_wsss_ws_l(nzb:nzt+1,0)) &
     722!$ACC COPY(sums_salsa_ws_l(nzb:nzt+1,0))
    625723
    626724!
     
    739837       ENDIF   
    740838       
     839#ifdef _OPENACC
     840       CALL enter_surface_arrays
     841#endif
     842       
    741843!
    742844!--    Start of intermediate step loop
     
    12521354
    12531355       ENDDO   ! Intermediate step loop
     1356
     1357!
     1358!--    Will be used at some point by flow_statistics.
     1359       !$ACC UPDATE HOST(e, u, v, w, pt) &
     1360       !$ACC HOST(kh(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     1361       !$ACC HOST(km(nzb:nzt+1,nysg:nyng,nxlg:nxrg)) &
     1362       !$ACC HOST(sums_l_l(nzb:nzt+1,0:statistic_regions,0)) &
     1363       !$ACC HOST(sums_us2_ws_l(nzb:nzt+1,0)) &
     1364       !$ACC HOST(sums_wsus_ws_l(nzb:nzt+1,0)) &
     1365       !$ACC HOST(sums_vs2_ws_l(nzb:nzt+1,0)) &
     1366       !$ACC HOST(sums_wsvs_ws_l(nzb:nzt+1,0)) &
     1367       !$ACC HOST(sums_ws2_ws_l(nzb:nzt+1,0)) &
     1368       !$ACC HOST(sums_wspts_ws_l(nzb:nzt+1,0)) &
     1369       !$ACC HOST(sums_wssas_ws_l(nzb:nzt+1,0)) &
     1370       !$ACC HOST(sums_wsqs_ws_l(nzb:nzt+1,0)) &
     1371       !$ACC HOST(sums_wsqcs_ws_l(nzb:nzt+1,0)) &
     1372       !$ACC HOST(sums_wsqrs_ws_l(nzb:nzt+1,0)) &
     1373       !$ACC HOST(sums_wsncs_ws_l(nzb:nzt+1,0)) &
     1374       !$ACC HOST(sums_wsnrs_ws_l(nzb:nzt+1,0)) &
     1375       !$ACC HOST(sums_wsss_ws_l(nzb:nzt+1,0)) &
     1376       !$ACC HOST(sums_salsa_ws_l(nzb:nzt+1,0))
     1377#ifdef _OPENACC
     1378       CALL exit_surface_arrays
     1379#endif
     1380
    12541381!
    12551382!--    If required, consider chemical emissions
     
    16551782    ENDDO   ! time loop
    16561783
     1784!$ACC END DATA
     1785!$ACC END DATA
     1786!$ACC END DATA
     1787!$ACC END DATA
     1788!$ACC END DATA
     1789!$ACC END DATA
     1790!$ACC END DATA
     1791
    16571792!
    16581793!-- Vertical nesting: Deallocate variables initialized for vertical nesting   
Note: See TracChangeset for help on using the changeset viewer.