SUBROUTINE initialize_binning_diagnostic(params)
IMPLICIT NONE
TYPE(KORC_PARAMS), INTENT(IN) :: params
LOGICAL :: diagnostic_on
REAL(rp) :: start_at ! In seconds
INTEGER, DIMENSION(2) :: num_bins ! Number of bins
REAL(rp), DIMENSION(2) :: rlim ! in meters
REAL(rp), DIMENSION(2) :: zlim ! in meters
LOGICAL :: toroidal_sections
INTEGER(idef) :: ntor_sections
INTEGER :: ii
NAMELIST /BinningDiagnostic/ diagnostic_on,start_at,num_bins,rlim,zlim,toroidal_sections,ntor_sections
open(unit=default_unit_open,file=TRIM(params%path_to_inputs),status='OLD',form='formatted')
read(default_unit_open,nml=BinningDiagnostic)
close(default_unit_open)
binning_params%diagnostic_on = diagnostic_on
if (binning_params%diagnostic_on) then
if (params%mpi_params%rank .EQ. 0) then
write(6,'(/,"* * * * * * * * * * * * * * * * * *")')
write(6,'("* Initializing Binning diagnostic *")')
end if
binning_params%start_at = start_at
binning_params%num_bins = num_bins
binning_params%rlim = rlim
binning_params%zlim = zlim
binning_params%toroidal_sections = toroidal_sections
if (binning_params%toroidal_sections) then
binning_params%ntor_sections = ntor_sections
else
binning_params%ntor_sections = 1_idef
end if
binning_params%dr = (binning_params%rlim(2) - binning_params%rlim(1))/REAL(binning_params%num_bins(1),rp)
binning_params%dz = (binning_params%zlim(2) - binning_params%zlim(1))/REAL(binning_params%num_bins(2),rp)
binning_params%rmin = MINVAL(binning_params%rlim)
binning_params%rmax = MAXVAL(binning_params%rlim)
binning_params%zmin = MINVAL(binning_params%zlim)
binning_params%zmax = MAXVAL(binning_params%zlim)
ALLOCATE(binning_params%rnodes(binning_params%num_bins(1)))
ALLOCATE(binning_params%znodes(binning_params%num_bins(2)))
do ii=1_idef,binning_params%num_bins(1)
binning_params%rnodes(ii) = binning_params%rmin + (REAL(ii-1_idef,rp)+0.5_rp)*binning_params%dr
end do
do ii=1_idef,binning_params%num_bins(2)
binning_params%znodes(ii) = binning_params%zmin + (REAL(ii-1_idef,rp)+0.5_rp)*binning_params%dz
end do
call save_binning_diagnostic_params(params)
if (params%mpi_params%rank .EQ. 0) then
write(6,'("* Binning diagnostic ready! *")')
write(6,'("* * * * * * * * * * * * * * * * * *")')
end if
end if
END SUBROUTINE initialize_binning_diagnostic