Skip to content

Commit 0196b4d

Browse files
committed
Merge branch '4.20-devel'
2 parents 666daab + 9f50a88 commit 0196b4d

File tree

554 files changed

+27595
-1111
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

554 files changed

+27595
-1111
lines changed

epoch1d/Makefile

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ DEFINES := $(DEFINE)
234234
# Don't generate any output at all. Useful for benchmarking.
235235
#DEFINES += $(D)NO_IO
236236

237+
# Track ionisation/recombination rates on each particle
238+
#DEFINES += $(D)TRANSITION_RATES
239+
237240
# Specify charge and mass per particle rather than per species.
238241
# This is a legacy option which will be removed soon.
239242
#DEFINES += $(D)PER_PARTICLE_CHARGE_MASS
@@ -304,7 +307,7 @@ FC_INFO := $(shell ${FC} --version 2>/dev/null \
304307

305308

306309
SRCFILES = background_collisions.F90 balance.F90 bethe_heitler.F90 \
307-
boundary.F90 bremsstrahlung.F90 calc_df.F90 collisions.F90 \
310+
boundary.F90 bremsstrahlung.F90 calc_df.F90 collisions.F90 \
308311
collision_ionise.F90 constants.F90 current_smooth.F90 custom_deck.f90 \
309312
custom_laser.f90 custom_parser.f90 deck.F90 deck_boundaries_block.f90 \
310313
deck_bremsstrahlung_block.F90 deck_collision_block.F90 \
@@ -319,10 +322,11 @@ SRCFILES = background_collisions.F90 balance.F90 bethe_heitler.F90 \
319322
mpi_routines.F90 mpi_subtype_control.f90 numerics.f90 particle_id_hash.F90 \
320323
particle_migration.F90 particle_pointer_advance.f90 particle_temperature.F90 \
321324
particles.F90 partlist.F90 photons.F90 prefetch.F90 probes.F90 \
322-
random_generator.f90 redblack_module.f90 setup.F90 shape_functions.F90 \
323-
shared_data.F90 shunt.F90 simple_io.F90 split_particle.F90 stack.f90 \
324-
strings.f90 strings_advanced.f90 terminal_controls.F90 timer.f90 \
325-
tokenizer_blocks.f90 utilities.f90 version_data.F90 welcome.F90 window.F90
325+
random_generator.f90 recombination.F90 redblack_module.f90 \
326+
secondary_list.F90 setup.F90 shape_functions.F90 shared_data.F90 shunt.F90 \
327+
simple_io.F90 stack.f90 strings.f90 strings_advanced.f90 \
328+
terminal_controls.F90 timer.f90 tokenizer_blocks.f90 utilities.f90 \
329+
version_data.F90 welcome.F90 window.F90
326330

327331
OBJFILES := $(SRCFILES:.f90=.o)
328332
OBJFILES := $(OBJFILES:.F90=.o)
@@ -489,7 +493,7 @@ deck_particle_probe_block.o: deck_particle_probe_block.F90 probes.o \
489493
strings_advanced.o utilities.o
490494
deck_qed_block.o: deck_qed_block.F90 strings_advanced.o utilities.o
491495
deck_species_block.o: deck_species_block.F90 partlist.o setup.o simple_io.o \
492-
strings_advanced.o utilities.o
496+
shared_data.o strings_advanced.o utilities.o
493497
deck_stencil_block.o: deck_stencil_block.f90 fields.o strings_advanced.o
494498
deck_subset_block.o: deck_subset_block.F90 particle_id_hash.o \
495499
strings_advanced.o utilities.o
@@ -502,8 +506,8 @@ dist_fn.o: dist_fn.F90 mpi_subtype_control.o particles.o $(SDFMOD)
502506
epoch1d.o: epoch1d.F90 background_collisions.o balance.o bremsstrahlung.o \
503507
calc_df.o collisions.o collision_ionise.o current_smooth.o deck.o \
504508
diagnostics.o fields.o finish.o helper.o ic_module.o injectors.o ionise.o \
505-
mpi_routines.o particle_migration.o particles.o photons.o setup.o \
506-
split_particle.o welcome.o window.o
509+
mpi_routines.o particle_migration.o particles.o photons.o recombination.o \
510+
secondary_list.o setup.o welcome.o window.o
507511
$(FC) -c $(FFLAGS) $(FLTCONS) -o $(OBJDIR)/$@ $(PREPROFLAGS) $<
508512
evaluate.o: evaluate.F90 shunt.o stack.o
509513
evaluator_blocks.o: evaluator_blocks.F90 custom_parser.o stack.o strings.o
@@ -516,8 +520,8 @@ helper.o: helper.F90 balance.o boundary.o deltaf_loader.o partlist.o simple_io.o
516520
ic_module.o: ic_module.f90 helper.o shared_data.o
517521
injectors.o: injectors.F90 evaluate.o file_injectors.o particle_temperature.o \
518522
partlist.o random_generator.o utilities.o
519-
ionise.o: ionise.F90 boundary.o numerics.o partlist.o random_generator.o \
520-
utilities.o
523+
ionise.o: ionise.F90 boundary.o calc_df.o numerics.o partlist.o \
524+
random_generator.o utilities.o
521525
iterators.o: iterators.F90 particle_id_hash.o particle_pointer_advance.o \
522526
partlist.o
523527
laser.o: laser.f90 custom_laser.o evaluate.o
@@ -532,19 +536,20 @@ particle_temperature.o: particle_temperature.F90 constants.o evaluate.o \
532536
random_generator.o
533537
particles.o: particles.F90 boundary.o partlist.o prefetch.o
534538
partlist.o: partlist.F90 particle_id_hash.o random_generator.o shared_data.o
535-
photons.o: photons.F90 partlist.o
539+
photons.o: photons.F90 collisions.o partlist.o utilities.o
536540
prefetch.o: prefetch.F90 shared_data.o
537541
probes.o: probes.F90 partlist.o $(SDFMOD)
538542
random_generator.o: random_generator.f90
543+
recombination.o: recombination.F90 calc_df.o collisions.o collision_ionise.o
539544
redblack_module.o: redblack_module.f90 partlist.o
545+
secondary_list.o: secondary_list.F90 boundary.o
540546
setup.o: setup.F90 balance.o boundary.o constants.o fields.o helper.o \
541547
injectors.o laser.o mpi_routines.o mpi_subtype_control.o particle_id_hash.o \
542-
shunt.o split_particle.o timer.o version_data.o welcome.o window.o $(SDFMOD)
548+
shunt.o timer.o version_data.o welcome.o window.o $(SDFMOD)
543549
shape_functions.o: shape_functions.F90 constants.o
544550
shared_data.o: shared_data.F90 constants.o $(SDFMOD)
545551
shunt.o: shunt.F90 evaluator_blocks.o tokenizer_blocks.o utilities.o
546552
simple_io.o: simple_io.F90 boundary.o mpi_subtype_control.o
547-
split_particle.o: split_particle.F90 boundary.o
548553
stack.o: stack.f90 constants.o
549554
strings.o: strings.f90 shared_data.o
550555
strings_advanced.o: strings_advanced.f90 evaluate.o shunt.o

epoch1d/example_decks/ionisation.deck

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ end:control
2424
#
2525
# use_collisions = T # Collisions must be on for collisional ionisation
2626
# collisional_ionisation = T # Switches on collisional ionisation
27+
# use_nanbu = T
2728
#
2829
# end:collisions
2930

@@ -34,6 +35,7 @@ begin:constant
3435
den_max = 10.0 * critical(omega)
3536
den_preplasma = 1.0e18
3637
len_scale = 5.0 * micron
38+
ion_charge_state = 22 # Initial ionisation level of ions
3739
end:constant
3840

3941

@@ -47,13 +49,15 @@ begin:species
4749
name = Electron
4850
charge = -1.0
4951
mass = 1.0
52+
number_density = den_max * ion_charge_state
5053
nparticles = nx * 5
54+
identify:electron
5155
end:species
5256

5357

5458
begin:species
5559
name = Palladium
56-
charge = 22.0
60+
charge = ion_charge_state
5761
atomic_no = 46
5862
mass = 1836.2 * 105.0
5963

@@ -67,13 +71,6 @@ begin:species
6771
end:species
6872

6973

70-
begin:species
71-
name = Electron
72-
number_density = number_density(Palladium) * 22.0
73-
temperature = 1e6
74-
end:species
75-
76-
7774
begin:output
7875

7976
# Simulated time between output dumps

epoch1d/src/constants.F90

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ MODULE constants
125125
INTEGER, PARAMETER :: c_err_io_error = 2**15
126126
INTEGER, PARAMETER :: c_err_bad_setup = 2**16
127127
INTEGER, PARAMETER :: c_err_window = 2**17
128-
INTEGER, PARAMETER :: c_err_max = 17
128+
INTEGER, PARAMETER :: c_err_qed = 2**18
129+
INTEGER, PARAMETER :: c_err_max = 18
129130

130131
CHARACTER(LEN=*), PARAMETER :: c_err_char(0:c_err_max) = (/ &
131132
'unknown_block ', &
@@ -145,7 +146,8 @@ MODULE constants
145146
'pp_options_wrong ', &
146147
'io_error ', &
147148
'bad_setup ', &
148-
'window '/)
149+
'window ', &
150+
'qed '/)
149151

150152
INTEGER, PARAMETER :: c_ds_first = 1
151153
INTEGER, PARAMETER :: c_ds_last = 2
@@ -229,6 +231,14 @@ MODULE constants
229231
REAL(num), PARAMETER :: alpha_f = 7.297352575523020256850802729527158e-3_num
230232
! tau_c = h_bar / (m0 * c**2)
231233
REAL(num), PARAMETER :: tau_c = 1.288088667367242662108649212042082e-21_num
234+
REAL(num), PARAMETER :: classical_re = 0.25_num / pi / epsilon0 / m0 &
235+
* (q0 / c)**2
236+
REAL(num), PARAMETER :: sigma_lBW_max = pi * classical_re**2 * &
237+
0.6817055055017870382984600045421994441648264608312_num
238+
REAL(num), PARAMETER :: inv_c = 1.0_num / c
239+
REAL(num), PARAMETER :: inv_mc0_sq = 1.0_num / mc0 / mc0
240+
REAL(num), PARAMETER :: half_pire2 = 0.5_num * pi * classical_re**2
241+
REAL(num), PARAMETER :: quarter_pire2 = 0.25_num * pi * classical_re**2
232242
#endif
233243

234244
! Constants used for bremsstrahlung with plasma screening
@@ -294,6 +304,7 @@ MODULE constants
294304
INTEGER(i8), PARAMETER :: c_def_use_mpi3 = 2**25
295305
INTEGER(i8), PARAMETER :: c_def_bremsstrahlung = 2**26
296306
INTEGER(i8), PARAMETER :: c_def_probe_time = 2**27
307+
INTEGER(i8), PARAMETER :: c_def_transition_rates = 2**28
297308

298309
! Stagger types
299310
INTEGER, PARAMETER :: c_stagger_ex = c_stagger_face_x
@@ -530,6 +541,8 @@ MODULE constants
530541
INTEGER, PARAMETER :: c_func_drifty = 45
531542
INTEGER, PARAMETER :: c_func_driftz = 46
532543
INTEGER, PARAMETER :: c_func_arctan2 = 47
544+
INTEGER, PARAMETER :: c_func_min = 48
545+
INTEGER, PARAMETER :: c_func_max = 49
533546

534547
INTEGER, PARAMETER :: c_func_custom_lowbound = 4096
535548

@@ -633,7 +646,12 @@ MODULE constants
633646
INTEGER, PARAMETER :: c_dump_part_opdepth_brem = 71
634647
INTEGER, PARAMETER :: c_dump_probe_time = 72
635648
INTEGER, PARAMETER :: c_dump_cou_log = 73
636-
INTEGER, PARAMETER :: num_vars_to_dump = 73
649+
INTEGER, PARAMETER :: c_dump_part_rate_fi = 74
650+
INTEGER, PARAMETER :: c_dump_part_rate_ci = 75
651+
INTEGER, PARAMETER :: c_dump_part_rate_dr = 76
652+
INTEGER, PARAMETER :: c_dump_part_rate_rr = 77
653+
INTEGER, PARAMETER :: c_dump_part_rate_3br = 78
654+
INTEGER, PARAMETER :: num_vars_to_dump = 78
637655

638656
INTEGER, PARAMETER :: c_subset_random = 1
639657
INTEGER, PARAMETER :: c_subset_gamma_min = 2

epoch1d/src/deck/deck_collision_block.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ SUBROUTINE collision_deck_finalise
139139

140140
END IF
141141

142-
IF (use_collisional_ionisation) use_particle_lists = .TRUE.
142+
use_particle_lists = use_particle_lists .OR. use_collisional_ionisation
143143

144144
END SUBROUTINE collision_deck_finalise
145145

epoch1d/src/deck/deck_control_block.F90

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,15 @@ FUNCTION control_block_handle_element(element, value) RESULT(errcode)
331331
.OR. str_cmp(element, 'bsi')) THEN
332332
use_bsi = as_logical_print(value, element, errcode)
333333

334+
ELSE IF (str_cmp(element, 'use_radiative_recombination')) THEN
335+
use_radiative_recombination = as_logical_print(value, element, errcode)
336+
337+
ELSE IF (str_cmp(element, 'use_dielectronic_recombination')) THEN
338+
use_dielectronic_recombination = as_logical_print(value, element, errcode)
339+
340+
ELSE IF (str_cmp(element, 'use_three_body_recombination')) THEN
341+
use_three_body_recombination = as_logical_print(value, element, errcode)
342+
334343
ELSE IF (str_cmp(element, 'particle_tstart')) THEN
335344
particle_push_start_time = as_real_print(value, element, errcode)
336345

@@ -427,6 +436,9 @@ FUNCTION control_block_handle_element(element, value) RESULT(errcode)
427436
ELSE IF (str_cmp(element, 'smooth_iterations')) THEN
428437
smooth_its = as_integer_print(value, element, errcode)
429438

439+
ELSE IF (str_cmp(element, 'recombine_n_step')) THEN
440+
recombine_n_step = as_integer_print(value, element, errcode)
441+
430442
ELSE IF (str_cmp(element, 'smooth_compensation')) THEN
431443
IF (as_logical_print(value, element, errcode)) smooth_comp_its = 1
432444

epoch1d/src/deck/deck_io_block.F90

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,23 @@ FUNCTION io_block_handle_element(element, value) RESULT(errcode)
611611
elementselected = c_dump_part_work_z_total
612612
#endif
613613

614+
#ifdef TRANSITION_RATES
615+
ELSE IF (str_cmp(element, 'rate_fi')) THEN
616+
elementselected = c_dump_part_rate_fi
617+
618+
ELSE IF (str_cmp(element, 'rate_ci')) THEN
619+
elementselected = c_dump_part_rate_ci
620+
621+
ELSE IF (str_cmp(element, 'rate_dr')) THEN
622+
elementselected = c_dump_part_rate_dr
623+
624+
ELSE IF (str_cmp(element, 'rate_rr')) THEN
625+
elementselected = c_dump_part_rate_rr
626+
627+
ELSE IF (str_cmp(element, 'rate_3br')) THEN
628+
elementselected = c_dump_part_rate_3br
629+
#endif
630+
614631
ELSE IF (str_cmp(element, 'ex')) THEN
615632
elementselected = c_dump_ex
616633

epoch1d/src/deck/deck_qed_block.F90

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ SUBROUTINE qed_deck_initialise
4545
use_radiation_reaction = .TRUE.
4646
produce_photons = .FALSE.
4747
photon_dynamics = .FALSE.
48+
use_binary_collisions = .FALSE.
49+
use_LBW = .FALSE.
50+
use_LBW_diff = .TRUE.
51+
LBW_amp_factor = 1.0_num
4852
END IF
4953
#endif
5054

@@ -57,6 +61,7 @@ SUBROUTINE qed_deck_finalise
5761
INTEGER :: io, iu
5862
#ifdef PHOTONS
5963
LOGICAL :: exists
64+
INTEGER :: j
6065

6166
IF (deck_state == c_ds_first) RETURN
6267

@@ -74,6 +79,23 @@ SUBROUTINE qed_deck_finalise
7479
END IF
7580

7681
IF (use_qed) need_random_state = .TRUE.
82+
83+
use_binary_collisions = use_LBW
84+
IF (use_binary_collisions) THEN
85+
DO j = 1, n_species
86+
IF (species_list(j)%species_type == c_species_id_photon) THEN
87+
species_list(j)%make_secondary_list = .TRUE.
88+
END IF
89+
IF (species_list(j)%species_type == c_species_id_electron) THEN
90+
species_list(j)%make_secondary_list = .TRUE.
91+
END IF
92+
IF (species_list(j)%species_type == c_species_id_positron) THEN
93+
species_list(j)%make_secondary_list = .TRUE.
94+
END IF
95+
END DO
96+
END IF
97+
98+
lbw_amp_factor = MAX(lbw_amp_factor, 1.0_num)
7799
#else
78100
IF (use_qed) THEN
79101
IF (rank == 0) THEN
@@ -87,7 +109,6 @@ SUBROUTINE qed_deck_finalise
87109
CALL abort_code(c_err_pp_options_missing)
88110
END IF
89111
#endif
90-
91112
END SUBROUTINE qed_deck_finalise
92113

93114

@@ -172,6 +193,21 @@ FUNCTION qed_block_handle_element(element, value) RESULT(errcode)
172193
RETURN
173194
END IF
174195

196+
IF(str_cmp(element, 'linear_breit_wheeler')) THEN
197+
use_LBW = as_logical_print(value, element, errcode)
198+
RETURN
199+
END IF
200+
201+
IF(str_cmp(element, 'LBW_differential_cross')) THEN
202+
use_LBW_diff = as_logical_print(value, element, errcode)
203+
RETURN
204+
END IF
205+
206+
IF (str_cmp(element, 'amplify_LBW_factor')) THEN
207+
LBW_amp_factor = as_real_print(value, element, errcode)
208+
RETURN
209+
END IF
210+
175211
errcode = c_err_unknown_element
176212
#endif
177213

0 commit comments

Comments
 (0)