Calculates the value of the magnetic drifts (curvature + grad-B)
corresponding to the theta grid location given by ig
for the iglo
index of interest.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | ig | |||
integer, | intent(in) | :: | iglo |
pure real function wdrift_func (ig, iglo)
use dist_fn_arrays, only: vperp2, vpa
use theta_grid, only: gbdrift, gbdrift0, cvdrift, cvdrift0, shat
use kt_grids, only: aky, theta0, akx
use gs2_time, only: code_dt, wunits
use gs2_layouts, only: g_lo, it_idx, ik_idx
implicit none
integer, intent (in) :: ig, iglo
integer :: it, ik
real :: vperp2_local, vpa2_local
vperp2_local = vperp2(ig, iglo)
vpa2_local = vpa(ig, 1, iglo)**2
it=it_idx(g_lo,iglo)
ik=ik_idx(g_lo,iglo)
! note that wunits=aky/2 (for wstar_units=F)
if (aky(ik) == 0.0) then
wdrift_func = akx(it)/shat &
*(cvdrift0(ig)*vpa2_local &
+ gbdrift0(ig)*0.5*vperp2_local) &
*code_dt/2.0
else
wdrift_func = ((cvdrift(ig) + theta0(it,ik)*cvdrift0(ig)) &
*vpa2_local &
+ (gbdrift(ig) + theta0(it,ik)*gbdrift0(ig)) &
*0.5*vperp2_local) &
*code_dt*wunits(ik)
end if
end function wdrift_func