main Program

Uses

  • program~~main~~UsesGraph program~main main module~korc_initialize korc_initialize program~main->module~korc_initialize module~korc_input korc_input program~main->module~korc_input module~korc_hpc korc_hpc program~main->module~korc_hpc module~korc_ppusher korc_ppusher program~main->module~korc_ppusher module~korc_interp korc_interp program~main->module~korc_interp module~korc_profiles korc_profiles program~main->module~korc_profiles module~korc_units korc_units program~main->module~korc_units module~korc_fio korc_fio program~main->module~korc_fio module~korc_collisions korc_collisions program~main->module~korc_collisions module~korc_types korc_types program~main->module~korc_types module~korc_fields korc_fields program~main->module~korc_fields module~korc_finalize korc_finalize program~main->module~korc_finalize module~korc_hdf5 korc_HDF5 program~main->module~korc_hdf5 module~korc_initialize->module~korc_input module~korc_initialize->module~korc_hpc module~korc_initialize->module~korc_types module~korc_initialize->module~korc_fields module~korc_initialize->module~korc_hdf5 module~korc_rnd_numbers korc_rnd_numbers module~korc_initialize->module~korc_rnd_numbers module~korc_constants korc_constants module~korc_initialize->module~korc_constants module~korc_spatial_distribution korc_spatial_distribution module~korc_initialize->module~korc_spatial_distribution module~korc_velocity_distribution korc_velocity_distribution module~korc_initialize->module~korc_velocity_distribution module~korc_coords korc_coords module~korc_initialize->module~korc_coords module~korc_input->module~korc_hpc module~korc_input->module~korc_types module~korc_hpc->module~korc_types omp_lib omp_lib module~korc_hpc->omp_lib mpi mpi module~korc_hpc->mpi module~korc_ppusher->module~korc_hpc module~korc_ppusher->module~korc_interp module~korc_ppusher->module~korc_profiles module~korc_ppusher->module~korc_collisions module~korc_ppusher->module~korc_types module~korc_ppusher->module~korc_fields module~korc_ppusher->module~korc_constants module~korc_interp->module~korc_hpc module~korc_interp->module~korc_fio module~korc_interp->module~korc_types EZspline_obj EZspline_obj module~korc_interp->EZspline_obj module~korc_interp->module~korc_rnd_numbers EZspline EZspline module~korc_interp->EZspline module~korc_interp->module~korc_coords module~korc_profiles->module~korc_input module~korc_profiles->module~korc_hpc module~korc_profiles->module~korc_interp module~korc_profiles->module~korc_types module~korc_profiles->module~korc_hdf5 module~korc_profiles->module~korc_coords module~korc_units->module~korc_input module~korc_units->module~korc_types module~korc_units->module~korc_constants module~korc_fio->module~korc_input module~korc_fio->module~korc_types module~korc_fio->module~korc_hdf5 iso_c_binding iso_c_binding module~korc_fio->iso_c_binding module~korc_fio->mpi module~korc_collisions->module~korc_input module~korc_collisions->module~korc_interp module~korc_collisions->module~korc_profiles module~korc_collisions->module~korc_fio module~korc_collisions->module~korc_types module~korc_collisions->module~korc_fields module~korc_collisions->module~korc_hdf5 module~korc_collisions->module~korc_constants module~korc_random korc_random module~korc_collisions->module~korc_random module~korc_types->iso_c_binding module~korc_fields->module~korc_input module~korc_fields->module~korc_hpc module~korc_fields->module~korc_interp module~korc_fields->module~korc_types module~korc_fields->module~korc_hdf5 module~korc_fields->module~korc_coords module~korc_finalize->module~korc_hpc module~korc_finalize->module~korc_profiles module~korc_finalize->module~korc_types module~korc_finalize->module~korc_fields module~korc_hdf5->module~korc_hpc module~korc_hdf5->module~korc_types module~korc_hdf5->module~korc_constants HDF5 HDF5 module~korc_hdf5->HDF5 module~korc_rnd_numbers->module~korc_types ifport ifport module~korc_rnd_numbers->ifport module~korc_constants->module~korc_types module~korc_random->module~korc_types module~korc_random->iso_c_binding module~korc_spatial_distribution->module~korc_input module~korc_spatial_distribution->module~korc_hpc module~korc_spatial_distribution->module~korc_profiles module~korc_spatial_distribution->module~korc_types module~korc_spatial_distribution->module~korc_fields module~korc_spatial_distribution->module~korc_hdf5 module~korc_spatial_distribution->module~korc_rnd_numbers module~korc_spatial_distribution->module~korc_constants module~korc_spatial_distribution->module~korc_random module~korc_avalanche korc_avalanche module~korc_spatial_distribution->module~korc_avalanche module~korc_experimental_pdf korc_experimental_pdf module~korc_spatial_distribution->module~korc_experimental_pdf module~korc_hammersley_generator korc_hammersley_generator module~korc_spatial_distribution->module~korc_hammersley_generator module~korc_velocity_distribution->module~korc_hpc module~korc_velocity_distribution->module~korc_types module~korc_velocity_distribution->module~korc_fields module~korc_velocity_distribution->module~korc_hdf5 module~korc_velocity_distribution->module~korc_rnd_numbers module~korc_velocity_distribution->module~korc_constants module~korc_velocity_distribution->module~korc_avalanche module~korc_energy_pdfs korc_energy_pdfs module~korc_velocity_distribution->module~korc_energy_pdfs module~korc_simple_equilibrium_pdf korc_simple_equilibrium_pdf module~korc_velocity_distribution->module~korc_simple_equilibrium_pdf module~korc_velocity_distribution->module~korc_experimental_pdf module~korc_velocity_distribution->module~korc_hammersley_generator module~korc_coords->module~korc_types module~korc_coords->module~korc_constants module~korc_avalanche->module~korc_input module~korc_avalanche->module~korc_hpc module~korc_avalanche->module~korc_profiles module~korc_avalanche->module~korc_types module~korc_avalanche->module~korc_fields module~korc_avalanche->module~korc_hdf5 module~korc_avalanche->module~korc_constants module~korc_avalanche->module~korc_coords module~korc_energy_pdfs->module~korc_input module~korc_energy_pdfs->module~korc_hpc module~korc_energy_pdfs->module~korc_types module~korc_energy_pdfs->module~korc_hdf5 module~korc_energy_pdfs->module~korc_constants module~korc_simple_equilibrium_pdf->module~korc_input module~korc_simple_equilibrium_pdf->module~korc_hpc module~korc_simple_equilibrium_pdf->module~korc_types module~korc_simple_equilibrium_pdf->module~korc_hdf5 module~korc_simple_equilibrium_pdf->module~korc_constants module~special_functions special_functions module~korc_simple_equilibrium_pdf->module~special_functions module~korc_experimental_pdf->module~korc_input module~korc_experimental_pdf->module~korc_hpc module~korc_experimental_pdf->module~korc_interp module~korc_experimental_pdf->module~korc_types module~korc_experimental_pdf->module~korc_fields module~korc_experimental_pdf->module~korc_hdf5 module~korc_experimental_pdf->module~korc_rnd_numbers module~korc_experimental_pdf->module~korc_constants module~korc_experimental_pdf->module~korc_random module~korc_experimental_pdf->module~korc_coords module~korc_experimental_pdf->module~special_functions module~korc_hammersley_generator->module~korc_types

The main program contains the calls to the main functions and subroutines. Also, it contains the variables that control the behavior of the core of KORC and all other external/optional modules.

Order of KORC operations

Communication and Timing

1. Parallel Communications

Subroutine initialize_communications in korc_hpc that initializes MPI and OpenMP communications.

2. Timers

Subroutine timing_KORC in korc_hpc that times the execution of any parallel sections of KORC.

Initialization

1. HDF5

Subroutine initialize_HDF5 in korc_HDF5 that initializes HDF5 library.

2. Initialize korc parameters

Subroutine initialize_korc_parameters in korc_initialize that initializes paths and KORC parameters through load_korc_params on MPI processes.

3. Initialize fields

Subroutine initialize_fields in korc_fields that initializes parameters of the EM fields, either analytically or from an external HDF5 file. Reads in &analytical_fields_params and &externalPlasmaModel namelists from input file.

4. Initialize Profiles

Subroutine initialize_profiles in korc_profiles that initializes parameters of the plasma profiles, either analytically or from an external HDF5 file. Reads in &plasmaProfiles namelist from input file. Only initialized if collisions (params%collisions==T) are

5. Initialize Particle Velocity Phase Space

Subroutine initialize_particles in korc_initialize that initializes particle parameters from &amplasma_species namelist, allocates arrays for individual particles, including location, velocity, local EM fields and plasma profiles, etc., and calls initial_energy_pitch_dist to assign particles' energy and pitch angle according to the chosen distribution.

9. Compute Characteristic Plasma Parameters

Subroutine compute_charcs_plasma_params in korc_units calculates the characteristic plasma parameters params%cpp that are used for normalizations. Also finds the maximum non-relativistic and relativistic cyclotron frequencies to be used for setting the timstep for the time-evolution algorithms.

6. Initialize Collision Parameters

Subroutine initialize_collision_params in korc_collisions that initializes collision parameters for the SS (single-species) and MS (multiple-species) data types, reading in namefiles from the KORC input file. MS reads in namelist &CollisionParamsMultipleSpecies while SS reads in namelist &CollisionParamsSingleSpecies.

10. Define Time Step

Subroutine define_time_step in korc_initialize either loads time-stepping parameters for a restart, or defines new parameters based on a maximum timestep set by the inverse of the relativistic cyclotron frequency.

11. Initialize Particle Pusher

12. Normalize Variables

Subroutine normalize_variables in korc_units normalizes variables consistent with characteristic plasma parameters calculated in compute_charcs_plasma_params.

13. Normalize Collision Parameters

Subroutine normalize_collisions_params in korc_collisions that normalizes collision parameters for the SS (single-species) and MS (multiple-species) data types.

14. Define Collision Time Step

Subroutine define_collisions_time_step in korc_collisions that sets subcycling iteration number for collisions based off of the collision frequency model used.

15. Initialize Fields Interpolant

Subroutine initialize_fields_interpolant in korc_interp calls EZspline subroutines EZspline_init for memory allocation and boundary condition setup and EZspline_setup to compute the necessary cubic coefficients needed for subsequent field interpolations. The magnetic field can be defined in terms of an axisymmetric scalar flux function, axisymmetric field, or 3D field, while the electric field can be defined as an axisymmetric or 3D field.

16. Initialize Profiles Interpolant

Subroutine initialize_profiles_interpolant in korc_interp calls EZspline subroutines EZlinear_init for axisymmetric (flux-surface quantities) or EZspline_init for 3D profiles for memory allocation and boundary condition setup and EZspline_setup to compute the necessary cubic coefficients needed for subsequent field interpolations. Only initialized if collisions (params%collisions==T) are present for ne, Te, Zeff

17. Set Particle Initial Conditions

Subroutine set_up_particles_ic in korc_initialize calls subroutines to prescribe initial conditions or load them from file for a restart. Initial spatial values are prescribed with intitial_spatial_distribution in korc_spatial_distribution and initial velocity values are prescribed with initial_gyro_distribution in korc_velocity_distribution.

18. Save Simulation and Collision Parameters

Subroutines save_simulation_parameters in korc_HDF5 and save_collision_params in korc_collisions call subroutines to save simulation and collision parameters.


Calls

program~~main~~CallsGraph program~main main proc~adv_gcinterp_psi_top adv_GCinterp_psi_top program~main->proc~adv_gcinterp_psi_top proc~adv_fointerp_top adv_FOinterp_top program~main->proc~adv_fointerp_top proc~save_simulation_parameters save_simulation_parameters program~main->proc~save_simulation_parameters proc~save_collision_params save_collision_params program~main->proc~save_collision_params proc~initialize_particles initialize_particles program~main->proc~initialize_particles proc~adv_gcinterp_psi2x1t_top adv_GCinterp_psi2x1t_top program~main->proc~adv_gcinterp_psi2x1t_top proc~compute_charcs_plasma_params compute_charcs_plasma_params program~main->proc~compute_charcs_plasma_params proc~adv_gcinterp_3dbdb_top adv_GCinterp_3DBdB_top program~main->proc~adv_gcinterp_3dbdb_top proc~set_up_particles_ic set_up_particles_ic program~main->proc~set_up_particles_ic proc~reinit_sc_e1d_fs reinit_SC_E1D_FS program~main->proc~reinit_sc_e1d_fs proc~deallocate_variables deallocate_variables program~main->proc~deallocate_variables proc~adv_fofio_top adv_FOfio_top program~main->proc~adv_fofio_top proc~finalize_fio finalize_fio program~main->proc~finalize_fio proc~adv_fointerp_mars_top adv_FOinterp_mars_top program~main->proc~adv_fointerp_mars_top proc~initialize_hdf5 initialize_HDF5 program~main->proc~initialize_hdf5 proc~define_collisions_time_step define_collisions_time_step program~main->proc~define_collisions_time_step proc~adv_gcinterp_b_top adv_GCinterp_B_top program~main->proc~adv_gcinterp_b_top proc~initialize_nimrod initialize_nimrod program~main->proc~initialize_nimrod proc~gc_init GC_init program~main->proc~gc_init proc~initialize_profiles initialize_profiles program~main->proc~initialize_profiles proc~adv_gcinterp_2dbdb_top adv_GCinterp_2DBdB_top program~main->proc~adv_gcinterp_2dbdb_top proc~adv_gceqn_top adv_GCeqn_top program~main->proc~adv_gceqn_top proc~initialize_profiles_interpolant initialize_profiles_interpolant program~main->proc~initialize_profiles_interpolant proc~timing_korc timing_KORC program~main->proc~timing_korc proc~initialize_m3d_c1 initialize_m3d_c1 program~main->proc~initialize_m3d_c1 proc~normalize_collisions_params normalize_collisions_params program~main->proc~normalize_collisions_params proc~deallocate_collisions_params deallocate_collisions_params program~main->proc~deallocate_collisions_params proc~save_simulation_outputs save_simulation_outputs program~main->proc~save_simulation_outputs proc~reinit_sc_e1d reinit_SC_E1D program~main->proc~reinit_sc_e1d proc~initialize_korc_parameters initialize_korc_parameters program~main->proc~initialize_korc_parameters proc~adv_foeqn_top adv_FOeqn_top program~main->proc~adv_foeqn_top proc~initialize_collision_params initialize_collision_params program~main->proc~initialize_collision_params proc~adv_fointerp_aorsa_top adv_FOinterp_aorsa_top program~main->proc~adv_fointerp_aorsa_top proc~adv_gcinterp_3dbdb1_top adv_GCinterp_3DBdB1_top program~main->proc~adv_gcinterp_3dbdb1_top proc~define_time_step define_time_step program~main->proc~define_time_step proc~normalize_variables normalize_variables program~main->proc~normalize_variables proc~define_sc_time_step define_SC_time_step program~main->proc~define_sc_time_step proc~initialize_communications initialize_communications program~main->proc~initialize_communications proc~initialize_m3d_c1_imp initialize_m3d_c1_imp program~main->proc~initialize_m3d_c1_imp proc~finalize_interpolants finalize_interpolants program~main->proc~finalize_interpolants proc~finalize_communications finalize_communications program~main->proc~finalize_communications proc~initialize_fields initialize_fields program~main->proc~initialize_fields proc~adv_gcinterp_psi_top_fs adv_GCinterp_psi_top_FS program~main->proc~adv_gcinterp_psi_top_fs proc~save_restart_variables save_restart_variables program~main->proc~save_restart_variables proc~fo_init FO_init program~main->proc~fo_init proc~finalize_hdf5 finalize_HDF5 program~main->proc~finalize_hdf5 proc~adv_gcinterp_fio_top adv_GCinterp_fio_top program~main->proc~adv_gcinterp_fio_top proc~initialize_fields_interpolant initialize_fields_interpolant program~main->proc~initialize_fields_interpolant proc~initialize_particle_pusher initialize_particle_pusher program~main->proc~initialize_particle_pusher proc~adv_gcinterp_b2d_top adv_GCinterp_B2D_top program~main->proc~adv_gcinterp_b2d_top proc~adv_gcinterp_psiwe_top adv_GCinterp_psiwE_top program~main->proc~adv_gcinterp_psiwe_top proc~include_coulombcollisions_gc_p include_CoulombCollisions_GC_p proc~adv_gcinterp_psi_top->proc~include_coulombcollisions_gc_p proc~calculate_gcfields_p calculate_GCfields_p proc~adv_gcinterp_psi_top->proc~calculate_gcfields_p proc~advance_fpinterp_vars advance_FPinterp_vars proc~adv_gcinterp_psi_top->proc~advance_fpinterp_vars proc~interp_fo3dfields_p interp_FO3Dfields_p proc~adv_fointerp_top->proc~interp_fo3dfields_p proc~advance_fp3dinterp_vars advance_FP3Dinterp_vars proc~adv_fointerp_top->proc~advance_fp3dinterp_vars proc~advance_fointerp_vars advance_FOinterp_vars proc~adv_fointerp_top->proc~advance_fointerp_vars proc~interp_fofields1_p interp_FOfields1_p proc~adv_fointerp_top->proc~interp_fofields1_p cart_to_cyl_p cart_to_cyl_p proc~adv_fointerp_top->cart_to_cyl_p proc~interp_fofields_p interp_FOfields_p proc~adv_fointerp_top->proc~interp_fofields_p interface~save_1d_array_to_hdf5 save_1d_array_to_hdf5 proc~save_simulation_parameters->interface~save_1d_array_to_hdf5 h5gclose_f h5gclose_f proc~save_simulation_parameters->h5gclose_f h5eset_auto_f h5eset_auto_f proc~save_simulation_parameters->h5eset_auto_f proc~rsave_2d_array_to_hdf5 rsave_2d_array_to_hdf5 proc~save_simulation_parameters->proc~rsave_2d_array_to_hdf5 interface~save_to_hdf5 save_to_hdf5 proc~save_simulation_parameters->interface~save_to_hdf5 proc~save_string_parameter save_string_parameter proc~save_simulation_parameters->proc~save_string_parameter h5fclose_f h5fclose_f proc~save_simulation_parameters->h5fclose_f proc~rsave_3d_array_to_hdf5 rsave_3d_array_to_hdf5 proc~save_simulation_parameters->proc~rsave_3d_array_to_hdf5 proc~save_params_ss save_params_ss proc~save_collision_params->proc~save_params_ss proc~save_params_ms save_params_ms proc~save_collision_params->proc~save_params_ms sigmaz sigmaz proc~initialize_particles->sigmaz zo zo proc~initialize_particles->zo spong_w spong_w proc~initialize_particles->spong_w ro ro proc~initialize_particles->ro eo_lims eo_lims proc~initialize_particles->eo_lims eno eno proc~initialize_particles->eno proc~initial_energy_pitch_dist initial_energy_pitch_dist proc~initialize_particles->proc~initial_energy_pitch_dist spong_b spong_b proc~initialize_particles->spong_b dr dr proc~initialize_particles->dr phio phio proc~initialize_particles->phio spong_dlam spong_dlam proc~initialize_particles->spong_dlam xtrace xtrace proc~initialize_particles->xtrace dz dz proc~initialize_particles->dz sigmar sigmar proc~initialize_particles->sigmar proc~calculate_gcfields_2x1t_p calculate_GCfields_2x1t_p proc~adv_gcinterp_psi2x1t_top->proc~calculate_gcfields_2x1t_p proc~adv_gcinterp_psi2x1t_top->proc~advance_fpinterp_vars proc~adv_gcinterp_3dbdb_top->proc~advance_fpinterp_vars proc~intitial_spatial_distribution intitial_spatial_distribution proc~set_up_particles_ic->proc~intitial_spatial_distribution float float proc~set_up_particles_ic->float proc~initial_gyro_distribution initial_gyro_distribution proc~set_up_particles_ic->proc~initial_gyro_distribution proc~load_particles_ic load_particles_ic proc~set_up_particles_ic->proc~load_particles_ic proc~init_random_seed init_random_seed proc~set_up_particles_ic->proc~init_random_seed proc~initialize_sc1d_field_interpolant_fs initialize_SC1D_field_interpolant_FS proc~reinit_sc_e1d_fs->proc~initialize_sc1d_field_interpolant_fs proc~deallocate_fields_arrays DEALLOCATE_FIELDS_ARRAYS proc~deallocate_variables->proc~deallocate_fields_arrays proc~deallocate_profiles_arrays DEALLOCATE_PROFILES_ARRAYS proc~deallocate_variables->proc~deallocate_profiles_arrays proc~adv_fofio_top->proc~advance_fp3dinterp_vars proc~get_fio_vector_potential_p get_fio_vector_potential_p proc~adv_fofio_top->proc~get_fio_vector_potential_p proc~get_fio_foelectric_fields_p get_fio_FOelectric_fields_p proc~adv_fofio_top->proc~get_fio_foelectric_fields_p proc~get_fio_fomagnetic_fields_p get_fio_FOmagnetic_fields_p proc~adv_fofio_top->proc~get_fio_fomagnetic_fields_p proc~advance_fofio_vars advance_FOfio_vars proc~adv_fofio_top->proc~advance_fofio_vars proc~adv_fofio_top->cart_to_cyl_p interface~fio_close_field fio_close_field proc~finalize_fio->interface~fio_close_field interface~fio_close_source fio_close_source proc~finalize_fio->interface~fio_close_source proc~adv_fointerp_mars_top->proc~advance_fointerp_vars proc~interp_fofields_mars_p interp_FOfields_mars_p proc~adv_fointerp_mars_top->proc~interp_fofields_mars_p proc~adv_fointerp_mars_top->cart_to_cyl_p h5tcopy_f h5tcopy_f proc~initialize_hdf5->h5tcopy_f h5open_f h5open_f proc~initialize_hdf5->h5open_f h5tget_size_f h5tget_size_f proc~initialize_hdf5->h5tget_size_f proc~nu_d_fio nu_D_FIO proc~define_collisions_time_step->proc~nu_d_fio korc_abort korc_abort proc~define_collisions_time_step->korc_abort proc~nu_s_fio nu_S_FIO proc~define_collisions_time_step->proc~nu_s_fio proc~define_collisions_time_step->float proc~nu_s nu_S proc~define_collisions_time_step->proc~nu_s proc~nu_d nu_D proc~define_collisions_time_step->proc~nu_d proc~nu_par nu_par proc~define_collisions_time_step->proc~nu_par proc~adv_gcinterp_b_top->proc~advance_fpinterp_vars proc~initialize_nimrod->korc_abort interface~fio_set_int_option fio_set_int_option proc~initialize_nimrod->interface~fio_set_int_option interface~fio_allocate_search_hint fio_allocate_search_hint proc~initialize_nimrod->interface~fio_allocate_search_hint interface~fio_get_field fio_get_field proc~initialize_nimrod->interface~fio_get_field proc~initialize_nimrod->interface~fio_close_field interface~fio_get_options fio_get_options proc~initialize_nimrod->interface~fio_get_options interface~fio_open_source fio_open_source proc~initialize_nimrod->interface~fio_open_source interface~fio_eval_field fio_eval_field proc~initialize_nimrod->interface~fio_eval_field proc~initialize_nimrod->interface~fio_close_source proc~load_prev_iter load_prev_iter proc~initialize_nimrod->proc~load_prev_iter proc~cross cross proc~gc_init->proc~cross proc~add_analytical_e_p add_analytical_E_p proc~gc_init->proc~add_analytical_e_p proc~deg2rad~4 deg2rad proc~gc_init->proc~deg2rad~4 proc~allocate_2d_profiles_arrays ALLOCATE_2D_PROFILES_ARRAYS proc~initialize_profiles->proc~allocate_2d_profiles_arrays proc~load_profiles_data_from_hdf5 load_profiles_data_from_hdf5 proc~initialize_profiles->proc~load_profiles_data_from_hdf5 proc~adv_gcinterp_2dbdb_top->proc~advance_fpinterp_vars proc~calculate_sc_e1d calculate_SC_E1D proc~adv_gceqn_top->proc~calculate_sc_e1d proc~adv_gceqn_top->proc~include_coulombcollisions_gc_p proc~calculate_sc_p calculate_SC_p proc~adv_gceqn_top->proc~calculate_sc_p proc~analytical_fields_bmag_p analytical_fields_Bmag_p proc~adv_gceqn_top->proc~analytical_fields_bmag_p proc~rad2deg~2 rad2deg proc~adv_gceqn_top->proc~rad2deg~2 ezspline_error ezspline_error proc~initialize_profiles_interpolant->ezspline_error ezspline_setup ezspline_setup proc~initialize_profiles_interpolant->ezspline_setup ezspline_init ezspline_init proc~initialize_profiles_interpolant->ezspline_init mpi_gather mpi_gather proc~timing_korc->mpi_gather mpi_barrier mpi_barrier proc~timing_korc->mpi_barrier mpi_wtime mpi_wtime proc~timing_korc->mpi_wtime proc~initialize_m3d_c1->interface~fio_set_int_option interface~fio_get_real_field_parameter fio_get_real_field_parameter proc~initialize_m3d_c1->interface~fio_get_real_field_parameter proc~initialize_m3d_c1->interface~fio_allocate_search_hint proc~initialize_m3d_c1->interface~fio_get_field proc~initialize_m3d_c1->interface~fio_close_field proc~initialize_m3d_c1->interface~fio_get_options proc~initialize_m3d_c1->interface~fio_open_source proc~initialize_m3d_c1->interface~fio_eval_field proc~initialize_m3d_c1->proc~load_prev_iter proc~normalize_params_ms normalize_params_ms proc~normalize_collisions_params->proc~normalize_params_ms proc~normalize_params_ss normalize_params_ss proc~normalize_collisions_params->proc~normalize_params_ss proc~deallocate_params_ms deallocate_params_ms proc~deallocate_collisions_params->proc~deallocate_params_ms proc~save_simulation_outputs->interface~save_1d_array_to_hdf5 proc~save_simulation_outputs->h5gclose_f proc~save_simulation_outputs->proc~rsave_2d_array_to_hdf5 proc~save_simulation_outputs->h5fclose_f proc~initialize_sc1d_field_interpolant initialize_SC1D_field_interpolant proc~reinit_sc_e1d->proc~initialize_sc1d_field_interpolant proc~load_korc_params load_korc_params proc~initialize_korc_parameters->proc~load_korc_params proc~initialize_korc_parameters->mpi_barrier proc~read_namelist read_namelist proc~initialize_korc_parameters->proc~read_namelist proc~analytical_fields_p analytical_fields_p proc~adv_foeqn_top->proc~analytical_fields_p proc~advance_fp3deqn_vars advance_FP3Deqn_vars proc~adv_foeqn_top->proc~advance_fp3deqn_vars proc~advance_foeqn_vars advance_FOeqn_vars proc~adv_foeqn_top->proc~advance_foeqn_vars proc~uniform_fields_p uniform_fields_p proc~adv_foeqn_top->proc~uniform_fields_p proc~initialize_collision_params->proc~initialize_m3d_c1_imp proc~initialize_collision_params->korc_abort proc~load_params_ss load_params_ss proc~initialize_collision_params->proc~load_params_ss proc~load_params_ms load_params_ms proc~initialize_collision_params->proc~load_params_ms proc~adv_fointerp_aorsa_top->proc~advance_fointerp_vars proc~interp_fofields_aorsa_p interp_FOfields_aorsa_p proc~adv_fointerp_aorsa_top->proc~interp_fofields_aorsa_p proc~adv_fointerp_aorsa_top->cart_to_cyl_p proc~adv_gcinterp_3dbdb1_top->proc~advance_fpinterp_vars proc~load_time_stepping_params load_time_stepping_params proc~define_time_step->proc~load_time_stepping_params proc~load_prev_time load_prev_time proc~define_time_step->proc~load_prev_time proc~define_time_step->float proc~initialize_mpi initialize_mpi proc~initialize_communications->proc~initialize_mpi omp_get_num_procs omp_get_num_procs proc~initialize_communications->omp_get_num_procs omp_get_num_threads omp_get_num_threads proc~initialize_communications->omp_get_num_threads proc~initialize_m3d_c1_imp->interface~fio_set_int_option proc~initialize_m3d_c1_imp->interface~fio_get_field proc~initialize_m3d_c1_imp->interface~fio_close_field proc~fio_make_species FIO_MAKE_SPECIES proc~initialize_m3d_c1_imp->proc~fio_make_species proc~initialize_m3d_c1_imp->interface~fio_get_options ezspline_allocated ezspline_allocated proc~finalize_interpolants->ezspline_allocated proc~finalize_mpi finalize_mpi proc~finalize_communications->proc~finalize_mpi proc~allocate_1d_fs_arrays allocate_1D_FS_arrays proc~initialize_fields->proc~allocate_1d_fs_arrays proc~initialize_gc_fields_3d initialize_GC_fields_3D proc~initialize_fields->proc~initialize_gc_fields_3d proc~allocate_2d_fields_arrays ALLOCATE_2D_FIELDS_ARRAYS proc~initialize_fields->proc~allocate_2d_fields_arrays proc~korc_abort korc_abort proc~initialize_fields->proc~korc_abort proc~load_1d_fs_from_hdf5 load_1D_FS_from_hdf5 proc~initialize_fields->proc~load_1d_fs_from_hdf5 proc~initialize_gc_fields initialize_GC_fields proc~initialize_fields->proc~initialize_gc_fields proc~load_field_data_from_hdf5 load_field_data_from_hdf5 proc~initialize_fields->proc~load_field_data_from_hdf5 proc~allocate_3d_fields_arrays ALLOCATE_3D_FIELDS_ARRAYS proc~initialize_fields->proc~allocate_3d_fields_arrays proc~initialize_fields->proc~load_prev_iter proc~load_dim_data_from_hdf5 load_dim_data_from_hdf5 proc~initialize_fields->proc~load_dim_data_from_hdf5 proc~which_fields_in_file which_fields_in_file proc~initialize_fields->proc~which_fields_in_file proc~calculate_sc_e1d_fs calculate_SC_E1D_FS proc~adv_gcinterp_psi_top_fs->proc~calculate_sc_e1d_fs proc~calculate_sc_p_fs calculate_SC_p_FS proc~adv_gcinterp_psi_top_fs->proc~calculate_sc_p_fs proc~adv_gcinterp_psi_top_fs->proc~advance_fpinterp_vars proc~save_restart_variables->interface~save_1d_array_to_hdf5 proc~save_restart_variables->h5gclose_f proc~save_restart_variables->proc~rsave_2d_array_to_hdf5 proc~save_restart_variables->interface~save_to_hdf5 proc~save_restart_variables->mpi_gather proc~save_restart_variables->mpi_barrier proc~save_restart_variables->h5fclose_f proc~fo_init->proc~analytical_fields_p proc~fo_init->proc~interp_fo3dfields_p proc~fo_init->proc~get_fio_vector_potential_p proc~fo_init->proc~get_fio_foelectric_fields_p proc~fo_init->proc~interp_fofields1_p proc~fo_init->proc~get_fio_fomagnetic_fields_p proc~fo_init->proc~interp_fofields_aorsa_p proc~fo_init->proc~uniform_fields_p proc~fo_init->proc~interp_fofields_mars_p proc~fo_init->cart_to_cyl_p proc~fo_init->proc~interp_fofields_p h5close_f h5close_f proc~finalize_hdf5->h5close_f omp_get_thread_num omp_get_thread_num proc~adv_gcinterp_fio_top->omp_get_thread_num proc~initialize_fields_interpolant->ezspline_allocated proc~initialize_fields_interpolant->ezspline_error proc~initialize_fields_interpolant->ezspline_setup proc~initialize_fields_interpolant->ezspline_init proc~adv_gcinterp_b2d_top->proc~advance_fpinterp_vars proc~adv_gcinterp_psiwe_top->proc~include_coulombcollisions_gc_p proc~adv_gcinterp_psiwe_top->proc~korc_abort proc~adv_gcinterp_psiwe_top->proc~calculate_gcfields_p proc~adv_gcinterp_psiwe_top->omp_get_thread_num proc~cart_to_tor_check_if_confined_p cart_to_tor_check_if_confined_p proc~analytical_fields_p->proc~cart_to_tor_check_if_confined_p proc~interp_fo3dfields_p->ezspline_error ezspline_interp ezspline_interp proc~interp_fo3dfields_p->ezspline_interp proc~check_if_in_fields_domain_p check_if_in_fields_domain_p proc~interp_fo3dfields_p->proc~check_if_in_fields_domain_p proc~cb_ee CB_ee proc~nu_d_fio->proc~cb_ee proc~cb_ei_fio CB_ei_FIO proc~nu_d_fio->proc~cb_ei_fio proc~include_coulombcollisions_fo_p include_CoulombCollisions_FO_p proc~advance_fp3deqn_vars->proc~include_coulombcollisions_fo_p proc~advance_fp3dinterp_vars->proc~include_coulombcollisions_fo_p proc~calculate_sc_e1d->proc~initialize_sc1d_field_interpolant mpi_allreduce mpi_allreduce proc~calculate_sc_e1d->mpi_allreduce proc~get_fio_vector_potential_p->interface~fio_eval_field proc~get_fio_foelectric_fields_p->interface~fio_eval_field proc~isave_1d_array_to_hdf5 isave_1d_array_to_hdf5 interface~save_1d_array_to_hdf5->proc~isave_1d_array_to_hdf5 proc~rsave_1d_array_to_hdf5 rsave_1d_array_to_hdf5 interface~save_1d_array_to_hdf5->proc~rsave_1d_array_to_hdf5 proc~radiation_force_p radiation_force_p proc~advance_fointerp_vars->proc~radiation_force_p proc~advance_fointerp_vars->proc~include_coulombcollisions_fo_p proc~initialize_mpi->mpi_barrier mpi_reduce mpi_reduce proc~initialize_mpi->mpi_reduce mpi_init mpi_init proc~initialize_mpi->mpi_init mpi_initialized mpi_initialized proc~initialize_mpi->mpi_initialized mpi_comm_size mpi_comm_size proc~initialize_mpi->mpi_comm_size proc~set_paths set_paths proc~initialize_mpi->proc~set_paths mpi_abort mpi_abort proc~initialize_mpi->mpi_abort mpi_bcast mpi_bcast proc~initialize_mpi->mpi_bcast mpi_comm_rank mpi_comm_rank proc~initialize_mpi->mpi_comm_rank mpi_cart_create mpi_cart_create proc~initialize_mpi->mpi_cart_create proc~load_time_stepping_params->proc~korc_abort proc~load_time_stepping_params->h5fclose_f h5fopen_f h5fopen_f proc~load_time_stepping_params->h5fopen_f proc~load_time_stepping_params->mpi_bcast interface~load_from_hdf5 load_from_hdf5 proc~load_time_stepping_params->interface~load_from_hdf5 proc~interp_fofields1_p->ezspline_error proc~calculate_magnetic_field_p calculate_magnetic_field_p proc~interp_fofields1_p->proc~calculate_magnetic_field_p proc~interp_fofields1_p->ezspline_interp proc~interp_fofields1_p->proc~check_if_in_fields_domain_p proc~initialize_sc1d_field_interpolant_fs->ezspline_allocated proc~initialize_sc1d_field_interpolant_fs->ezspline_error proc~initialize_sc1d_field_interpolant_fs->ezspline_setup proc~initialize_sc1d_field_interpolant_fs->ezspline_init proc~initial_energy_pitch_dist->mpi_barrier proc~calculate_gcfields_2x1t_p->ezspline_error ezspline_derivative ezspline_derivative proc~calculate_gcfields_2x1t_p->ezspline_derivative proc~calculate_gcfields_2x1t_p->proc~check_if_in_fields_domain_p h5screate_simple_f h5screate_simple_f proc~rsave_2d_array_to_hdf5->h5screate_simple_f h5dclose_f h5dclose_f proc~rsave_2d_array_to_hdf5->h5dclose_f h5dwrite_f h5dwrite_f proc~rsave_2d_array_to_hdf5->h5dwrite_f h5sclose_f h5sclose_f proc~rsave_2d_array_to_hdf5->h5sclose_f proc~allocate_1d_fs_arrays->h5fclose_f proc~allocate_1d_fs_arrays->h5fopen_f proc~allocate_1d_fs_arrays->interface~load_from_hdf5 proc~get_fio_fomagnetic_fields_p->interface~fio_eval_field proc~rsave_to_hdf5 rsave_to_hdf5 interface~save_to_hdf5->proc~rsave_to_hdf5 proc~i1save_to_hdf5 i1save_to_hdf5 interface~save_to_hdf5->proc~i1save_to_hdf5 proc~i8save_to_hdf5 i8save_to_hdf5 interface~save_to_hdf5->proc~i8save_to_hdf5 proc~i2save_to_hdf5 i2save_to_hdf5 interface~save_to_hdf5->proc~i2save_to_hdf5 proc~i4save_to_hdf5 i4save_to_hdf5 interface~save_to_hdf5->proc~i4save_to_hdf5 proc~allocate_v_field_2dx ALLOCATE_V_FIELD_2DX proc~allocate_2d_fields_arrays->proc~allocate_v_field_2dx proc~allocate_v_field_2d ALLOCATE_V_FIELD_2D proc~allocate_2d_fields_arrays->proc~allocate_v_field_2d proc~intitial_spatial_distribution->proc~korc_abort proc~cf_fio CF_FIO proc~nu_s_fio->proc~cf_fio proc~include_coulombcollisions_gc_p->proc~calculate_gcfields_2x1t_p proc~include_coulombcollisions_gc_p->proc~add_analytical_e_p proc~include_coulombcollisions_gc_p->proc~calculate_gcfields_p proc~calculate_gcfieldswe_p calculate_GCfieldswE_p proc~include_coulombcollisions_gc_p->proc~calculate_gcfieldswe_p proc~dca_sd dCA_SD proc~include_coulombcollisions_gc_p->proc~dca_sd proc~interp_fields_3d_p interp_fields_3D_p proc~include_coulombcollisions_gc_p->proc~interp_fields_3d_p proc~get_random get_random proc~include_coulombcollisions_gc_p->proc~get_random proc~analytical_profiles_p analytical_profiles_p proc~include_coulombcollisions_gc_p->proc~analytical_profiles_p proc~interp_hcollision_p interp_Hcollision_p proc~include_coulombcollisions_gc_p->proc~interp_hcollision_p proc~cb_ei_sd CB_ei_SD proc~include_coulombcollisions_gc_p->proc~cb_ei_sd proc~interp_fields_p interp_fields_p proc~include_coulombcollisions_gc_p->proc~interp_fields_p proc~cb_ee_sd CB_ee_SD proc~include_coulombcollisions_gc_p->proc~cb_ee_sd proc~calculate_gcfields_p_fs calculate_GCfields_p_FS proc~include_coulombcollisions_gc_p->proc~calculate_gcfields_p_fs proc~interp_focollision_p interp_FOcollision_p proc~include_coulombcollisions_gc_p->proc~interp_focollision_p proc~analytical_fields_gc_p analytical_fields_GC_p proc~include_coulombcollisions_gc_p->proc~analytical_fields_gc_p proc~calculate_2dbdbfields_p calculate_2DBdBfields_p proc~include_coulombcollisions_gc_p->proc~calculate_2dbdbfields_p proc~cb_ei_sd_fio CB_ei_SD_FIO proc~include_coulombcollisions_gc_p->proc~cb_ei_sd_fio proc~cf_sd_fio CF_SD_FIO proc~include_coulombcollisions_gc_p->proc~cf_sd_fio proc~ca_sd CA_SD proc~include_coulombcollisions_gc_p->proc~ca_sd proc~cf_sd CF_SD proc~include_coulombcollisions_gc_p->proc~cf_sd proc~advance_fofio_vars->proc~radiation_force_p proc~include_coulombcollisions_fofio_p include_CoulombCollisions_FOfio_p proc~advance_fofio_vars->proc~include_coulombcollisions_fofio_p proc~korc_abort->mpi_abort proc~save_string_parameter->h5tcopy_f h5dwrite_vl_f h5dwrite_vl_f proc~save_string_parameter->h5dwrite_vl_f proc~save_string_parameter->h5screate_simple_f h5tset_strpad_f h5tset_strpad_f proc~save_string_parameter->h5tset_strpad_f proc~save_string_parameter->h5dclose_f proc~save_string_parameter->h5sclose_f proc~interp_fofields_aorsa_p->ezspline_error proc~interp_fofields_aorsa_p->ezspline_interp proc~interp_fofields_aorsa_p->proc~check_if_in_fields_domain_p proc~load_prev_time->proc~korc_abort proc~load_prev_time->h5fclose_f proc~load_prev_time->h5fopen_f proc~load_prev_time->mpi_bcast proc~load_prev_time->mpi_comm_rank proc~load_prev_time->interface~load_from_hdf5 proc~advance_foeqn_vars->proc~radiation_force_p proc~advance_foeqn_vars->proc~include_coulombcollisions_fo_p proc~load_1d_fs_from_hdf5->h5fclose_f proc~load_1d_fs_from_hdf5->h5fopen_f interface~load_array_from_hdf5 load_array_from_hdf5 proc~load_1d_fs_from_hdf5->interface~load_array_from_hdf5 proc~calculate_sc_e1d_fs->proc~initialize_sc1d_field_interpolant_fs proc~calculate_sc_e1d_fs->mpi_allreduce proc~save_params_ss->h5gclose_f proc~save_params_ss->interface~save_to_hdf5 proc~save_params_ss->proc~save_string_parameter proc~save_params_ss->h5fclose_f proc~load_profiles_data_from_hdf5->proc~allocate_2d_profiles_arrays proc~load_profiles_data_from_hdf5->h5fclose_f proc~load_profiles_data_from_hdf5->h5fopen_f proc~allocate_3d_profiles_arrays ALLOCATE_3D_PROFILES_ARRAYS proc~load_profiles_data_from_hdf5->proc~allocate_3d_profiles_arrays proc~load_profiles_data_from_hdf5->interface~load_array_from_hdf5 proc~load_profiles_data_from_hdf5->interface~load_from_hdf5 proc~initialize_sc1d_field_interpolant->ezspline_allocated proc~initialize_sc1d_field_interpolant->ezspline_error proc~initialize_sc1d_field_interpolant->ezspline_setup proc~initialize_sc1d_field_interpolant->ezspline_init proc~load_field_data_from_hdf5->h5fclose_f proc~load_field_data_from_hdf5->h5fopen_f proc~load_field_data_from_hdf5->interface~load_array_from_hdf5 proc~load_field_data_from_hdf5->interface~load_from_hdf5 proc~cf CF proc~nu_s->proc~cf proc~cb_ei CB_ei proc~nu_d->proc~cb_ei proc~nu_d->proc~cb_ee proc~allocate_v_field_3d ALLOCATE_V_FIELD_3D proc~allocate_3d_fields_arrays->proc~allocate_v_field_3d proc~finalize_mpi->mpi_barrier mpi_finalized mpi_finalized proc~finalize_mpi->mpi_finalized mpi_finalize mpi_finalize proc~finalize_mpi->mpi_finalize proc~calculate_gcfields_p->ezspline_error proc~calculate_gcfields_p->ezspline_derivative proc~calculate_gcfields_p->proc~check_if_in_fields_domain_p proc~rsave_3d_array_to_hdf5->h5screate_simple_f proc~rsave_3d_array_to_hdf5->h5dclose_f proc~rsave_3d_array_to_hdf5->h5dwrite_f proc~rsave_3d_array_to_hdf5->h5sclose_f proc~advance_fpinterp_vars->proc~include_coulombcollisions_gc_p proc~read_namelist->proc~korc_abort proc~read_namelist->mpi_barrier proc~rmcoment rmcoment proc~read_namelist->proc~rmcoment proc~load_prev_iter->proc~korc_abort proc~load_prev_iter->h5fclose_f proc~load_prev_iter->h5fopen_f proc~load_prev_iter->mpi_bcast proc~load_prev_iter->interface~load_from_hdf5 proc~vte_wu VTe_wu proc~load_params_ss->proc~vte_wu proc~clogee_wu CLogee_wu proc~load_params_ss->proc~clogee_wu proc~gammac_wu Gammac_wu proc~load_params_ss->proc~gammac_wu proc~clogei_wu CLogei_wu proc~load_params_ss->proc~clogei_wu proc~interp_fofields_mars_p->ezspline_error proc~interp_fofields_mars_p->ezspline_interp proc~interp_fofields_mars_p->proc~check_if_in_fields_domain_p proc~load_particles_ic->proc~korc_abort proc~load_particles_ic->mpi_barrier proc~load_particles_ic->h5fclose_f proc~load_particles_ic->h5fopen_f proc~load_particles_ic->interface~load_array_from_hdf5 mpi_scatter mpi_scatter proc~load_particles_ic->mpi_scatter proc~interp_fofields_p->ezspline_error proc~interp_fofields_p->ezspline_interp proc~interp_fofields_p->proc~check_if_in_fields_domain_p zj_mult zj_mult proc~load_params_ms->zj_mult proc~load_params_ms->proc~gammac_wu zo_mult zo_mult proc~load_params_ms->zo_mult proc~save_params_ms->interface~save_1d_array_to_hdf5 proc~save_params_ms->h5gclose_f proc~save_params_ms->interface~save_to_hdf5 proc~save_params_ms->proc~save_string_parameter proc~save_params_ms->h5fclose_f proc~load_dim_data_from_hdf5->h5fclose_f proc~load_dim_data_from_hdf5->h5fopen_f proc~load_dim_data_from_hdf5->interface~load_from_hdf5 proc~which_fields_in_file->h5fclose_f proc~which_fields_in_file->h5fopen_f proc~ca CA proc~nu_par->proc~ca proc~isave_1d_array_to_hdf5->h5tcopy_f proc~isave_1d_array_to_hdf5->h5screate_simple_f proc~isave_1d_array_to_hdf5->h5dclose_f proc~isave_1d_array_to_hdf5->h5dwrite_f proc~isave_1d_array_to_hdf5->h5sclose_f h5awrite_f h5awrite_f proc~isave_1d_array_to_hdf5->h5awrite_f h5tset_size_f h5tset_size_f proc~isave_1d_array_to_hdf5->h5tset_size_f h5aclose_f h5aclose_f proc~isave_1d_array_to_hdf5->h5aclose_f h5acreate_f h5acreate_f proc~isave_1d_array_to_hdf5->h5acreate_f proc~calculate_gcfieldswe_p->ezspline_error proc~calculate_gcfieldswe_p->ezspline_derivative proc~calculate_gcfieldswe_p->proc~check_if_in_fields_domain_p proc~clogee_wu->proc~vte_wu proc~clog0_wu CLog0_wu proc~clogee_wu->proc~clog0_wu proc~psi psi proc~dca_sd->proc~psi proc~vte VTe proc~dca_sd->proc~vte proc~gammacee Gammacee proc~dca_sd->proc~gammacee proc~interp_fields_3d_p->ezspline_error proc~interp_fields_3d_p->ezspline_interp proc~interp_fields_3d_p->proc~check_if_in_fields_domain_p proc~get_random->omp_get_thread_num interface~random_get_number random_get_number proc~get_random->interface~random_get_number proc~rsave_to_hdf5->h5tcopy_f proc~rsave_to_hdf5->h5screate_simple_f proc~rsave_to_hdf5->h5dclose_f proc~rsave_to_hdf5->h5dwrite_f proc~rsave_to_hdf5->h5sclose_f proc~rsave_to_hdf5->h5awrite_f proc~rsave_to_hdf5->h5tset_size_f proc~rsave_to_hdf5->h5aclose_f proc~rsave_to_hdf5->h5acreate_f proc~gammac_wu->proc~clogee_wu proc~interp_hcollision_p->ezspline_error proc~interp_hcollision_p->ezspline_interp proc~check_if_in_profiles_domain_p check_if_in_profiles_domain_p proc~interp_hcollision_p->proc~check_if_in_profiles_domain_p proc~i1save_to_hdf5->h5tcopy_f proc~i1save_to_hdf5->h5screate_simple_f proc~i1save_to_hdf5->h5dclose_f proc~i1save_to_hdf5->h5sclose_f proc~i1save_to_hdf5->h5awrite_f proc~i1save_to_hdf5->h5tset_size_f proc~i1save_to_hdf5->h5aclose_f proc~i1save_to_hdf5->h5acreate_f proc~set_paths->proc~korc_abort proc~i8save_to_hdf5->h5tcopy_f proc~i8save_to_hdf5->h5screate_simple_f proc~i8save_to_hdf5->h5dclose_f proc~i8save_to_hdf5->h5sclose_f proc~i8save_to_hdf5->h5awrite_f proc~i8save_to_hdf5->h5tset_size_f proc~i8save_to_hdf5->h5aclose_f proc~i8save_to_hdf5->h5acreate_f proc~clogei CLogei proc~cb_ei_sd->proc~clogei proc~clogee CLogee proc~cb_ei_sd->proc~clogee proc~g_j g_j proc~cb_ei_sd->proc~g_j proc~cb_ei_sd->proc~vte proc~cb_ei_sd->proc~gammacee proc~calculate_magnetic_field_p->ezspline_error proc~calculate_magnetic_field_p->ezspline_interp ezspline_gradient ezspline_gradient proc~calculate_magnetic_field_p->ezspline_gradient proc~interp_fields_p->ezspline_error proc~interp_fields_p->ezspline_interp proc~interp_fields_p->proc~check_if_in_fields_domain_p proc~cb_ee_sd->proc~psi proc~delta delta proc~cb_ee_sd->proc~delta proc~cb_ee_sd->proc~vte proc~cb_ee_sd->proc~gammacee proc~cb_ei->proc~clogei proc~cb_ei->proc~clogee proc~cb_ei->proc~g_j proc~cf_fio->proc~psi proc~cf_fio->proc~clogee proc~h_j h_j proc~cf_fio->proc~h_j proc~i2save_to_hdf5->h5tcopy_f proc~i2save_to_hdf5->h5screate_simple_f proc~i2save_to_hdf5->h5dclose_f proc~i2save_to_hdf5->h5sclose_f proc~i2save_to_hdf5->h5awrite_f proc~i2save_to_hdf5->h5tset_size_f proc~i2save_to_hdf5->h5aclose_f proc~i2save_to_hdf5->h5acreate_f proc~calculate_gcfields_p_fs->ezspline_error proc~calculate_gcfields_p_fs->ezspline_derivative proc~calculate_gcfields_p_fs->proc~check_if_in_fields_domain_p proc~cb_ee->proc~psi proc~interp_focollision_p->ezspline_error proc~interp_focollision_p->ezspline_interp proc~interp_focollision_p->proc~check_if_in_profiles_domain_p proc~cf->proc~psi proc~cf->proc~clogee proc~cf->proc~h_j proc~include_coulombcollisions_fo_p->cart_to_cyl_p proc~include_coulombcollisions_fo_p->proc~dca_sd proc~include_coulombcollisions_fo_p->proc~get_random proc~include_coulombcollisions_fo_p->proc~analytical_profiles_p proc~include_coulombcollisions_fo_p->proc~cb_ei_sd proc~include_coulombcollisions_fo_p->proc~cb_ee_sd proc~include_coulombcollisions_fo_p->proc~interp_focollision_p proc~include_coulombcollisions_fo_p->proc~ca_sd proc~include_coulombcollisions_fo_p->proc~cf_sd proc~unitvectors_p unitVectors_p proc~include_coulombcollisions_fo_p->proc~unitvectors_p proc~rload_1d_array_from_hdf5 rload_1d_array_from_hdf5 interface~load_array_from_hdf5->proc~rload_1d_array_from_hdf5 proc~rload_3d_array_from_hdf5 rload_3d_array_from_hdf5 interface~load_array_from_hdf5->proc~rload_3d_array_from_hdf5 proc~rload_2d_array_from_hdf5 rload_2d_array_from_hdf5 interface~load_array_from_hdf5->proc~rload_2d_array_from_hdf5 proc~calculate_2dbdbfields_p->ezspline_error proc~calculate_2dbdbfields_p->ezspline_interp proc~calculate_2dbdbfields_p->proc~check_if_in_fields_domain_p proc~cb_ei_sd_fio->proc~clogei proc~cb_ei_sd_fio->proc~clogee proc~cb_ei_sd_fio->proc~g_j proc~cb_ei_sd_fio->proc~vte proc~cb_ei_sd_fio->proc~gammacee proc~cb_ei_fio->proc~clogei proc~cb_ei_fio->proc~clogee proc~cb_ei_fio->proc~g_j proc~clogei_wu->proc~vte_wu proc~clogei_wu->proc~clog0_wu proc~rsave_1d_array_to_hdf5->h5tcopy_f proc~rsave_1d_array_to_hdf5->h5screate_simple_f proc~rsave_1d_array_to_hdf5->h5dclose_f proc~rsave_1d_array_to_hdf5->h5dwrite_f proc~rsave_1d_array_to_hdf5->h5sclose_f proc~rsave_1d_array_to_hdf5->h5awrite_f proc~rsave_1d_array_to_hdf5->h5tset_size_f proc~rsave_1d_array_to_hdf5->h5aclose_f proc~rsave_1d_array_to_hdf5->h5acreate_f proc~ca->proc~psi proc~cf_sd_fio->proc~psi proc~cf_sd_fio->proc~clogee proc~cf_sd_fio->proc~h_j proc~cf_sd_fio->proc~vte proc~cf_sd_fio->proc~gammacee proc~ca_sd->proc~psi proc~ca_sd->proc~vte proc~ca_sd->proc~gammacee proc~i4save_to_hdf5->h5tcopy_f proc~i4save_to_hdf5->h5screate_simple_f proc~i4save_to_hdf5->h5dclose_f proc~i4save_to_hdf5->h5sclose_f proc~i4save_to_hdf5->h5awrite_f proc~i4save_to_hdf5->h5tset_size_f proc~i4save_to_hdf5->h5aclose_f proc~i4save_to_hdf5->h5acreate_f proc~cf_sd->proc~psi proc~cf_sd->proc~clogee proc~cf_sd->proc~h_j proc~cf_sd->proc~vte proc~cf_sd->proc~gammacee proc~include_coulombcollisions_fofio_p->cart_to_cyl_p proc~include_coulombcollisions_fofio_p->proc~dca_sd proc~include_coulombcollisions_fofio_p->proc~get_random proc~include_coulombcollisions_fofio_p->proc~cb_ei_sd proc~include_coulombcollisions_fofio_p->proc~cb_ee_sd proc~include_coulombcollisions_fofio_p->proc~ca_sd proc~include_coulombcollisions_fofio_p->proc~cf_sd proc~include_coulombcollisions_fofio_p->proc~unitvectors_p proc~get_fio_ion_p get_fio_ion_p proc~include_coulombcollisions_fofio_p->proc~get_fio_ion_p proc~get_fio_profile_p get_fio_profile_p proc~include_coulombcollisions_fofio_p->proc~get_fio_profile_p proc~rload_from_hdf5 rload_from_hdf5 interface~load_from_hdf5->proc~rload_from_hdf5 proc~iload_from_hdf5 iload_from_hdf5 interface~load_from_hdf5->proc~iload_from_hdf5 proc~get_fio_ion_p->interface~fio_eval_field proc~clogei->proc~vte proc~clog0 CLog0 proc~clogei->proc~clog0 proc~rload_from_hdf5->proc~korc_abort proc~rload_from_hdf5->h5dclose_f h5dread_f h5dread_f proc~rload_from_hdf5->h5dread_f proc~clogee->proc~vte proc~clogee->proc~clog0 proc~rload_1d_array_from_hdf5->proc~korc_abort proc~rload_1d_array_from_hdf5->h5dclose_f proc~rload_1d_array_from_hdf5->h5dread_f proc~get_fio_profile_p->interface~fio_eval_field proc~rload_3d_array_from_hdf5->proc~korc_abort proc~rload_3d_array_from_hdf5->h5dclose_f proc~rload_3d_array_from_hdf5->h5dread_f proc~delta->proc~vte proc~iload_from_hdf5->proc~korc_abort proc~iload_from_hdf5->h5dclose_f proc~iload_from_hdf5->h5dread_f proc~gammacee->proc~clogee proc~rload_2d_array_from_hdf5->proc~korc_abort proc~rload_2d_array_from_hdf5->h5dclose_f proc~rload_2d_array_from_hdf5->h5dread_f

Contents

Source Code


Variables

Type AttributesNameInitial
type(KORC_PARAMS) :: params

Contains the parameters that control the core of KORC: time steping, output list, etc.

type(SPECIES), DIMENSION(:), ALLOCATABLE:: spp

Contains the initial parameters of each species, which can be different electrons with different distribution functions.

type(FIELDS) :: F

and electric fields, or in the case of using external fields it contains the data used in the interpolations. See korc_fields for details.

type(PROFILES) :: P

or in the case of using external fields it contains the data used in the interpolations. See korc_profiles for details.

integer(kind=ip) :: it

Time iteration

integer :: mpierr

Source Code

program main
  !! @note  Main function of KORC. @endnote
  !! The main program contains the calls to the main functions and subroutines. 
  !! Also, it contains the variables that control
  !! the behavior of the core of KORC and all other external/optional modules.

  use korc_types
  use korc_units
  use korc_hpc
  use korc_HDF5
  use korc_fields
  use korc_ppusher
  use korc_interp
  use korc_collisions
  use korc_initialize
  use korc_finalize
  use korc_profiles
  use korc_input
#ifdef FIO
  use korc_fio
#endif
  
  implicit none

  TYPE(KORC_PARAMS) :: params
  !! Contains the parameters that control the core of KORC: 
  !! time steping, output list, etc.
  TYPE(SPECIES), DIMENSION(:), ALLOCATABLE :: spp
  !! Contains the initial parameters of each species, which 
  !! can be different electrons with different
  !! distribution functions.
  TYPE(FIELDS) :: F
  !! F: Contains the parameters of the analytical magnetic 
  !! and electric fields, or in the case of using 
  !! external fields it contains the data used in the interpolations. 
  !!See [[korc_fields(module)]] for details.
  TYPE(PROFILES) :: P
  !! P: Contains the parameters of the analytical plasma profiles, 
  !! or in the case of using external 
  !! fields it contains the data used in the interpolations. 
  !! See [[korc_profiles(module)]] for details.
  INTEGER(ip) :: it 
  !! Time iteration
  INTEGER 				:: mpierr
    
  call initialize_communications(params)
  !!<h2>Order of KORC operations</h2>
  !!
  !!<h3>Communication and Timing</h3>
  !! <h4>1\. Parallel Communications</h4>
  !!
  !! Subroutine [[initialize_communications]] in [[korc_hpc]] that 
  !! initializes MPI and OpenMP communications.

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call timing_KORC(params)
  !! <h4>2\. Timers</h4>
  !!
  !! Subroutine [[timing_KORC]] in [[korc_hpc]] that times the 
  !! execution of any parallel sections of KORC.
  
  ! * * * INITIALIZATION STAGE * * *!

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_HDF5()
  !!<h3>Initialization</h3>
  !!
  !! <h4>1\. HDF5</h4>
  !!
  !! Subroutine [[initialize_HDF5]] in [[korc_HDF5]] that initializes
  !! HDF5 library. 

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_korc_parameters(params)
  !! <h4>2\. Initialize korc parameters</h4>
  !!
  !! Subroutine [[initialize_korc_parameters]] in [[korc_initialize]] that 
  !! initializes paths and KORC parameters through [[load_korc_params]]
  !! on MPI processes.

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_fields(params,F)
  !! <h4>3\. Initialize fields</h4>
  !!
  !! Subroutine [[initialize_fields]] in [[korc_fields]] that initializes 
  !! parameters of the EM fields, either analytically or from an external HDF5
  !! file. Reads in &amp;analytical_fields_params and 
  !! &amp;externalPlasmaModel namelists from input file.

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if

  call initialize_profiles(params,P,F)
  !! <h4>4\. Initialize Profiles</h4>
  !! 
  !! Subroutine [[initialize_profiles]] in [[korc_profiles]] that initializes 
  !! parameters of the plasma profiles, either analytically or from an
  !! external HDF5
  !! file. Reads in &amp;plasmaProfiles namelist from input file.
  !! Only initialized if collisions (params%collisions==T) are

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_particles(params,F,P,spp) ! Initialize particles
  !! <h4>5\. Initialize Particle Velocity Phase Space</h4>
  !! 
  !! Subroutine [[initialize_particles]] in [[korc_initialize]] that 
  !! initializes particle parameters from &amplasma_species namelist, 
  !! allocates arrays for individual particles, including location, velocity, 
  !! local EM fields and plasma profiles, etc., and 
  !! calls [[initial_energy_pitch_dist]] to assign particles' energy and pitch
  !! angle according to the chosen distribution.

!  write(output_unit_write,'("init eta: ",E17.10)') spp(1)%vars%eta

  
#ifdef FIO
  if (TRIM(params%field_model) .eq. 'M3D_C1') then

     if (params%mpi_params%rank .EQ. 0) then
        write(output_unit_write,*) "* * * * INITIALIZING M3D-C1 INTERFACE * * * *"
     endif
     
     call initialize_m3d_c1(params, F, P, spp,.true.)

     if (params%mpi_params%rank .EQ. 0) then
        write(output_unit_write,*) "* * * * * * * * * * * * * * * * * * * * * * *"
     endif

  elseif (TRIM(params%field_model) .eq. 'NIMROD') THEN

     if (params%mpi_params%rank .EQ. 0) then
        write(output_unit_write,*) "* * * * INITIALIZING NIMROD INTERFACE * * * *"
     endif
     
     call initialize_nimrod(params, F, P, spp,.true.)

     if (params%mpi_params%rank .EQ. 0) then
        write(output_unit_write,*) "* * * * * * * * * * * * * * * * * * * * * * *"
     endif
     
  endif
#endif  

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call compute_charcs_plasma_params(params,spp,F)
  !! <h4>9\. Compute Characteristic Plasma Parameters</h4>
  !!
  !! Subroutine [[compute_charcs_plasma_params]] in [[korc_units]] calculates
  !! the characteristic plasma parameters params%cpp that are used for normalizations.
  !! Also finds the maximum non-relativistic and relativistic cyclotron frequencies
  !! to be used for setting the timstep for the time-evolution algorithms.

  call initialize_collision_params(params,spp,P,F,.true.)
  !! <h4>6\. Initialize Collision Parameters</h4>
  !!
  !! Subroutine [[initialize_collision_params]] in [[korc_collisions]] that
  !! initializes collision parameters for the SS (single-species) and MS
  !! (multiple-species) data types, reading in namefiles from the KORC input file.
  !! MS reads in namelist &CollisionParamsMultipleSpecies while SS reads in
  !! namelist &CollisionParamsSingleSpecies. 
  
  call define_time_step(params,F)
  !! <h4>10\. Define Time Step</h4>
  !!
  !! Subroutine [[define_time_step]] in [[korc_initialize]] either loads
  !! time-stepping parameters for a restart, or defines new parameters based
  !! on a maximum timestep
  !! set by the inverse of the relativistic cyclotron frequency.

  
  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_particle_pusher(params)
  !! <h4>11\. Initialize Particle Pusher</h4>    
  
  if (params%SC_E) then
     call define_SC_time_step(params,F)
  end if
     
  call normalize_variables(params,spp,F,P)
  !! <h4>12\. Normalize Variables</h4>
  !!
  !! Subroutine [[normalize_variables]] in [[korc_units]] normalizes 
  !! variables consistent with characteristic plasma parameters 
  !! calculated in [[compute_charcs_plasma_params]].


  
  call normalize_collisions_params(params)
  !! <h4>13\. Normalize Collision Parameters </h4>
  !!
  !! Subroutine [[normalize_collisions_params]] in [[korc_collisions]] that
  !! normalizes collision parameters for the SS (single-species) and MS
  !! (multiple-species) data types.

  
  call define_collisions_time_step(params,F,.true.)
  !! <h4>14\. Define Collision Time Step</h4>
  !!
  !! Subroutine [[define_collisions_time_step]] in [[korc_collisions]] that
  !! sets subcycling iteration number for collisions based off of the collision
  !! frequency model used.

  ! *** *** *** *** *** ***   *** *** *** *** *** *** ***
  ! *** BEYOND THIS POINT VARIABLES ARE DIMENSIONLESS ***
  ! *** *** *** *** *** ***   *** *** *** *** *** *** ***

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if

#ifdef PSPLINE
  call initialize_fields_interpolant(params,F)
  !! <h4>15\. Initialize Fields Interpolant</h4>
  !!
  !! Subroutine [[initialize_fields_interpolant]] in [[korc_interp]] calls
  !! EZspline
  !! subroutines EZspline_init for memory allocation and boundary condition
  !! setup
  !! and EZspline_setup to compute the necessary cubic coefficients needed
  !! for subsequent
  !! field interpolations. The magnetic field can be defined in terms of an
  !! axisymmetric
  !! scalar flux function, axisymmetric field, or 3D field, while the
  !! electric field
  !! can be defined as an axisymmetric or 3D field.

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  call initialize_profiles_interpolant(params,P)
#endif
  !! <h4>16\. Initialize Profiles Interpolant</h4>
  !!
  !! Subroutine [[initialize_profiles_interpolant]] in [[korc_interp]]
  !! calls EZspline
  !! subroutines EZlinear_init for axisymmetric (flux-surface quantities) or
  !! EZspline_init for 3D profiles for memory allocation and boundary
  !! condition setup
  !! and EZspline_setup to compute the necessary cubic coefficients needed
  !! for subsequent
  !! field interpolations. 
  !! Only initialized if collisions (params%collisions==T) are present for
  !! ne, Te, Zeff

  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if
  
  if (params%mpi_params%rank .EQ. 0) then
     write(output_unit_write,'("* * * * INITIALIZING INITIAL CONDITIONS * * * *",/)')
     flush(output_unit_write)
  end if
  call set_up_particles_ic(params,F,spp,P)
  
  if (params%mpi_params%rank .EQ. 0) then
     write(output_unit_write,'("* * * * * * * * * * * * * * * * * * * * * * * *",/)')
     flush(output_unit_write)
  end if

  !write(6,*) 'V',spp(1)%vars%V
  
!  write(output_unit_write,'("post ic eta: ",E17.10)') spp(1)%vars%eta
  
  !! <h4>17\. Set Particle Initial Conditions</h4>  
  !!
  !! Subroutine [[set_up_particles_ic]] in [[korc_initialize]] calls
  !! subroutines to prescribe initial conditions or load them 
  !! from file for a restart. Initial spatial values are prescribed with 
  !! [[intitial_spatial_distribution]] in [[korc_spatial_distribution]] and 
  !! initial velocity values are prescribed with [[initial_gyro_distribution]]
  !! in [[korc_velocity_distribution]].

!  if (minval(spp(1)%vars%Y(:,1)).lt.1._rp/params%cpp%length) stop 'error with init'
  
  ! * * * INITIALIZATION STAGE * * *

  
  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if

!  write(output_unit_write,'("GC init eta: ",E17.10)') spp(1)%vars%eta

  if (.NOT.(params%restart.OR.params%proceed.or.params%reinit)) then
     if (params%orbit_model(1:2).eq.'FO') then

        call FO_init(params,F,spp,.true.,.false.)

     else if (params%orbit_model(1:2).eq.'GC') then

        call GC_init(params,F,spp)

     end if

     if (params%SC_E) then

        if (params%field_model(1:1).eq.'A') then
           call init_SC_E1D(params,F,spp(1))
        else if (params%field_model(1:1).eq.'E') then
           call init_SC_E1D_FS(params,F,spp(1))
        end if
           
     end if

  else

     call get_fields(params,spp(1)%vars,F)

     if (params%SC_E) then


        if (params%field_model(1:1).eq.'A') then
           call reinit_SC_E1D(params,F)
        else if (params%field_model(1:1).eq.'E') then
           call reinit_SC_E1D_FS(params,F)
        end if

        
     
     end if
     
  end if

  !write(6,*) 'V',spp(1)%vars%V
  !write(6,*) 'eta',spp(1)%vars%eta
  
!  write(6,*) '1Y_R',spp(1)%vars%Y(1:4,1)*params%cpp%length
  
  ! * * * SAVING INITIAL CONDITION AND VARIOUS SIMULATION PARAMETERS * * * !
  
  call save_simulation_parameters(params,spp,F,P)

  call save_collision_params(params)
  !! <h4>18\. Save Simulation and Collision Parameters</h4>  
  !!
  !! Subroutines [[save_simulation_parameters]] in [[korc_HDF5]] and
  !! [[save_collision_params]] in [[korc_collisions]] call
  !! subroutines to save simulation and collision parameters.
  
  
  if (.NOT.(params%restart.OR.params%proceed.or.params%reinit)) then
     
     call save_simulation_outputs(params,spp,F) ! Save initial condition
     call save_restart_variables(params,spp,F)

  end if
  
  
  ! * * * SAVING INITIAL CONDITION AND VARIOUS SIMULATION PARAMETERS * * * !

!  write(output_unit_write,'("pre ppusher loop eta: ",E17.10)') spp(1)%vars%eta

  call timing_KORC(params)
  if (params%mpi_params%rank .EQ. 0) then
     flush(output_unit_write)
  end if

  if (params%orbit_model(1:2).eq.'FO'.and.((params%field_model(1:3).eq.'ANA') &
       .or.(params%field_model(1:3).eq.'UNI'))) then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_FOeqn_top(params,F,P,spp)

        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

#ifdef PSPLINE
  if (params%orbit_model(1:2).eq.'FO'.and.params%field_model(1:3).eq.'EXT' &
       .and..not.((params%field_model(10:13).eq.'MARS').or. &
       (params%field_model(10:14).eq.'AORSA'))) then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_FOinterp_top(params,F,P,spp)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if
#endif

#ifdef FIO
  if (params%orbit_model(1:2).eq.'FO'.and. &
       (TRIM(params%field_model).eq.'M3D_C1'.or. &
       TRIM(params%field_model).eq.'NIMROD').and. &
       .not.F%ReInterp_2x1t) then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_FOfio_top(params,F,P,spp)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'FO'.and. &
       (params%field_model.eq.'M3D_C1'.or. &
       TRIM(params%field_model).eq.'NIMROD') &
       .and.F%ReInterp_2x1t) then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push
     
     do it=F%ind0_2x1t,params%time_slice

        !write(6,*) it,F%ind0_2x1t
        
        if (it.gt.F%ind0_2x1t) then
           if (params%field_model.eq.'M3D_C1') then
              call initialize_m3d_c1(params, F, P, spp,.false.)
           else
              call initialize_nimrod(params, F, P, spp,.false.)
           end if
           if (params%collisions) then
              if (params%field_model.eq.'M3D_C1') then
                 call initialize_m3d_c1_imp(params,F,P, &
                      params%num_impurity_species,.false.)
              end if
           end if
        end if

        if (params%mpi_params%rank .EQ. 0) then
           write(output_unit_write,*) 'tskip',params%t_skip
           flush(output_unit_write)
        end if

        call adv_FOfio_top(params,F,P,spp)
               
        params%it = params%it+params%t_skip
        params%time = params%init_time &
             +REAL(params%it,rp)*params%dt 
        
        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)

        F%ind_2x1t=F%ind_2x1t+1_ip
        if (params%mpi_params%rank .EQ. 0) then
           write(output_unit_write,*) 'KORC time ',params%time*params%cpp%time
           flush(output_unit_write)
        end if
              
     end do
     
  end if
#endif

#ifdef PSPLINE
  if (params%orbit_model(1:2).eq.'FO'.and. &
       params%field_model(10:13).eq.'MARS') then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_FOinterp_mars_top(params,F,P,spp)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'FO'.and. &
       params%field_model(10:14).eq.'AORSA') then
     call FO_init(params,F,spp,.false.,.true.)
     ! Initial half-time particle push

     do it=params%ito,params%t_steps,params%t_skip
        call adv_FOinterp_aorsa_top(params,F,P,spp)

        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if
#endif
  
  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'eqn'.and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip*params%t_it_SC
        call adv_GCeqn_top(params,F,P,spp)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip*params%t_it_SC,rp)*params%dt        
        params%it = it-1_ip+params%t_skip*params%t_it_SC

        call save_simulation_outputs(params,spp,F)        
        call save_restart_variables(params,spp,F)

        if (params%mpi_params%rank .EQ. 0) then
           flush(output_unit_write)
        end if
        
     end do
  end if

#ifdef PSPLINE
  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and.params%field_model(10:12).eq.'PSI'.and. &
       params%SC_E.and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_psi_top_FS(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        
        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and.(params%field_model(10:12).eq.'PSI'.OR. &
       params%field_model(12:14).eq.'PSI').and. &
       (.not.params%SC_E).and.(.not.F%Dim2x1t).and..not.params%field_model.eq.'M3D_C1') then
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_psi_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip
        
        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and.(params%field_model(10:12).eq.'PSI'.OR. &
       params%field_model(12:14).eq.'PSI').and. &
       (.not.params%SC_E).and.F%Dim2x1t.and.(.not.F%ReInterp_2x1t).and..not.params%field_model.eq.'M3D_C1') then
     
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_psi2x1t_top(params,spp,P,F)

        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
        
     end do
  end if
  
  if (params%orbit_model(1:2).eq.'GC'.and. &
       params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and. &
       (params%field_model(10:12).eq.'PSI'.OR. &
       params%field_model(12:14).eq.'PSI').and. &
       (.not.params%SC_E).and. &
       F%Dim2x1t.and.F%ReInterp_2x1t.and. &
       .not.params%field_model.eq.'M3D_C1') then

     if (params%mpi_params%rank .EQ. 0) then
        write(output_unit_write,*) 'initial 2x1t_ind time',F%X%PHI(F%ind_2x1t)*params%cpp%time
        flush(output_unit_write)  
     end if
        
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_psiwE_top(params,spp,P,F)

        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)

        F%ind_2x1t=F%ind_2x1t+1_ip
        if (params%mpi_params%rank .EQ. 0) then
           write(output_unit_write,*) 'KORC time',params%time*params%cpp%time
           write(output_unit_write,*) '2x1t_ind time',F%X%PHI(F%ind_2x1t)*params%cpp%time
        end if
        call initialize_fields_interpolant(params,F)

        if (params%LargeCollisions) then
           call initialize_collision_params(params,spp,P,F,.false.)
           call define_collisions_time_step(params,F,.false.)
        end if

        call save_restart_variables(params,spp,F)
        
        if (params%mpi_params%rank .EQ. 0) then
           flush(output_unit_write)  
        end if
        
     end do
  end if
  

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and.F%dBfield.and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_2DBdB_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if
  
  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       F%axisymmetric_fields.and.(params%field_model(10:12).eq.'2DB'.or. &
       params%field_model(12:13).eq.'2D').and..not.(F%dBfield).and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_B2D_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if
  


  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
         .not.(F%axisymmetric_fields).and.(F%dBfield).and. &
         (params%field_model(10:14).eq.'3DBdB').and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_3DBdB_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
         .not.(F%axisymmetric_fields).and.(F%dBfield).and. &
         .not.(params%field_model(10:14).eq.'3DBdB').and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_3DBdB1_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_eval.eq.'interp'.and. &
       .not.(F%axisymmetric_fields).and..not.(F%dBfield).and..not.params%field_model.eq.'M3D_C1') then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_B_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip,rp)*params%dt        
        params%it = it-1_ip+params%t_skip

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)
     end do
  end if
#endif

#ifdef FIO
  if (params%orbit_model(1:2).eq.'GC'.and.params%field_model.eq.'M3D_C1'.and. &
       .not.F%ReInterp_2x1t) then
     do it=params%ito,params%t_steps,params%t_skip
        call adv_GCinterp_fio_top(params,spp,P,F)
        
        params%time = params%init_time &
             +REAL(it-1_ip+params%t_skip*params%t_it_SC,rp)*params%dt        
        params%it = it-1_ip+params%t_skip*params%t_it_SC

        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)

        if (params%mpi_params%rank .EQ. 0) then
           flush(output_unit_write)
        end if
        
     end do
     
  end if

  if (params%orbit_model(1:2).eq.'GC'.and.params%field_model.eq.'M3D_C1'.and. &
       F%ReInterp_2x1t) then

     do it=F%ind0_2x1t,params%time_slice

!        write(6,*) it,F%ind0_2x1t
        
        if (it.gt.F%ind0_2x1t) then
           call initialize_m3d_c1(params, F, P, spp,.false.)
           if (params%collisions.or.params%radiation) then
              call initialize_m3d_c1_imp(params,F,P, &
                   params%num_impurity_species,.false.)
           end if
        end if
        
        if (params%mpi_params%rank .EQ. 0) then
           write(output_unit_write,*) 'tskip',params%t_skip
           flush(output_unit_write)
        end if
           
        call adv_GCinterp_fio_top(params,spp,P,F)
               
        params%it = params%it+params%t_skip
        params%time = params%init_time &
             +REAL(params%it,rp)*params%dt 
        
        call save_simulation_outputs(params,spp,F)
        call save_restart_variables(params,spp,F)

        !comment out for debugging only
        F%ind_2x1t=F%ind_2x1t+1_ip


        if (params%mpi_params%rank .EQ. 0) then
           write(output_unit_write,*) 'KORC time ',params%time*params%cpp%time
           flush(output_unit_write)
        end if
              
     end do
  end if
#endif
  
  call timing_KORC(params)

  ! * * * FINALIZING SIMULATION * * * 
  call finalize_HDF5()

#ifdef PSPLINE
  call finalize_interpolants(params)
#endif
  
#ifdef FIO
  if (TRIM(params%field_model) .eq. 'M3D_C1'.or. &
      TRIM(params%field_model) .eq. 'NIMROD') then
     call finalize_FIO(params,F,P)
  end if
#endif
  
  ! DEALLOCATION OF VARIABLES
  call deallocate_variables(params,F,P,spp)

  
  call deallocate_collisions_params(params)

  
  call finalize_communications(params)
  ! * * * FINALIZING SIMULATION * * *

  if (params%mpi_params%rank .EQ. 0) then
     write(output_unit_write,'("KORC ran successfully!")')
     close(output_unit_write)
  end if
  
end program main