Copy disabled (too large)
Download .txt
Showing preview only (60,853K chars total). Download the full file to get everything.
Repository: Warwick-Plasma/epoch
Branch: main
Commit: f294c484f76d
Files: 1378
Total size: 57.8 MB
Directory structure:
gitextract_tc5477b5/
├── .github/
│ └── workflows/
│ └── build_test.yml
├── .gitlab/
│ └── issue_templates/
│ ├── Bug.md
│ └── Feature Request.md
├── .gitlab-ci.yml
├── .gitmodules
├── CHANGELOG.md
├── CODING_STYLE
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── DOCUMENTATION
├── LICENSE
├── README.md
├── epoch1d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── electron_ion_equilibration.deck
│ │ ├── electron_isotropisation.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── ionisation.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ ├── twostream_deltaf.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch1d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── lehe_custom/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ └── optimized/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── landau/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_landau.py
│ │ ├── test_laser.py
│ │ ├── test_maxwell_solvers.py
│ │ ├── test_twostream.py
│ │ └── twostream/
│ │ ├── input.deck
│ │ └── makefile
│ └── unpack_source_from_restart
├── epoch2d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── cone.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── ionisation.deck
│ │ ├── laser_focus.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ ├── ramp.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch2d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── makefile
│ │ │ ├── optimized/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── optimized_symm/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── optimized_xaxis/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ ├── pukhov/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_laser.py
│ │ └── test_maxwell_solvers.py
│ └── unpack_source_from_restart
├── epoch3d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── cone.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch3d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── makefile
│ │ │ ├── optimized/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── optimized_xaxis/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── optimized_xaxis_soft/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── cowan/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ ├── pukhov/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_laser.py
│ │ └── test_maxwell_solvers.py
│ └── unpack_source_from_restart
└── scripts/
├── infer_compiler.sh
├── make_tarball.sh
├── pre-commit
├── run-tests-epoch-all.sh
├── run-tests.py
├── system_info.sh
└── unpack_source_from_restart
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/build_test.yml
================================================
name: CI
# Controls when the action will run.
on:
pull_request:
branches:
- main
- '*-devel'
pull_request_review:
branches:
- main
- '*-devel'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build_and_test:
if: github.event_name != 'pull_request_review' ||
contains(github.event.pull_request.labels.*.name, 'auto-pr')
# The type of runner that the job will run on
runs-on: ubuntu-latest
strategy:
matrix:
include:
- mode: debug
flag: -b
define:
- mode: debug
flag: -b
define: >-
-DPER_SPECIES_WEIGHT -DZERO_CURRENT_PARTICLES -DNO_PARTICLE_PROBES
-DPARTICLE_SHAPE_TOPHAT -DPARTICLE_ID -DPHOTONS -DTRIDENT_PHOTONS
-DBREMSSTRAHLUNG -DPARSER_DEBUG -DNO_IO
-DPER_PARTICLE_CHARGE_MASS -DPARSER_CHECKING -DNO_USE_ISATTY
-DWORK_DONE_INTEGRATED -DHC_PUSH -DNO_MPI3 -DDECK_DEBUG
- mode:
flag:
define:
env:
COMPILER: gfortran
MPIPROCS: 2
MODE: ${{ matrix.mode }}
DEFINE: ${{ matrix.define }}
GH_BASE: ${{ github.event.pull_request.base.ref }}
GH_HEAD: ${{ github.event.pull_request.head.ref }}
GH_SHA: ${{ github.event.pull_request.head.sha }}
steps:
- name: Install dependencies
run: |
sudo apt update &&
sudo apt install -y python3-dev python3-numpy python3-nose python3-matplotlib libpython3-dev openmpi-bin libopenmpi-dev
pip install sdfr
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Merge branch
run: git config user.email "test@example.com" &&
git config user.name "test" &&
git checkout -b $GH_HEAD $GH_SHA &&
git checkout -b $GH_BASE origin/$GH_BASE &&
git merge --no-ff $GH_HEAD
- name: Cleanup
run: cd epoch1d && make cleanall &&
cd ../epoch2d && make cleanall &&
cd ../epoch3d && make cleanall
- name: Compile and run tests
run: ./scripts/run-tests-epoch-all.sh ${{ matrix.flag }}
================================================
FILE: .gitlab/issue_templates/Bug.md
================================================
<!---
Please read this!
Before opening a new issue, make sure to search for keywords in the issues
filtered by the "possible bug or "confirmed bug" label and verify the issue
you're about to submit isn't a duplicate.
See https://cfsa-pmw.warwick.ac.uk/mediawiki/index.php/Issue_tracking for more
information on opening a bug report.
Note that if you do not supply sufficient information to reproduce the bug,
it is unlikely to be resolved and under some circumstances may just be closed
without further comment.
--->
### Summary
<!--- Summarize the bug encountered concisely --->
### Steps to reproduce
<!---
How one can reproduce the issue - THIS IS EXTREMELY IMPORTANT.
Please attach a complete input deck that can be used to reproduce the problem.
There must be enough information to completely reproduce the problem, so if
any additional files are required for performing the run then these should
also be supplied.
Please also state the version of EPOCH and number of cores used. If using any
non-default DEFINE flags, please state which were used.
If the problem seems system-dependant, it may be useful to provide the
Fortran compiler and MPI library used along with their version numbers.
OS version may also be useful.
--->
### What is the current *bug* behavior?
<!--- What actually happens --->
### What is the expected *correct* behavior?
<!--- What you think you should see instead --->
### Relevant logs and/or screenshots
<!---
Paste or attach any relevant logs. If pasting text, please use code blocks
(```) to format console output, logs, and code as it's very hard to read
otherwise.
If this relates to an existing issue, please include a link to it.
--->
/label ~"possible bug"
================================================
FILE: .gitlab/issue_templates/Feature Request.md
================================================
### Description
<!--- Include problem, use cases, benefits, and/or goals --->
### Links / references
<!--- If this relates to an existing issue, please include a link to it.
Also add references to any papers that relate to the enhancement if
appropriate. Please refrain from uploading any copyrighted material --->
/label ~"enhancement"
================================================
FILE: .gitlab-ci.yml
================================================
variables:
GIT_STRATEGY: clone
before_script:
- git submodule update --recursive --init SDF
test_ubuntu_gfortran:
only:
- branches@EPOCH/epoch
- web
- hook
except:
- main
- wip/*
- tag
script:
- export COMPILER=gfortran
- export MPIPROCS=9
- scripts/run-tests-epoch-all.sh
tags:
- ubuntu
- gfortran
test_ubuntu_intel:
only:
- branches@EPOCH/epoch
- web
- hook
except:
- main
- wip/*
- tag
script:
- export COMPILER=intel
- scripts/run-tests-epoch-all.sh -b
tags:
- ubuntu
- intel
test_ubuntu_pgi:
only:
- branches@EPOCH/epoch
- web
- hook
except:
- main
- wip/*
- tag
script:
- export COMPILER=pgi
- export MODE=debug
- scripts/run-tests-epoch-all.sh -b
tags:
- ubuntu
- pgi
test_osx:
only:
- branches@EPOCH/epoch
- web
- hook
except:
- main
- wip/*
- tag
script:
- export COMPILER=gfortran
- export MODE=debug
- scripts/run-tests-epoch-all.sh -b
- cd epoch1d; make rm; cd ../epoch2d; make rm; cd ../epoch3d; make rm; cd ..
- export DEFINE="-DPER_SPECIES_WEIGHT -DPARTICLE_ID -DPHOTONS"
- export DEFINE="$DEFINE -DTRIDENT_PHOTONS -DPER_PARTICLE_CHARGE_MASS"
- export DEFINE="$DEFINE -DPARSER_CHECKING -DWORK_DONE_INTEGRATED -DHC_PUSH"
- scripts/run-tests-epoch-all.sh -b
tags:
- osx
================================================
FILE: .gitmodules
================================================
[submodule "SDF"]
path = SDF
url = ../SDF.git
================================================
FILE: CHANGELOG.md
================================================
## v4.18.0 to v4.19.0
* Ionisation routines have been upgraded, and now read binding energies from
files. Users specify the ion species charge and atomic number, and the code
automatically generates release species up to a user-defined cut-off charge
state. Unique electron species for ejected electrons may also be
automatically generated. This involves the new species variables:
ionise
ionise_limit
unique_electron_species
See the manual for more details
* Collisional ionisation has been reworked. The electron-impact-ionisation
cross section now includes contributions from all bound electrons. Cross
section models have been changed from MBELL and MRBEB to MBELL and RBEB, for
greater accuracy. Secondary electron energies are now sampled using a DCS
derived from the RBEB model. The ionisation sampling algorithm has been
adapted to remove a particle weight dependence.
* A new collisions mode has been added. Particles may now be specified in
particle/background pairs, where evolution of the background species is
ignored. Additional speed-up keys may be specified by the user.
* Collisional ionisation may now be run separately from collisions, for
increased computational performance. The collisional ionisation may be
super-cycled differently to collisions, using the new collision block key:
ci_n_step
* Secondary lists are only created for particle species which require them in
a given timestep.
* Bethe-Heitler pair production has been added. The model is configured using
additional keys in the bremsstrahlung block:
use_bethe_heitler
use_positron_brem
* Positrons may now emit photons through the bremsstrahlung process. A
separate table of cross sections is calculated for this particle type,
scaled from the electron cross sections.
* The string_length error message now correctly directs users to
constants.F90, instead of shared_data.F90.
* A new pre-compiler flag "PROBE_TIME" has been included, which forces probes
to output the time particles cross them. The position calculation has been
modified to output the position of particles on the probe itself, when they
cross. Probes also output particle ID if a particle ID compilation flag is
used.
* A new injector mode "file_injector" has been created. Users may now inject
particles of specific momentum, position, weight and ID into the simulation,
at a given time. Particle information is read from ASCII text files.
* An estimate for the Coulomb logarithm in each cell has been included, for
each species type.
* README has been updated to link to the EPOCH webpage, and a new
DOCUMENTATION file also points to this, and the old manuals.
## v4.17.0 to v4.18.0
* PIC loop re-organised to ensure output files are dumped at the correct
time-step.
* Fixed over-flow bug in dist_fn.
* Input deck can now store logical constants (value T or F).
* Added new n_coll_steps parameter to collisions block. This sub-cycles the
collisions, running them once every n steps. Collisions are run assuming a
time-step of n*dt, to retain the same physical behaviour.
* Added use_bremsstrahlung_scatter parameter to bremsstrahlung block. This
samples photon emission angle from the bremsstrahlung angular distribution.
The model comes from the Geant4 Physics Reference Manual, which parametrises
Tsai 1974, DOI: https://doi.org/10.1103/RevModPhys.46.815
* Fixed bug in non-relativistic bremsstrahlung cross-sections.
## v4.16.0 to v4.17.0
* Added volume correction sampling Zenitani 2015 DOI 10.1063/1.4919383
* Added diagnostic for the average particle momentum per cell. This adds
the flags "average_p{x,y,z}" to the output block.
* Added low temperature correction to the Nanbu collision algorithm
(Pérez 2012 DOI 10.1063/1.4742167)
* Added "deck_warnings_fatal" flag to the control block. If set to "T" then the
code will abort if any warnings are encountered during the deck parse. The
default value is "F".
* Added the DECK_DEBUG compiler flag. If enabled then this forces
"deck_warnings_fatal" to always be set to "T"
* Added missing "nproc_[xyz]" and isotropic "temp" parameters. These were
mentioned in the documentation but had been omitted from the code.
* Added "drift_p{x,y,z}" and "drift_p{x,y,z}_back" as aliases for
"drift_{x,y,z}" and "drift_{x,y,z}_back"
* Added the ability to specify "temp" and "temp_[xyz]" in electronvolts when
setting up injectors.
* Added parameter "number_density_max" to the injectors, matching the
functionality available in the species block.
* Added non-abbreviated aliases for the following deck keywords:
"temperature" in place of "temp"
"background" for "back"
"nparticles" for "npart"
"fraction" for "frac"
"energy" for "en"
"gamma_minus_one" for "gamma_m1"
"average_particle_energy" for "ekbar"
"particle_energy_flux" for "ekflux"
"poynting_flux" for "poynt_flux"
"polarisation" for "pol"
"breit_wheeler" for "bw"
* Allow subset restrictions to be time-varying functions
* Added "heat_bath" particle boundary conditions. These use the particle
injectors to create an improved form of thermal boundary conditions.
* Add model for simulating bremsstrahlung radiation. This is disabled by
default and can be enabled by specifying the -DBREMSSTRAHLUNG flag at
compile time. The model is configured using a new "bremsstrahlung" block
which takes the following parameters:
enable
start_time
produce_photons
photon_energy_min
photon_weight
photon_dynamics
use_plasma_screening
use_radiation_reaction
table_location
It also adds the "bremsstrahlung_optical_depth" output block parameter
and "atomic_number", "background_species" and "brem_photon" species
parameters. See the manual for further details.
* Allow total_energy_sum diagnostic to be per-species
* Removed the restrictions on minimum domain size. The domain can now be as
small as a single cell.
* Allow use_offset_grid to be specified on a per-output block basis.
* Enable "use_exact_restart" by default
## v4.15.0 to v4.16.0
* Replaced USE_ISATTY compiler flag with NO_USE_ISATTY
* Add NO_MPI3 compiler flag to disable MPI-3 features such as the
MPI_TYPE_SIZE_X routine. This allows the code to be compiled against
older versions of the MPI library.
* Added collisions block option "use_nanbu". If set to true then the
scattering algorithm of Nanbu, with relativistic corrections by
Perez will be used in the collisions module. If false, the previous
Sentoku-Kemp algorithm will be used. Due to known issues in the Sentoku-Kemp
method for some test problems, the Nanbu method is now the default.
* Bugfixes for Sentoku-Kemp collisions. These changes will affect the results
for some problems. Note that some test problems continue to demonstrate
unexpected behaviour and users are advised to use the Nanbu method instead.
* Added "number_density" aliases for "density" in the species and injector
blocks.
These include:
- number_density for density
- promote_number_density for promote_density
- demote_number_density for demote_density
- number_density_min for density_min
- number_density_max for density_max
- number_density_back for density_back
* Added a "zero_current" alias for "tracer" in the species blocks. The use of
"tracer" has now been deprecated and will be removed in version 5.0.
At that time, the compiler flag will also be renamed.
## v4.14.0 to v4.15.0 (2019-01-15)
* Enabled averaging of poynt_flux and ekflux variables
* Added control block option "use_pre_balance". If set to true then the
load balancer attempts to calculate the load balance prior to loading
any particles
* Added control block option "use_optimal_layout". If set to true then the
load balancer attempts to find the best nprocx/y/z split of the domain
prior to the initial load balance
* Removed static parameter arrays from the input deck block parsers to
simplify the process of adding new entries
* Added control block option "use_more_setup_memory". If set to false then
only one set of arrays will be used for storing temperature, density and
drift during species loading. This can be a significant memory saving but
comes at the expense of recalculating grid quantities multiple times.
Setting the flag to true enables one set of arrays per species.
The default value is false.
* Replaced non-standard ISATTY intrinsic function with a call to the
POSIX C-library function "isatty"
* Changed FORTRAN standard to 2003
* Added persistent subsets
This adds the flags "persist_start_time" and "persist_start_step" to the
subset block. If either of these flags is present then once either the time
specified by "persist_start_time" or the step specified by
"persist_start_step" has been reached, the particles that have been selected
using the other criteria in the subset block will be recorded. Each
subsequent output for this subset will then use the particle list selected
at the specified start time.
* Added relativistic Maxwellians (Maxwell-Juttner)
Adds the "use_maxwell_juttner" logical flag to the species block. If set
to true then within the particle loader (both initially and for the moving
window) the particles will be loaded following a Maxwell-Juttner distribution
rather than a simple Maxwellian. If set to "F" then the standard Box-Muller
loader for a Maxwellian distribution is used. The default value is "F".
* Added arbitrary distribution functions in loader
Adds the "dist_fn", "dist_fn_px_range", "dist_fn_py_range" and
"dist_fn_pz_range" keys. The latter three keys set then range of momentum
over which to sample the distribution function. The first key specifies the
acceptance function. This should be a function having the maximum value of 1
but the same shape as the true distribution function. It is combined with
the density to calculate the full distribution function. The function is
specified using the new deck keys "px", "py" and "pz". The arbitrary
distribution function can be combined with the "drift" keys and the
function is shifted up by the drift momentum specified. The temperature
key is not compatible and will be silently ignored if specified.
* Added temperature_{x,y,z} output diagnostics
## v4.12.0 to v4.14.0 (2018-08-13)
* Added the Higuera-Cary relativistic particle push. This is enabled by
compiling with the flag -DHC_PUSH
* Added sanity check for binary file size
* Fixed the ETA string on restart
* Added control block option "reset_walltime" to reset the walltime
to zero when restarting
* Added the ability to request output dumps at runtime by touching a file
named "DUMP"
* Made the x-coordinate a time-dependent input deck variable when the moving
window is enabled
* Added "window_stop_time" parameter to the window block
* Added example SDF reader code
* Added "atan2" function to the deck parser
* Omit redundant dimension in dist_fn output
* Modified load balance calculation so that a perfectly balanced problem has
a value of one
* Only redistribute the simulation if it would result in an improvement to
the load balance
* Improvements to the load balancing calculations
* Added dlb_maximum_interval parameter to the input deck
* Added dlb_force_interval parameter to the input deck
* Added balance_first parameter to the input deck
* Added y and z versions of the bc_x_{min,max}_after_move parameters to
the input deck
* Added "dump_at_walltimes" flag to the io block
* Added "walltime_interval", "walltime_start" and "walltime_stop" flags to
the io block
## v4.11.0 to v4.12.0 (2018-06-16)
* Fixes for exact restarts
* Apply reflecting particle BCs when conduct is specified
* Fix moving window for fractional particles per cell
* Don't average ppc diagnostic over shape function
* Added average particle weight diagnostic
* Replaced PARTICLE_COUNT_UPDATE Makefile DEFINE with
"use_particle_count_update" control block flag
* Added "use_accurate_n_zeros" control block flag to enable finding the
exact number of output that are generated
* Prevent duplicated final dump
* Added "use_flux_maxwellian" option to the injector block
* Added warnings for BCs that are incompatible with moving windows
* Added y,z versions of the Lehe Maxwell solver
* Added "stencil" block for specifying a Maxwell solver with custom
coefficients
* Added "work_{x,y,z}" and "work_{x,y,z}_total" dumpmasks for tracking the
work done on each particle by the electric field.
* Various bugfixes
* Updated the SDF submodule:
SDF/FORTRAN
- Improve Fortran error handling
SDF/utilities
- Added support for SDF_BLOCKTYPE_POINT_DERIVED to sdffilter
- Make sdffilter print all point mesh components
- Return non-zero code for unsupported blocks in sdffilter
- Fixed station file column order in sdffilter
- Return an error for failed python builds
SDF/VisIt
- Add an option for disabling obstacle boundaries in VisIt
- Don't generate boundary meshes when requested in VisIt
## v4.10.0 to v4.11.0 (2018-04-13)
* Added time dependent moving window
* Added multiple RNG states
* Fixed F2003 extension in shared_data
* Fixed errors in derived variable ouput for photons
* Fix bug in grow_array in 2D
* If print_const is used, output constant values into a separate file
* Allow CPML with moving window
* Added COMPILER=auto option to automatically detect compiler
* Added time dependent moving window
* Fix pack.sh script for non-bash shells
* Added issue templates
* Changed the Make rule from hector to archer
* Fixed lasers so that positions work as expected
* Fixed #1691, compilation error with older gfortran
* Updated mediawiki links to the new location
* Updated SDF submodule
SDF/FORTRAN
- Fix pack.sh script for non-bash shells
SDF/IDL
- Functions to read key-val pair file into struct
- Rename main function
- Added licensing header
- Uppercase keywords
- Correct indentation
- General tidy
SDF/Matlab
- Read name-value pairs into structure
- Removed DOS linefeed characters
- Added license header
- Tidied up a little
SDF/utilities
- Script to read name-val pairs from file into dict
- Fix float vs int ordering
- Made PEP8 compliant
SDF/VisIt
- Fix build script for VisIt-2.13 and 2.13.1 on macOS
## v4.9.0 to v4.10.0 (2018-03-13)
* Added time varying particle injectors
* Add per species particle boundaries You can now specify bc_x_min and
bc_x_max to a species block. This overrides the global boundaries for that
species
* Fixes #1567 with moving window and offset_grid Bug 1567: UNLOCATABLE
PARTICLE with restart dump and moving window Shift particles back to true
position and adjust offset grid
* Bugfix for assigning particle IDs
* Various fixes for compiling with DEFINES flags
* Added particles_per_cell diagnostic
* Fixed missing ierror argument to MPI_ALLGATHER This fixes issue #1636
* Fix PER_PARTICLE_CHARGE and fractional particles Previously 'fractional'
particles were not given mass or charge giving segfault if ppc did not
evenly divide by number of cells
* Added CONTRIBUTING.md guide
* Updated SDF
SDF/FORTRAN
- Fix PGI build on OSX
- Work around a PGI floating point bug.
- Fixed unix_seconds for Jan and Feb of leap years
- Fully initialise sdf_file_handle
- Changed FPE generation in error handler
- Fix count of leap years since 1970
- Check for broken OpenMPI 2.1.1 and 2.1.2
SDF/utilities
- Added support for string-type namevalue pairs
- Avoid duplicated dictionary names
- Made build of sdf2ascii optional (off by default)
- Removed unhelpful dimension squashing
- Removed mmap option from python reader
SDF/VisIt
- Added test for compatible g++ version
## v4.8.0 to v4.9.0 (2017-07-28)
* Add alternative field solvers for the Maxwell equations.
The following stencils are implemented lehe: R. Lehe
et al., Phys. Rev. Special Topics 16, 021301 (2013) pukhov: A. Pukhov,
Journal of Plasma Physics 61, 425-433 (1999) cowan: Cowan et al., Phys.
Rev. ST Accel. Beams 16, 041303 (2013) The solvers can be selected in the
control section of the input deck via
maxwell_solver = {yee, lehe, cowan. pukhov}
The default value is
maxwell_solver = yee
In the 1D-case Pukhov and Cowan reduce to Yee. In the 2D-case Pukhov and
Cowan are identical, so Cowan reduces to Pukhov because Pukhov is older. In
the 3D-case all solvers are implemented separately.
* Added ability to read initial particle setup from a file
This adds a "particles" custom particle loader block block works in
conjunction with species block and must target a valid species block in
order to load particles. Particle data is loaded from RAW binary files,
similar to the "fields" block, with one file per particle parameter and
ordering assumed preserved across files.
* Added a delta-f implementation of EPOCH.
* Added automated continuous integration testing
* Improved accuracy of relativistic kinetic energy calculation
* Drive lasers using the integrated phase history rather than sin(omega*t).
This is the same for first order in time but differs for higher order
terms. See the discussion in issue #1468
* Added the capability to set the frequency of lasers as a time dependent
parameter in the input deck.
* Added method for subtracting initial current (issues #1422 and #347)
This adds the "use_current_correction" flag to the control block which will subtract any initial current from the simulation.
* Add the input deck aliases for the alternative spellings:
"field_ionization", "ionization_energies", "ionization_electron_species"
and "collisional_ionization" (issue #1361)
* Add |p| (mod_p) as distribution function direction (issue #1356)
* Allow subsets to be applied to field variables (issue #1523)
* Allow distribution functions to output spatial subsections if the range
keyword is set. (issue #1525)
* Add colour output for the EPOCH banner
* Allow {y,z}_data variable to be present in 1d and 2d decks
* Enable build of the VisIt SDF reader on Windows machines
Bugfixes:
* Fixed a typo in deallocation of yb,zb
* Fixed regression in restart code (issue #1358)
* Fixed SEGFAULT when using field ionisation (issue #1407)
* Use Rayleigh distribution for sampling in the thermal boundary conditions
* Ensure plasma frequency calculation respects density_max (issue #1475)
* Allow restarting of code with time varying laser frequency
* Fix bug that in recording Trident electrons (issue #1512)
* Disable load-balancer for dlb_threshold <= 0 (issue #1417)
* Fix long filename path lengths (issue #1452)
* Fix parallel loading of particles for the TOPHAT shape function (issue #287)
* Fix current boundary conditions for thermal boundaries (issue #1542)
* Prevent SEGFAULT when averaging with multiple output blocks by only
allowing one average per variable. (issue #1529)
* Change phase to inject laser properly at angle (issue #1538)
* Fix secondary_list size when using field ionisation
* Fixed missing c_dir_z in evalutor_blocks
* Various minor bugfixes
* Close files in VisIt after use (issue #1357)
* Fixed the VisIt SDF reader build script for VisIt 2.7.{2,3}, 2.12.x
## v4.7.6 to v4.8.0 (2016-04-17)
* Corrections for various issues in EPOCH's collisions
* Updated SDF submodules
* Added Makefile rule for making SDF utilities
* Fixed operator precedence and associativity (issue #1295)
* Fixed ETA timestring to be less than 80 columns
* Warn about the use of -DPREFETCH (issue #1318)
* Enforce nproc{x,y,z} if supplied (issues #1321 and #1322)
* Added c_const_{xb,yb,zb} to the deck parser
* Stagger grid when evaluating field components (issue #1337)
* Add missing "restrict_<flag>" properties to dist_fn block, where <flag>
includes the following: en, gamma_m1, xy_angle, yz_angle, zx_angle
## v4.7.0 to v4.7.6 (2016-02-12)
* Fixed typo in check_qed_variable() routine
* Updated README.md to prevent use of "Download zip"
* Fixed compilation performance witn Intel compiler
The intel compiler doesn't like inheriting the SDF module.
* Handle unknown entries during stack sanity check
Commit aa45aeb introduced sanity checking of the stack but not all block
types are checked. This meant that the evaluation stack could be depleted
and lead to out of bounds errors.
* Fixed overflow when calculating particle count
* Added GPL licensing headers
* Moved the Changelog to the top-level directory
## v4.6.0 to v4.7.0 (2015-11-23)
* Fixed build status URL
* Updated submodules to point to GitLab server
* Change MPI_ABORT exit codes to be less than 255
* Disable dump_first flag when restarting
* Added "dump_first_after_restart" flag to io block
In the past, a "dump_first" flag in the output block would cause an output
dump immediately after restarting. Since this is rarely the desired
behaviour, the flag is now ignored when restarting. To force a dump to
occur immediately after restart, set
"dump_first_after_restart = T" in the output block.
* Apply current boundary conditions after ionisation
This fixes issue #1308 in which artefacts are visible at CPU boundaries
when ionisation is enabled.
* Fixed makefile to remove warning messages
We now test for the existence of /usr/local before adding it to the include
path.
* Don't use fixed sizes for stack arrays
This was causing SEGFAULTS when the input deck had a large number of terms
on the right-hand side. Since we already know how many elements there are,
we can just dynamically allocate them.
* Use plain arrays for the eval_stack
* Changed eval_stack to be dynamically sized
* Perform sanity check on interpolation parameters
* Issue a warning when interpolation range exceeded
Previous versions of the code would exit with an error if the value of a
point lay outside the range of values provided for interpolation. Now, the
interpolation is performed and a warning message printed.
* Issue a warning message when changing n_zeros
EPOCH automatically adjusts the number of digits used for SDF files to
accommodate more than 10000 dumps. This is now accompanied by a warning
message so that the user knows why this is happening.
* Store value of n_zeros specified from input deck
* Print warning if requested n_zeros is invalid
* Print warning if n_zeros is insufficient for t_end / dt_snapshots
* Increase n_zeros if needed for further output
* Added warning for when CPU split is too large
* Give useful warning when domain split is too small
* Output per-species charge and mass as scalar variables
It was previously only possible to output these quantities as per-particle
variables.
* Print the name of invalid restart file.
* Fixes for exact restarting from restart dumps
* Allow forced write on same timestep
* Updated SDF submodules
SDF/C
- Added support for the station_file flag
- Bumped file and library revision numbers
- Fixed some compiler warnings
- Removed uthash submodule
- Updated uthash.h symbolic link for new location
- Use nblocks from header info when building summary
- Added a flag for ignoring the nblocks header value
- Fixed some coding-style issues
- Fixed some memory leaks
- Added routine for printing extension info.
- Fixed double free SEGFAULT
SDF/FORTRAN
- Set station_file flag when a station block is found
- Add symbolic names for the header offsets
- Added station_file flag to the SDF header
- Fixed makefile to remove warning messages
SDF/IDL
- Added support for station_flag
- Fixed station_file typo
- Bumped SDF file compatible revision
- Allow for files with other than 4 digits
- Fixed format specifier for previous patch
- Specify minimum number of zeros for SDF file format
- Fixed IDL load of 0th SDF snapshot
SDF/VisIt
- Added support for station_flag
- Fixed station_file typo
- Fix a concatenated string.
SDF/utilities
- fix segfaults when building against python3
- Eliminated memory leak from previous change
- Fix compilation on Ubuntu and add exit code
- Fixed build script for python3
- Fixed compiler warnings
- Added support for station_flag
- Fixed show-stopping typo
- Added option to ignore header value of nblocks
- Don't look for dictionary item by name
- Removed incorrect Py_DECREF for Py_{True,False}
- Added option for printing the loaded extension module
- Added printing of file header to sdffilter
- Add open limits to block ranges
- Don't print header block when specifying block id
- Store string properties as unicode for python3
## v4.5.0 to v4.6.0 (2015-09-18)
* Exit with error if no valid COMPILER specified
* Added basic gitlab continuous integration script.
* Added more build targets to gitlab-ci script
* Fixed missing script entries
* Added VisIt to the gitlab-ci build script
* Added test_all.sh script
* Added separate gfortran and intel builds
* Added -DPARSER_CHECKING for divide in input.deck parser
* Show -DPARSER_CHECKING in welcome message
* Added CI build status to README.md
* Correctly initialise particles in ionisation routines
* Properly initialise all newly created particles.
* Revert "Fixed field setup when restarting."
* Removed INTENT attribute to POINTER argument
* Fixed pack.py when the argparse module is not found
* Removed the "manuals" submodule
* Removed manuals submodule from make_tarball.sh
* Only match version tags in gen_commit_string.sh
* Synced make_tarball script with ODIN.
* Remove .git files and directories from tarball
* add keyword 'VERSION' to exit after welcome message.
In order to check the EPOCH version, the code will now exit with status 0,
if 'VERSION' is given as data directory.
* Renamed VERSION flag to VERSION_INFO
* Correctly exit code in parallel
* Reorganised setup routines
* Change default behaviour of "make clean"
In the old Makefile, "make clean" only cleans up the EPOCH object files and
leaves the SDF module untouched. There is a separate "make cleanall"
command which cleans up everything, but most users don't know about it and
find the default behaviour unintuitive.
"make clean" now does the same as "make cleanall" and there is a new rule
"make rm" which performs the minimal clean.
* Exit with a non-zero status when an error is found
* Fixed warning messages about string truncation.
* Update SDF submodules
SDF/C
- Add submodule uthash
- Add members to sdf_block and sdf_file for hashing.
- Add functions sdf_hash_block and sdf_hash_block_list
- Use hash lookup table to retrieve blocks by id.
- Use hash table lookup to find duplicate block ids.
- Add newly read blocks to the hash table.
- Add function sdf_delete_hash_block
- Delete the blocks from the hash table when they are removed.
- Add derived blocks to the hash table.
- Delete blocks from the hash table before their ID gets mangled.
- Define HASH_DEBUG when debugging.
- Hash blocks by name, as well as id.
- Added -fPIC flag to the Makefile.
- Increase the length of the arrays dims and local_dims.
- Fix some memory leaks.
- Free extension data when closing a file.
- Avoid freeing memory twice.
- Add an option for compiling with valgrind support.
- Increase the length of the arrays dims and local_dims.
- Re-order sdf_block members.
- Changed array dimensions to SDF_MAXDIMS
- Fixed Makefile flags
- Updated Doxygen version string
- Fixed declarations
SDF/FORTRAN
- Fixed pack.py when the argparse module is not found
- Fix the file path 'incfile', used by pack.py.
SDF/VisIt
- Added some missing library files to the build process
SDF/utilities
- Allow selective building of Python interface
- Fix compiler flags.
- Fix compiler option that only applies to gcc.
- Use a dict object to find mesh blocks by id, instead of iterating through
a list of items.
- Add the function 'Block_setdata'
- Fix some memory leaks.
## v4.4.2 to v4.5.0 (2015-06-19)
* Fixed COMMIT file generation scripts.
* Possible fix for recursive make.
* Fixes for output of field variables.
The recent addition of subset grid reduction broke normal ouput of field
variables. This ought to be fixed now.
* Prevent git error messages in pack.sh
* Synced gen_commit_string.sh script with other repos
* Added fix for the pack.sh shell script
* Added functions for querying the SDF string length
Also increased the default maximum size.
* Check for name truncation due to the SDF library.
* Fixed the MPI subarrays used for field subsets
* Fixed reduced grid calculation.
* Fixes for final memory deallocation.
* Removed unnecessary repetition of subset name.
* Removed gfortran floating underflow compilation flags.
* Fixed GIT_DIR when CWD does not equal GIT_WORK_TREE
* Fixed sdf_write_namevalue when h%string_length changes.
Care must be taken when writing the array of strings in the
sdf_write_namevalue routine since the strings are of length
c_max_string_length which might be longer than the current value of
h%string_length.
It is also necessary to truncate the strings being passed into this routine
in order to prevent warning messages being printed to screen.
* Used the stack allocator in sdf_derived
* Fixed building of SDF utility man pages on OSX
* Added an error when no COMPILER is set for "make"
* Added README.txt with full build instructions.
* Disable the -ipo flag for Intel by default.
* Fixed reading of integer arrays in parallel.
* Removed unused variables.
* Attempt to calculate GIT_DIR as an absolute pathname.
* Changed mmap of data to be on a per-block basis.
* Fix VisIt build script when PATH contains spaces
* Added type conversion for integer arrays.
* Added better load balancing heuristics
* Removed the "error" spam from the io block parser.
* Added some missing deallocations during finalise.
* Use a persistent buffer for packed particle data
* Always put .mod files into the include/ directory
* Added control of n_zeros to the input deck
* Added documentations to the SDF submodule.
* Bugfixes for mmap'ed file access
* Fixed memory corruption bug in python reader.
The python reader called sdf_close() once the reference count of the SDF
object reached zero. This would then deallocate all of the memory allocated
by the SDF library, including the arrays containing the data. For now, I
have removed the sdf_close() call entirely so there is now a massive memory
leak. The obvious fix is to close the file once the last reference to the
file's contents has reached zero, but first we need to return a data
structure which tracks the returned items.
* Fix memory leak in python reader.
The memory leak introduced by the previous patch has now been fixed. The
numpy arrays are now created with the sdf module as a base class. This way,
the reference count for the sdf module only becomes zero once all the numpy
arrays have gone out of scope.
* Fixed lines longer than 80 columns
* Minor fixes and tidying to the photons module.
* Moved README.txt to README.md
* Abort execution when the input deck is invalid.
* Fixed field setup when restarting.
* Fixed a compiler warning about formatting.
* Added a floating-point consistency option.
If the code uses 80-bit precision arithmetic for the current arrays, the
answer will be inconsistent when run in parallel since only 64-bits of
precision is communicated to neighbouring processes. This change adds a
flag "CONS=1" that can be passed to to "make" which enforces 64-bit
arithmetic in the field solver. Currently, it is only used for the Intel
compiler.
* strip non-ascii before packing source
non-ascii chars are not supported in fortran. The code doesnt compile, if
i.e. 'gfortran --version' outputs non-ascii characters, which it does in
certain languages (i.e. German). This has now been fixed.
* Added "manuals" repository as a submodule.
* Avoid duplicate restart dumps.
Fixes issue #384
* A few small changes to the README file.
References to CCPForge have been changed to GitLab now that the hosting
location has changed
* Fix a 'raise' statement.
'Raise' should return an instance, not the class itself.
* Made Downloads location more explicit in README.md
* Fixed typos introduced by commit 761e415c
This fixes issue #1259
* Fixes for make_tarball.sh
Added generation of commit_info.h for SDF/C and SDF/utilities submodules.
Replaced submodule search paths with local versions.
* Updated manuals submodule to latest master
* Merge branch 'kuschel/manuals-master'
- use hyperref to set links in pdf
* Updated pack.py to match the version in SDF/FORTRAN
* Call sdf_write_datablock() from all CPUs
Commit 920465f removed MPI_BCAST from the sdf_write_datablock() routines
but this had unintended consequences. This has now been reverted and the
call is a collective operation so must be called by all CPUs in the
communicator. This provides an alternative fix to issue #1256
* Fixed gfortran detection for versions > 4.x
* Apply commit ad6a808b to 1d and 3d
* Updated SDF submodules
SDF/C
- Used the stack allocator in sdf_derived
- Fixed a few integer sizes.
- Changed mmap of data to be on a per-block basis.
- Bugfixes for mmap'ed file access
- Fixed lines longer than 80 columns
- Bugfixes for setting up current CPU mesh
- Added a routine for destroying the SDF stack.
- Fixed the free'ing of NAMEVALUE and RUN_INFO blocks.
- Fix copying of info_length.
- Replaced a couple of numeric constants with symbols.
- Fix for allocation of derived station blodk
- Added a derived flag to the block type.
- Added a handle to the stack allocator.
- Fixed a memory leak for derived variables.
- Fixed a few more memory leaks
- Changed doxygen version to match library version.
- Add a mechanism for including a layer of ghost cells for the VisIt reader.
- Tidy-up of ghost-cell changes.
- Added a few fields to the blocktype.
- Use the field "offset" for station file offsets.
- Fixed generation of CPU meshes with internal boundaries.
- Fix a compiler option that only applies to gcc.
- Fix compilation using clang
- Don't mark data as read in contiguous stitched blocks.
- Ensure that blocklist contains no duplicate IDs.
- Always populate required variables
- Don't modify local_dims for station variables.
- Ensure that newly created block IDs are unique.
- Added commit info to the SDF C library
- Added generation of commit_info.h to CMakeLists.txt
- Changed C library name to libsdfc.a
SDF/FORTRAN
- Fixed COMMIT file generation scripts.
- Prevent git error messages in pack.sh
- Synced gen_commit_string.sh script with other repos
- Added fix for the pack.sh shell script
- Added functions for querying the SDF string length
- Fixed GIT_DIR when CWD does not equal GIT_WORK_TREE
- Fixed sdf_write_namevalue when h%string_length changes.
- Disable the -ipo flag for Intel by default.
- Attempt to calculate GIT_DIR as an absolute pathname.
- Force GIT_DIR to be an absoulte path.
- Fix a spelling mistake.
- Guarantee a clean GIT_DIR1, when finding the absolute GIT_DIR.
- Added type conversion for integer arrays.
- Always put .mod files into the include/ directory
- Fixed lines longer than 80 columns
- Fix the file view when reading in 2D and 3D Cartesian meshes.
- Added SDF minor revision number.
- Fix compiler options.
- strip non-ascii before packing source
- Fix a 'raise' statement.
- Ensure pack.py complies with PEP8 guidelines.
- Removed MPI_BCAST calls from serial routines.
- Revert "Removed MPI_BCAST calls from serial routines."
- Fixed gfortran detection for versions > 4.x
SDF/Matlab
- Added support for Lagrangian meshes to Matlab
- Added a missing semicolon to the Matlab reader
- Added missing support for INTEGER datatypes
SDF/VisIt
- Fixed COMMIT file generation scripts.
- Fix VisIt build script when PATH contains spaces
- Fixed lines longer than 80 columns
- Added a handle to the stack allocator.
- Remove unnecessary memory allocation.
- Move a #include statement.
- Include a layer of ghost cells at mesh boundaries when vieweing in parallel.
- Allow freeing the stack when there is no filehandle.
- Stop build after specified build type
- Fixes to build script for VisIt 2.9.0
- Fill in ghost cells for lagrangian meshes.
- Tidy-up of ghost-cell changes.
- Fixed generation of CPU meshes with internal boundaries.
- Add an option to configure the installation directory.
- Changed the names of commit info defines
- Updated VisIt patches for the latest version.
SDF/utilities
- Fixed building of SDF utility man pages on OSX
- Fixed memory corruption bug in python reader.
- Fix memory leak in python reader.
- Added NPY_1_7_API_VERSION to python reader.
- Added backwards compatibility for older versions of numpy
- Fixed indentation levels.
- Added "mmap" flag to SDF_open
- Added Array type for tracking numpy arrays
- Free block data when numpy arrays are destroyed.
- Added a python datatype for returning SDF blocks.
- Return block structures instead of arrays.
- Reorganised sdf_python file.
- Added a set of python types to represent SDF block types.
- Added more metadata fields to the block type.
- Added BlockMesh members
- Added __version__ atribute to python module
- Removed redundant file handle from Array type
- Replaced file handle with pointer to sdf in block type.
- Export Block type
- Removed a bunch of typecasts
- Renamed SDF_type
- Changed the python SDF read call to be a class method.
- Added better docstring for the SDF read method
- Removed some of the temporary "sub" objects
- Made setup_* calls more consistent with each other.
- Added a reference counter for the Block structure.
- Changed mesh block to be closer to that of SDF
- Added a getter routine for BlockArray variables.
- Added a getter routine for the BlockMesh variables.
- Add links to the meshes for mesh-based variables.
- Return blocklist as member names instead of dictionary.
- Add derived variables to the python reader.
- Added more metadata to the Block entries.
- Added support for namevalue blocks
- Changed namevalue entries to be members.
- Fix data population of array blocks
- Fixed calculation of median mesh.
- Removed broken stpncpy call
- Added a routine for destroying the SDF stack.
- Fixed a few reference counting errors in the python module
- Free up all memory in sdffilter
- Added an sdf_legacy module for backwards compatibility.
- Add sdf_legacy to cmake build.
- Perform a type check before trying to recast 'PyObject *value' as a 'Block *'.
- Remove an incorrect Py_DECREF(value).
- Removed incorrect incref to the blocklist dictionary.
- Removed unnecessary python keyword substitutions.
- Only modify the dictionary if an entry has changed.
- Removed stack_destroy() call from SDF_dealloc.
- Removed unnecessary DECREFs when error handling.
- Added stitched material as a block type.
- Added material block to sdf_legacy.py
- Added grid_id block member.
- Added {PLAIN,POINT}_DERIVED blocktype support
- Added a handle to the stack allocator.
- Fixed a memory leak for derived variables.
- Fix some variable names.
- Fix Python setup when building.
- Removed unused and confusing return values.
- Removed unnecessary NULL tests before Py_XDECREF
- Use the field "offset" for station file offsets.
- Fix compilation using clang
- Added BlockList type to the module
- Don't add arrays which contain no data
- Speed up location of numpy header file
- Increment the reference count when adding to list.
- Added an option for purging duplicate block IDs
- Fixed creation of python install prefix.
- A few fixes for building the reader with python3.
- Fix build script for python module
- Build using libsdf.a
- Added git commit info to python reader
- Added git commit info to sdffilter and sdf2ascii
- Added commit info from SDF library.
- Added generation of commit_info.h to CMakeLists.txt
- Changed C library name to libsdfc.a
- Added error message to build script.
## v4.3.0 to v4.4.2 (2015-01-10)
* Added data reduction for grid-based variables.
This change adds the integer parameters "skip_{x,y,z}" and "skip" to the
subset blocks. If not present the default value is 0. If a parameter is set
to a positive integer then all grid-based variables using the subset
restriction will be reduced when being written to file. This is achieved by
skipping by the specified number of cells in each of the specified
directions. The "skip" parameter provides a quick method for setting the
same number of cells to skip in all directions.
This currently only applies to grid-based variables and is ignored for data
averages.
* Added "print_eta_string" for writing time to complete.
If "print_eta_string" is set to "T" in the control block of an input deck,
then the current estimated time to completion will be appended to the
status updates.
* Added "ndims" constant to input.deck
The input.deck now accepts an additional constant "ndims" returning the
total number of dimensions in the simulation. So this is 1, if the
input.deck was started using epoch1d; 2, if started using epoch2d and 3, if
started using epoch3d.
* added variable 'r_xyz' to input.deck parser.
'r_xyz' will always retrun the distance to coordinate origin.
* Added "allow_missing_restart" flag.
This adds the flag "allow_missing_restart" to the control block of input
decks. The default value is "F". When "restart_snapshot" is specified then
the simulation first checks that the specified restart dump is valid. If
the restart dump exists and is valid then it is used to provide initial
conditions for the simulation. However, if the restart dump does not exist
or is not usable for some reason then by default the simulation will abort.
If "allow_missing_restart" is set to "T" then the simulation will not abort
but will continue to run and use the initial conditions contained in the
input deck to initialise the simulation.
* Added "cc" constant for converting volume to cm^3.
* Changed compiler flags so that none are specified by default.
The following flags have been renamed in the Makefile:
PER_PARTICLE_WEIGHT is replaced with PER_SPECIES_WEIGHT
PARTICLE_PROBES is replaced with NO_PARTICLE_PROBES
TRACER_PARTICLES is replaced with NO_TRACER_PARTICLES
* Moved SDF libraries and utilities into a separately maintained repository.
* Build and link SDF as a standalone library
* EPOCH now gets all version information from git.
* Simplified COMMIT string and moved into the src directory.
* Changed the embedded source and input decks to a newer, more general method
* Deallocate all memory at the end of the simulation.
* Added IDL helper scripts.
* Added a number of enhancements to the sdffilter command-line utility,
including support for more block types, formatting options for output
and methods for filtering the data to be output such as 2d slices, etc.
* Added --derived option to sdffilter.
If this option is used then the sdffilter routine attempts to load the
external library and display derived data.
* Added --exclude flag to the sdffilter utility.
This flag allows all variables to be printed except for the ones specified.
* Added asciidoc documentation for the sdffilter and sdf2ascii -line utilities.
* Added Doxygen comments to the SDF C-library public interface.
* Changed particle weight calculation to be per cell.
The particle weights are now calculated on a per cell basis rather than
trying work out a smoothed version based on the particle shapes. This makes
the loading slightly more noisy but avoids discrepencies at the boundaries
when performing particle injection.
* Set thermal bc arrays when restarting.
* Added PARSER_CHECKING to the deck parser.
* Added support for DATABLOCK ant NAMEVALUE blocks to SDF.
* Added support for calculating derived data from stations.
* Added routines to the SDF C-library for adding/removing materials in-place,
adding/removing data blocks in-place and modifying arrays in-place.
* Added preliminary C-library write support.
* Added repository and compile-time information to the SDF library.
This adds a packed byte array of repository differences along with various
other useful compile-time information. The information is compiled into the
library file and can be included in output dumps generated by any program
which links with the library.
* Added name/value pair, generic, checksummed arbitrary data and
station_derived block types to SDF.
* Read/write particle IDs to SDF as integers
* Added input/output of integer point variables.
* Added sanity checks for particle species.
* Added current accumulation optimisations.
* Added routine that checks for block name truncation.
Bugfixes:
* Fixed linking stage on some platforms.
* Added fixes for compiling on ARCHER
* Added fix for broken Platform-MPI implementation.
* Fixed compilation when using the Intel compiler.
* Removed unrequired and troublesome recursive make.
* Fixed incorrect implementation of Box-Muller.
If the two random numbers fail to meet the criteria then both should be
thrown away and regenerated. If one of the previous random numbers is
re-used then this will skew the distribution. Thanks to Mikhail Garasyov
who explained the issue on the CCPForge open-discussion list, 2014-12-04.
* Fixed total energy diagnostic.
* Fixed laser absorption diagnostics.
* Bugfix for calculating plasma frequency in 3D.
* Fixed particle loading when using TOPHAT shape.
* Fixed bug for grid not being written to file.
* Add fallback for the python argparse module.
* Deallocate the prefix_first_call variable.
* Fixed array dimensions for point mesh.
* Prevent double deallocations of memory.
* Fixed typo in 3d current calculation.
* Fixed a bug when no output blocks are defined.
* Bugfix for "dump_first" when using file prefixes.
* Fixed maximum string length in MD5 calculation.
* Fixed commit string generation.
* Fixed bug in initialising dist_fn counter.
* Fixes for parsing unary operators in the input deck.
* Fixed calculation of initial time.
* Fixed restarting from dumps with "use_exact_restart"
* Fixed bug when using "r_xy", "r_yz" or "r_xz".
These variables worked fine in epoch3d, but using them in a lower
dimensional version "r_xz" for example became simplified to "x**2" instead
of "x". This is now been fixed.
* fixed warning message
'r_xy' does no longer yield a warning message if used in epoch2d.
* Bugfix for the simplify stack parser.
In the previous version, the stack parser would omit any time or space
varying parameter and substitute it with an arbitrary number. This had some
unintended consequences, so now the expression is evaluated in full and
discarded later on.
* Fixed typos in dist_fn block parser.
* Fixed typos in basic_evaluate_standard.
* Fixed typo in 3D laser absorption diagnostics.
* Fixed typo in 1D probe block parser.
* Fix time-varying variables when evaluating deck.
The recent additions which simplify the output from the deck parser
inadvertantly stomp on the "is_time_varying" flag. This change fixes
things.
* Fixed bug with unallocated dump_point_grid.
dump_point_grid was being assigned to before it was allocated.
* Fixed a typo in creating id_max restricted subsets.
This patch was contributed by Matthew Tooley on CCPForge.
* Fixed sanity checking in the I/O block parser.
* Fixed the '-DNO_IO' compile-time flag.
When this flag was enabled, the deck parsing routines were not being called
properly. This has now been fixed.
* Fixed compilation when not using PER_PARTICLE_WEIGHT
* Various small bugfixes and corrections.
## v4.2.0 to v4.3.0 (2014-01-21)
* Added 'restart' dumpmask constant.
* Ionization species inherit "dumpmask".
The species which are automatically created for each ionization
level are now given the same "dumpmask" or "dump" parameter as
the parent species. This behaviour can be overridden by explicitly
adding a species block of the same name with a differing dumpmask.
eg.
begin:species
name = Helium
ionisation_energies = (24.6*ev,54.4*ev)
dump = F
end:species
begin:species
name = Helium1
dump = T
end:species
* Rationalised the usage of multiple "output" blocks.
This set of changes introduces a clear distinction between the
old style of output block and the new style.
With the old method, there is a single unnamed output block. It
has three levels of dump frequency: "normal", "full" and
"restart". There is a single dump interval specified by either
"dt_snapshot" or "nstep_snapshot" and the frequency between full
and restart dumps is specified in relation to this interval using
"full_dump_every" and "restart_dump_every".
With the new method, there can be multiple output blocks and each
one has a "name" field to distinguish it. It is the existence or
absence of this field which determines whether it is a new or old
style output block. Each output block has a single dump frequency.
In order to have multiple dump levels you must create a separate
output block for each level. Since there is no longer the notion
of multiple dump levels, the "full_dump_every", etc. flags are
not supported.
There are a few output parameters which only make sense globally.
When using the new style of output block, these are now specified
by placing them in their own "output_global" block.
The list of fields which are now specified globally are:
force_first_to_be_restartable
force_final_to_be_restartable
use_offset_grid
* Made "dump_source_code" a per-output block parameter.
The flags "dump_source_code" and "dump_input_decks" parameters
can now be specified individually for each named output block.
If the flags are not present, they default to "T" for restartable
output blocks and "F" for non-restartable ones.
* Added start and stop times to the "output" blocks.
"output" blocks in the input deck now accept the parameters
"time_start", "time_stop", "nstep_start" and "nstep_stop".
These determine the time or step number at which to start
considering output for a block and similarly the time or step
number at which to stop considering output for a block.
For example:
begin:output
nstep_snapshot = 4
nstep_start = 5
nstep_stop = 12
end:output
With this block, the first output will occur at step number 8
since this is the first multiple of 4 to occur after 5. The last
dump will occur at step number 12 regardless of how many steps
the simulation continues to run for.
Note that if "dump_first" or "dump_last" are set to true for this
block then dumps will occur first or last regardless of the values
of "time_start", etc.
Note also that the flags are applied on a per-output block basis
in the case of multiple output blocks. A subsequent patch will
add global applied variants.
* Added global versions of "time_start", etc. flags.
This changeset adds "time_start", "time_stop", "nstep_start"
and "nstep_stop" parameters to the "output_global" input deck
block.
These have the same semantics as the per-output block versions
added in the previous changeset, except that they apply to all
output blocks in the input deck.
The per-output block parameters are still honoured and the most
restrictive version applies.
For example:
begin:output_global
nstep_start = 5
nstep_stop = 8
end:output_global
begin:output
name = block1
nstep_snapshot = 1
nstep_start = 4
nstep_stop = 7
end:output
begin:output
name = block2
nstep_snapshot = 1
nstep_start = 6
nstep_stop = 9
end:output
In this example, the first "block1" output will occur at step 5
due to the global restriction and the first "block2" output will
occur at step 6 due to the per-block restriction.
Meanwhile, the last "block1" output will occur at step 7 due to
the per-block restriction and the last "block2" output will occur
at step 8 due to the global restriction.
* Added global variants of "dump_first", "dump_last"
This adds "dump_first" and "dump_last" parameters to the
"output_global" block of the input deck.
If specified, they override the values of any per-output block
or default values of these parameters.
* Added "t_end" and "nsteps" to the deck parser.
This changeset adds the "t_end" and "nsteps" parameters from the
"control" block to the input deck parser.
This enables them to be used within maths expressions elsewhere
in the input deck. For example, you can now specify that there
should be 10 output dumps at equal intervals using:
begin:output
dt_snapshot = t_end / 10
nstep_snapshot = nstep / 10
end:output
The change also exposes the "nprocx/y/z" parameters although since
these may be redefined when the MPI grid is setup, they may not
always give the correct values.
* Added dump_at_times flag to the "output" block.
This change adds both the "dump_at_times" and "dump_at_nsteps"
parameters to "output" blocks in the input deck.
These specify a list of times/nsteps at which to write the
current output block. They act in addition to other output
frequency parameters.
eg.
begin:output
name = test
nstep_snapshot = 10
dump_at_nsteps = 3,9,10,18,22
nstep_start = 7
ex = always
end:output
This will output the "test" block at nsteps 9,10,18,20,22,30,40...
* Added "dump_cycle" parameter to the "output" block.
This adds the "dump_cycle" integer parameter to the "output"
block in the input deck.
If set to a positive integer then the output file number will
be reset to zero after the specified cycle number is reached.
The default is "0", so dump cycling never occurs.
eg.
block:output
nstep_snapshot = 10
dump_cycle = 2
ex = always
end:output
With this block, output will be written at step 10 to the output
file "0000.sdf", step 20 to "0001.sdf", step 30 to "0002.sdf",
step 40 to "0000.sdf", step 50 to "0001.sdf", etc.
* Allow "restart_snapshot" to accept filenames.
The "restart_snapshot" parameter in the "control" block of the
input deck will now accept a filename instead of a cycle
number.
If you want to restart from "0012.sdf" then it can either be
specified using:
restart_snapshot = 12
as in previous versions, or alternatively it can be specified
using:
restart_snapshot = 0012.sdf
This syntax will be useful once output file prefixes have been
implemented.
* Added the "file_prefix" parameter to output blocks.
It is now possible to separate output files generated by
different output blocks by specifying a prefix.
This is done using the "file_prefix" parameter in an "output"
block of the input deck.
If "file_prefix = aa" is specified then the files generated by
the output block will be named "aa0000.sdf", etc. instead of
just "0000.sdf". The prefix is not applied to output files
generated by other output blocks.
The reason for introducing this change, is that you can now
write different variables to separate files which was not
previously possible.
For example, here are two output blocks which do not use file
prefixes:
begin:output
name = o1
nstep_snapshot = 1
charge_density = always
end:output
begin:output
name = o2
dump_at_nsteps = 10
restartable = T
end:output
With this input deck, we want to have the "charge_density"
derived variable at every snapshot and then periodically write a
restart dump. The problem is that the dump file "0010.sdf"
contains both the restart information and the "charge_density"
variable. At the end of the run we can't just delete the large
restart dumps without losing the smaller variables at that
time step.
With the new version we would add a prefix to one or both
blocks:
begin:output
name = o1
file_prefix = small
nstep_snapshot = 1
charge_density = always
end:output
begin:output
name = o2
nstep_snapshot = 10
restartable = T
end:output
Now the "charge_density" will be written to "small0000.sdf", etc.
At step 10, two files will be written: "small0010.sdf" containing
just the charge_density and "0000.sdf" containing all the restart
variables.
Note that some care must be taken, since if the same variable is
in the output block for multiple file prefixes then multiple
copies will be written to file. This obviously uses more disk
space and is more time consuming than necessary.
It should also be noted that if multiple output blocks use the
same file stem then their output will be combined. eg:
begin:output
name = o1
file_prefix = a
dump_at_nsteps = 2,4
ex = always
end:output
begin:output
name = o2
file_prefix = a
dump_at_nsteps = 3,4
ey = always
end:output
begin:output
name = o3
file_prefix = b
dump_at_nsteps = 4
ez = always
end:output
In this example, at step 2 a0000.sdf contains ex, step 3 a0001.sdf
contains ey, step 4 a0002.sdf contains ex,ey and b0000.sdf
contains ez.
* Added "rolling_restart" flag to the output block.
If the "rolling_restart" flag is set to "T" in a named output
block then it automatically sets the output block to have the
properties required for performing rolling restarts.
It is currently just a shorthand for setting the following flags:
dump_cycle = 1
restartable = T
file_prefix = roll
In the future, there may be some additional properties attached
to rolling restart dumps and these will also be enabled using
this flag.
* Added "dump_cycle_first_index" flag to output block.
This parameter can be used to specify the starting number used
when output numbering is reset due to the "dump_cycle" parameter.
* Added command-line options for Makefile.
* Allow the "phase" parameter to be time varying.
* Allow the "profile" parameter to be time varying.
* Added "sdffilter" utility for manipulating SDF files.
The "sdf2ascii" utility has been developed primarily as a debugging
tool. Its purpose is to spit out the exact contents of a file.
Rather than extend this to handle more complex post-processing
tasks, I have instead added the "sdffilter" utility.
At the moment it is fairly basic and just handles station data.
In the future it will handle tasks such as rewriting SDF files,
performing lineouts, generating derived variables, etc.
* Added support for constants to the Matlab reader.
* Added a makefile flag for disabling encoded source.
* Reduce the number of CPUs if necessary.
The previous patches enforce a minimum domain size. In some
situations it may not be possible to divide the simulation
amongst all the processors and still meet this restriction.
In such circumstances, we keep reducing the number of processes
until we find a suitable split.
On a typical large unattended run this behaviour is better than
exiting and losing allocation slot.
To have the simulation exit under such circumstances, add the
flag "allow_cpu_reduce = F" to the control block.
* Fixed compilation on IBM Bluegene machines.
To compile on a Bluegene machine, use the command
"make COMPILER=ibm"
* Added default values for ignorable directions.
This change allows submitting 3D or 2D input decks to a 1D
version of EPOCH and 3D input decks to a 2D version of EPOCH.
Any references to y/z will be set equal to zero unless overridden
by a deck constant. Other y/z values also assume sensible
defaults, eg. 1 grid cell, 1 metre thick, etc.
* Added automatic byteswapping to the SDF library.
The library now checks the endianness of the SDF file and
byteswaps the data if required.
* Fixed unpacking script on big-endian machines.
* Added "sdf_buffer_size" parameter to output_global.
This adds an input deck parameter to the "output_global" block,
allowing users to control the size of the buffer used when
writing point data to SDF files.
* Added "filesystem" option to output blocks.
Some filesystems can be unreliable when performing parallel I/O.
Often this is fixable by prefixing the filename with 'ufs' or
'nfs'. This change adds an option to both the "output" block
and "output_global" block enabling the filesystem prefix to be
used. eg:
begin:output_global
filesystem = ufs
end:output_global
* Added Makefile flag for compiling on HECToR
* Added particle gamma and relativistic mass output.
It is now possible to output per-particle gamma and per-particle
relativistic mass. These are specified in the same way as other
particle variables in the "output" block using the parameters
"gamma" and "relativistic_mass". eg.
begin:output
dt_snapshot = 1e-15
particles = always
gamma = always
relativistic_mass = always
end:output
There is also now a "rest_mass" parameter which is just an alias
for "mass", controlling the output of per-particle rest mass.
* Allow "qed" blocks when -DPHOTONS is not used.
Previous versions of the code would halt execution if a "qed"
block was found in the input deck for code which was not compiled
using the -DPHOTONS preprocessor flag. This can make it difficult
to use the same input deck with and without QED enabled.
The code now only halts if "use_qed=T" inside the "qed" block.
* Added option for QED radiation reaction.
The "qed" block now accepts the logical flag
"use_radiation_reaction". If set to "T", the radiation reaction
force is calculated. If set to "F", it is not calculated.
The default value is "T".
* Output boundary thickness to SDF dumps.
* Added constants to the SDF python reader.
* Added "disabled" flag for output blocks.
If "disabled=T" is set in an output block then the block is
ignored and never generates any output.
* Add reading of the data directory name from a file.
EPOCH now first checks for the existence of a file named
"USE_DATA_DIRECTORY" in the current working directory. If such
a file exists, it reads it to obtain the name of the data
directory to use. If no such file exists, it prompts for a
data directory name as before.
This is useful for cluster setups in which it is difficult or
impossible to pipe in the directory name using a job script.
* Check for the existence of a "STOP" file.
EPOCH will now check for the existence of a file named either
"STOP" or "STOP_NODUMP" in the simulation output directory.
The check is performed at regular intervals and if such a file
is found then the code exits immediately. If "STOP" is found
then a restart dump is written before exiting. If "STOP_NODUMP"
is found then no I/O is performed.
The interval between checks is controlled by the integer parameter
"check_stop_frequency" which can be specified in the "control"
block of the input deck. If it is less than or equal to zero then
the check is never performed.
The default value is 10.
* Stop execution after a given elapsed walltime.
This adds a two parameters to the "control" block of the input
deck which allow the code to halt execution and create a
restart dump after a specified walltime has elapsed.
Two parameters have been added:
"stop_at_walltime" is the walltime at which to halt the simulation.
This is specified as the number of seconds since the start of the
simulation.
"stop_at_walltime_file" is the filename from which to read the
value for "stop_at_walltime". Since the walltime will often be
found by querying the queuing system in a job script, it may be
more convenient to pipe this value into a text file rather than
modifying the input deck.
* Added "immobile" particle species property.
"species" blocks now accept the logical flag "immobile". If set
to "T", the species will be ignored during the particle push.
The default value is "F".
* Changed the default value of "dump_first" to "T".
* Added collisional ionisation
* Added an option for outputting deck constants.
This adds a logical flag "print_constants" to the "control"
block of an input deck. If set to "T", deck constants are printed
to the "deck.status" file as they are parsed.
* Automatically write the field grid if needed.
If any grid variables are written to file then the grid will
automatically written as well. This can be disabled by adding
a "grid = never" entry in the output block.
* Automatically write the particle grid if needed.
As with field variables, if any particle variable is written to
file then the corresponding particle grid will automatically
written as well. This can be disabled by adding a
"particles = never" entry in the output block.
* Added "total_energy_sum" diagnostic.
Bugfixes:
* Bug fix for reading in minor revision numbers.
* Added SDF compatibility interface for old codes.
The addition of the minor revision field to sdf_write_run_info()
meant that codes could not switch between the two versions.
This patch adds an interface so that old codes do not have to be
changed.
* Fix compiler warnings related to the TRANSFER() function.
* Updated the ASCII EPOCH logo.
* Reduce module USE's to make ifort-13.x happy.
Recent versions of the Intel Fortran compiler take hours to
compile the code if there are recursively included modules.
Although this is quite clearly a compiler bug, it is not too
painful to work around.
It may turn out that this causes issues with other compilers and
may need to be reverted.
* Fixed the gen_src_module on OSX 10.8
The new version of "base64" on OSX-10.8 machines segfaults
when using the command-line option for folding long lines.
This change works around the issue by piping the output through
the "fold" command instead.
* Fixes for building the COMMIT file.
* Fix building the reader with VisIt-2.6.1
* Added commit info to SDF reader plugin.
* Changed multiplication factor in the Bohm-Gross relation.
* Made date commands in build scripts more portable.
* Ignore non-dumped species for derived variables.
If a particle species has its dumpmask set to "never" or dump=F
then it should be ignored when writing per-species derived
variables.
* Added a couple of aliases to the output blocks.
* Dump all the information required for QED restart.
* Various fixes to make restart dumps work correctly.
Dumps are now performed at the half-timestep to ensure that we
have all the information required for applying the laser boundary
conditions.
We also dump some extra state information for moving windows.
* Fixed bug in which restart variables were ommitted.
The list of variables which need to be written into restart files
was not always being set. This would occasionally lead to restart
dumps which did not contain all the variables required for a
restart to occur.
* Write a unique list to the "*.visit" files.
Each time an output dump is written, the name of the output
dump gets written to a "<name>.visit" file, where <name> is
the name of the corresponding output block.
When dump cycling is enabled, this could lead to multiple
repetitions of the same output files in the list.
The diagnostic routine now keeps a list of the filenames already
written and checks for duplicates before writing to the *.visit
file.
* Don't allow multiple "output" blocks with same name.
It is an error for the input deck to contain multiple output
blocks which share the same name. The current changeset properly
enforces this restriction.
* Added a more efficient particle shuffling algorithm.
* Made date commands in build scripts more portable.
* Ignore non-dumped species for derived variables.
If a particle species has its dumpmask set to "never" or dump=F
then it should be ignored when writing per-species derived
variables.
* Only write to the status file from rank zero.
* Added a couple of aliases to the output blocks.
* Possible fix for generating correct COMMIT string.
* Ensure that dist_fn gets the right species count.
* Check for valid species names during deck parse.
* Prevent possible infinite looping in dist_fn.
* Fixed bug setting up initial density in parallel.
* Made laser driven boundaries slightly faster.
* Fixed per-species field averaging.
* Stop the output dump times from drifting.
* Fix per-output block averaging start times.
* Only read SDF serial input using one process.
Many of the SDF input routines read in the same data on all
processes. However, it is much more efficient to read the data
using one process and then broadcast it to all the others.
* Added support for station files to the SDF library and VisIt reader.
* Fix re-init of CPML boundaries during load balance.
* Fixed the per-particle kinetic energy diagnostic.
* IOR subset dumpmasks with non-subset ones.
This change allows 'var = subset_name + species' to work in an
output block. However, there may be unintended consequences.
* Fixed compilation issues with MPICH.
* Check for a minimum size when splitting the domain.
Communication of the ghost cells is incorrect if the simulation
domain is smaller than the number of ghost cells. This is fixable
but it is easier just to ensure that the domain sizes are never
that small.
* Fixed missing factor of 2 from BSI ionization.
* Fixed compilation with some compilers.
It would seem that it is against the F90 standard to declare
variables with both POINTER and INTENT attributes.
* In collisions, skip particles with same momentum.
* Use normalised momentum for collision tests.
* Honour the minimum domain size when load balancing.
* Added integer point variable types to the IDL reader.
* Exit on unparsable input decks.
* Fix the units of momenta in distribution functions.
* Output simulation time in a more user-friendly way.
* Use Buneman's form of current smoothing.
* Bugfixes for the collision tests.
* Avoid issues due to interpolating particle weights.
* Only convert point data when necessary.
There was a bug when the SDF library was instructed to convert
point arrays from double to single precision before writing to
file. The entire buffer array was converted even though it is
only necessary to convert the data being written. This led to
output dumps being much slower than they should be.
* Add extra debugging flags on OSX.
* Bug fixes for the lagrangian mesh SDF blocktype.
* Added lagrangian mesh support to the IDL reader.
* Fixed the use of mmap by command-line tools.
* Fix "restrict_z" parameter in EPOCH3D.
* Fixed typo when sanity checking species block.
The sanity check for the "identify:" parameter in the species
block contained a typo which meant that an error was never raised.
This has now been fixed.
* Added an additional warning message for QED.
The code now prints a warning message if QED is turned on and
both electron and positron species are empty.
* Only issue a warning on an unrecognised "identify"
In previous versions, if an unrecognised "identify:" parameter
was found in the species block, the code would issue an error
message and halt execution. This can be a bit annoying when
turning on/off flags such as -DPHOTONS. The code now just issues
a warning and continues execution.
* Fix reference counting in the SDF python reader
* Fixes for angular distribution functions.
* Added better sanity checks to dist_fn parser.
* Autodetect gfortran compiler version in Makefile.
* Allow the VisIt reader to cope with missing grids.
* Improved performance of CPML boundaries.
* Improved performance of the field solver.
The generic form for the arbitrary-order field solver was a fair
bit slower than explicitly having separate loops for each.
* Fix {time/nstep}_start for io blocks.
This change fixes an issue where {time,nstep}_start were not
both being tested for when calculating output dump times.
Similarly for {time,nstep}_stop
* Fixed occasional spikes in autoloaded particles.
The calculation of per-particle weights was being carried out
incorrectly at the corners where parallel interfaces intersected
with the domain boundary. This has now been fixed.
* Fix derived output variables at domain boundaries.
* Fixed a few serious regressions in v4.2.12
Some of the tests for equality which had been changed in commit
3cd93e3 (SVN 1080) were the wrong way around. This completely broke
a few things.
* Added "USE mpi" to ionise.F90, needed by some compilers.
* Added "species_id" field to SDF point blocks.
This adds read/write support to the fortran SDF library for
adding a "species_id" field to the metadata of all point blocks.
It also adds read support for this field to the C-library.
* Fixed EPOCH to work with new "species_id" fields.
The SDF library now requires the use of a "species_id" field
on all point blocks.
* Added stack simplifier routines.
* Added "c_io_never" dumpmask constant.
Previously, the dumpmask flag "never" was assigned to zero.
The problem with this is it makes it impossible to tell whether
the "never" flag was explicitly used in a dumpmask.
This change might lead to some breakage.
* Added generic timing routines.
* Hack to work around issues on filesystems without flock().
If a filesystem is mounted without support for the flock()
system call then non-interleaved parallel writes will fail.
This patch enables a ROMIO hint which is known to work around
the issue on some systems.
It is not a true fix because the underlying problem is with the
filesystem and not EPOCH. It is a bit of a cludge and is not
guaranteed to work on all MPI implementations.
* Speeded up encoded source for certain compilers.
* Fix laser absorption diagnostic.
* Updated MatLab and IDL readers for new file revision.
## v4.1.0 to v4.2.0 (2013-02-23)
* Allow the data directory to contain a '/' character.
* Added unary plus to the deck parser.
* Added per-particle kinetic energy diagnostic.
This can be requested using "ek = <dumpmask>".
* Added an optional error handler for MPI debugging.
* Allow dump frequency to be reset during restart.
The code now outputs the time an step number of the last dump for each
output block, rather than the next one. This allows the calculation of
the next dump time to be reset immediately after restarting rather than
only being reset once the next dump occurs.
Bugfixes:
* Fixed preventing EPOCH3D from running in parallel.
This fixes a typo which was introduced by the patch applied on Mon Oct
22 05:41:01 2012.
* Don't calculate dist_fn for empty species.
* Fix dumping of particle species subsets.
* Trim whitespace from the end of ID strings.
* Added a "long_id" field to the SDF block type.
If a block ID is longer than "c_id_length" then it will be truncated.
Once this occurs, it is possible that the shortened ID string does not
contain enough information to find it again. With this change, the
original string is stored in the block structure so that up until the
SDF file is closed the block can still be retrieved.
* Use an untruncated ID string to find point meshes.
When writing point variables, we also pass through the ID string of the
associated point mesh. If this was too long and has been truncated, the
shortened version may no longer uniquely identify the correct mesh
block. To avoid this problem, we use the untruncated version of the
string to request the shortened version from the SDF library
## v4.0.0 to v4.1.0 (2013-01-24)
* Changed the default for "dump_first" back to "T".
* Made sample_dist_function significantly faster.
* Added an option randomise particles in VisIt.
* Revert to previous default behaviour for IDL.
The new GUI routines for IDL make use of a more complex hierarchical
data structure. This was the new default behaviour and broke many
peoples existing scripts. With this patch, the old behaviour is now the
default. Two new functions have been introduced:
"getstruct()" and "explore_struct()" are the same as "getdata()" and
"explore_data()" except that they return the new style data structure.
* Allow sdf2ascii to accept multiple variable ids.
When filtering the output of sdf2ascii using the "-v" flag, it is now
possible to use the flag multiple times to enable multiple variables to
be output. Also added a few bugfixes and some tidying.
* Enable reading of constants in the IDL SDF reader.
* Added node-centred grid to the python interface.
* Added drift to the moving window species.
* Added current CPU split to VisIt reader
* Added the "use_exact_restart" control block parameter.
This logical flag may be set to "T" or "F". By default it is "F". If
this flag is set in conjunction with "restart_snapshot", EPOCH will
attempt to restart the code using the exact configuration it was using
when the restart dump was produced. The domain split amongst processors
will be identical, as will the particle lists. The code will also reset
the status of the random number generator on each process. Note that the
flag will be ignored if the number of processors does not match that
used in the original run.
Bugfixes:
* Fix final output dump to be non-empty.
The recent multiple output block support broke the final output dump
such that it was written but contained no data.
* Fixed floating overflow bug in collisions routine.
* Allow restart to work with missing particle species.
* Rebalance ghost cells as well as computational domain.
This fixes several problems with boundary conditions, including the
ability to have an imposed electromagnetic field and also correctly
calculating laser driven boundaries.
* Fix current BCs for BSPLINE3 particle weighting.
* Use correct grid stagger for reflecting BCs.
When particles are set to reflect from the boundary, the current arrays
are flipped in the direction perpendicular to that boundary. The
routines which do this were not taking account of grid staggering
correctly which led to electron depletion at the boundary. This has now
been fixed.
* Fixed VisIt reader build script for older versions.
Also removed a few compiler warnings and added a fallback to build the
serial version of the reader if all else fails.
* Bugfix for rebalancing ghost cells.
* Fix the "dump_first" flag in "output" blocks.
* Bugfixes for per-output block data averaging.
* Fix load balancing in only one direction.
* Improved logging messages in VisIt reader.
* Added "cpu_split" block to the output dumps.
* Allow ionisation to compile without PER_PARTICLE_WEIGHT
* Sanity checks for multiphoton ionisation.
The code exits with an error when multiphoton ionisation is requested
and there are either no lasers or multiple lasers with different
frequencies.
* Fix typo in 3d rebalancing of ghost cells.
This fixes the bug which was found and diagnosed by Anupam Karmakar on
the CCPForge help forum, 2012-09-11.
* Fix MPI_Send/Recv so that they use an integer count.
The send/receive count in the particle transfer calls was using an
8-byte integer, whereas the MPI standard states that it is a plain
integer. This broke things on Juelich's BlueGene machine.
* Ensure correct output dump times for restarted runs.
Information about when the next output dump should occur must be written
to the restart dump in order for restarts to behave correctly.
* Read domain extents from dump file when restarting.
Restarting from simulations with a moving window broke because the
domain extents differ from that found in the input deck. This change
fixes it.
* Fix broken diagnostics output.
Laser absorption and poynting flux arrays were not using the iomask
array which has replaced dumpmask. This patch addresses the issue.
* Fix for per-species averaging.
* Fixes for restarting from a previous snapshot.
When restarting, a load balance call is not immediately followed by the
particle push so we have to explicitly rebalance the current arrays.
* Fix for overlapping regions in MPI_Sendrecv.
When the simulation domain is smaller than the number of ghostcells, the
memory region being sent from the simulation domain overlaps with the
memory region occupied by the receiving ghost cells. This was causing
random errors during communications for some problems. (eg. Bug #782 on
CCPForge)
* Removed a few MPI-related memory leaks.
* Species block "temp" now sets temperature in 3D.
* Removed "dof" (degrees of freedom) variable.
The calculation of temperature depends on the degrees of freedom of the
code. The presence of collisions, initial temperature conditions, etc.
mean that the degrees of freedom is not always the same as the
dimensions of the code. To avoid confusion, the parameter has now been
removed entirely.
* Fixed the IDL quick_view for multiple timesteps.
* Fixed the "full_dump_every" flag.
* Added script for generating tarballs from git.
* Read initial conditions when restarting.
* Fix for restarting with moving windows.
* Added a more helpful error message to the autoloader.
* Allow species with no particles specified.
If no particles are specified for a species, the code now prints a
message indicating that no particles have been loaded and continues to
run. The previous behaviour was to exit with an error message.
* Fix automatically calculated dist_fn ranges.
* Various other minor bugfixes and tweaks
## v3.1.0 to v4.0.0 (2012-07-24)
Additions and changes:
* Added Sentoku and Kemp collision routine.
This adds a new output block named "collisions" which accepts the
following three parameters.
use_collisions - This is a logical flag which determines whether or not
to call the collision routine.
If omitted, the default is "true" if any of the
frequency factors are non-zero (see below) and "false"
otherwise.
coulomb_log - This may either be set to a real value, specifying the
Coulomb logarithm to use when scattering the particles
or to the special value "auto". If "auto" is used then
the routine will calculate a value based on the properties
of the two particles being scattered.
If omitted, the default value is "auto".
collide - This sets up a symmetric square matrix of size nspecies*nspecies
containing the collision frequency factors to use between
particle species. The element (s1,s2) gives the frequency
factor used when colliding species s1 with species s2.
If the factor is less than zero, no collisions are performed.
If it is equal to one, collisions are performed normally.
For any value between zero and one, the collisions are performed
using a frequency multiplied by the given factor.
If "collide" has a value of "all" then all elements of the
matrix are set to one. If it has a value of "none" then all
elements are set to minus one.
If the syntax "species1 species2 <value>" is used, then the
(species1,species2) element of the matrix is set to
the factor "<value>". This may either be a real number, or
the special value "on" or "off". The "collide" parameter may
be used multiple times.
The default value is "all" (ie. all elements of the matrix
are set to one).
For example:
begin:collisions
use_collisions = T
coulomb_log = auto
collide = all
collide = spec1 spec2 off
collide = spec2 spec3 0.1
end:collisions
With this block, collisions are turned on and the Coulomb logarithm is
automatically calculated. All values of the frequency array are set
to one except (spec1,spec2) is set to minus one (and also (spec2,spec1))
and (spec2,spec3) is set to 0.1
* Added QED pair production as described in Duclous et al. PPCF 53 (2011)
It is enabled using the compiler flag "-DPHOTONS". Additionally,
the Trident process is enabled using "-DTRIDENT_PHOTONS".
A new input deck block named "qed" has been added which accepts the
following parameters:
use_qed - Logical flag which turns QED on or off. The default is "F".
qed_start_time - Floating point value specifying the time after which QED
effects should be turned on. The default is 0.
produce_photons - Logical flag which specifies whether to track the
photons generated by synchrotron emission. If this
is "F" then the radiation reaction force is calculated
but the properties of the emitted photons are not
tracked. The default is "F".
photon_energy_min - Minimum energy of produced photons. Radiation
reaction is calculated for photons of all energies,
but photons with energy below this cutoff are not
tracked. The default is 0.
photon_dynamics - Logical flag which specifies whether to push photons.
If "F" then photons are generated, but their motion
through the domain is not simulated and they stay where
they were generated. The default is "F".
produce_pairs - Logical flag which determines whether or not to simulate
the process of pair generation from gamma ray photons.
Both produce_photons and photon_dynamics must be "T" for
this to work. The default is "F".
qed_table_location - EPOCH's QED routines use lookup tables to calculate
gamma ray emission and pair production. If you want
to use tables in a different location from the
default, specify the new location using this
parameter.
The default is "src/physics_packages/TABLES".
QED also requires that the code now know which species are electrons,
positrons and photons. The species type is specified using a single
"identify" tag in a species block. To specify an electron the block in the
deck would look like
begin:species
name = electron
frac = 0.5
rho = 7.7e29
identify:electron
end:species
Once the identity of a species is set then the code automatically assigns
mass and charge states for the species.
Possible identities are:
electron - A normal electron species. All species of electrons in the
simulation must be identified in this way or they will not
generate photons.
positron - A normal positron species. All species of positron in the
simulation must be identified in this way or they will not
generate photons.
photon - A normal photon species. One species of this type is needed
for photon production to work. If multiple species are present
then generated photons will appear in the first species of
this type.
bw_electron - The electron species for pair production by the
Breit-Wheeler process. If a species of this type exists
then electrons from the pair production module will be
created in this species. If no species of this type is
specified then pair electrons will be generated in the
first electron species.
bw_positron - As above but for positrons.
trident_electron - The electron species for pair production by the
Trident process. If a species of this type exists then
electrons from the pair production module will be
created in this species. If no species of this type is
specified then pair electrons will be generated in the
first electron species.
trident_positron - As above but for positrons.
proton - A normal proton species. This is for convenience only and is not
required by the pair production routines.
A species should be identified only once, so a "bw_electron" species does
not need to also be identified as an "electron" species. If the code is
running with "produce_photons=T" then a photon species must be created by
user and identified. If the code is running with "produce_pairs=T" then the
code must specify at least one electron (or bw_electron) species and one
positron (or bw_positron) species. The code will fail to run if the needed
species are not specified.
* Added Alistair Lawrence-Douglas's ionisation routines.
This adds the following two parameters to the input deck control block:
use_multiphoton - Logical flag which turns on modelling ionisation by
multiple photon absorption. This should be set to "F"
if there is no laser attached to a boundary as it
relies on laser frequency. The default is "T".
use_bsi - Logical flag which turns on barrier suppression ionisation
correction to the tunneling ionisation model for high intensity
lasers. The default is "T".
Also two additional parameters to the species block:
ionisation_energies - When specified, this turns on ionisation modeling.
This is an array of ionisation energies starting
from the outermost shell. This expects to be given
all energies down to the fully ionised ion; if the
user wishes to exclude some inner shell ionisation
for some reason they need to give this a very large
number. Note the ionisation model assumes that the
outermost electron ionises first always, and that
the orbitals are filled assuming ground state.
electron_species - Name of the electron species. This can be specified as
an array in the event that the user wishes some levels
to have a different electron species which can be
handy for monitoring ionisation at specific levels.
* Added Holger's CPML boundary conditions.
This implementation closely follows that outlined in the book
"Computational Electrodynamics. The Finite-Difference Time-Domain
Method.", A. Taflove and S. Hagness (2005).
See also J. A. Roden and S. D. Gedney, "Convolutional PML (CPML):
an efficient FDTD implementation of the CFS-PML for arbitrary
media", Microwave Optical Technol. Lett., vol. 27, 2000.
CPML boundaries are specified in the input deck by specifying
either "cpml_outflow" or "cpml_laser" in the boundaries block.
There are also four configurable parameters.
"cpml_thickness" is the thickness of the CPML boundary.
"cpml_kappa_max", "cpml_a_max" and "cpml_sigma_max" are tunable
parameters which affect the behaviour of the absorbing media.
See the above references for details.
eg.
begin:boundaries
cpml_thickness = 16
cpml_kappa_max = 20
cpml_a_max = 0.2
cpml_sigma_max = 0.7
bc_x_min = cpml_laser
bc_x_max = cpml_outflow
bc_y_min = cpml_outflow
bc_y_max = cpml_outflow
end:boundaries
* Added continuation lines to the input deck.
If the input deck contains a '\' character then the rest of
the line is ignored and the next line becomes a continuation
of the current one.
* Added "dump_first" logical flag to the output block.
Set "dump_first=F" to prevent EPOCH from generating an
output dump immediately after initialising the simulation.
The default value is "F".
* Added "dump_last" logical flag to the output block.
Set "dump_last=F" to prevent EPOCH from generating an
output dump just before exiting. The default value is "T"
if an output block exists in the input deck and "F" otherwise.
* Added "force_first_to_be_restartable" flag.
This is a logical flag which can be added to an "output"
block to determine whether or not the first output dump
should be a restart dump. The default value is "F".
* Implemented the "ejected_particles" output parameter.
If the "ejected_particles" variable is requested in the
output block then all the particles which have left the
simulation domain are written to file.
The parameter is assigned a dumpmask in the same way as
other variables in the output block.
Once the data has been written, the ejected particle lists
are reset and will accumulate particles until the next
requested output dump.
* Added global particle IDs.
Particle IDs are useful if you want to track the progress
of each particle throughout the simulation. Since they increase
the size of each particle data structure, they are disabled by
default and must be enabled using a compiler flag.
The PARTICLE_ID flag will use an 8-byte integer to represent the
ID and PARTICLE_ID4 uses a 4-byte integer.
They are written to file using the "id" flag.
Eg.
particles = always
id = always
in the "output" block will write particle IDs to file.
Note: In the current implementation, the particle IDs are
passed between processors and written to file using REAL numbers.
This means that in double precision the maximum particle ID
is 2^53 ~ 10^16. This should be ample for the forseeable future.
However, if the code is compiled for single precision then the
maximum ID is 2^24 = 16777216. Probably not big enough.
* Added a 'subset' block for specifying a subset of particles.
This adds a new block which can be used to pick a subset of
particles based on given criteria.
The subset name can then be used in place of (or in addition to)
the dumpmask in an 'output' block.
For example:
begin:subset
name = background
random_fraction = 0.1
include_species:electron
include_species:proton
end:subset
begin:subset
name = high_gamma
gamma_min = 1.3
include_species:electron
end:subset
begin:output
particles = background + high_gamma + always
px = background + high_gamma
py = background
pz = always
end:output
In this example, three 'px' blocks will be written:
'Particles/background/electron/Px', 'Particles/background/proton/Px'
and 'Particles/high_gamma/electron/Px'.
The 'background' blocks will contain 10% of the each species,
randomly selected.
The 'high_gamma' block will contain all the electrons with a gamma
greater than 1.3.
There will also be 'Particles/background/electron/Py' and
'Particles/background/proton/Py' block containing y-momentum for the same
10% random subset of particles.
Finally, the 'Particles/All/electron/Pz' and 'Particles/All/proton/Pz' will
contain the z-momentum for all particles.
The following restrictions can be specified in a 'subset' block:
random_fraction, {px,py,pz,weight,charge,mass,gamma}_{min,max},
x_{min,max}, y_{min,max} (2d), z_{min,max} (2d & 3d), dumpmask,
include_species.
* Added subset restrictions for particle IDs.
A range of particle IDs to dump can be specified in the "subset" block
using "id_min" and "id_max"
* Added single-precision output for EPOCH.
This adds a new 'single' field to the dumpmask, allowing
output variables to be converted to single precision when being
dumped to file. This is specified on a per-variable basis.
eg.
begin:output
dt_snapshot = 8 * femto
grid = always
ex = always
ey = always + single
end:output
In this example, the grid variable 'ex' will be written as a
double precision array and 'ey' will be converted to single
precision.
* Allow averages to be stored in single precision.
If the 'average_single' dumpmask is supplied to a variable
then the averaged data will be stored in a single precision
array throughout the simulation.
* Enable multiple "output" blocks in the input deck.
It is now possible to have multiple output blocks, each
with their own "dt_snapshot" or "nstep_snapshot" and their
own set of output variables.
The syntax remains the same as before with the addition of
"name" and "restartable" fields.
The "name" field specifies the file name to use for the output
list. Each time EPOCH generates an output dump, it writes an
entry into the file "<name>.visit". This can be used to find
all the output dumps of a specific output block.
The "restartable" field specifies that the output block should
generate ouput dumps containing all the information necessary
to restart a simulation.
* Added "npart_per_cell" to species blocks.
This patch adds the ability to specify the number of particles
per cell to use for the initial particle loading.
In the current implementation, "npart_per_cell" is a simple
integer constant. At a later stage this will be extended to
allow "npart_per_cell" to be a spatially varying function.
If per-species weighting is used then the value of
"npart_per_cell" will be the average number of particles per
cell. If "npart" or "frac" have also been specified for a species,
then they will be ignored.
To avoid confusion, there is no globally used "npart_per_species".
If you want to have a single value to change in the input deck
then this can be achieved using a constant block.
* Added thermal boundaries
* Ramped density in moving windows.
When the moving window is active, particles are injected into the
right-hand side of the domain as the domain moves to the left.
The density of the particle species being injected may now be a function
of space and time. The particles will adhere to this functional form.
* Improve MPI performance for particle redistribution.
Sending and receiving is now performed using red-black processor
ordering which is significantly faster.
* Don't write to disk in the load balancing routine.
The previous load balancer would write the field variables
to a file so that each processor can read back its new
domain. With this patch, the same functionality is obtained
using MPI calls. This will significantly increase performance.
* Added per-species and per-subset current diagnostic.
* Added distribution functions for the angle of particle momentum.
This adds the flags "dir_xy_angle", "dir_yz_angle" and "dir_zx_angle"
to the "dist_fn" block. These calculate the distribution of particle
momentum directions in the X-Y, Y-Z and Z-X planes.
* Added laser absorption diagnostic.
This adds a variable named "absorption" to the list of variables that
can be dumped to file. It accepts a dumpmask in the same manner as other
output variables. When selected, two numbers will be calculated and
written to file:
'Absorption/Laser_enTotal' - The total amount of energy injected into
the simulation by laser boundaries.
'Absorption/Abs_frac' - The fraction of this laser energy being absorbed
by the open boundaries.
* Added particle prefetching
Use Intel-specific 'mm_prefetch' calls to load next particle in the list
into cache ahead of time.
Enabled using the "-DPREFETCH" compiler flag.
* Added user-defined delay on particle push.
This adds the parameter "particle_tstart" to the "control" block which
specifies the time at which to start pushing particles.
* Added particle migration between species based on energy.
This adds two new parameters to the "control" block:
use_migration - Logical flag which determines whether or not to use
particle migration. The default is "F".
migration_interval - The number of timesteps between each migration event.
The default is 1 (migrate at every timestep).
The following parameters are added to the "species" block:
migrate - Logical flag which determines whether or not to consider this
species for migration. The default is "F".
promote_to - The name of the species to promote particles to.
demote_to - The name of the species to demote particles to.
promote_multiplier - The particle is promoted when its energy is greater
than "promote_multiplier" times the local average.
The default value is 1.
demote_multiplier - The particle is demoted when its energy is less
than "demote_multiplier" times the local average.
The default value is 1.
promote_density - The particle is only considered for promotion when
the local density is less than "promote_density".
The default value is HUGE.
demote_density - The particle is only considered for demotion when
the local density is greater than "demote_density".
The default value is 0.
* Added default compiler flags.
* Added "milli" to "atto" constants to the maths parser.
* Added NO_IO pre-processor directive.
This compiles the code so that no disk I/O is performed.
Useful for benchmarking.
* Variable listings in IDL have been moved to a separate routine.
Instead of the command "data=getdata(0,wkdir='Data',/variables)" you
should now use:
list_variables,0,'Data'
* The global variable "wkdir_global" has been removed from the IDL interface.
To set the default value for "wkdir" you must now use the command
"set_wkdir, wkdir". To view the currently set default value, use the
command "print,get_wkdir()".
* Added IDL widgets for interactively exploring SDF files.
Data can now be loaded via a GUI interface using the command:
data=explore_data('Data',snapshot=5)
First parameter is optional data directory
Simple plots can be viewed using the command:
quick_view,'Data',snapshot=5
The first parameter is optional data directory
* Multiple improvements to SDF C-library routines.
* Added basic python reader for SDF files.
* Split the grid in a more optimal way.
* Removed SPLIT_PARTICLES_AFTER_PUSH directive
* Added command-line arguments to sdf2ascii
* Added error handling to SDF files.
Bugfixes:
* Fix for particle load and derived data calculation
* Fix dump times
* Corrected "intensity_w_cm2" conversion factor.
* Fixed bugs in the load balancer.
* Fix parsing of input decks with no newline at the end.
* Changed "gen_src_module" to print less errors.
* Only regenerate embedded code when source code has changed.
* Fixed some issues building the embedded source module.
* Fixes for restarting from snapshots.
* Fixed enforcement of the "density_max" restriction.
* Enforce positive mass for particle species.
* Various fixes for the VisIt reader plugin.
* Write the correct units in output dumps.
* Fixes for VisIt build script.
* Improved portability of VisIt build script.
* Modify CFL condition for high order field solvers.
* Output Poynting flux when there are no particles.
* Don't write particle variables when there are no particles.
* Fixed calculation of dist_fns for parallel runs.
The spatial ranges for distribution functions was incorrectly
calculated, leaving gaps between grids when run in parallel.
* Fix timestep when restarting.
The value for "dt_plasma_frequency" is calculated using the
initial conditions which are never used when restarting.
To fix this, restart dumps now contain the value of
"dt_plasma_frequency".
* Fixed zero-gradient boundary conditions.
* Output dump files using both nstep_snapshot and dt_snapshot.
* Only require "dt_snapshot" or "nstep_snapshot"
The deck parsing routines were mistakenly requiring both
"dt_snapshot" and "nstep_snapshot" to be specified. Only
one of the two is required.
* Only require "dt_average" or "nstep_average"
The deck parsing routines were mistakenly requiring both
"dt_average" and "nstep_average" to be specified. Only
one of the two is required.
* Adjust averaging for "nsteps" less than "dt_snapshot".
Averaging failed to work if "nsteps" was specified
such that the job completed before the first proper output
dump. This code now adjusts the time at which averaging begins
accumulating data.
* Fix boundary conditions on moving windows.
Fixed the bug reported by Jurgen Boker in the CCPForge
help forum on 31/01/2012.
* Added equilibrium fields to bc calculations.
This fixes outflow and laser conditions when there is a background field.
* Allow missing particle species in restart dumps.
* Added missing nint,floor,ceil input deck functions.
* Always allocate the number of particles specified.
Before this patch, the code would round to the nearest number
of particles on each process. In cases where there was less than
one particle per process, no particles would be assigned.
In the case of tracer particles and a large number of processors,
it is not unreasonable to want less than one particle per
processor.
* Improved loading of particles for moving window.
The code now uses a real value for the species' npart_per_cell.
This allows the injected particle population to match the
one used in the initial conditions when there is not a fixed
number of particles per cell.
* Check for input deck strings which are too long.
The code now checks to see if an input deck string is too
long for the parser to handle and issues an error message
which explains how to fix it.
* Truncate strings which are too long for SDF.
* Various fixes for the python SDF reader.
Dictionary keys now use the name field instead of the ID,
making them behave more like the VisIt reader.
Useful fields from the header are now added to the dictionary.
File is closed and memory deallocated on object destruction.
* Avoid divide-by-zero in particle loading routine.
* Corrected the degrees of freedom for temperature calculation.
* Allow dumping of tracer particles for derived variables.
With this change, tracer particles are ignored when summing
over all particle species but not ignored when doing per-species
output. If the user wants to ignore tracer particles for
per-species output, this can be achieved using the dumpmask for
that species.
* Use more consistent naming for variables in dumps.
* Don't prepend "derived_" tags derived data.
* Fixes for outflow boundary conditions.
* Ensure that CPU splits are the same for all variables.
This fixes the "striping" bug when running VisIt in parallel.
* Updated constants with current values from NIST.
* Fixed potential issues with IDL keyword inheritance.
* Use consistent tag naming in SDF IDL reader.
* Added condition to catch potential divide by zero in data averaging.
* Fix current deposition bug for high order splines.
Since the particle push advances particles one and a half
timesteps whilst calculating current, it is sometimes necessary
to use a larger current array during this calculation.
* Fix 1D VisIt scatter plots.
* Fixed an issue with the deck parser.
When converting from an ASCII string to a numeric value, some
compilers will translate any occurrence of "t" or "f" into
true or false. This patch explicitly checks that the string is
a number before trying to convert it.
* Perform sanity checks on particle boundary conditions.
* Various other tidying and bugfixing
## v3.0.0 to v3.1.0 (2011-06-23)
Syntax changes:
* Added synonyms for averaging block parameters.
Two new names have been added to improve consistency with
the rest of the output block.
"dt_average" can be used in place of "averaging_period".
"nstep_average" can be used in place of "min_cycles_per_average".
* Added "intensity" synonym for "irradiance".
Also added missing *_w_cm2 specifiers for both.
* Use "dumpmask" for probes and particle species.
Changed the input deck syntax to be consistent with other
output blocks. "dumpmask" has the same meaning for probes and
species as it does for distribution functions and output blocks.
* Implemented "no_sum" dumpmask parameter.
By default derived particle variables are summed over all
species. If the "species" dumpmask parameter is given then
output is also generated on a per-species basis.
Adding "no_sum" to the dumpmask prevents the output
of the variable summed over all species.
Additions and changes:
* Added current smoothing routine to 1d and 3d versions.
* Issue a warning, not an error on dist_fn range.
In dist_fn blocks the range for spatial coordinates is never
used. Therefore the deck parser may as well allow the entry to
have invalid values.
* Tidied up example_decks and added new ones.
* Issue a warning when deck constants conflict with built-in ones.
* Changes to the behaviour of data averaging.
If "dt_average" is longer than "dt_snapshot" then dt_average
will be set equal to dt_snapshot rather than vice-versa.
Also, if the timestep is too large to satisfy "nstep_average"
then a warning will be printed rather than adjusting the timestep.
* Removed the normalised grids from dist_fn output.
* Added labels and units to dist_fn output.
Also added support for units in the VisIt plugin.
* Updated IDL reader to handle labels correctly.
* Detect file endianness in the IDL reader.
* Updated the load balancing routine.
This change takes into account the workload of the field solver
as well as the particle push. It also does a slightly better job
of dividing the work amongst processors.
Will hopefully prove a little more robust.
* Print a helpful message for deprecated deck strings.
* Simplified deck parsing process.
The input deck is now only parsed twice. The first time
it is called with deck_state set to "c_ds_first" and this pass
deals with anything that does not require pre-allocated memory.
On the second pass, deck_state is set to "c_ds_last" and this
deals with entries that could not be parsed in the first sweep.
* More particle push optimisations.
* Added particle heat flux and Poynting flux diagnostics
* Output a list of each type of output dump for VisIt.
The VisIt visualisation tool will accept a list of files
which belong together and make these available for plotting.
Since "normal", "full" and "restart" dumps each contain different
data, it is useful to have a list for each type.
This may also be useful for the other plotting libraries in future.
Bugfixes:
* Fixed typo in cone.deck examples.
* Fixed serious bug in particle loading routines.
A typo in the routine for testing valid cells meant that no
particles would get loaded.
* Fixed bug in maths parser for minus signs.
Deck constants are now identified using a new block type
constant "c_pt_deck_constant". This needs to be checked for
when deciding whether a minus sign is a unary or binary minus.
* Fixed a typo in the random number generator.
* Don't deallocate initial conditions until after manual_load.
* Use thermal particles in the "ramp.deck" example.
* Fix for calculating gamma-1 in dist_fn routines.
* Bugfixes for the MatLab reader.
There was a bug in setting up grid variables in MatLab which
has now been fixed.
It has also been changed to reduce the amount of output it
produces.
* Fixed typo in the restart dump reading routines.
* Use negative values to test for output.
The previous version uses HUGE() values for dt_snapshot and
nstep_snapshot by default. This can lead to overflow.
* Ignore cells of zero density in the autoloader.
* Fix long integer definitions in the maths parser.
* Start accumulating averaged variables at the correct time.
Since an output file can now be triggered by either "dt_snapshot"
or "nstep_snapshot", we need to test which one is due to occur
next and start accumulating an average in time for this.
* Make particle probes directional.
This change fixes particle probes so that they only track
particles which cross the plane in the direction corresponding
to the normal direction.
* Change default kinetic energy limits for probes.
Particle probes only track particles whose kinetic energy
falls within the specified range ek_min to ek_max. This fix
changes the default such that particles of any energy are tracked.
* Various other tidying and bugfixing
## v2.3.0 to v3.0.0 (2011-02-28)
Syntax changes:
* Added "eps0", "epsilon0" and "mu0" constants. These can now be used in
place of "epsilonnaught", etc.
* Renamed "freq" to "omega". Added "lambda".
Renamed both the input deck parameter and the name used in the
deck. Print a warning if "freq" is used in the deck.
Added "frequency" for specifying non-angular frequency.
Added "lambda" for specifying the laser wavelength in a vacuum.
* Made particle probe parameters consistent.
Previous versions had differing ways of specifying probes in
the input deck for each of epoch{1,2,3}d. They also had different
implementations in the code for testing if a particle had crossed
a probe.
They are now consistent. They are all specified using
a point in the plane and the normal vector to the plane. Particles
are recorded if they cross the plane in the direction of the normal
vector.
The points and normals are given using the following syntax:
point = (1,2.5,3)
normal = (0.5,1,0)
In 1d, both the above and scalar form are accepted:
point = 2.5
normal = 1
* Renamed "rho", "minrho", etc. to "density", "density_min", etc.
* There is now no distinction between the "constant" block and the "deo"
block. The "deo" block is now deprecated and will be removed at some
point.
* Removed the (currently unused) neutral_background option.
Syntax additions:
* Added "supergauss" function to the maths parser.
This is identical to the existing "gauss" function except that
it accepts a fourth parameter which is the power to raise the
argument to.
* Added "profile" to epoch1d lasers in the deck for consistency.
* Added temp_{x,y,z}_ev for specifying temperature in elecronvolts.
* Added "micron" constant. This is to help readability of units given in
microns. eg. "lambda = 1.06 * micron"
* Added "nstep_snapshot" entry to the output block of input.decks
This allows a user to specify the number of timesteps between
output dumps as well as the simulation time between dumps.
Both can be specified and they will both be tested for.
Also made "dt_snapshot" an optional parameter.
If "dt_snapshot" is not specified then it is not tested for.
If "nstep_snapshot" is not specified then it is not tested for.
* Added "dump_source_code" and "dump_input_decks" options.
These are logical flags which control whether or not source code
and input decks are written to restart dumps.
Additions and changes:
* Improved initial particle loading algorithm.
There are difficulties in smoothly assigning particle weights when
using per-particle weights and the density profile is discontinuous.
To fix this isssue the weight assignments in vacuum cells are now
reflected back into the non-vacuum area.
* Write per-species particle data
* Dump output to the new SDF format.
* Added SDF VisIt, IDL and MatLab readers.
* Use a less memory-hungry stack implementation.
* Adjusted polarization angle and defaults for lasers.
The polarization angle for a laser is now measured in a systematic
way with respect to the right-hand triad of propagation direction,
electric and magnetic fields. The previous version was somewhat random.
If the laser is on x_min then the default E field is in the y-direction
and the B field is the z-direction. The polarization angle is measured
clockwise about the x-axis with zero along the y-axis.
Similarly, for propagation directions:
y_min: angle about y-axis, zero along z-axis
z_min: angle about z-axis, zero along x-axis
x_max: angle anti-clockwise about x-axis, zero along y-axis
y_max: angle anti-clockwise about y-axis, zero along z-axis
z_max: angle anti-clockwise about z-axis, zero along x-axis
Also set new default values for lasers. The default end time is t_end
and the default profile is 1.0.
* Moved unnecessary files out of epochXd directories.
Also added the missing "include" directory to the source code
which gets packed by gen_src_module.
* Added comments to the Makefile
* Check that laser frequency and amplitude have been specified.
* Allow the code to still run if npart equals zero.
* Improved consistency of warning messages.
* Added constants for status file unit numbers.
* Only write deck parser diagnostics to one file.
* Only report missing options if they have been requested.
* Added a globally shared seed number for random number generation.
* Replaced random number generator with a better algorithm.
* Added default values for "nsteps", "t_end" and "dt_multiplier".
* Normalise particle momentum before doing the push.
This increases the accuracy of calculations and allows the code to
run in single precision.
* Various bugfixes
## v2.2.0 to v2.3.0 (2010-09-28)
* Added optional "use_random_seed" flag.
If this boolean flag is set to true in the control block of the
input deck then the pseudorandom number generation used for
particle placement will be seed using the system time. Otherwise
a predefined seed will be used, ensuring that results are exactly
reproducible.
* Allow the code to run with no particle species.
* Updated VisIt reader for VisIt 2.x
* Define x_min, x_max, etc. at grid boundaries.
The old version defined these values at cell centres which
meant that the domain ran from x_min-dx/2 to x_max+dx/2.
For most users this is unexpected behaviour.
The current fix also allows the code to run when nx=1.
* Made more input deck elements optional.
* Fix bug in creation of 1D MPI subtypes.
This is actually a bug in the OpenMPI romio implementation. It
was fixed in OpenMPI v1.4.2. This change is a work around for
the older versions.
* Fixed moving window bugs.
* Changed the random number generation algorithm.
* Fixed temperature diagnostics
* Fixed particle probe output.
This was broken as a result of the file locking patch.
* Added perfectly conducting boundaries.
These are specified using "bc_x_min=conduct" in the input deck.
They set the E-parallel and B-perpendicular to zero and the
gradient of B-parallel to zero in the perpendicular direction.
Particles reflect off the boundary.
* Changed the CFD routines to make them easier to use in other codebases.
* Added CFD reader for Matlab.
## v2.1.0 to v2.2.0 (2010-08-13)
* The fields_external and species_external blocks have been removed.
This functionality is now obtained by passing the external filename
in single or double quotes. eg:
rho='rhodata.dat'
will load rho from the external file named 'rhodata.dat'.
* The input deck has been changed to handle one species per block.
The old species, speciesn and species_externaln blocks have been removed.
Introduced new species block. One species block for each species
containing both basic properties and initial conditions. Example:
begin:species
charge=0.0
mass=1836.2 * 4
frac=1.0
name=helium
dump=T
rho=if(x gt 0.5e-5 and x lt 2.5e-5,\
den_min*exp((x-0.5e-5)/scale),rho(helium))
rho=if(x gt 2.5e-5, den_max, rho(helium))
rho=if(x lt 0.5e-5, 0.0, rho(helium))
rho_min=den_min
temp=0
end:species
Note that previously defined species properties such as "rho" can now be
referred to using the species name.
Syntax for new species block is combined mixture of syntax for old species
block (without the affixed species numbers) and syntax for old speciesn
blocks. If you need to go back and modify a species after creation
(initial conditions changes etc) then you can specify a new species block
with the same name.
For example:
begin:species
name=helium
rho=rho(helium) * 10.0
end:species
This will modify the "helium" species, leaving all species unchanged except
for "rho" which is made ten times bigger.
species_externaln blocks have been eliminated. To specify a property to be
initialised by the values in an external file you now just give the filename
in quotes. For example:
begin:species
name=helium
rho='data.dat'
end:species
Species used for calculating distribution function output diagnostics are
now specified by name rather than number. For example:
begin:dist_fn
include_species:helium
end:dist_fn
Changed the deck parser to allow names with trailing numbers.
* Allow separate particle and field boundary conditions.
These are specified using "bc_x_min_field", "bc_x_min_particle", etc.
* Added "reflect" and "open" boundary conditions to input deck
* Added "gamma" to the distribution functions.
* Allow the writing of timestep info to stdout.
This is enabled by specifying "stdout_frequency" in the input deck
control block. The info is written after every "stdout_frequency" number
of timesteps.
* Added log functions to the maths parser.
"loge" and "log10" take one argument and give the natural log and base10
log, respectively. "log_base" takes two arguments, the second being the
base to use for the logarithm.
* Added nprocx/y/z parameters to the input deck. These specify the number
of processors to use in the x/y/z directions.
* The example input.deck has been moved to the example_decks directory.
* The timestep data is now written to the CFD file header rather than
its own separate block. If you have a custom reader then you will need
to modify it to account for the change.
All users will need to recompile the VisIt reader plugin.
* Removed 'nfs:' from filenames. This allows EPOCH to work on a wider range
of filesystems.
* Removed partial writes in output_particle routines.
This avoids file locking which in turn fixes I/O on
most Lustre filesystems.
* Fixed coefficients for 6th order field derivatives.
* Fixed particle weight coefficients.
* Fix initial temperature distribution calculation.
* Fixed laser boundary conditions.
* Clamp currents to zero whenever E field is clamped.
* Don't load particles into ghost cells.
* Fixes to correctly restart from restart dumps.
* Fix compilation with older versions of gfortran.
* Fixed bug when writing arrays larger than 2GB.
* Added current to the restart dumps.
* Write all particle species into restart dumps and not only those which
have been asked for.
* Only write warning messages on rank 0
* Fixed some non-standard F90
* Various minor bugfixes
* More small optimisations to particle push.
* Made 1d,2d and 3d versions more consistent.
* Added top-hat particle weighting. Not fully tested.
* Allow grids which cannot be exactly divided across processes.
## v2.0.0 to v2.1.0 (2010-04-16)
* Various minor bug fixes.
* VisIt reader changes.
Read endianness and other new CFD header items.
Improve startup speed.
Added more debug info.
* Fix bugs in the particle push discovered with the two-stream instability
problem.
* Fix compilation when PER_PARTICLE_WEIGHT is not used.
* Added pol_angle for specifying polarisation angle in radians.
* Use the names "x_min", "x_max", etc. instead of "left", "right"
* Made the building of encoded_source slightly more robust.
* Fixed up the encoded_source routines to comply with Fortran90's limit of
39 continuation lines.
* Dump files at end of timestep.
================================================
FILE: CODING_STYLE
================================================
This codebase conforms to a single, consistent coding style which is
outlined in the following text. New submissions will be rejected if they
do not conform to this style.
The most important rules are the following:
All code must conform to the Fortran 95 standard (ISO/IEC 1539-1: 1997).
Fortran 2003 is allowed for all features which have wide compiler support,
as outlined in the table found at the following URL:
http://fortranwiki.org/fortran/show/Fortran+2003+status
In particular, Cray, gfortran, IBM, Intel and PGI compilers must all have full
support for the language feature. At present, this excludes the following
Fortran 2003 extensions:
- Parameterized derived types
- Support for international character sets
- Derived type I/O
All Fortran keywords and intrinsics are uppercase, user-defined
function, subroutine and variable names are lowercase.
- One exception to this rule is the MPI libraries. For this, both constants
and routine names are uppercase.
All function and subroutine blocks are separated by three blank lines.
Within the rest of the code body there should never be more than one
consecutive blank line.
Indentation is two spaces. Continuation lines are indented by four spaces.
Comments should follow the same indentation as code.
All code lines must be 80 columns or less. This includes comments.
A comma is always followed by a space with the exception of array indexing.
The equals sign in assignments is always surrounded by whitespace.
Lines must not contain trailing whitespace.
Lines must not contain tab characters.
Use 'END IF' and 'END DO' instead of 'ENDIF' and 'ENDDO'.
Use F90-style binary operators instead of F77 ones. eg. use '=='
instead of '.EQ.'.
Variable names must not clash with Fortran keywords.
If a line is split on an operator, the operator should appear at the
beginning of the continuation line rather than at the end of the split line.
For all other matters of coding style, try to match the style used throughout
the rest of the code.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributions
All contributions are welcome. EPOCH is designed to be flexible and
general purpose, so changes should not affect code correctness
in the general case. For this reason most capability is in the form of
physics packages and a minimal number of conditional calls.
Wherever possible we maintain "exact" matching
of answers between minor versions, and strict backwards compatibility.
EPOCH development and maintenance
is ongoing, so please search for open issues at
https://github.com/Warwick-Plasma/epoch/issues
and consider creating an issue
with the enhancement tag before starting anything to avoid
duplication of effort. The development team is quite busy, so please allow
time for responses and code review.
# How to Contribute
In general, contributions should be created as branches and pushed to either
the main EPOCH repository or to a private fork made available to the
developers. In the former case the branch name should begin with your name.
**Branches in the main repository will be deleted after merge** so if you
wish to preserve your branch, it is best to work on a fork.
Once your branch is ready, rebase your changes onto the latest version of
of the devel branch and create a merge request.
**Submit all merge requests against the devel branch.**
If your contribution adds facility to the input deck, provide a short example
in the merge request. If it fixes issues or bugs, please reference them
by id (such as "Fixes issue #1591"). This will enable the issue to be
automatically closed once the branch has been merged.
Note that by submitting your changes for inclusion into EPOCH, you are
implicitly accepting that these will be included under the same licensing
terms as the rest of the code (GPL v3).
# Full Access
For developer access to the main EPOCH repositories, please contact
<cfsa.gitlab+admin@gmail.com>.
For small fixes patches can be offered via the issue tracker which can
be found at https://github.com/Warwick-Plasma/epoch/issues
# Coding Style
This codebase conforms to a single, consistent coding style which is
outlined in the CODING_STYLE document in the root directory.
New submissions will be rejected if they
do not conform to this style.
In particular, please note that all code must conform to the Fortran F95
standard (ISO/IEC 1539-1: 1997), and keep all lines, including comments, to
less than 80 characters long.
Please also follow the standard commit-message format.
The first line is the subject, and should generally be less than 50 characters.
The second line must be blank. Any text here is ignored.
The subsequent lines are the message body, and should generally be less
than 72 characters. You can use as many lines as you like, but be concise.
# Physics Packages
EPOCH is designed to be modular and extensible. Adding physics capability
should be done via a physics package in the physics_packages subdirectory
which can then be used
in the main code. Conditional compilation (#ifdef) should be used
**only if absolutely necessary**, such as for speed critical sections of code.
Where possible, all control should be via the input deck. Backwards
compatibility must be preserved.
Documentation will be required in Latex format.
This should cover any changes to the input deck blocks or keys, any general
limitations of the code or methods and if possible links to any methods
papers or description.
================================================
FILE: CONTRIBUTORS.md
================================================
Alexander Blinne <A.Blinne@gsi.de>
Alexander Seaton <A.Seaton@warwick.ac.uk>
Alex Arefiev <alexey@austin.utexas.edu>
Alistair Lawrence-Douglas <a.a.lawrence-douglas@warwick.ac.uk>
Ben McMillan <B.F.McMillan@warwick.ac.uk>
Chris Brady <C.S.Brady@warwick.ac.uk>
David Schinkel <david.schinkel@uni-jena.de>
Heather Ratcliffe <H.Ratcliffe@warwick.ac.uk>
Holger Schmitz <holger.schmitz@stfc.ac.uk>
Jiří Vyskočil <jiri@vysko.cz>
Keith Bennett <k.bennett@warwick.ac.uk>
Martin Ramsay <M.G.Ramsay@warwick.ac.uk>
Phil Tooley <phil.tooley@gmail.com>
Stephan Kuschel <stephan.kuschel@gmail.com>
Stuart Morris <sjm630@york.ac.uk>
Tom Goffrey <t.goffrey@warwick.ac.uk>
================================================
FILE: DOCUMENTATION
================================================
EPOCH documentation is hosted at the following URL:
https://epochpic.github.io/
Additional information may be found in the original user and developer manuals, found here:
https://github.com/Warwick-Plasma/EPOCH_manuals/releases
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
# EPOCH instructions
To clone this repository from GitHub, use the command:
```
git clone --recursive https://github.com/Warwick-Plasma/epoch.git
```
The "--recursive" flag is important, as this is required to download the SDF
subdirectory used for writing the data.
Do not use the use the "Download zip" buttons, as they will miss the SDF
subdirectory.
A list of the EPOCH releases may be found
[here](https://github.com/Warwick-Plasma/epoch/releases)
EPOCH documentation is currently hosted on
[https://epochpic.github.io/](https://epochpic.github.io/)
Users and developers may also find the original EPOCH manuals useful, which
are hosted [here](https://github.com/Warwick-Plasma/EPOCH_manuals/releases)
All EPOCH development is carried out using the [git](https://git-scm.com)
revision control system. The master repository is hosted on a web-based
collaborative development site
[here](https://github.com/Warwick-Plasma/epoch)
Further details on this are provided below.
## Compiling the code
The "Releases" section of the GitHub site contains files in the form
"epoch-4.4.5.tar.gz". These are tarred and gzipped packages of the code
which can be unpacked with the command `tar xzf epoch-4.4.5.tar.gz`.
This will create a directory called "epoch-4.4.5".
Within this directory there are various epochXd subdirectories, each of which
has a "Makefile" containing the instructions for compiling the code.
Many people will be used to editing Makefiles by hand in order to set them up
for their own working environment. However, this is not the recommended way
of working with the EPOCH codebase. In theory, all the changes necessary for
compiling EPOCH on any given environment should be possible using command-line
variables.
For most setups, it should only be necessary to set the COMPILER variable to
correspond to the Fortran compiler to be used. This can either be set as an
option to the "make" command or as an environment variable.
For example, to compile the code using Intel's "ifort" Fortran compiler, you
can either type the following:
```
$> make COMPILER=intel
```
or alternatively:
```
$> export COMPILER=intel
$> make
```
In these two examples `$>` represents the terminal's command-line prompt.
After compilation is complete, the binary file will be created in "bin/epochXd",
where X is 1, 2 or 3.
Since most people will always be using the same compiler on a specific machine,
it is often easiest to just add the line `export COMPILER=intel` to your shell
script initialisation file (ie. "$HOME/.bashrc" on most modern UNIX machines).
The actual compiler command used is the MPI fortran wrapper. On nearly all
machines, this is called "mpif90" and so this is what is used by default.
Occasionally, some machines will call it something different. For example,
Intel's MPI wrapper script is sometimes called "mpiifort". If your machine has
such a setup, you can set the name of the wrapper script using the variable
MPIF90. For example:
```
$> make COMPILER=intel MPIF90=mpiifort
```
Again, it is often easiest to add the line `export MPIF90=mpiifort` to your
$HOME/.bashrc file.
Finally, there are two more variables which can be used to control the options
used when building the code.
Setting "MODE=debug" will build the code with optimisation disabled and
debugging flags turned on. If this variable is not set then the default is to
build a fully optimised version of the code.
There are several pre-processor flags which can be passed at compile-time to
change the behaviour of the code. These flags are described in the Makefile
with the lines beginning "#DEFINES += " and they are commented out by default.
Rather than uncommenting these lines, it is possible to set them on the
command-line using the "DEFINE" variable. For example, to compile a
single-precision version with global particle IDs you would type:
```
$> make DEFINE="-DPARTICLE_ID -DSINGLE"
```
## COMPILING SDF AND THE VISIT READER
The EPOCH codes use a self-describing file format called SDF. The routines
used in reading and writing such files, along with reader plugins for Matlab,
IDL, python and VisIt are contained in the SDF directory.
The library used by EPOCH for reading and writing the files is automatically
built when you first build EPOCH. However, it is important to note that
whenever you rebuild EPOCH, the SDF library is NOT rebuilt by default. It is
also not removed when you type "make clean". Most of the time, this is what
you want since rebuilding the library adds a significant amount of time to
the compilation of the code. However, occasionally you might want to force the
library to be rebuilt, such as when you switch compilers. To accomplish this
you must first type "make cleanall" which will remove the existing library and
it will then get rebuilt next time you type "make".
In order to visualise data using the VisIt program, you must first build the
SDF VisIt reader plugin. As a pre-requisite, you must have the VisIt binary
in your shell's search path. You can check this by typing:
```
$> visit -version
```
which should return with a message such as "The current version of VisIt is .."
If instead you get "visit: command not found" then you may need to edit your
PATH environment variable appropriately. Your system administrator should be
able to help.
Next you will need to ensure that you have a C++ compiler (preferably GNU g++)
and CMake. Again, you can check these using `g++ --version` and
`cmake -version`. Note that the appropriate version of these utilities may
depend on the version of VisIt that you have installed.
Once these pre-requisites have been met, you should be able to build the
reader plugin by typing `make visit`. You do not need to do this again unless
you upgrade your version of the VisIt utility. It is rare that any changes to
EPOCH will require an update of the VisIt reader, but if you do start to
encounter errors when reading SDF files then you can try rebuilding the reader
using the commands `make visitclean` followed by `make visit`.
Note that older versions of EPOCH used the CFD format. This is now obsolete
and current versions of the code no longer contain any reader plugin for this
format. However, existing installations of the VisIt CFD plugin will happily
co-exist with the SDF plugin and issuing `make visitclean` will not remove
such plugins.
## WORKING WITH THE GIT REPOSITORY
For more advanced users, the code is also hosted on a git repository. There is
quite a steep learning curve for using git, so using this repository is only
recommended for more advanced users who are comfortable that they can deal with
a "git conflict".
One other added complication, is that the EPOCH repository also uses git
submodules for tracking the SDF file format. This adds an extra source of
possible issues. However, once a workflow is established it can all be quite
straightforward to work with.
To perform an initial checkout of the code using git, you should issue the
following command:
```
git clone --recursive https://github.com/Warwick-Plasma/epoch.git
```
The "--recursive" flag ensures that not only the "epoch"
repository is checked out, but also the "SDF" submodules.
It is recommended that after checking out a copy of the git repository, users
immediately create a new working branch and leave the default "master" branch
untouched. A new branch can be created and switched to with the command
`git checkout -b work`.
When you wish to update to the latest version, do the following sequence of
actions. First, commit or stash any changes you have made in your "work"
branch. Next, switch to the "master" branch with
`git checkout master`. Now pull the changes with `git pull`,
followed by `git submodule update --recursive`.
At this stage your "master" branch should be fully up to date.
Merging the new version in with your "work" branch is prone to error, so it
is recommended that you create a temporary copy of this branch just in case
everything goes wrong. The command "git branch workold work" will
create a branch named "workold" which is just a copy of "work". This branch
can be deleted once the merge is completed successfully. If everything goes
wrong in the "work" branch, you can reset it back to the original using the
command `git reset --hard workold`.
In order to update your work branch, switch back to it with
`git checkout work` and merge in the changes with `git merge master`.
After issuing this last command, there is a fair chance that you will encounter
conflicts. You must now resolve those conflicts and commit the changes.
After successfully merging in the changes, you can now delete the temporary
copy of your work branch with `git branch -D workold`.
================================================
FILE: epoch1d/.gitignore
================================================
bin
obj
COMMIT
USE_DATA_DIRECTORY
# ignore files generated by examples
tests/**/*.sdf
tests/**/*.visit
tests/**/*.png
tests/**/epoch[1,2,3]d.dat
tests/**/deck.status
tests/*/__pycache__
tests/*.py[cod]
================================================
FILE: epoch1d/Data/.gitignore
================================================
*.sdf
*.cfd
*.dat
*.status
*.deck
*.visit
================================================
FILE: epoch1d/Makefile
================================================
# Specify a particular compiler with "make COMPILER=pgi", etc.
# Specify debugging flags with "make MODE=debug"
# If floating-point consistency is required then set the flag "CONS=1"
# - This prevents the code from using extended 80-bit precision which is
# incapable of generating exactly reproducible results in parallel
# Alternatively, these options can be specified as environment variables
# eg. "export COMPILER=gfortran" can be added to $HOME/.bashrc
# Compiler specific flags
# Note: you MUST specify a COMPILER option. None are specified by default.
ifeq ($(strip $(COMPILER)),)
MAKECMDGOALS = error
CMP_GUESS = $(shell ../scripts/infer_compiler.sh)
error:
@echo '*** ERROR ***'
@echo 'You MUST set a value for the COMPILER variable'
@printf " *?* It looks like you're using "
@printf $(CMP_GUESS)
@echo " *?*"
@printf ' so try "make COMPILER='
@printf $(CMP_GUESS)
@echo '"'
@printf 'Alternatively, you can add "export COMPILER='
@printf $(CMP_GUESS)
@echo '" to $$HOME/.bashrc'
@exit 1
endif
D = -D
ifeq ($(strip $(COMPILER)), auto)
override COMPILER := $(shell ../scripts/infer_compiler.sh)
NEWMAKEFLAGS := "$(filter-out COMPILER=auto, $(MAKEFLAGS))"
$(warning Inferred compiler as $(COMPILER))
endif
# PGI
# ===
ifeq ($(strip $(COMPILER)),pgi)
FFLAGS = -r8 -fast -fastsse -O3 -Mipa=fast,inline -Minfo # Optimised
ifeq ($(strip $(MODE)),debug)
FFLAGS = -Mbounds -g # Debug
endif
MODULEFLAG = -module $(OBJDIR)
endif
# Intel
# =====
ifeq ($(strip $(COMPILER)),intel)
FFLAGS = -O3 -g -stand f03
ifeq ($(strip $(CONS)),1)
FLTCONS = -pc64 -fltconsistency
endif
#FFLAGS = -O3 -heap-arrays 64 -ipo -xHost # Optimised (B)
#FFLAGS = -O3 -heap-arrays 64 -ipo -xAVX # Optimised (W)
ifeq ($(strip $(MODE)),debug)
FFLAGS = -O0 -fpe0 -nothreads -traceback -fltconsistency \
-C -g -heap-arrays 64 -warn all -warn errors -fpic
ifeq ($(strip $(SYSTEM)),Darwin)
FFLAGS += -Wl,-no_pie
endif
endif
MODULEFLAG = -module $(OBJDIR)
endif
# gfortran
# ========
ifeq ($(strip $(COMPILER)),gfortran)
FFLAGS = -O3 -g -std=f2003
GNUVER := $(shell gfortran -dumpversion | head -1 \
| sed 's/[^0-9\.]*\([0-9\.]\+\).*/\1/')
GNUMAJOR := $(shell echo $(GNUVER) | cut -f1 -d\.)
GNUMINOR := $(shell echo $(GNUVER) | cut -f2 -d\.)
# Allow for 99 minor revisions
GNUVER := $(shell expr 100 \* $(GNUMAJOR) + $(GNUMINOR))
# gfortran-4.9
GNUGE49 := $(shell expr $(GNUVER) \>= 409)
ifeq "$(GNUGE49)" "1"
FFLAGS += -ffpe-summary=invalid,zero,overflow
endif
ifeq ($(strip $(MODE)),debug)
FFLAGS = -O0 -g -std=f2003 -Wall -Wextra -pedantic -Wno-unused-parameter \
-Wno-unused-dummy-argument -Wno-integer-division \
-ffree-line-length-80 -fcheck=all -fbacktrace -Werror \
-ffpe-trap=invalid,zero,overflow -fbounds-check
#FFLAGS += -ffpe-trap=underflow,denormal
# gfortran-4.3
GNUGE43 := $(shell expr $(GNUVER) \>= 403)
ifeq "$(GNUGE43)" "1"
FFLAGS += -fbacktrace -fdump-core
# gfortran-4.6
GNUGE46 := $(shell expr $(GNUVER) \>= 406)
ifeq "$(GNUGE46)" "1"
FFLAGS += -Wno-unused-dummy-argument
# gfortran-4.8
GNUGE48 := $(shell expr $(GNUVER) \>= 408)
ifeq "$(GNUGE48)" "1"
FFLAGS += -Wno-target-lifetime -fno-realloc-lhs
endif
endif
endif
endif
MODULEFLAG = -I$(OBJDIR) -J$(OBJDIR)
ifneq ($(wildcard /usr/include/.),)
MODULEFLAG += -I/usr/include
endif
INFO_FLAGS = -Wno-conversion -fno-range-check
endif
# g95
# ========
ifeq ($(strip $(COMPILER)),g95)
FFLAGS = -O3
ifeq ($(strip $(MODE)),debug)
FFLAGS = -O0 -g # Debug
endif
MODULEFLAG = -fmod=$(OBJDIR)
endif
# IBM Bluegene
# ============
ifeq ($(strip $(COMPILER)),ibm)
FFLAGS = -O5 -qhot -qipa # Optimised
ifeq ($(strip $(MODE)),debug)
FFLAGS = -O0 -C -g -qfullpath -qinfo #-qkeepparm -qflttrap \
-qnosmp -qxflag=dvz -Q! -qnounwind -qnounroll # Debug
#FFLAGS = -O0 -qarch=qp -qtune=qp
#FFLAGS = -qthreaded -qsmp=noauto -qsmp=omp # Hybrid stuff
endif
MODULEFLAG = -I$(OBJDIR) -qmoddir=$(OBJDIR)
MPIF90 ?= mpixlf90_r
# IBM compiler needs a -WF to recognise preprocessor directives
D = -WF,-D
endif
# ARCHER (also works for HECToR)
# ========
ifeq ($(strip $(COMPILER)),archer)
FFLAGS = -O3 -hipa2
ifeq ($(strip $(MODE)),debug)
FFLAGS = -O0 -g -ea -ec -eC -eD -eI -en -hfp_trap -Ktrap=fp -m0 -M1438,7413
endif
MODULEFLAG = -em -I/usr/include -I$(OBJDIR) -J$(OBJDIR)
MPIF90 ?= ftn
endif
# Don't compile encoded source if MODE=debug or ENC=no
# Do compile encoded source if MODE=debug and ENC=yes
ifeq ($(strip $(ENC)),no)
ENCODED_SOURCE = epoch_source_info_dummy.o
else
ifneq ($(strip $(ENC)),yes)
ifeq ($(strip $(MODE)),debug)
ENCODED_SOURCE = epoch_source_info_dummy.o
endif
endif
endif
MPIF90 ?= mpif90
FFLAGS += -I$(SDF)/include
FFLAGS += $(MODULEFLAG)
LDFLAGS = $(FFLAGS) -L$(SDF)/lib -lsdf
# Set some of the build parameters
TARGET = epoch1d
# Set pre-processor defines
DEFINES := $(DEFINE)
# The following are a list of pre-processor defines which can be added to
# the above line modifying the code behaviour at compile time.
# Set every pseudoparticle in a species to represent the same number of
# real particles.
#DEFINES += $(D)PER_SPECIES_WEIGHT
# Don't enable support for zero-current particles (in order to make the
# particle push slightly faster).
# Zero-current particles which behave like normal particles but do not affect
# the field, current or each other.
# WARNING: These particles may not behave in the way you might expect. See the
# documentation for further details. This flag will be renamed to
# ZERO_CURRENT_PARTICLES in version 5.0
#DEFINES += $(D)NO_TRACER_PARTICLES
# Don't enable support for particle probes (in order to make the particle
# push slightly faster).
# Particle probes are diagnostics which gather information on particles which
# cross a plane in the simulation.
#DEFINES += $(D)NO_PARTICLE_PROBES
# Probes will also output the time particles cross the probe
#DEFINES += $(D)PROBE_TIME
# Use second order particle weighting (default is third order).
#DEFINES += $(D)PARTICLE_SHAPE_TOPHAT
# Use fifth order particle weighting (default is third order).
#DEFINES += $(D)PARTICLE_SHAPE_BSPLINE3
# Include a unique global particle ID. The first flag defines the ID using
# an 8-byte integer, the second uses 4-bytes.
#DEFINES += $(D)PARTICLE_ID
#DEFINES += $(D)PARTICLE_ID4
# Include QED routines
#DEFINES += $(D)PHOTONS
# Use the Trident process for pair production
#DEFINES += $(D)TRIDENT_PHOTONS
# Include bremsstrahlung routines
#DEFINES += $(D)BREMSSTRAHLUNG
# Use Intel-specific 'mm_prefetch' calls to load next particle in the list
# into cache ahead of time. Gives ~10% speed-up with Intel 12 compilers.
# WARNING: Under some circumstances this causes SEGFAULTS or incorrect results
#DEFINES += $(D)PREFETCH
# Turn on debugging.
#DEFINES += $(D)PARSER_DEBUG $(D)PARTICLE_DEBUG $(D)MPI_DEBUG $(D)SIMPLIFY_DEBUG
# Don't generate any output at all. Useful for benchmarking.
#DEFINES += $(D)NO_IO
# Track ionisation/recombination rates on each particle
#DEFINES += $(D)TRANSITION_RATES
# Specify charge and mass per particle rather than per species.
# This is a legacy option which will be removed soon.
#DEFINES += $(D)PER_PARTICLE_CHARGE_MASS
# Perform checks on evaluated deck expressions.
# This slows down the code but may be required if floating point exceptions
# are enabled.
#DEFINES += $(D)PARSER_CHECKING
# Disable the use of isatty C call to enable coloured welcome banner
#DEFINES += $(D)NO_USE_ISATTY
# Compile the delta-f version of EPOCH
#DEFINES += $(D)DELTAF_METHOD
# Debugging option for delta-f
#DEFINES += $(D)DELTAF_DEBUG
# The time integrated work exerted on each particle requires another variable
# that has to be calculated every time step. This will slow down the simulation!
#DEFINES += $(D)WORK_DONE_INTEGRATED
# Higuera-Cary push
#DEFINES += $(D)HC_PUSH
# Disable MPI3 features
#DEFINES += $(D)NO_MPI3
# Set options for debugging deck
# Sets warning messages to be errors
#DEFINES += $(D)DECK_DEBUG
# If you are having trouble compiling the encoded_source module or
# don't want embedded source code in restart dumps, uncomment the
# following line.
#ENCODED_SOURCE = epoch_source_info_dummy.o
# Automatically add -DPARSER_CHECKING for debug builds
ifeq ($(strip $(MODE)),debug)
DEFINES += $(D)PARSER_CHECKING
DEFINES += $(D)DECK_DEBUG
endif
# --------------------------------------------------
# Shouldn't need to touch below here
# --------------------------------------------------
ENCODED_SOURCE ?= epoch_source_info.o
all: main
SDF := ../SDF/FORTRAN
SDFMOD = $(SDF)/include/sdf.mod
SRCDIR = src
OBJDIR = obj
BINDIR = bin
INCDIR = $(SRCDIR)/include
FC = $(MPIF90)
DATE := $(shell date +%s)
MACHINE := $(shell uname -n)
PREPROFLAGS = $(DEFINES) $(D)_COMMIT='"$(COMMIT)"' $(D)_DATE=$(DATE) \
$(D)_MACHINE='"$(MACHINE)"' -I$(INCDIR)
FC_INFO := $(shell ${FC} --version 2>/dev/null \
|| ${FC} -V 2>/dev/null | grep '[a-zA-Z]' | head -n 1)
SRCFILES = background_collisions.F90 balance.F90 bethe_heitler.F90 \
boundary.F90 bremsstrahlung.F90 calc_df.F90 collisions.F90 \
collision_ionise.F90 constants.F90 current_smooth.F90 custom_deck.f90 \
custom_laser.f90 custom_parser.f90 deck.F90 deck_boundaries_block.f90 \
deck_bremsstrahlung_block.F90 deck_collision_block.F90 \
deck_constant_block.f90 deck_control_block.F90 deck_dist_fn_block.f90 \
deck_fields_block.f90 deck_injector_block.F90 deck_io_block.F90 \
deck_io_global_block.F90 deck_laser_block.f90 deck_part_from_file_block.F90 \
deck_particle_probe_block.F90 deck_qed_block.F90 deck_species_block.F90 \
deck_stencil_block.f90 deck_subset_block.F90 deck_window_block.f90 \
deltaf_loader.F90 diagnostics.F90 dist_fn.F90 epoch1d.F90 evaluate.F90 \
evaluator_blocks.F90 fields.f90 file_injectors.F90 finish.f90 helper.F90 \
ic_module.f90 injectors.F90 ionise.F90 iterators.F90 laser.f90 \
mpi_routines.F90 mpi_subtype_control.f90 numerics.f90 particle_id_hash.F90 \
particle_migration.F90 particle_pointer_advance.f90 particle_temperature.F90 \
particles.F90 partlist.F90 photons.F90 prefetch.F90 probes.F90 \
random_generator.f90 recombination.F90 redblack_module.f90 \
secondary_list.F90 setup.F90 shape_functions.F90 shared_data.F90 shunt.F90 \
simple_io.F90 stack.f90 strings.f90 strings_advanced.f90 \
terminal_controls.F90 timer.f90 tokenizer_blocks.f90 utilities.f90 \
version_data.F90 welcome.F90 window.F90
OBJFILES := $(SRCFILES:.f90=.o)
OBJFILES := $(OBJFILES:.F90=.o)
INCLUDES = $(INCDIR)/particle_head.inc $(INCDIR)/particle_to_grid.inc \
$(INCDIR)/bspline3/b_part.inc $(INCDIR)/bspline3/e_part.inc \
$(INCDIR)/bspline3/gx.inc $(INCDIR)/bspline3/gxfac.inc \
$(INCDIR)/bspline3/hx_dcell.inc \
$(INCDIR)/tophat/b_part.inc $(INCDIR)/tophat/e_part.inc \
$(INCDIR)/tophat/gx.inc $(INCDIR)/tophat/gxfac.inc \
$(INCDIR)/tophat/hx_dcell.inc \
$(INCDIR)/triangle/b_part.inc $(INCDIR)/triangle/e_part.inc \
$(INCDIR)/triangle/gx.inc $(INCDIR)/triangle/gxfac.inc \
$(INCDIR)/triangle/hx_dcell.inc
OBJFILES := $(OBJFILES) $(ENCODED_SOURCE)
FULLTARGET = $(BINDIR)/$(TARGET)
SOURCE_ALL := Makefile $(SRCFILES) $(INCLUDES) pack.py pack.sh \
$(SRCDIR)/COMMIT $(SRCDIR)/gen_commit_string.sh epoch_source_info_dummy.f90
VPATH = $(SRCDIR):$(SRCDIR)/deck:$(SRCDIR)/housekeeping:$(SRCDIR)/io:\
$(SRCDIR)/parser:$(SRCDIR)/physics_packages:$(SRCDIR)/user_interaction:\
$(SDF)/src:$(OBJDIR)
PACK_SDF = $(SRCDIR)/pack.sh
GIT_WORK_TREE = ".."
PACK_PREFIX = epoch
PACK_SOURCE_CODE = 1
PACK_GIT_DIFF = 1
PACK_GIT_DIFF_FROM_ORIGIN = 1
GENERATE_CHECKSUM = 1
F77_OUTPUT = 0
PACK_OPTS = $(GIT_WORK_TREE) $(PACK_PREFIX) $(PACK_SOURCE_CODE) \
$(PACK_GIT_DIFF) $(PACK_GIT_DIFF_FROM_ORIGIN) $(GENERATE_CHECKSUM) \
$(F77_OUTPUT)
-include $(SRCDIR)/COMMIT
ifeq ($(DONE_COMMIT),)
main: commit
else
main: $(FULLTARGET)
endif
# Rule to build the fortran files
%.o: %.f90
$(FC) -c $(FFLAGS) -o $(OBJDIR)/$@ $<
%.o: %.F90
$(FC) -c $(FFLAGS) -o $(OBJDIR)/$@ $(PREPROFLAGS) $<
$(FULLTARGET): $(OBJFILES)
@mkdir -p $(BINDIR)
$(FC) -o $@ $(addprefix $(OBJDIR)/,$(OBJFILES)) $(LDFLAGS)
$(OBJDIR)/epoch_source_info.f90: $(SOURCE_ALL)
sh $(PACK_SDF) $(PACK_OPTS) $@ "$(FC_INFO)" "$(FFLAGS)" $^
epoch_source_info.o: $(OBJDIR)/epoch_source_info.f90 $(SOURCE_ALL)
$(FC) -c $(FFLAGS) $(INFO_FLAGS) -o $(OBJDIR)/$@ $<
$(SDFMOD):
$(MAKE) MAKEFLAGS=$(NEWMAKEFLAGS) COMPILER=$(COMPILER) -C $(SDF)
rm:
@rm -rf $(BINDIR) $(OBJDIR)
clean: tidy
cleanall: tidy
@rm -rf $(BINDIR)
tidy:
@rm -rf $(OBJDIR) *~ *.pbs.* *.sh.* $(SRCDIR)/*~ *.log
$(MAKE) -C $(SDF) cleanall
datatidy:
@rm -rf Data/*
tarball:
@cd ..; sh ./scripts/make_tarball.sh
visit:
@cd $(SDF)/../VisIt; ./build
visitclean:
@cd $(SDF)/../VisIt; make clean; ./build -c; \
rm -rf .depend *.d *Info.C *Info.h CMake* cmake* Makefile
sdfutils:
@cd $(SDF)/../C; make
@cd $(SDF)/../utilities; ./build.sh
sdfutilsclean:
@cd $(SDF)/../C; make clean
@cd $(SDF)/../utilities; ./build.sh -c
sdf_reader_example: $(BINDIR)/sdf_reader_example
$(BINDIR)/sdf_reader_example: sdf_reader_example.f90 $(SDFMOD)
@mkdir -p $(BINDIR) $(OBJDIR)
$(FC) -o $@ $< $(LDFLAGS)
$(OBJFILES): | $(OBJDIR)
$(OBJDIR):
@mkdir -p $(OBJDIR)
commit: FORCE
@sh $(SRCDIR)/gen_commit_string.sh && $(MAKE) $(MAKECMDGOALS) DONE_COMMIT=1
FORCE:
.PHONY: commit clean cleanall tidy datatidy visit visitclean main FORCE \
sdf_reader_example
# All the dependencies
background_collisions.o: background_collisions.F90 calc_df.o partlist.o setup.o
balance.o: balance.F90 boundary.o constants.o mpi_subtype_control.o \
redblack_module.o timer.o utilities.o
bethe_heitler.o: bethe_heitler.F90 calc_df.o partlist.o particles.o setup.o
boundary.o: boundary.F90 injectors.o laser.o mpi_subtype_control.o \
particle_id_hash.o particle_temperature.o partlist.o utilities.o
bremsstrahlung.o: bremsstrahlung.F90 bethe_heitler.o calc_df.o particles.o \
partlist.o setup.o
calc_df.o: calc_df.F90 boundary.o
collisions.o: collisions.F90 calc_df.o prefetch.o
collision_ionise.o: collision_ionise.F90 calc_df.o collisions.o prefetch.o
constants.o: constants.F90 $(SDFMOD)
current_smooth.o: current_smooth.F90 boundary.o constants.o shape_functions.o
custom_deck.o: custom_deck.f90 constants.o
custom_laser.o: custom_laser.f90 shared_data.o
custom_parser.o: custom_parser.f90 shared_data.o stack.o tokenizer_blocks.o
deck.o: deck.F90 bremsstrahlung.o custom_deck.o deck_boundaries_block.o \
deck_bremsstrahlung_block.o deck_collision_block.o deck_constant_block.o \
deck_control_block.o deck_dist_fn_block.o deck_fields_block.o \
deck_injector_block.o deck_io_block.o deck_io_global_block.o \
deck_laser_block.o deck_part_from_file_block.o deck_particle_probe_block.o \
deck_qed_block.o deck_species_block.o deck_stencil_block.o \
deck_subset_block.o deck_window_block.o photons.o strings.o utilities.o \
version_data.o $(SDFMOD)
deck_boundaries_block.o: deck_boundaries_block.f90 strings_advanced.o \
utilities.o
deck_bremsstrahlung_block.o: deck_bremsstrahlung_block.F90 strings_ad
gitextract_tc5477b5/
├── .github/
│ └── workflows/
│ └── build_test.yml
├── .gitlab/
│ └── issue_templates/
│ ├── Bug.md
│ └── Feature Request.md
├── .gitlab-ci.yml
├── .gitmodules
├── CHANGELOG.md
├── CODING_STYLE
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── DOCUMENTATION
├── LICENSE
├── README.md
├── epoch1d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── electron_ion_equilibration.deck
│ │ ├── electron_isotropisation.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── ionisation.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ ├── twostream_deltaf.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch1d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── lehe_custom/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ └── optimized/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── landau/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_landau.py
│ │ ├── test_laser.py
│ │ ├── test_maxwell_solvers.py
│ │ ├── test_twostream.py
│ │ └── twostream/
│ │ ├── input.deck
│ │ └── makefile
│ └── unpack_source_from_restart
├── epoch2d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── cone.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── ionisation.deck
│ │ ├── laser_focus.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ ├── ramp.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch2d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── makefile
│ │ │ ├── optimized/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── optimized_symm/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── optimized_xaxis/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ ├── pukhov/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_laser.py
│ │ └── test_maxwell_solvers.py
│ └── unpack_source_from_restart
├── epoch3d/
│ ├── .gitignore
│ ├── Data/
│ │ └── .gitignore
│ ├── Makefile
│ ├── Start.pro
│ ├── example_decks/
│ │ ├── bremsstrahlung.deck
│ │ ├── cone.deck
│ │ ├── filter.deck
│ │ ├── injectors.deck
│ │ ├── power_law.deck
│ │ ├── qed_rese.deck
│ │ └── window.deck
│ ├── src/
│ │ ├── boundary.F90
│ │ ├── constants.F90
│ │ ├── deck/
│ │ │ ├── deck.F90
│ │ │ ├── deck_boundaries_block.f90
│ │ │ ├── deck_bremsstrahlung_block.F90
│ │ │ ├── deck_collision_block.F90
│ │ │ ├── deck_constant_block.f90
│ │ │ ├── deck_control_block.F90
│ │ │ ├── deck_dist_fn_block.f90
│ │ │ ├── deck_fields_block.f90
│ │ │ ├── deck_injector_block.F90
│ │ │ ├── deck_io_block.F90
│ │ │ ├── deck_io_global_block.F90
│ │ │ ├── deck_laser_block.f90
│ │ │ ├── deck_part_from_file_block.F90
│ │ │ ├── deck_particle_probe_block.F90
│ │ │ ├── deck_qed_block.F90
│ │ │ ├── deck_species_block.F90
│ │ │ ├── deck_stencil_block.f90
│ │ │ ├── deck_subset_block.F90
│ │ │ ├── deck_window_block.f90
│ │ │ ├── strings.f90
│ │ │ └── strings_advanced.f90
│ │ ├── epoch3d.F90
│ │ ├── fields.f90
│ │ ├── gen_commit_string.sh
│ │ ├── housekeeping/
│ │ │ ├── balance.F90
│ │ │ ├── current_smooth.F90
│ │ │ ├── epoch_source_info_dummy.f90
│ │ │ ├── finish.f90
│ │ │ ├── mpi_routines.F90
│ │ │ ├── mpi_subtype_control.f90
│ │ │ ├── particle_id_hash.F90
│ │ │ ├── particle_migration.F90
│ │ │ ├── particle_pointer_advance.f90
│ │ │ ├── partlist.F90
│ │ │ ├── prefetch.F90
│ │ │ ├── random_generator.f90
│ │ │ ├── redblack_module.f90
│ │ │ ├── secondary_list.F90
│ │ │ ├── setup.F90
│ │ │ ├── shape_functions.F90
│ │ │ ├── terminal_controls.F90
│ │ │ ├── timer.f90
│ │ │ ├── utilities.f90
│ │ │ ├── version_data.F90
│ │ │ ├── welcome.F90
│ │ │ └── window.F90
│ │ ├── include/
│ │ │ ├── bspline3/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ ├── pack_to_grid.inc
│ │ │ ├── particle_head.inc
│ │ │ ├── particle_to_grid.inc
│ │ │ ├── tophat/
│ │ │ │ ├── b_part.inc
│ │ │ │ ├── e_part.inc
│ │ │ │ ├── gx.inc
│ │ │ │ ├── gxfac.inc
│ │ │ │ ├── hx_dcell.inc
│ │ │ │ └── part_var.inc
│ │ │ └── triangle/
│ │ │ ├── b_part.inc
│ │ │ ├── e_part.inc
│ │ │ ├── gx.inc
│ │ │ ├── gxfac.inc
│ │ │ ├── hx_dcell.inc
│ │ │ └── part_var.inc
│ │ ├── io/
│ │ │ ├── calc_df.F90
│ │ │ ├── diagnostics.F90
│ │ │ ├── dist_fn.F90
│ │ │ ├── iterators.F90
│ │ │ ├── probes.F90
│ │ │ └── simple_io.F90
│ │ ├── laser.f90
│ │ ├── pack.py
│ │ ├── pack.sh
│ │ ├── parser/
│ │ │ ├── evaluate.F90
│ │ │ ├── evaluator_blocks.F90
│ │ │ ├── shunt.F90
│ │ │ ├── stack.f90
│ │ │ └── tokenizer_blocks.f90
│ │ ├── particles.F90
│ │ ├── physics_packages/
│ │ │ ├── TABLES/
│ │ │ │ ├── binding_energy/
│ │ │ │ │ ├── be_1
│ │ │ │ │ ├── be_10
│ │ │ │ │ ├── be_100
│ │ │ │ │ ├── be_11
│ │ │ │ │ ├── be_12
│ │ │ │ │ ├── be_13
│ │ │ │ │ ├── be_14
│ │ │ │ │ ├── be_15
│ │ │ │ │ ├── be_16
│ │ │ │ │ ├── be_17
│ │ │ │ │ ├── be_18
│ │ │ │ │ ├── be_19
│ │ │ │ │ ├── be_2
│ │ │ │ │ ├── be_20
│ │ │ │ │ ├── be_21
│ │ │ │ │ ├── be_22
│ │ │ │ │ ├── be_23
│ │ │ │ │ ├── be_24
│ │ │ │ │ ├── be_25
│ │ │ │ │ ├── be_26
│ │ │ │ │ ├── be_27
│ │ │ │ │ ├── be_28
│ │ │ │ │ ├── be_29
│ │ │ │ │ ├── be_3
│ │ │ │ │ ├── be_30
│ │ │ │ │ ├── be_31
│ │ │ │ │ ├── be_32
│ │ │ │ │ ├── be_33
│ │ │ │ │ ├── be_34
│ │ │ │ │ ├── be_35
│ │ │ │ │ ├── be_36
│ │ │ │ │ ├── be_37
│ │ │ │ │ ├── be_38
│ │ │ │ │ ├── be_39
│ │ │ │ │ ├── be_4
│ │ │ │ │ ├── be_40
│ │ │ │ │ ├── be_41
│ │ │ │ │ ├── be_42
│ │ │ │ │ ├── be_43
│ │ │ │ │ ├── be_44
│ │ │ │ │ ├── be_45
│ │ │ │ │ ├── be_46
│ │ │ │ │ ├── be_47
│ │ │ │ │ ├── be_48
│ │ │ │ │ ├── be_49
│ │ │ │ │ ├── be_5
│ │ │ │ │ ├── be_50
│ │ │ │ │ ├── be_51
│ │ │ │ │ ├── be_52
│ │ │ │ │ ├── be_53
│ │ │ │ │ ├── be_54
│ │ │ │ │ ├── be_55
│ │ │ │ │ ├── be_56
│ │ │ │ │ ├── be_57
│ │ │ │ │ ├── be_58
│ │ │ │ │ ├── be_59
│ │ │ │ │ ├── be_6
│ │ │ │ │ ├── be_60
│ │ │ │ │ ├── be_61
│ │ │ │ │ ├── be_62
│ │ │ │ │ ├── be_63
│ │ │ │ │ ├── be_64
│ │ │ │ │ ├── be_65
│ │ │ │ │ ├── be_66
│ │ │ │ │ ├── be_67
│ │ │ │ │ ├── be_68
│ │ │ │ │ ├── be_69
│ │ │ │ │ ├── be_7
│ │ │ │ │ ├── be_70
│ │ │ │ │ ├── be_71
│ │ │ │ │ ├── be_72
│ │ │ │ │ ├── be_73
│ │ │ │ │ ├── be_74
│ │ │ │ │ ├── be_75
│ │ │ │ │ ├── be_76
│ │ │ │ │ ├── be_77
│ │ │ │ │ ├── be_78
│ │ │ │ │ ├── be_79
│ │ │ │ │ ├── be_8
│ │ │ │ │ ├── be_80
│ │ │ │ │ ├── be_81
│ │ │ │ │ ├── be_82
│ │ │ │ │ ├── be_83
│ │ │ │ │ ├── be_84
│ │ │ │ │ ├── be_85
│ │ │ │ │ ├── be_86
│ │ │ │ │ ├── be_87
│ │ │ │ │ ├── be_88
│ │ │ │ │ ├── be_89
│ │ │ │ │ ├── be_9
│ │ │ │ │ ├── be_90
│ │ │ │ │ ├── be_91
│ │ │ │ │ ├── be_92
│ │ │ │ │ ├── be_93
│ │ │ │ │ ├── be_94
│ │ │ │ │ ├── be_95
│ │ │ │ │ ├── be_96
│ │ │ │ │ ├── be_97
│ │ │ │ │ ├── be_98
│ │ │ │ │ └── be_99
│ │ │ │ ├── bound_ke/
│ │ │ │ │ ├── u_1
│ │ │ │ │ ├── u_10
│ │ │ │ │ ├── u_100
│ │ │ │ │ ├── u_11
│ │ │ │ │ ├── u_12
│ │ │ │ │ ├── u_13
│ │ │ │ │ ├── u_14
│ │ │ │ │ ├── u_15
│ │ │ │ │ ├── u_16
│ │ │ │ │ ├── u_17
│ │ │ │ │ ├── u_18
│ │ │ │ │ ├── u_19
│ │ │ │ │ ├── u_2
│ │ │ │ │ ├── u_20
│ │ │ │ │ ├── u_21
│ │ │ │ │ ├── u_22
│ │ │ │ │ ├── u_23
│ │ │ │ │ ├── u_24
│ │ │ │ │ ├── u_25
│ │ │ │ │ ├── u_26
│ │ │ │ │ ├── u_27
│ │ │ │ │ ├── u_28
│ │ │ │ │ ├── u_29
│ │ │ │ │ ├── u_3
│ │ │ │ │ ├── u_30
│ │ │ │ │ ├── u_31
│ │ │ │ │ ├── u_32
│ │ │ │ │ ├── u_33
│ │ │ │ │ ├── u_34
│ │ │ │ │ ├── u_35
│ │ │ │ │ ├── u_36
│ │ │ │ │ ├── u_37
│ │ │ │ │ ├── u_38
│ │ │ │ │ ├── u_39
│ │ │ │ │ ├── u_4
│ │ │ │ │ ├── u_40
│ │ │ │ │ ├── u_41
│ │ │ │ │ ├── u_42
│ │ │ │ │ ├── u_43
│ │ │ │ │ ├── u_44
│ │ │ │ │ ├── u_45
│ │ │ │ │ ├── u_46
│ │ │ │ │ ├── u_47
│ │ │ │ │ ├── u_48
│ │ │ │ │ ├── u_49
│ │ │ │ │ ├── u_5
│ │ │ │ │ ├── u_50
│ │ │ │ │ ├── u_51
│ │ │ │ │ ├── u_52
│ │ │ │ │ ├── u_53
│ │ │ │ │ ├── u_54
│ │ │ │ │ ├── u_55
│ │ │ │ │ ├── u_56
│ │ │ │ │ ├── u_57
│ │ │ │ │ ├── u_58
│ │ │ │ │ ├── u_59
│ │ │ │ │ ├── u_6
│ │ │ │ │ ├── u_60
│ │ │ │ │ ├── u_61
│ │ │ │ │ ├── u_62
│ │ │ │ │ ├── u_63
│ │ │ │ │ ├── u_64
│ │ │ │ │ ├── u_65
│ │ │ │ │ ├── u_66
│ │ │ │ │ ├── u_67
│ │ │ │ │ ├── u_68
│ │ │ │ │ ├── u_69
│ │ │ │ │ ├── u_7
│ │ │ │ │ ├── u_70
│ │ │ │ │ ├── u_71
│ │ │ │ │ ├── u_72
│ │ │ │ │ ├── u_73
│ │ │ │ │ ├── u_74
│ │ │ │ │ ├── u_75
│ │ │ │ │ ├── u_76
│ │ │ │ │ ├── u_77
│ │ │ │ │ ├── u_78
│ │ │ │ │ ├── u_79
│ │ │ │ │ ├── u_8
│ │ │ │ │ ├── u_80
│ │ │ │ │ ├── u_81
│ │ │ │ │ ├── u_82
│ │ │ │ │ ├── u_83
│ │ │ │ │ ├── u_84
│ │ │ │ │ ├── u_85
│ │ │ │ │ ├── u_86
│ │ │ │ │ ├── u_87
│ │ │ │ │ ├── u_88
│ │ │ │ │ ├── u_89
│ │ │ │ │ ├── u_9
│ │ │ │ │ ├── u_90
│ │ │ │ │ ├── u_91
│ │ │ │ │ ├── u_92
│ │ │ │ │ ├── u_93
│ │ │ │ │ ├── u_94
│ │ │ │ │ ├── u_95
│ │ │ │ │ ├── u_96
│ │ │ │ │ ├── u_97
│ │ │ │ │ ├── u_98
│ │ │ │ │ └── u_99
│ │ │ │ ├── br/
│ │ │ │ │ ├── br1
│ │ │ │ │ ├── br10
│ │ │ │ │ ├── br100
│ │ │ │ │ ├── br11
│ │ │ │ │ ├── br12
│ │ │ │ │ ├── br13
│ │ │ │ │ ├── br14
│ │ │ │ │ ├── br15
│ │ │ │ │ ├── br16
│ │ │ │ │ ├── br17
│ │ │ │ │ ├── br18
│ │ │ │ │ ├── br19
│ │ │ │ │ ├── br2
│ │ │ │ │ ├── br20
│ │ │ │ │ ├── br21
│ │ │ │ │ ├── br22
│ │ │ │ │ ├── br23
│ │ │ │ │ ├── br24
│ │ │ │ │ ├── br25
│ │ │ │ │ ├── br26
│ │ │ │ │ ├── br27
│ │ │ │ │ ├── br28
│ │ │ │ │ ├── br29
│ │ │ │ │ ├── br3
│ │ │ │ │ ├── br30
│ │ │ │ │ ├── br31
│ │ │ │ │ ├── br32
│ │ │ │ │ ├── br33
│ │ │ │ │ ├── br34
│ │ │ │ │ ├── br35
│ │ │ │ │ ├── br36
│ │ │ │ │ ├── br37
│ │ │ │ │ ├── br38
│ │ │ │ │ ├── br39
│ │ │ │ │ ├── br4
│ │ │ │ │ ├── br40
│ │ │ │ │ ├── br41
│ │ │ │ │ ├── br42
│ │ │ │ │ ├── br43
│ │ │ │ │ ├── br44
│ │ │ │ │ ├── br45
│ │ │ │ │ ├── br46
│ │ │ │ │ ├── br47
│ │ │ │ │ ├── br48
│ │ │ │ │ ├── br49
│ │ │ │ │ ├── br5
│ │ │ │ │ ├── br50
│ │ │ │ │ ├── br51
│ │ │ │ │ ├── br52
│ │ │ │ │ ├── br53
│ │ │ │ │ ├── br54
│ │ │ │ │ ├── br55
│ │ │ │ │ ├── br56
│ │ │ │ │ ├── br57
│ │ │ │ │ ├── br58
│ │ │ │ │ ├── br59
│ │ │ │ │ ├── br6
│ │ │ │ │ ├── br60
│ │ │ │ │ ├── br61
│ │ │ │ │ ├── br62
│ │ │ │ │ ├── br63
│ │ │ │ │ ├── br64
│ │ │ │ │ ├── br65
│ │ │ │ │ ├── br66
│ │ │ │ │ ├── br67
│ │ │ │ │ ├── br68
│ │ │ │ │ ├── br69
│ │ │ │ │ ├── br7
│ │ │ │ │ ├── br70
│ │ │ │ │ ├── br71
│ │ │ │ │ ├── br72
│ │ │ │ │ ├── br73
│ │ │ │ │ ├── br74
│ │ │ │ │ ├── br75
│ │ │ │ │ ├── br76
│ │ │ │ │ ├── br77
│ │ │ │ │ ├── br78
│ │ │ │ │ ├── br79
│ │ │ │ │ ├── br8
│ │ │ │ │ ├── br80
│ │ │ │ │ ├── br81
│ │ │ │ │ ├── br82
│ │ │ │ │ ├── br83
│ │ │ │ │ ├── br84
│ │ │ │ │ ├── br85
│ │ │ │ │ ├── br86
│ │ │ │ │ ├── br87
│ │ │ │ │ ├── br88
│ │ │ │ │ ├── br89
│ │ │ │ │ ├── br9
│ │ │ │ │ ├── br90
│ │ │ │ │ ├── br91
│ │ │ │ │ ├── br92
│ │ │ │ │ ├── br93
│ │ │ │ │ ├── br94
│ │ │ │ │ ├── br95
│ │ │ │ │ ├── br96
│ │ │ │ │ ├── br97
│ │ │ │ │ ├── br98
│ │ │ │ │ └── br99
│ │ │ │ ├── chimin.table
│ │ │ │ ├── energy_split.table
│ │ │ │ ├── epsilon.table
│ │ │ │ ├── hsokolov.table
│ │ │ │ ├── ion_l.table
│ │ │ │ ├── ion_n.table
│ │ │ │ ├── ionisation_energies.table
│ │ │ │ ├── j1j2j3.table
│ │ │ │ ├── ksi_sokolov.table
│ │ │ │ ├── log_chi2.table
│ │ │ │ ├── occupancy_numbers/
│ │ │ │ │ └── occ_no_79
│ │ │ │ └── pairprod.table
│ │ │ ├── background_collisions.F90
│ │ │ ├── bethe_heitler.F90
│ │ │ ├── bremsstrahlung.F90
│ │ │ ├── collision_ionise.F90
│ │ │ ├── collisions.F90
│ │ │ ├── file_injectors.F90
│ │ │ ├── injectors.F90
│ │ │ ├── ionise.F90
│ │ │ ├── numerics.f90
│ │ │ ├── photons.F90
│ │ │ └── recombination.F90
│ │ ├── sdf_reader_example.f90
│ │ ├── shared_data.F90
│ │ └── user_interaction/
│ │ ├── custom_deck.f90
│ │ ├── custom_laser.f90
│ │ ├── custom_parser.f90
│ │ ├── deltaf_loader.F90
│ │ ├── helper.F90
│ │ ├── ic_module.f90
│ │ └── particle_temperature.F90
│ ├── tests/
│ │ ├── __init__.py
│ │ ├── custom_stencils/
│ │ │ ├── makefile
│ │ │ ├── optimized/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── optimized_xaxis/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── optimized_xaxis_soft/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── laser/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── makefile.inc
│ │ ├── maxwell_solvers/
│ │ │ ├── cowan/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── lehe_x/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ ├── makefile
│ │ │ ├── pukhov/
│ │ │ │ ├── input.deck
│ │ │ │ └── makefile
│ │ │ └── yee/
│ │ │ ├── input.deck
│ │ │ └── makefile
│ │ ├── test_custom_stencils.py
│ │ ├── test_laser.py
│ │ └── test_maxwell_solvers.py
│ └── unpack_source_from_restart
└── scripts/
├── infer_compiler.sh
├── make_tarball.sh
├── pre-commit
├── run-tests-epoch-all.sh
├── run-tests.py
├── system_info.sh
└── unpack_source_from_restart
SYMBOL INDEX (127 symbols across 18 files)
FILE: epoch1d/src/pack.py
function str2bool (line 36) | def str2bool(x):
function stripped (line 42) | def stripped(s):
function byteswap4 (line 121) | def byteswap4(s):
function byteswap8 (line 128) | def byteswap8(s):
function byteswap (line 135) | def byteswap(n, s):
function wrapped (line 146) | def wrapped(string):
function print_character (line 165) | def print_character(name, value):
function print_integer (line 185) | def print_integer(name, value):
function get_bytes_checksum (line 200) | def get_bytes_checksum(files):
function write_data_bytes (line 218) | def write_data_bytes(filename, varname):
function print_integer_array (line 286) | def print_integer_array(value):
FILE: epoch1d/tests/__init__.py
class SimTest (line 21) | class SimTest(unittest.TestCase):
method setUpClass (line 32) | def setUpClass(cls):
method setUp (line 43) | def setUp(self):
method tearDownClass (line 49) | def tearDownClass(cls):
FILE: epoch1d/tests/test_custom_stencils.py
function xt (line 63) | def xt(sdffile, key='Electric Field/Ey'):
class test_custom_stencils (line 76) | class test_custom_stencils(SimTest):
method setUpClass (line 81) | def setUpClass(cls):
method test_createplot (line 91) | def test_createplot(self):
method test_group_velocity (line 114) | def test_group_velocity(self):
FILE: epoch1d/tests/test_landau.py
function showdatafields (line 27) | def showdatafields(sdffile):
function plotdump (line 33) | def plotdump(sdffile, key, ax):
function plotdump2d (line 40) | def plotdump2d(sdffile, key, ax):
function plotevolution (line 50) | def plotevolution(key):
function plot2devolution (line 60) | def plot2devolution(key):
function createplots (line 70) | def createplots():
class test_landau (line 83) | class test_landau(SimTest):
method test_creatplots (line 85) | def test_creatplots(self):
FILE: epoch1d/tests/test_laser.py
function showdatafields (line 27) | def showdatafields(sdffile):
function plotdump (line 33) | def plotdump(sdffile, key, ax):
function plotevolution (line 40) | def plotevolution(key):
function createplots (line 49) | def createplots():
class test_laser (line 57) | class test_laser(SimTest):
method totaleyassert (line 59) | def totaleyassert(self, dump, val):
method test_createplots (line 67) | def test_createplots(self):
method test_Eey0000 (line 70) | def test_Eey0000(self):
method test_Eey0001 (line 73) | def test_Eey0001(self):
method test_Eey0003 (line 76) | def test_Eey0003(self):
method test_Eey0007 (line 79) | def test_Eey0007(self):
FILE: epoch1d/tests/test_maxwell_solvers.py
function xt (line 58) | def xt(sdffile, key='Electric Field/Ey'):
class test_maxwell_solvers (line 71) | class test_maxwell_solvers(SimTest):
method setUpClass (line 76) | def setUpClass(cls):
method test_createplot (line 86) | def test_createplot(self):
method test_group_velocity (line 109) | def test_group_velocity(self):
FILE: epoch1d/tests/test_twostream.py
function showdatafields (line 27) | def showdatafields(sdffile):
function plotdump (line 33) | def plotdump(sdffile, key, ax):
function plotdump2d (line 40) | def plotdump2d(sdffile, key, ax):
function plotevolution (line 50) | def plotevolution(key):
function plot2devolution (line 60) | def plot2devolution(key):
function createplots (line 70) | def createplots():
class test_twostream (line 84) | class test_twostream(SimTest):
method test_createplots (line 86) | def test_createplots(self):
FILE: epoch2d/src/pack.py
function str2bool (line 36) | def str2bool(x):
function stripped (line 42) | def stripped(s):
function byteswap4 (line 121) | def byteswap4(s):
function byteswap8 (line 128) | def byteswap8(s):
function byteswap (line 135) | def byteswap(n, s):
function wrapped (line 146) | def wrapped(string):
function print_character (line 165) | def print_character(name, value):
function print_integer (line 185) | def print_integer(name, value):
function get_bytes_checksum (line 200) | def get_bytes_checksum(files):
function write_data_bytes (line 218) | def write_data_bytes(filename, varname):
function print_integer_array (line 286) | def print_integer_array(value):
FILE: epoch2d/tests/__init__.py
class SimTest (line 21) | class SimTest(unittest.TestCase):
method setUpClass (line 32) | def setUpClass(cls):
method setUp (line 43) | def setUp(self):
method tearDownClass (line 49) | def tearDownClass(cls):
FILE: epoch2d/tests/test_custom_stencils.py
function xt2 (line 87) | def xt2(sdffile, key='Electric Field/Ey'):
class test_custom_stencils (line 100) | class test_custom_stencils(SimTest):
method setUpClass (line 105) | def setUpClass(cls):
method test_createplot (line 115) | def test_createplot(self):
method test_group_velocity (line 182) | def test_group_velocity(self):
FILE: epoch2d/tests/test_laser.py
function showdatafields (line 27) | def showdatafields(sdffile):
function plotdump (line 33) | def plotdump(sdffile, key, ax):
function plotevolution (line 40) | def plotevolution(key):
function createplots (line 49) | def createplots():
class test_laser (line 57) | class test_laser(SimTest):
method totaleyassert (line 59) | def totaleyassert(self, dump, val):
method test_createplots (line 67) | def test_createplots(self):
method test_Eey0000 (line 70) | def test_Eey0000(self):
method test_Eey0001 (line 73) | def test_Eey0001(self):
method test_Eey0002 (line 76) | def test_Eey0002(self):
FILE: epoch2d/tests/test_maxwell_solvers.py
function xt2 (line 66) | def xt2(sdffile, key='Electric Field/Ey'):
class test_maxwell_solvers (line 79) | class test_maxwell_solvers(SimTest):
method setUpClass (line 84) | def setUpClass(cls):
method test_createplot (line 94) | def test_createplot(self):
method test_group_velocity (line 150) | def test_group_velocity(self):
FILE: epoch3d/src/pack.py
function str2bool (line 36) | def str2bool(x):
function stripped (line 42) | def stripped(s):
function byteswap4 (line 121) | def byteswap4(s):
function byteswap8 (line 128) | def byteswap8(s):
function byteswap (line 135) | def byteswap(n, s):
function wrapped (line 146) | def wrapped(string):
function print_character (line 165) | def print_character(name, value):
function print_integer (line 185) | def print_integer(name, value):
function get_bytes_checksum (line 200) | def get_bytes_checksum(files):
function write_data_bytes (line 218) | def write_data_bytes(filename, varname):
function print_integer_array (line 286) | def print_integer_array(value):
FILE: epoch3d/tests/__init__.py
class SimTest (line 21) | class SimTest(unittest.TestCase):
method setUpClass (line 32) | def setUpClass(cls):
method setUp (line 43) | def setUp(self):
method tearDownClass (line 49) | def tearDownClass(cls):
FILE: epoch3d/tests/test_custom_stencils.py
function xt3 (line 99) | def xt3(sdffile, key='Electric Field/Ey'):
class test_custom_stencils (line 112) | class test_custom_stencils(SimTest):
method setUpClass (line 117) | def setUpClass(cls):
method test_createplot (line 127) | def test_createplot(self):
method test_group_velocity (line 194) | def test_group_velocity(self):
FILE: epoch3d/tests/test_laser.py
function showdatafields (line 27) | def showdatafields(sdffile):
function plotdump (line 33) | def plotdump(sdffile, key, ax):
function plotevolution (line 40) | def plotevolution(key):
function createplots (line 49) | def createplots():
class test_laser (line 57) | class test_laser(SimTest):
method totaleyassert (line 59) | def totaleyassert(self, dump, val):
method test_createplots (line 67) | def test_createplots(self):
method test_Eex0000 (line 70) | def test_Eex0000(self):
method test_Eex0001 (line 73) | def test_Eex0001(self):
method test_Eex0002 (line 76) | def test_Eex0002(self):
FILE: epoch3d/tests/test_maxwell_solvers.py
function xt3 (line 75) | def xt3(sdffile, key='Electric Field/Ey'):
class test_maxwell_solvers (line 88) | class test_maxwell_solvers(SimTest):
method setUpClass (line 93) | def setUpClass(cls):
method test_createplot (line 103) | def test_createplot(self):
method test_group_velocity (line 162) | def test_group_velocity(self):
FILE: scripts/run-tests.py
function setcwd (line 27) | def setcwd(relative=None):
function compileepoch (line 38) | def compileepoch():
function run_tests (line 49) | def run_tests(args):
function clean (line 61) | def clean():
function main (line 78) | def main():
Copy disabled (too large)
Download .json
Condensed preview — 1378 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (61,087K chars).
[
{
"path": ".github/workflows/build_test.yml",
"chars": 2213,
"preview": "name: CI\n\n# Controls when the action will run.\non:\n pull_request:\n branches:\n - main\n - '*-devel'\n pull_reque"
},
{
"path": ".gitlab/issue_templates/Bug.md",
"chars": 1712,
"preview": "<!---\nPlease read this!\n\nBefore opening a new issue, make sure to search for keywords in the issues\nfiltered by the \"pos"
},
{
"path": ".gitlab/issue_templates/Feature Request.md",
"chars": 353,
"preview": "### Description\n\n<!--- Include problem, use cases, benefits, and/or goals --->\n\n### Links / references\n\n<!--- If this re"
},
{
"path": ".gitlab-ci.yml",
"chars": 1412,
"preview": "variables:\n GIT_STRATEGY: clone\n\nbefore_script:\n - git submodule update --recursive --init SDF\n\ntest_ubuntu_gfortran:\n"
},
{
"path": ".gitmodules",
"chars": 48,
"preview": "[submodule \"SDF\"]\n\tpath = SDF\n\turl = ../SDF.git\n"
},
{
"path": "CHANGELOG.md",
"chars": 126649,
"preview": "## v4.18.0 to v4.19.0\n\n * Ionisation routines have been upgraded, and now read binding energies from\n files. Users spe"
},
{
"path": "CODING_STYLE",
"chars": 2020,
"preview": "This codebase conforms to a single, consistent coding style which is\noutlined in the following text. New submissions wil"
},
{
"path": "CONTRIBUTING.md",
"chars": 3392,
"preview": "\n# Contributions\n\nAll contributions are welcome. EPOCH is designed to be flexible and\ngeneral purpose, so changes should"
},
{
"path": "CONTRIBUTORS.md",
"chars": 656,
"preview": "Alexander Blinne <A.Blinne@gsi.de>\nAlexander Seaton <A.Seaton@warwick.ac.uk>\nAlex Arefiev <alexey@austin.utexas.edu>\nAli"
},
{
"path": "DOCUMENTATION",
"chars": 230,
"preview": "EPOCH documentation is hosted at the following URL:\nhttps://epochpic.github.io/\n\nAdditional information may be found in "
},
{
"path": "LICENSE",
"chars": 35147,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 8726,
"preview": "# EPOCH instructions\n\nTo clone this repository from GitHub, use the command:\n\n```\n git clone --recursive https://github"
},
{
"path": "epoch1d/.gitignore",
"chars": 203,
"preview": "bin\nobj\nCOMMIT\nUSE_DATA_DIRECTORY\n\n# ignore files generated by examples\ntests/**/*.sdf\ntests/**/*.visit\ntests/**/*.png\nt"
},
{
"path": "epoch1d/Data/.gitignore",
"chars": 42,
"preview": "*.sdf\n*.cfd\n*.dat\n*.status\n*.deck\n*.visit\n"
},
{
"path": "epoch1d/Makefile",
"chars": 20316,
"preview": "# Specify a particular compiler with \"make COMPILER=pgi\", etc.\n# Specify debugging flags with \"make MODE=debug\"\n# If flo"
},
{
"path": "epoch1d/Start.pro",
"chars": 95,
"preview": "SDF_PATH='../SDF/IDL'\n!path = SDF_PATH + PATH_SEP(/SEARCH_PATH) + !path\n\n@../SDF/IDL/Start.pro\n"
},
{
"path": "epoch1d/example_decks/bremsstrahlung.deck",
"chars": 4341,
"preview": "begin:control\n\n # global number of gridpoints\n nx = 256 # in x\n npart = nx * 256\n\n # maximum number of iterations\n "
},
{
"path": "epoch1d/example_decks/electron_ion_equilibration.deck",
"chars": 815,
"preview": "begin:constant\n\n dl = 7.4e-10\n\nend:constant\n\nbegin:control\n\n x_min = 0.0\n x_max = 100*dl\n nx = 5\n t_end = 20e-12\n "
},
{
"path": "epoch1d/example_decks/electron_isotropisation.deck",
"chars": 822,
"preview": "begin:constant\n\n dl = 7.4e-10\n\nend:constant\n\nbegin:control\n\n x_min = 0.0\n x_max = 100*dl \n nx = 10\n t_end = 5e-14\n "
},
{
"path": "epoch1d/example_decks/filter.deck",
"chars": 1652,
"preview": "begin:control\n nx = 400\n\n # Final time of simulation\n t_end = 1.5e-1\n\n # Size of domain\n x_min = 0\n x_max = 5.0e5\n"
},
{
"path": "epoch1d/example_decks/injectors.deck",
"chars": 1842,
"preview": "begin:control\n nx = 128\n # Final time of simulation\n t_end = 3.0e-1\n\n # Size of domain\n x_min = 0\n x_max = 2.5e5\n"
},
{
"path": "epoch1d/example_decks/ionisation.deck",
"chars": 2045,
"preview": "begin:control\n # Global number of gridpoints\n nx = 400 # in x\n\n # Maximum number of iterations\n # Set to -1 to run u"
},
{
"path": "epoch1d/example_decks/power_law.deck",
"chars": 1465,
"preview": "begin:control\n nx = 100\n\n # Final time of simulation\n t_end = 0\n\n # Size of domain\n x_min = 0\n x_max = 5.0e5\nend:c"
},
{
"path": "epoch1d/example_decks/qed_rese.deck",
"chars": 6200,
"preview": "begin:constant\n\n # This constant block specifies the electron number density of the target\n # in /cc and laser intensi"
},
{
"path": "epoch1d/example_decks/twostream_deltaf.deck",
"chars": 3296,
"preview": "begin:constant\n background_number_density = 1e20\n background_temperature = 1e8\n frac_beam = 1e-3\n ion_mass_e = 1836."
},
{
"path": "epoch1d/example_decks/window.deck",
"chars": 1124,
"preview": "begin:control\n nx = 256\n\n # final time of simulation\n t_end = 10e-9\n\n # size of domain\n x_min = 0\n x_end = 1\n\n st"
},
{
"path": "epoch1d/src/boundary.F90",
"chars": 36487,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/constants.F90",
"chars": 29546,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck.F90",
"chars": 42240,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_boundaries_block.f90",
"chars": 7710,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_bremsstrahlung_block.F90",
"chars": 7304,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_collision_block.F90",
"chars": 11037,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_constant_block.f90",
"chars": 4603,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_control_block.F90",
"chars": 19912,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_dist_fn_block.f90",
"chars": 10159,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_fields_block.f90",
"chars": 4195,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_injector_block.F90",
"chars": 12809,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_io_block.F90",
"chars": 41143,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_io_global_block.F90",
"chars": 5469,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_laser_block.f90",
"chars": 9392,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_part_from_file_block.F90",
"chars": 12266,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_particle_probe_block.F90",
"chars": 5618,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_qed_block.F90",
"chars": 7546,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_species_block.F90",
"chars": 74971,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_stencil_block.f90",
"chars": 4547,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_subset_block.F90",
"chars": 12209,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/deck_window_block.f90",
"chars": 7066,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/strings.f90",
"chars": 7858,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/deck/strings_advanced.f90",
"chars": 9297,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/epoch1d.F90",
"chars": 8470,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/fields.f90",
"chars": 10140,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/gen_commit_string.sh",
"chars": 2021,
"preview": "#!/bin/sh\n\n# Copyright (C) 2009-2019 University of Warwick\n#\n# This program is free software: you can redistribute it an"
},
{
"path": "epoch1d/src/housekeeping/balance.F90",
"chars": 42464,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/current_smooth.F90",
"chars": 3402,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/epoch_source_info_dummy.f90",
"chars": 1624,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/finish.f90",
"chars": 4801,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/mpi_routines.F90",
"chars": 14265,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/mpi_subtype_control.f90",
"chars": 27014,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/particle_id_hash.F90",
"chars": 17615,
"preview": "MODULE particle_id_hash_mod\n\n USE constants\n USE shared_data\n USE random_generator\n USE utilities\n\n IMPLICIT NONE\n\n"
},
{
"path": "epoch1d/src/housekeeping/particle_migration.F90",
"chars": 13042,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/particle_pointer_advance.f90",
"chars": 2747,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/partlist.F90",
"chars": 26783,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/prefetch.F90",
"chars": 1150,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/random_generator.f90",
"chars": 5958,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/redblack_module.f90",
"chars": 10804,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/secondary_list.F90",
"chars": 2938,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/setup.F90",
"chars": 57942,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/shape_functions.F90",
"chars": 2121,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/terminal_controls.F90",
"chars": 2387,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/timer.f90",
"chars": 2879,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/utilities.f90",
"chars": 9110,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/version_data.F90",
"chars": 1287,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/welcome.F90",
"chars": 10944,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/housekeeping/window.F90",
"chars": 9861,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/include/bspline3/b_part.inc",
"chars": 641,
"preview": " bx_part = &\n gx(-2) * bx(cell_x1-2) &\n + gx(-1) * bx(cell_x1-1) &\n + gx( 0) *"
},
{
"path": "epoch1d/src/include/bspline3/e_part.inc",
"chars": 641,
"preview": " ex_part = &\n hx(-2) * ex(cell_x2-2) &\n + hx(-1) * ex(cell_x2-1) &\n + hx( 0) *"
},
{
"path": "epoch1d/src/include/bspline3/gx.inc",
"chars": 467,
"preview": "! IMPORTANT NOTE\n! These weight need to be multiplied by 1/24\n cf2 = cell_frac_x**2\n gx(-2) = (0.5_num + c"
},
{
"path": "epoch1d/src/include/bspline3/gxfac.inc",
"chars": 418,
"preview": " cx2 = cell_frac_x**2\n gx(-2) = fac1 * (0.5_num + cell_frac_x)**4\n gx(-1) = fac2 * (1.1875_num + 2."
},
{
"path": "epoch1d/src/include/bspline3/hx_dcell.inc",
"chars": 497,
"preview": "! IMPORTANT NOTE\n! These weight need to be multiplied by 1/24\n cf2 = cell_frac_x**2\n hx(dcellx-2) = (0.5_n"
},
{
"path": "epoch1d/src/include/bspline3/part_var.inc",
"chars": 244,
"preview": " part_var = &\n gx(-2) * grid_var(cell_x1-2) &\n + gx(-1) * grid_var(cell_x1-1) &\n "
},
{
"path": "epoch1d/src/include/pack_to_grid.inc",
"chars": 466,
"preview": "#ifdef PARTICLE_SHAPE_TOPHAT\n cell_x_r = (parameters%pack_pos - x_grid_min_local) / dx - 0.5_num\n#else\n ce"
},
{
"path": "epoch1d/src/include/particle_head.inc",
"chars": 415,
"preview": " REAL(num), DIMENSION(sf_min:sf_max) :: gx\n REAL(num) :: cell_x_r, cell_frac_x\n INTEGER :: cell_x\n#ifndef PARTI"
},
{
"path": "epoch1d/src/include/particle_to_grid.inc",
"chars": 460,
"preview": "#ifdef PARTICLE_SHAPE_TOPHAT\n cell_x_r = (current%part_pos - x_grid_min_local) / dx - 0.5_num\n#else\n cell_"
},
{
"path": "epoch1d/src/include/tophat/b_part.inc",
"chars": 290,
"preview": " bx_part = &\n gx( 0) * bx(cell_x1 ) &\n + gx( 1) * bx(cell_x1+1)\n\n by_part = &\n "
},
{
"path": "epoch1d/src/include/tophat/e_part.inc",
"chars": 290,
"preview": " ex_part = &\n hx( 0) * ex(cell_x2 ) &\n + hx( 1) * ex(cell_x2+1)\n\n ey_part = &\n "
},
{
"path": "epoch1d/src/include/tophat/gx.inc",
"chars": 139,
"preview": "! IMPORTANT NOTE\n! These weight need to be multiplied by 1/2\n gx( 0) = 0.5_num + cell_frac_x\n gx( 1) = 0.5"
},
{
"path": "epoch1d/src/include/tophat/gxfac.inc",
"chars": 78,
"preview": " gx( 0) = 0.5_num + cell_frac_x\n gx( 1) = 0.5_num - cell_frac_x\n"
},
{
"path": "epoch1d/src/include/tophat/hx_dcell.inc",
"chars": 151,
"preview": "! IMPORTANT NOTE\n! These weight need to be multiplied by 1/2\n hx(dcellx ) = 0.5_num + cell_frac_x\n hx(dce"
},
{
"path": "epoch1d/src/include/tophat/part_var.inc",
"chars": 109,
"preview": " part_var = &\n gx( 0) * grid_var(cell_x1 ) &\n + gx( 1) * grid_var(cell_x1+1)\n"
},
{
"path": "epoch1d/src/include/triangle/b_part.inc",
"chars": 407,
"preview": " bx_part = &\n gx(-1) * bx(cell_x1-1) &\n + gx( 0) * bx(cell_x1 ) &\n + gx( 1) *"
},
{
"path": "epoch1d/src/include/triangle/e_part.inc",
"chars": 407,
"preview": " ex_part = &\n hx(-1) * ex(cell_x2-1) &\n + hx( 0) * ex(cell_x2 ) &\n + hx( 1) *"
},
{
"path": "epoch1d/src/include/triangle/gx.inc",
"chars": 162,
"preview": " cf2 = cell_frac_x**2\n gx(-1) = 0.25_num + cf2 + cell_frac_x\n gx( 0) = 1.5_num - 2.0_num * cf2\n "
},
{
"path": "epoch1d/src/include/triangle/gxfac.inc",
"chars": 177,
"preview": " cx2 = cell_frac_x**2\n gx(-1) = 0.5_num * (0.25_num + cx2 + cell_frac_x)\n gx( 0) = 0.75_num - cx2\n "
},
{
"path": "epoch1d/src/include/triangle/hx_dcell.inc",
"chars": 180,
"preview": " cf2 = cell_frac_x**2\n hx(dcellx-1) = 0.25_num + cf2 + cell_frac_x\n hx(dcellx ) = 1.5_num - 2.0_nu"
},
{
"path": "epoch1d/src/include/triangle/part_var.inc",
"chars": 154,
"preview": " part_var = &\n gx(-1) * grid_var(cell_x1-1) &\n + gx( 0) * grid_var(cell_x1 ) &\n "
},
{
"path": "epoch1d/src/io/calc_df.F90",
"chars": 42376,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/io/diagnostics.F90",
"chars": 116507,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/io/dist_fn.F90",
"chars": 22402,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/io/iterators.F90",
"chars": 16242,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/io/probes.F90",
"chars": 11778,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/io/simple_io.F90",
"chars": 10226,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/laser.f90",
"chars": 11575,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/pack.py",
"chars": 13457,
"preview": "#! /usr/bin/env python\n\n# Copyright (C) 2009-2019 University of Warwick\n#\n# This program is free software: you can redis"
},
{
"path": "epoch1d/src/pack.sh",
"chars": 8615,
"preview": "#! /bin/sh\n\n# Copyright (C) 2009-2019 University of Warwick\n#\n# This program is free software: you can redistribute it a"
},
{
"path": "epoch1d/src/parser/evaluate.F90",
"chars": 17294,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/parser/evaluator_blocks.F90",
"chars": 25887,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/parser/shunt.F90",
"chars": 24035,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/parser/stack.f90",
"chars": 3985,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/parser/tokenizer_blocks.f90",
"chars": 18566,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/particles.F90",
"chars": 28448,
"preview": "! Copyright (C) 2009-2019 University of Warwick\n!\n! This program is free software: you can redistribute it and/or modify"
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_1",
"chars": 527,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_10",
"chars": 2912,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_100",
"chars": 26762,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_11",
"chars": 3177,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_12",
"chars": 3442,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_13",
"chars": 3707,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_14",
"chars": 3972,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_15",
"chars": 4237,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_16",
"chars": 4502,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_17",
"chars": 4767,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_18",
"chars": 5032,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_19",
"chars": 5297,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_2",
"chars": 792,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_20",
"chars": 5562,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_21",
"chars": 5827,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_22",
"chars": 6092,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_23",
"chars": 6357,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_24",
"chars": 6622,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_25",
"chars": 6887,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_26",
"chars": 7152,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_27",
"chars": 7417,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_28",
"chars": 7682,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_29",
"chars": 7947,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_3",
"chars": 1057,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_30",
"chars": 8212,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_31",
"chars": 8477,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_32",
"chars": 8742,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_33",
"chars": 9007,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_34",
"chars": 9272,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_35",
"chars": 9537,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_36",
"chars": 9802,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_37",
"chars": 10067,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_38",
"chars": 10332,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_39",
"chars": 10597,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_4",
"chars": 1322,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_40",
"chars": 10862,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_41",
"chars": 11127,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_42",
"chars": 11392,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_43",
"chars": 11657,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_44",
"chars": 11922,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_45",
"chars": 12187,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_46",
"chars": 12452,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_47",
"chars": 12717,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_48",
"chars": 12982,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_49",
"chars": 13247,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_5",
"chars": 1587,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_50",
"chars": 13512,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_51",
"chars": 13777,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_52",
"chars": 14042,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_53",
"chars": 14307,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_54",
"chars": 14572,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_55",
"chars": 14837,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_56",
"chars": 15102,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_57",
"chars": 15367,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_58",
"chars": 15632,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_59",
"chars": 15897,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_6",
"chars": 1852,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_60",
"chars": 16162,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_61",
"chars": 16427,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_62",
"chars": 16692,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_63",
"chars": 16957,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_64",
"chars": 17222,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_65",
"chars": 17487,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_66",
"chars": 17752,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_67",
"chars": 18017,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_68",
"chars": 18282,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_69",
"chars": 18547,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_7",
"chars": 2117,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_70",
"chars": 18812,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_71",
"chars": 19077,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_72",
"chars": 19342,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_73",
"chars": 19607,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_74",
"chars": 19872,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_75",
"chars": 20137,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_76",
"chars": 20402,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_77",
"chars": 20667,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_78",
"chars": 20932,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_79",
"chars": 21197,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_8",
"chars": 2382,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_80",
"chars": 21462,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_81",
"chars": 21727,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_82",
"chars": 21992,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_83",
"chars": 22257,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_84",
"chars": 22522,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_85",
"chars": 22787,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_86",
"chars": 23052,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_87",
"chars": 23317,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_88",
"chars": 23582,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_89",
"chars": 23847,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
},
{
"path": "epoch1d/src/physics_packages/TABLES/binding_energy/be_9",
"chars": 2647,
"preview": "Q 1s 2s 2p 2p* 3s 3p 3p* 4s 3d 3d* 4p 4p* 5s "
}
]
// ... and 1178 more files (download for full content)
About this extraction
This page contains the full source code of the Warwick-Plasma/epoch GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1378 files (57.8 MB), approximately 15.2M tokens, and a symbol index with 127 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.