FIXME : Add documentation
subroutine get_grids
use theta_grid_eik, only: eik_get_grids
use theta_grid_salpha, only: salpha_get_grids
use theta_grid_file, only: file_get_grids
use theta_grid_file, only: file_nc_get_grids
use theta_grid_params, only: eps, btor_slab
use warning_helpers, only: is_zero, is_not_zero
implicit none
logical, parameter :: debug=.false.
select case (eqopt_switch)
case (eqopt_eik)
if (debug) write(6,*) 'get_grids: call eik_get_grids'
call eik_get_grids (nperiod, ntheta, ntgrid, nbset, &
theta, bset, bmag, &
gradpar, gbdrift, gbdrift0, cvdrift, cvdrift0, cdrift, cdrift0, &
gds2, gds21, gds22, gds23, gds24, gds24_noq, grho, &
Rplot, Zplot, Rprime, Zprime, aplot, aprime, &
shat, drhodpsi, kxfac, qval, gb_to_cv, Bpol, surfarea, dvdrhon, rhoc)
shape = 'torus '
case (eqopt_salpha)
if (debug) write(6,*) 'get_grids: call salpha_get_grids'
call salpha_get_grids (nperiod, ntheta, ntgrid, nbset, &
theta, bset, bmag, &
gradpar, gbdrift, gbdrift0, cvdrift, cvdrift0, cdrift, cdrift0, &
gds2, gds21, gds22, gds23, gds24, gds24_noq, grho, &
Rplot, Zplot, Rprime, Zprime, aplot, aprime, &
shat, drhodpsi, kxfac, qval, shape, gb_to_cv, Bpol, surfarea, dvdrhon, rhoc)
case (eqopt_file)
if (debug) write(6,*) 'get_grids: call file_get_grids'
call file_get_grids (nperiod, ntheta, ntgrid, nbset, theta, bset, bmag, &
gradpar, gbdrift, gbdrift0, cvdrift, cvdrift0, cdrift, cdrift0, &
gds2, gds21, gds22, gds23, gds24, gds24_noq, grho, &
Rplot, Zplot, Rprime, Zprime, aplot, aprime, &
shat, drhodpsi, kxfac, qval, gb_to_cv, Bpol, surfarea, dvdrhon, rhoc)
shape = 'torus '
case (eqopt_file_nc)
if (debug) write(6,*) 'get_grids: call file_nc_get_grids'
call file_nc_get_grids (nperiod, ntheta, ntgrid, nbset, theta, bset, bmag, &
gradpar, gbdrift, gbdrift0, cvdrift, cvdrift0, cdrift, cdrift0, &
gds2, gds21, gds22, gds23, gds24, gds24_noq, grho, &
Rplot, Zplot, Rprime, Zprime, aplot, aprime, &
shat, drhodpsi, kxfac, qval, gb_to_cv, Bpol, surfarea, dvdrhon, rhoc)
shape = 'torus '
end select
kxfac = abs(kxfac)
qval = abs(qval)
!CMR, 4/6/2014
! knobs to independently control magnetic gradB and curvature drifts
gbdrift=gbdriftknob*gbdrift
gbdrift0=gbdriftknob*gbdrift0
cvdrift=cvdriftknob*cvdrift
cvdrift0=cvdriftknob*cvdrift0
itor_over_B=0.
!CMR, 2/2/2011:
! If using slab geometry, set itor_over_B = btor_slab from "theta_grid_params":
! cleaner equivalent alternative to using btor_slab in "dist_fn_knobs", and
! sets geometric parameter itor_over_B in one place for ALL geometries.
!
if (eqopt_switch == eqopt_salpha .and. is_zero(eps)) then
itor_over_B = btor_slab
else
!CMR, 19/10/10: moved MAB's definition of geometry quantity itor_over_B from
! dist_fn.f90 to here.
! Calculate the parallel velocity shear drive factor itor_over_B
! (which effectively depends on the angle the field lines make with the flow)
! note that the following is only valid in a torus!
! itor_over_B = (q/rho) * Rmaj*Btor/(a*B)
IoB = sqrt(max(Rplot**2 - (grho/(bmag*drhodpsi))**2,0.))
! RN> 2011/1/25: fix here avoids dividing by rhoc if rhoc=0
! CMR, 2/2/2011: set itor_over_B=0 if rhoc=0
! Dropping parallel sheared flow source term in GKE
! using itor_over_B=0 is safer than itor_over_B=NaN!
if (is_not_zero(rhoc)) then
itor_over_B = qval / rhoc * IoB
else
itor_over_B = btor_slab
end if
endif
end subroutine get_grids