load_korc_params Subroutine

private subroutine load_korc_params(params)

Arguments

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

Core KORC simulation parameters.

Flag to indicate if the simulations restarts (restart=T) or not (restart=F). Restart simulation that exited before simulation_time reached.

Flag to indicate if the simulations proceeds (proceed=T) or not (proceed=F). Append simulation results after previous simulation_time reached.

Flag to begin a new simulation, reinitializing from restart file state

Total simulation time in seconds.

Time between snapshots in time of the simulation.

Time between overwrites of restart file in time of the simulation.

Time step in the simulation as a fraction of the relativistic electron gyro-period @f$\tau_e = 2\pi\gamma m_e/eB_0@f$

Minimum allowed relativistic factor @f$\gamma@f$ of simulated electrons.

Flag to indicate if synchrotron radiation losses are included (radiation=T) or not (radiation=F).

Flag to indicate if collisionsare included (collisions=T) or not (collisions=F).

String with the name of the collisions model to be used in the simulation.

String with the name of the model for the plasma profiles.

String with the name of the model for the field profiles.

String with the name of the model for the fields and plasma profiles.

List of electron variables to include in the outputs.

Number of different populations of simulated relativistic electrons in KORC.


Called by

proc~~load_korc_params~~CalledByGraph proc~load_korc_params load_korc_params proc~initialize_korc_parameters initialize_korc_parameters proc~initialize_korc_parameters->proc~load_korc_params program~main main program~main->proc~initialize_korc_parameters

Contents

Source Code


Source Code

  subroutine load_korc_params(params)
    !! @note Subroutine that loads the simulation parameters from the 
    !! file specified in params\%path_to_inputs @endnote
    TYPE (KORC_PARAMS), INTENT(INOUT) 	:: params
    !! Core KORC simulation parameters.
    !LOGICAL 				:: restart
    !! Flag to indicate if the simulations restarts (restart=T) or not
    !! (restart=F). Restart simulation that exited before simulation_time
    !! reached.
    !LOGICAL 				:: proceed
    !! Flag to indicate if the simulations proceeds (proceed=T) or not
    !! (proceed=F). Append simulation results after previous simulation_time
    !! reached.
    !LOGICAL  :: reinit
    !! Flag to begin a new simulation, reinitializing from restart file state
    !REAL(rp) 				:: simulation_time
    !! Total simulation time in seconds.
    !REAL(rp) 				:: snapshot_frequency
    !! Time between snapshots in time of the simulation.
    !REAL(rp) 				:: restart_overwrite_frequency
    !! Time between overwrites of restart file in time of the simulation.
    !REAL(rp) 				:: dt
    !! Time step in the simulation as a fraction of the relativistic 
    !! electron gyro-period @f$\tau_e = 2\pi\gamma m_e/eB_0@f$
    !REAL(rp) 				:: minimum_particle_energy
    !! Minimum allowed relativistic factor @f$\gamma@f$ of simulated electrons.
    !LOGICAL 				:: radiation
    !! Flag to indicate if synchrotron radiation losses are included
    !! (radiation=T) or not (radiation=F).
    !LOGICAL 				:: collisions
    !! Flag to indicate if collisionsare included (collisions=T) or not
    !! (collisions=F).
    !CHARACTER(MAX_STRING_LENGTH) 		:: GC_rad_model
    !CHARACTER(MAX_STRING_LENGTH) 		:: collisions_model
    !! String with the name of the collisions model to be used in the simulation.
    !CHARACTER(MAX_STRING_LENGTH) 		:: bound_electron_model
    !CHARACTER(MAX_STRING_LENGTH) 		:: profile_model
    !! String with the name of the model for the plasma profiles.
    !CHARACTER(MAX_STRING_LENGTH) 		:: field_model
    !! String with the name of the model for the field profiles.
    !CHARACTER(MAX_STRING_LENGTH) 		:: magnetic_field_filename
    !! String with the name of the model for the fields and plasma profiles.
    !CHARACTER(MAX_STRING_LENGTH) 		:: outputs_list
    !! List of electron variables to include in the outputs.
    !INTEGER 				:: num_species
    !! Number of different populations of simulated relativistic electrons
    !! in KORC.
    INTEGER 				:: imax
    !! Auxiliary variable used to parse the output_list
    INTEGER 				:: imin
    !! Auxiliary variable used to parse the output_list
    INTEGER 				:: ii
    !! Iterator used to parse the output_list
    INTEGER 				:: jj
    !! Iterator used to parse the output_list
    INTEGER 				:: num_outputs
    !! Auxiliary variable used to parse the output_list
    INTEGER, DIMENSION(2) 		:: indices
    !! Auxiliary variable used to parse the output_list
    !LOGICAL 				:: HDF5_error_handling
    !! Flag for HDF5 error handling
    !LOGICAL 		:: FO_GC_compare
    !CHARACTER(MAX_STRING_LENGTH) 		:: orbit_model
    !! String with the name of the orbit model ('FO' or 'GC').
    !CHARACTER(MAX_STRING_LENGTH) :: field_eval
    !! String with the name of the field evaluation method for
    !! analytical fields ('interp' or 'eqn')
    !LOGICAL 				:: FokPlan
    !! Flag to decouple spatial-dependence of evolution
    !LOGICAL :: SameRandSeed
    !LOGICAL :: SC_E
    !LOGICAL :: SC_E_add
    !INTEGER                           :: time_slice
    !REAL(rp)                          :: rmax,rmin,zmax,zmin
    !INTEGER                           :: pchunk

    !NAMELIST /input_parameters/ restart,field_model,magnetic_field_filename, &
    !     simulation_time,snapshot_frequency,dt,num_species,radiation, &
    !     collisions,collisions_model,outputs_list,minimum_particle_energy, &
    !     HDF5_error_handling,orbit_model,field_eval,proceed,profile_model, &
    !     restart_overwrite_frequency,FokPlan,GC_rad_model, &
    !     bound_electron_model,FO_GC_compare,SameRandSeed,SC_E,reinit, &
    !     SC_E_add,time_slice,rmax,rmin,zmax,zmin,pchunk

    !open(unit=default_unit_open,file=TRIM(params%path_to_inputs), &
    !     status='OLD',form='formatted')
    !read(default_unit_open,nml=input_parameters)
    !close(default_unit_open)

    params%restart = restart
    params%proceed = proceed
    params%reinit  = reinit

    params%load_balance = load_balance
    
    params%simulation_time = simulation_time
    params%snapshot_frequency = snapshot_frequency
    params%restart_overwrite_frequency=restart_overwrite_frequency
    params%dt = dt

    params%num_species = num_species
    params%profile_model = TRIM(profile_model)
    params%field_model = TRIM(field_model)
    params%magnetic_field_filename = TRIM(magnetic_field_filename)
    params%time_slice = time_slice
    params%rmax = rmax
    params%rmin = rmin
    params%zmax = zmax
    params%zmin = zmin
    params%minimum_particle_energy = minimum_particle_energy*C_E
    params%minimum_particle_g = 1.0_rp + params%minimum_particle_energy/ &
         (C_ME*C_C**2) ! Minimum value of relativistic gamma factor
    params%radiation = radiation
    params%collisions = collisions
    params%LargeCollisions = LargeCollisions
    params%collisions_model = TRIM(collisions_model)
    params%bound_electron_model = TRIM(bound_electron_model)
    params%GC_rad_model = TRIM(GC_rad_model)

    if (HDF5_error_handling) then
       params%HDF5_error_handling = 1_idef
    else
       params%HDF5_error_handling = 0_idef
    end if

    params%orbit_model = orbit_model
    params%FO_GC_compare = FO_GC_compare
    params%field_eval = field_eval

    params%GC_coords=.FALSE.

    params%FokPlan=FokPlan

    params%SameRandSeed = SameRandSeed

    params%SC_E=SC_E
    params%SC_E_add=SC_E_add

    params%pchunk=pchunk

    ! Loading list of output parameters (parsing)
    imin = SCAN(outputs_list,'{')
    imax = SCAN(outputs_list,'}')

    ii = 1_idef
    jj = 1_idef
    num_outputs = 1_idef
    do while (ii.NE.0)
       ii = SCAN(outputs_list(jj:),",")
       if (ii.NE.0) then
          jj = jj + ii
          num_outputs = num_outputs + 1_idef
       end if
    end do

    ALLOCATE(params%outputs_list(num_outputs))

    if (num_outputs.GT.1_idef) then
       indices = 0_idef
       indices(2) = SCAN(outputs_list,",")
       params%outputs_list(1) = TRIM(outputs_list(imin+1_idef:indices(2)-1_idef))
       indices(1) = indices(1) + indices(2) + 1_idef
       do ii=2_idef,num_outputs
          indices(2) = SCAN(outputs_list(indices(1):),",")
          if (indices(2).EQ.0_idef) then
             params%outputs_list(ii) = TRIM(outputs_list(indices(1):imax-1_idef))
          else
             params%outputs_list(ii) = TRIM(outputs_list(indices(1):indices(1)+indices(2)-2_idef))
             indices(1) = indices(1) + indices(2)
          end if
       end do
    else
       params%outputs_list(1) = TRIM(outputs_list(imin+1_idef:imax-1_idef))
    end if

    if (params%mpi_params%rank .EQ. 0) then
       write(output_unit_write,'(/,"* * * * * SIMULATION PARAMETERS * * * * *")')
       write(output_unit_write,'("Restarting simulation: ",L1)') params%restart
       write(output_unit_write,'("Continuing simulation: ",L1)') params%proceed
       write(output_unit_write,'("Number of electron populations: ",I16)') params%num_species
       write(output_unit_write,*) 'Orbit model: ',TRIM(params%orbit_model)
       write(output_unit_write,*) 'Magnetic field model: ',TRIM(params%field_model)
       write(output_unit_write,*) 'Magnetic field evaluation: ',TRIM(params%field_eval)
       if (TRIM(params%field_model).EQ.'EXTERNAL') then
          write(output_unit_write,*) 'Magnetic field file: ',TRIM(params%magnetic_field_filename)
       end if

       write(output_unit_write,'("Radiation losses included: ",L1)') params%radiation
       if (params%radiation.and.(params%orbit_model(1:2).eq.'GC')) then
          write(output_unit_write,*) 'Radiation model: ',TRIM(params%GC_rad_model)
       end if
       write(output_unit_write,'("Collisions losses included: ",L1)') params%collisions
       if (params%collisions) then
          write(output_unit_write,*) 'Collision model: ',TRIM(params%collisions_model)
          write(output_unit_write,*) &
               'Bound electron model: ',TRIM(params%bound_electron_model)
       end if
       write(output_unit_write,'("Self-consistent E included: ",L1)') params%SC_E
       write(output_unit_write,'("* * * * * * * * * * * * * * * * * * * * *",/)')
    end if
  end subroutine load_korc_params