FIXME : Add documentation
subroutine ginit_kpar
use species, only: spec, has_electron_species
use theta_grid, only: ntgrid, theta
use kt_grids, only: naky, ntheta0, theta0
use le_grids, only: forbid
use dist_fn_arrays, only: g, gnew, vpa, vperp2
use gs2_layouts, only: g_lo, ik_idx, it_idx, il_idx, is_idx
use constants, only: zi
use array_utils, only: copy, zero_array
implicit none
complex, dimension (-ntgrid:ntgrid,ntheta0,naky) :: phi, odd
real, dimension (-ntgrid:ntgrid) :: dfac, ufac, tparfac, tperpfac
integer :: iglo
integer :: ig, ik, it, il, is
call zero_array(phi) ; call zero_array(odd)
if (width0 > 0.) then
do ig = -ntgrid, ntgrid
phi(ig,:,:) = exp(-((theta(ig)-theta0(:,:))/width0)**2)*cmplx(refac, imfac)
end do
else
do ig = -ntgrid, ntgrid
phi(ig,:,:) = cmplx(refac, imfac)
end do
end if
if (chop_side) then
if (left) then
phi(:-1,:,:) = 0.0
else
phi(1:,:,:) = 0.0
end if
end if
odd = zi * phi
dfac = den0 + den1 * cos(theta) + den2 * cos(2.*theta)
ufac = upar0 + upar1* sin(theta) + upar2* sin(2.*theta)
tparfac = tpar0 + tpar1* cos(theta) + tpar2* cos(2.*theta)
tperpfac = tperp0 + tperp1*cos(theta) + tperp2*cos(2.*theta)
! charge dependence keeps initial Phi from being too small
do iglo = g_lo%llim_proc, g_lo%ulim_proc
ik = ik_idx(g_lo,iglo)
it = it_idx(g_lo,iglo)
il = il_idx(g_lo,iglo)
is = is_idx(g_lo,iglo)
g(:,1,iglo) = phiinit* &!spec(is)%z* &
( dfac * phi(:,it,ik) &
+ 2.*ufac* vpa(:,1,iglo) * odd(:,it,ik) &
+ tparfac*(vpa(:,1,iglo)**2-0.5) * phi(:,it,ik) &
+tperpfac*(vperp2(:,iglo)-1.) * phi(:,it,ik))
where (forbid(:,il)) g(:,1,iglo) = 0.0
g(:,2,iglo) = phiinit* &!spec(is)%z* &
( dfac * phi(:,it,ik) &
+ 2.*ufac* vpa(:,2,iglo) * odd(:,it,ik) &
+ tparfac*(vpa(:,2,iglo)**2-0.5) * phi(:,it,ik) &
+tperpfac*(vperp2(:,iglo)-1.) * phi(:,it,ik))
where (forbid(:,il)) g(:,2,iglo) = 0.0
end do
if (has_electron_species(spec)) then
call flae (g, gnew)
g = g - gnew
end if
call copy(g, gnew)
end subroutine ginit_kpar