FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | report_unit | |||
real, | intent(in) | :: | beta | |||
real, | intent(in) | :: | tite | |||
real, | intent(out) | :: | alne | |||
real, | intent(out) | :: | dbetadrho_spec |
subroutine check_species(report_unit,beta,tite,alne,dbetadrho_spec)
use warning_helpers, only: not_exactly_equal
implicit none
integer, intent(in) :: report_unit
real, intent(in) :: beta, tite
real, intent(out) :: alne, dbetadrho_spec
integer :: is
real :: aln, alp, charge, ee, ne, ptot, zeff_calc
write (report_unit, fmt="('Number of species: ',i3)") nspec
zeff_calc = 0.
charge = 0.
aln = 0.
alne = 0.
alp = 0.
ptot = 0.
do is=1, nspec
write (report_unit, *)
write (report_unit, fmt="(' Species ',i3)") is
if (spec(is)%type == ion_species) write (report_unit, fmt="(' Type: Ion')")
if (spec(is)%type == electron_species) write (report_unit, fmt="(' Type: Electron')")
if (spec(is)%type == tracer_species) write (report_unit, fmt="(' Type: Trace')")
if (spec(is)%type == hybrid_electron_species) write (report_unit, fmt="(' Type: Hybrid-Electron')")
write (report_unit, fmt="(' Charge: ',f7.3)") spec(is)%z
write (report_unit, fmt="(' Mass: ',es11.4)") spec(is)%mass
write (report_unit, fmt="(' Density: ',f7.3)") spec(is)%dens
write (report_unit, fmt="(' Temperature: ',f7.3)") spec(is)%temp
write (report_unit, fmt="(' Collisionality: ',es11.4)") spec(is)%vnewk
write (report_unit, fmt="(' Normalized Inverse Gradient Scale Lengths:')")
write (report_unit, fmt="(' Temperature: ',f7.3)") spec(is)%tprim
write (report_unit, fmt="(' Density: ',f7.3)") spec(is)%fprim
write (report_unit, fmt="(' Parallel v: ',f7.3)") spec(is)%uprim
if (not_exactly_equal(spec(is)%bess_fac, 1.0)) &
write (report_unit, fmt="(' Bessel function arg multiplied by: ',f7.3)") spec(is)%bess_fac
if (spec(is)%type /= 2) then
zeff_calc = zeff_calc + spec(is)%dens*spec(is)%z**2
charge = charge + spec(is)%dens*spec(is)%z
aln = aln + spec(is)%dens*spec(is)%z*spec(is)%fprim
else
alne = alne + spec(is)%dens*spec(is)%z*spec(is)%fprim
ne = spec(is)%dens
ee = spec(is)%z
end if
alp = alp + spec(is)%dens * spec(is)%temp *(spec(is)%fprim + spec(is)%tprim)
ptot = ptot + spec(is)%dens * spec(is)%temp
end do
if (.not. has_electron_species(spec)) then
ptot = ptot + 1./tite ! electron contribution to pressure
alp = alp + aln/tite ! assuming charge neutrality, electron contribution to alp
end if
alp = alp / ptot
write (report_unit, *)
write (report_unit, fmt="('------------------------------------------------------------')")
write (report_unit, fmt="('Calculated Z_eff: ',f7.3)") zeff_calc
if (has_electron_species(spec)) then
if (abs(charge+ne*ee) > 1.e-2) then
if (charge+ne*ee < 0.) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You are neglecting an ion species.')")
write (report_unit, fmt="('This species has a charge fraction of ',f7.3)") abs(charge+ne*ee)
write (report_unit, &
& fmt="('and a normalized inverse density gradient scale length of ',f7.3)") &
(aln+alne)/(charge+ne*ee)
write (report_unit, fmt="('################# WARNING #######################')")
else
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('There is an excess ion charge fraction of ',f7.3)") abs(charge+ne*ee)
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
end if
else
if (abs(aln+alne) > 1.e-2) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The density gradients are inconsistent'/' a/lni =',e12.4,' but alne =',e12.4)") aln, alne
write (report_unit, fmt="('################# WARNING #######################')")
end if
end if
else
if (charge > 1.01) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('There is an excess ion charge fraction of ',f7.3)") charge-1.
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
end if
if (charge < 0.99) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You are neglecting an ion species.')")
write (report_unit, fmt="('This species has a charge fraction of ',f7.3)") abs(charge-1.)
write (report_unit, fmt="('################# WARNING #######################')")
end if
end if
if (has_hybrid_electron_species(spec)) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You are using a hybrid electron species.')")
write (report_unit, fmt="('This is currently considered experimental.')")
write (report_unit, fmt="('################# WARNING #######################')")
end if
write (report_unit, *)
write (report_unit, fmt="('------------------------------------------------------------')")
write (report_unit, *)
write (report_unit, fmt="('GS2 beta parameter = ',f9.4)") beta
write (report_unit, fmt="('Total beta = ',f9.4)") beta*ptot
write (report_unit, *)
write (report_unit, fmt="('The total normalized inverse pressure gradient scale length is ',f10.4)") alp
dbetadrho_spec = -beta*ptot*alp
write (report_unit, fmt="('corresponding to d beta / d rho = ',f10.4)") dbetadrho_spec
end subroutine check_species