initialize_binning_diagnostic Subroutine

public subroutine initialize_binning_diagnostic(params)

Arguments

Type IntentOptional AttributesName
type(KORC_PARAMS), intent(in) :: params

Contents


Source Code

  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