If we have hybrid electrons then we need to remove the contribution to the conservation terms from the adiabatic passing part. This routine does this for us.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
complex, | intent(inout), | dimension(:, :, g_lo%llim_proc:) | :: | arr |
subroutine zero_out_passing_hybrid_electrons(arr)
use gs2_layouts, only: g_lo, ik_idx, il_idx, is_idx
use species, only: has_hybrid_electron_species, spec
use le_grids, only: is_passing_hybrid_electron
implicit none
complex, dimension(:, :, g_lo%llim_proc:), intent(in out) :: arr
integer :: iglo, is, ik, il
if (has_hybrid_electron_species(spec)) then
!$OMP PARALLEL DO DEFAULT(none) &
!$OMP PRIVATE(iglo, ik, il, is) &
!$OMP SHARED(g_lo, arr) &
!$OMP SCHEDULE(static)
do iglo = g_lo%llim_proc, g_lo%ulim_proc
ik = ik_idx(g_lo,iglo)
il = il_idx(g_lo,iglo)
is = is_idx(g_lo,iglo)
if (is_passing_hybrid_electron(is, ik, il)) arr(:, :, iglo) = 0.0
end do
!$OMP END PARALLEL DO
end if
end subroutine zero_out_passing_hybrid_electrons