FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | report_unit | |||
real, | intent(in) | :: | delt_adj |
subroutine check_nonlinear_terms(report_unit,delt_adj)
use gs2_time, only: code_dt_min, code_dt_max
use kt_grids, only: is_box
use run_parameters, only: nstep, wstar_units
use theta_grid, only: nperiod
implicit none
integer, intent(in) :: report_unit
real, intent(in) :: delt_adj
if (nonlin) then
write (report_unit, *)
write (report_unit, fmt="('This is a nonlinear simulation.')")
write (report_unit, *)
if (wstar_units) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Nonlinear runs require wstar_units = .false. in the knobs namelist.')")
write (report_unit, fmt="('THIS IS AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if ( .not. is_box) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Nonlinear runs must be carried out in a box.')")
write (report_unit, fmt="('Set grid_option to box in the kt_grids_knobs namelist.')")
write (report_unit, fmt="('THIS IS AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (split_nonlinear) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The nonlinear term will be evolved separately from')")
write (report_unit, fmt="('the linear terms in a crude IMEX style.')")
write (report_unit, fmt="('This is an experimental feature.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (.not. include_apar) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The A|| potential contributions to the nonlinear term are disabled.')")
write (report_unit, fmt="('This is probably an error.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (.not. include_bpar) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The B|| potential contributions to the nonlinear term are disabled.')")
write (report_unit, fmt="('This is probably an error.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (.not. include_phi) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('The electrostatic potential contributions to the nonlinear term are disabled.')")
write (report_unit, fmt="('This is probably an error.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (nperiod > 1) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Nonlinear runs usually have nperiod = 1.')")
write (report_unit, fmt="('THIS MAY BE AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (use_cfl_limit) then
write (report_unit, *)
write (report_unit, fmt="('The timestep will be adjusted to satisfy the CFL limit.')")
write (report_unit, fmt="('The maximum delt < ',f10.4,' * min(Delta_perp/v_perp). (cfl)')") cfl
write (report_unit, *)
else
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Nonlinear usually have use_cfl_limit = T')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
if (use_order_based_error) then
write (report_unit, *)
write (report_unit, fmt="('The timestep will be adjusted to keep the estimated error below',e11.4)") error_target
write (report_unit, fmt="('beginning on step',I0)") istep_error_start
write (report_unit, *)
else
if (.not. use_cfl_limit) then
write (report_unit, *)
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, fmt="('Both CFL and error methods for controlling explicit timestep are disabled.')")
write (report_unit, fmt="('THIS IS PROBABLY AN ERROR.')")
write (report_unit, fmt="('################# WARNING #######################')")
write (report_unit, *)
end if
end if
write (report_unit, fmt="('The minimum delt ( code_dt_min ) = ',e11.4)") code_dt_min
write (report_unit, fmt="('The maximum delt (code_dt_max) = ',e11.4)") code_dt_max
write (report_unit, fmt="('When the time step needs to be changed, it is adjusted by a factor of ',f10.4)") delt_adj
write (report_unit, fmt="('The number of time steps nstep = ',i7)") nstep
endif
end subroutine check_nonlinear_terms