Skip to content

Commit 0e12b39

Browse files
committed
Add Linear Compton Scattering
1 parent 1d04650 commit 0e12b39

15 files changed

Lines changed: 1491 additions & 23 deletions

File tree

epoch1d/src/constants.F90

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,13 @@ MODULE constants
229229
REAL(num), PARAMETER :: alpha_f = 7.297352575523020256850802729527158e-3_num
230230
! tau_c = h_bar / (m0 * c**2)
231231
REAL(num), PARAMETER :: tau_c = 1.288088667367242662108649212042082e-21_num
232+
233+
REAL(num), PARAMETER :: classical_re = 0.25_num / pi / epsilon0 / m0 * (q0 / c)**2
234+
REAL(num), PARAMETER :: sigma_thomson = 8.0_num * pi / 3.0_num * classical_re**2
235+
REAL(num), PARAMETER :: inv_mc0 = 1.0_num / mc0
236+
REAL(num), PARAMETER :: inv_m0c2 = 1.0_num / m0c2
237+
REAL(num), PARAMETER :: pire2 = pi * classical_re**2
238+
REAL(num), PARAMETER :: quarter_pire2 = 0.25_num * pire2
232239
#endif
233240

234241
! Constants used for bremsstrahlung with plasma screening

epoch1d/src/deck/deck_qed_block.F90

Lines changed: 31 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+
49+
use_binary_collisions = .FALSE.
50+
use_LCS = .FALSE.
51+
use_LCS_diff = .TRUE.
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,22 @@ SUBROUTINE qed_deck_finalise
7479
END IF
7580

7681
IF (use_qed) need_random_state = .TRUE.
82+
83+
use_binary_collisions = use_LCS
84+
85+
IF (use_binary_collisions) THEN
86+
DO j = 1, n_species
87+
IF (species_list(j)%species_type == c_species_id_photon) THEN
88+
species_list(j)%make_secondary_list = .TRUE.
89+
END IF
90+
IF (species_list(j)%species_type == c_species_id_electron) THEN
91+
species_list(j)%make_secondary_list = .TRUE.
92+
END IF
93+
IF (species_list(j)%species_type == c_species_id_positron) THEN
94+
species_list(j)%make_secondary_list = .TRUE.
95+
END IF
96+
END DO
97+
END IF
7798
#else
7899
IF (use_qed) THEN
79100
IF (rank == 0) THEN
@@ -87,7 +108,6 @@ SUBROUTINE qed_deck_finalise
87108
CALL abort_code(c_err_pp_options_missing)
88109
END IF
89110
#endif
90-
91111
END SUBROUTINE qed_deck_finalise
92112

93113

@@ -172,6 +192,16 @@ FUNCTION qed_block_handle_element(element, value) RESULT(errcode)
172192
RETURN
173193
END IF
174194

195+
IF(str_cmp(element, 'linear_compton_scattering')) THEN
196+
use_LCS = as_logical_print(value, element, errcode)
197+
RETURN
198+
END IF
199+
200+
IF(str_cmp(element, 'LCS_differential_cross')) THEN
201+
use_LCS_diff = as_logical_print(value, element, errcode)
202+
RETURN
203+
END IF
204+
175205
errcode = c_err_unknown_element
176206
#endif
177207

epoch1d/src/epoch1d.F90

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ PROGRAM pic
214214
! .FALSE. this time to use load balancing threshold
215215
IF (use_balance) CALL balance_workload(.FALSE.)
216216
CALL push_particles
217-
IF (use_particle_lists) THEN
217+
218+
IF (use_particle_lists .OR. use_binary_collisions) THEN
218219
! Check whether this is a step with collisions or collisional ionisation
219220
collision_step = (MODULO(step, coll_n_step) == coll_n_step - 1) &
220221
.AND. use_collisions
@@ -223,7 +224,8 @@ PROGRAM pic
223224

224225
! After this line, the particles can be accessed on a cell by cell basis
225226
! Using the particle_species%secondary_list property
226-
IF (use_split .OR. collision_step .OR. coll_ion_step) THEN
227+
IF (use_split .OR. collision_step .OR. coll_ion_step &
228+
.OR. use_binary_collisions) THEN
227229
CALL reorder_particles_to_grid
228230
END IF
229231

@@ -239,7 +241,15 @@ PROGRAM pic
239241
! Early beta version of particle splitting operator
240242
IF (use_split) CALL split_particles
241243

242-
IF (use_split .OR. collision_step .OR. coll_ion_step) THEN
244+
#ifdef PHOTONS
245+
IF (use_binary_collisions) THEN
246+
CALL do_binary_collisions
247+
END IF
248+
#endif
249+
250+
IF (use_split .OR. collision_step .OR. coll_ion_step &
251+
.OR. use_binary_collisions) THEN
252+
243253
CALL reattach_particles_to_mainlist
244254
END IF
245255
END IF

0 commit comments

Comments
 (0)