FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
complex, | intent(inout), | dimension (:,:,le_lo%llim_proc:) | :: | gle | ||
integer, | intent(in), | optional | :: | diagnostics |
subroutine solfp1_le_layout (gle, diagnostics)
use gs2_layouts, only: le_lo, it_idx, ik_idx, ig_idx, is_idx
use run_parameters, only: beta, ieqzip
use gs2_time, only: code_dt
use le_grids, only: energy => energy_maxw, negrid
use species, only: spec, is_electron_species
use fields_arrays, only: aparnew
use kt_grids, only: kwork_filter, kperp2
implicit none
complex, dimension (:,:,le_lo%llim_proc:), intent (in out) :: gle
integer, optional, intent (in) :: diagnostics
complex :: tmp
integer :: ig, it, ik, ie, is, ile, ixi
if (has_diffuse) then
call solfp_ediffuse_le_layout (gle)
if (conserve_moments) call conserve_diffuse (gle)
end if
if (has_lorentz) then
if (drag) then
!$OMP PARALLEL DO DEFAULT(none) &
!$OMP PRIVATE(ile, is, it, ik, ie, ig, ixi, tmp) &
!$OMP SHARED(le_lo, spec, kwork_filter, negrid, ieqzip, vnmult, code_dt, kperp2, &
!$OMP aparnew, beta, energy, nxi_lim, gle, vpa_aj0_le) &
!$OMP SCHEDULE(static)
do ile = le_lo%llim_proc, le_lo%ulim_proc
is = is_idx(le_lo,ile)
if (.not. is_electron_species(spec(is))) cycle
it = it_idx(le_lo,ile)
ik = ik_idx(le_lo,ile)
if(kwork_filter(it,ik)) cycle
if(ieqzip(it,ik)) cycle
ig = ig_idx(le_lo,ile)
do ie = 1, negrid
! Note here we may need aparnew from {it, ik} not owned by this
! processor in g_lo.
tmp = vnmult(1)*spec(is)%vnewk*code_dt &
* kperp2(ig,it,ik)*aparnew(ig,it,ik) &
/ ((-spec(is)%z*spec(is)%dens)*beta*spec(is)%stm*energy(ie)**1.5)
do ixi = 1, nxi_lim
gle(ixi, ie, ile) = gle(ixi, ie, ile) + tmp * vpa_aj0_le(ixi, ie, ile)
! probably need 1/(spec(is_ion)%z*spec(is_ion)%dens) above
! This has been implemented as 1/-spec(electron)%z*spec(electron)%dens
! in an attempt handle the multi-ion species case.
end do
end do
end do
!$OMP END PARALLEL DO
end if
call solfp_lorentz (gle, diagnostics)
if (conserve_moments) call conserve_lorentz (gle)
end if
end subroutine solfp1_le_layout