Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 19 additions & 37 deletions src/core_atmosphere/dynamics/mpas_atm_time_integration.F
Original file line number Diff line number Diff line change
Expand Up @@ -4725,7 +4725,7 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, &

real (kind=RKIND) :: weight_time_old, weight_time_new
real (kind=RKIND), dimension(num_scalars,nVertLevels) :: scalar_tend_column ! local storage to accumulate tendency
real (kind=RKIND) :: u_direction, u_positive, u_negative
real (kind=RKIND) :: u_direction, u_positive, u_negative, local_sign

flux4(q_im2, q_im1, q_i, q_ip1, ua) = &
ua*( 7.*(q_i + q_im1) - (q_ip1 + q_im2) )/12.0
Expand Down Expand Up @@ -4755,10 +4755,10 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, &
if(rk_step == 3) weight_time_new = 1.
end if
weight_time_old = 1. - weight_time_new


local_sign = 1.0_RKIND
call mpas_timer_start('atm_advance_scalars_4760')
!$acc parallel async
!$acc loop gang worker private(scalar_weight2, ica)
!$acc loop gang worker
do iEdge=edgeStart,edgeEnd

if ((.not.config_apply_lbcs) &
Expand All @@ -4768,32 +4768,21 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, &

case(10)

!$acc loop vector collapse(2)
do j=1,10
do k=1,nVertLevels
scalar_weight2(k,j) = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge)
end do
end do

!$acc loop vector
do j=1,10
ica(j) = advCellsForEdge(j,iEdge)
end do

!$acc loop vector collapse(2)
do k = 1,nVertLevels
do iScalar = 1,num_scalars
local_sign = sign(1.0_RKIND,uhAvg(k,iEdge))
horiz_flux_arr(iScalar,k,iEdge) = &
scalar_weight2(k,1) * scalar_new(iScalar,k,ica(1)) + &
scalar_weight2(k,2) * scalar_new(iScalar,k,ica(2)) + &
scalar_weight2(k,3) * scalar_new(iScalar,k,ica(3)) + &
scalar_weight2(k,4) * scalar_new(iScalar,k,ica(4)) + &
scalar_weight2(k,5) * scalar_new(iScalar,k,ica(5)) + &
scalar_weight2(k,6) * scalar_new(iScalar,k,ica(6)) + &
scalar_weight2(k,7) * scalar_new(iScalar,k,ica(7)) + &
scalar_weight2(k,8) * scalar_new(iScalar,k,ica(8)) + &
scalar_weight2(k,9) * scalar_new(iScalar,k,ica(9)) + &
scalar_weight2(k,10) * scalar_new(iScalar,k,ica(10))
(adv_coefs(1,iEdge) + local_sign*adv_coefs_3rd(1,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(1,iEdge)) + &
(adv_coefs(2,iEdge) + local_sign*adv_coefs_3rd(2,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(2,iEdge)) + &
(adv_coefs(3,iEdge) + local_sign*adv_coefs_3rd(3,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(3,iEdge)) + &
(adv_coefs(4,iEdge) + local_sign*adv_coefs_3rd(4,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(4,iEdge)) + &
(adv_coefs(5,iEdge) + local_sign*adv_coefs_3rd(5,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(5,iEdge)) + &
(adv_coefs(6,iEdge) + local_sign*adv_coefs_3rd(6,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(6,iEdge)) + &
(adv_coefs(7,iEdge) + local_sign*adv_coefs_3rd(7,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(7,iEdge)) + &
(adv_coefs(8,iEdge) + local_sign*adv_coefs_3rd(8,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(8,iEdge)) + &
(adv_coefs(9,iEdge) + local_sign*adv_coefs_3rd(9,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(9,iEdge)) + &
(adv_coefs(10,iEdge) + local_sign*adv_coefs_3rd(10,iEdge)) * scalar_new(iScalar,k,advCellsForEdge(10,iEdge))
end do
end do

Expand All @@ -4803,16 +4792,9 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, &
do k=1,nVertLevels
do iScalar=1,num_scalars
horiz_flux_arr(iScalar,k,iEdge) = 0.0_RKIND
end do
end do

!$acc loop seq
do j=1,nAdvCellsForEdge(iEdge)
iAdvCell = advCellsForEdge(j,iEdge)

!$acc loop vector collapse(2)
do k=1,nVertLevels
do iScalar=1,num_scalars
!$acc loop seq
do j=1,nAdvCellsForEdge(iEdge)
iAdvCell = advCellsForEdge(j,iEdge)
scalar_weight = adv_coefs(j,iEdge) + sign(1.0_RKIND,uhAvg(k,iEdge))*adv_coefs_3rd(j,iEdge)
horiz_flux_arr(iScalar,k,iEdge) = horiz_flux_arr(iScalar,k,iEdge) &
+ scalar_weight * scalar_new(iScalar,k,iAdvCell)
Expand Down Expand Up @@ -4842,7 +4824,7 @@ subroutine atm_advance_scalars_work(nCells, num_scalars, dt, &
end if ! end of regional MPAS test
end do
!$acc end parallel

call mpas_timer_stop('atm_advance_scalars_4760')
!$OMP BARRIER

!
Expand Down