FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | report_unit |
subroutine check_dist_fn(report_unit)
use nonlinear_terms, only: nonlin
use kt_grids, only: is_box
use species, only: spec, nspec, has_electron_species
use warning_helpers, only: not_exactly_equal, is_not_zero
implicit none
integer, intent(in) :: report_unit
integer :: is
if (not_exactly_equal(driftknob, 1.)) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You selected driftknob = ',e11.4,' in dist_fn_knobs.')") driftknob
write (report_unit, fmt="('THIS IS EITHER AN ERROR, or you are DELIBERATELY SCALING THE DRIFTS.')")
write (report_unit, fmt="('The normal choice is driftknob = 1.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (not_exactly_equal(tpdriftknob, 1.)) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You selected tpdriftknob = ',e11.4,' in dist_fn_knobs.')") tpdriftknob
write (report_unit, fmt="('THIS IS EITHER AN ERROR, or you are DELIBERATELY SCALING THE TRAPPED PARTICLE DRIFTS (either via driftknob or via tpdriftknob).')")
write (report_unit, fmt="('The normal choice is tpdriftknob = 1.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (not_exactly_equal(vparknob, 1.)) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('You selected vparknob = ',e11.4,' in dist_fn_knobs.')") vparknob
write (report_unit, fmt="('THIS IS EITHER AN ERROR, or you are DELIBERATELY SCALING THE PARALLEL VELOCITY.')")
write (report_unit, fmt="('The normal choice is vparknob = 1.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
select case (boundary_option_switch)
case (boundary_option_linked)
write (report_unit, *)
if (.not. is_box) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Linked boundary conditions require a box for a simulation domain.')")
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
else
write (report_unit, *)
write (report_unit, fmt="('Linked (twist and shift) boundary conditions will be used.')")
write (report_unit, *)
if (esv) then
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Single valued antot arrays will be enforced.')")
write (report_unit, fmt="('This can significantly increase the cost of the run.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
endif
end if
case (boundary_option_self_periodic)
write (report_unit, *)
write (report_unit, fmt="('Periodic boundary conditions will be used.')")
write (report_unit, fmt="('(No twist and shift.)')")
write (report_unit, *)
case default
write (report_unit, *)
write (report_unit, fmt="('Outgoing boundary conditions will be used.')")
end select
write (report_unit, fmt="('Parallel bc for passing particles at ends of the domain is:')")
if (nonad_zero) then
write (report_unit, fmt="(T20,'g_wesson = g_krt = 0')")
write (report_unit, fmt="('ie NO incoming particles in the nonadiabatic piece of delta(f)')")
else
write (report_unit, fmt="(T20,'g_gs2 = 0')")
write (report_unit, fmt="('NB this ONLY gives NO incoming particles in the nonadiabatic piece of delta(f)')")
write (report_unit, fmt="(T20,'if phi and bpar are zero at the ends of the domain')")
endif
write (report_unit, *)
if (.not. has_electron_species(spec)) then
select case (adiabatic_option_switch)
case (adiabatic_option_default)
write (report_unit, *)
write (report_unit, fmt="('The adiabatic electron response is of the form:')")
write (report_unit, *)
write (report_unit, fmt="(' ne = Phi')")
write (report_unit, *)
write (report_unit, fmt="('This is appropriate for an ETG simulation,')")
write (report_unit, fmt="('where the role of ions and electrons in GS2 is switched.')")
write (report_unit, *)
case (adiabatic_option_fieldlineavg)
write (report_unit, *)
write (report_unit, fmt="('The adiabatic electron response is of the form:')")
write (report_unit, *)
write (report_unit, fmt="(' ne = Phi - <Phi>')")
write (report_unit, *)
write (report_unit, fmt="('The angle brackets denote a proper field line average.')")
write (report_unit, fmt="('This is appropriate for an ITG simulation.')")
write (report_unit, *)
case (adiabatic_option_yavg)
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The adiabatic electron response is of the form:')")
write (report_unit, *)
write (report_unit, fmt="(' ne = Phi - <Phi>_y')")
write (report_unit, *)
write (report_unit, fmt="('The angle brackets denote an average over y only.')")
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('Perhaps you want field-line-average-term for adiabatic_option.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end select
end if
if (is_not_zero(poisfac)) then
write (report_unit, *)
write (report_unit, fmt="('Quasineutrality is not enforced. The ratio (lambda_Debye/rho)**2 = ',e11.4)") poisfac
write (report_unit, *)
end if
if (mult_imp .and. nonlin) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('For nonlinear runs, all species must use the same values of fexpr and bakdif')")
write (report_unit, fmt="('in the dist_fn_species_knobs_x namelists.')")
write (report_unit, fmt="('THIS IS AN ERROR AND MULT_IMP WILL BE SET FALSE.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (def_parity .and. nonlin) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Choosing a definite parity for a nonlinear run has never been tested.')")
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (def_parity) then
if (even) then
write (report_unit, fmt="('Only eigenmodes of even parity will be included.')")
else
write (report_unit, fmt="('Only eigenmodes of odd parity will be included.')")
end if
end if
write (report_unit, *)
write (report_unit, fmt="('------------------------------------------------------------')")
write (report_unit, *)
write (report_unit, fmt="('The ExB parameter is ',f7.4)") g_exb
if (abs(g_exb) > epsilon(0.0)) then
write (report_unit, fmt="('Perp shear terms will be multiplied by factor',f7.4)") g_exbfac
write (report_unit, fmt="('Parallel shear term will be multiplied by factor',f7.4)") omprimfac
endif
write (report_unit, *)
write (report_unit, fmt="('------------------------------------------------------------')")
write (report_unit, *)
select case (source_option_switch)
case (source_option_full)
write (report_unit, *)
write (report_unit, fmt="('The standard GK equation will be solved.')")
write (report_unit, *)
case(source_option_phiext_full)
write (report_unit, *)
write (report_unit, fmt="('The standard GK equation will be solved,')")
write (report_unit, fmt="('with an additional source proportional to Phi*F_0')")
write (report_unit, fmt="('Together with phi_ext = -1., this is the usual way to &
& calculate the Rosenbluth-Hinton response.')")
write (report_unit, *)
case (source_option_homogeneous)
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The homogeneous GK equation will be solved.')")
write (report_unit, fmt="('The calculated response matrices and resulting')")
write (report_unit, fmt="('potentials will not be accurate.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end select
!
! implicitness parameters
!
do is = 1, nspec
write (report_unit, fmt="('Species ',i2,' has fexpr = ', e11.4)") is, fexp(is)
end do
end subroutine check_dist_fn