I’m trying to simulate the Deuterium - Deuterium interaction D(D,n)3He to create a neutron source using the Geant4 code.
However, from 100k events, where deuterons were fired on a deuterium target, not a single neutron was produced. Could this have something to do with the definition of the deuterium material?
My definition of the deuterium material is
G4Isotope* D = new G4Isotope("Deuteron", 1, 2, 2.0141018* CLHEP::g / CLHEP::mole);
G4Element* elD = new G4Element("Deuterium","elD", 1);
elD->AddIsotope(D, 1);
G4Material* matD = new G4Material("matD", 0.00018* CLHEP::g / CLHEP::cm3, 1);
matD->AddElement(elD, 1);
Is this the correct way to define the deuterium?
From earlier tests with deuterons on lithium I tested the deuteron particle beam and it does produce neutrons by means of the 7Li(D,n)8Be reaction, so I think the beam part of the simulation is working correctly.
I have been struggling with this issue for the longest time. You need to download the TENDL datafiles and set/create the G4PARTICLEHP environment variable to the dataset. The physics list you need to use is G4HadronPhysicsQGSP_BIC_AllHP and I also needed to use G4IonPhysicsPHP in order to get this to work.
Can you expand a little bit more about how you solved this problem? I am having the same issue and followed your steps such as downloading the TENDL datafiles but am unable to get any sort of neutron production from deuteron + Deuterium interactions. I have set the various particle environments in the following way:
Let me see if I can help, one thing I noticed was that I set the whole G4PARTICLEHPDATA to G4TENDL1.4. I did not set the proton or deuteron data because I believe G4PARTICLEHPDATA includes those. I also set my system environment variables manually, though I’m not sure that will make a difference.
Here was the Physics List that I used:
G4int verb = 1;
SetVerboseLevel(verb);
// mandatory for G4NuclideTable
const G4double meanLife = 1*picosecond;
G4NuclideTable::GetInstance()->SetMeanLifeThreshold(meanLife);
// Hadron Elastic scattering
RegisterPhysics( new G4HadronElasticPhysicsHP(verb));
// Hadron Inelastic physics
RegisterPhysics( new G4HadronPhysicsQGSP_BIC_AllHP(verb));
// Ion Elastic scattering
RegisterPhysics( new G4IonElasticPhysics(verb));
// Ion Inelastic physics
RegisterPhysics( new G4IonPhysicsPHP(verb));
// Gamma physics
RegisterPhysics( new GammaNuclearPhysics("gamma"));
// stopping Particles
RegisterPhysics( new G4StoppingPhysics(verb));
// Radioactive decay
RegisterPhysics(new G4RadioactiveDecayPhysics());
//decay
RegisterPhysics(new G4DecayPhysics());
I encountered the same problem. I printed out detailed information for each step and found that the G4TENDL1.4 cross-section library included with Geant4 does not contain DD reactions, and the cross-section values called internally are 0. This may be the fundamental reason neutrons cannot be produced. You can also check this folder through the terminal. My solution was to use data from Bosch’s paper to customize a cross-section txt file, and then freely select two reaction channels based on the reaction cross-sections. As a result, neutrons were successfully generated. By the way, you may need to adjust the step size to prevent the incident particles from losing all their energy in a single step.