Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // G4MicroElecLOPhononModel.cc, 28 // 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] 29 // Q. Gibaru is with CEA [a], ONERA [b] and CNES [c] 30 // M. Raine and D. Lambert are with CEA [a] 31 // 32 // A part of this work has been funded by the French space agency(CNES[c]) 33 // [a] CEA, DAM, DIF - 91297 ARPAJON, France 34 // [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France 35 // [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France 36 // 37 // Based on the following publications 38 // 39 // - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine 40 // Electron emission yield for low energy electrons: 41 // Monte Carlo simulation and experimental comparison for Al, Ag, and Si 42 // Journal of Applied Physics 121 (2017) 215107. 43 // https://doi.org/10.1063/1.4984761 44 // 45 // - P. Caron, 46 // Study of Electron-Induced Single-Event Upset in Integrated Memory Devices 47 // PHD, 16th October 2019 48 // 49 // - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, 50 // Geant4 physics processes for microdosimetry and secondary electron emission simulation : 51 // Extension of MicroElec to very low energies and new materials 52 // NIM B, 2020, in review. 53 // 54 //////////////////////////////////////////////////////////////////////// 55 56 #include "G4MicroElecLOPhononModel.hh" 57 #include "G4SystemOfUnits.hh" 58 #include "G4PhysicalConstants.hh" 59 60 G4MicroElecLOPhononModel::G4MicroElecLOPhononModel(const G4ParticleDefinition*, 61 const G4String& nam) 62 : G4VEmModel(nam),isInitialised(false) 63 { 64 G4cout << "Phonon model is constructed " << G4endl 65 << "Phonon Energy = " << phononEnergy / eV << " eV "<< G4endl; 66 } 67 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 69 70 void G4MicroElecLOPhononModel::Initialise(const G4ParticleDefinition*, 71 const G4DataVector& /*cuts*/) 72 { 73 if (isInitialised) { return; } 74 fParticleChangeForGamma = GetParticleChangeForGamma(); 75 isInitialised = true; 76 } 77 78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 79 80 G4double G4MicroElecLOPhononModel:: 81 CrossSectionPerVolume(const G4Material* material, 82 const G4ParticleDefinition* p, 83 G4double ekin, 84 G4double, G4double) 85 { 86 const G4double e = CLHEP::eplus / CLHEP::coulomb; 87 const G4double m0 = CLHEP::electron_mass_c2 / (CLHEP::c_squared*CLHEP::kg); 88 const G4double h = CLHEP::hbar_Planck * CLHEP::s/ (CLHEP::m2*CLHEP::kg); 89 const G4double eps0 = CLHEP::epsilon0 * CLHEP::m/ (CLHEP::farad); 90 const G4double kb = CLHEP::k_Boltzmann * CLHEP::kelvin/ CLHEP::joule; 91 const G4double T = 300; 92 G4double eps = 9; 93 G4double einf = 3; 94 95 const G4DataVector cuts; 96 Initialise(p, cuts); 97 98 if (material->GetName() != "G4_SILICON_DIOXIDE" 99 && material->GetName() != "G4_ALUMINUM_OXIDE" 100 && material->GetName() != "G4_BORON_NITRIDE") 101 { 102 return 1 / DBL_MAX; 103 } 104 105 G4double E =(ekin/eV)*e; 106 107 if (material->GetName() == "G4_ALUMINUM_OXIDE") 108 { 109 eps = 9; 110 einf = 3; 111 phononEnergy = 0.1*eV; 112 } 113 if (material->GetName() == "G4_SILICON_DIOXIDE") 114 { 115 eps = 3.84; 116 einf = 2.25; 117 phononEnergy = (0.75*0.153+0.25*0.063 )* eV; 118 } 119 120 // Nuclear Instruments and Methods in Physics Research Section B: 121 // Beam Interactions with Materials and Atoms 122 // Volume 454, 1 September 2019, Pages 14 - 22 123 // Nuclear Instruments and Methods in Physics Research Section B: 124 // Beam Interactions with Materials and Atoms 125 // Monte Carlo modeling of low - energy electron - induced secondary 126 // electron emission yields in micro - architected boron nitride surfaces 127 128 if (material->GetName() == "G4_BORON_NITRIDE") 129 { 130 eps = 7.1; 131 einf = 4.5; 132 phononEnergy = 0.17 * eV; 133 } 134 135 G4double hw = (phononEnergy / eV) * e; 136 G4double n = 1.0 / (std::exp(hw / (kb*T)) - 1); //Phonon distribution 137 138 if (absor) // Absorption 139 { 140 Eprim = E + hw; 141 signe = -1; 142 } 143 else // Emission 144 { 145 Eprim = E - hw; 146 signe = +1; 147 } 148 149 G4double racine = std::sqrt(1 + ((-signe*hw) / E)); 150 G4double P = (std::pow(e, 2) / (4 * pi*eps0*h*h)) * (n + 0.5 + signe*0.5) * ((1 / einf) - (1 / eps)) * std::sqrt(m0 / (2 * E)) *hw* std::log((1 + racine) / (signe * 1 + ((-signe)*racine))); 151 G4double MFP = (std::sqrt(2 * E / m0) / P)*m; 152 153 if (material->GetName() == "G4_SILICON_DIOXIDE") { return 2 / MFP; } 154 return 1/(MFP); 155 // correction CI 12/1/2023 add 156 } 157 158 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 159 160 void G4MicroElecLOPhononModel:: 161 SampleSecondaries(std::vector<G4DynamicParticle*>*, 162 const G4MaterialCutsCouple*, 163 const G4DynamicParticle* aDynamicElectron, 164 G4double, G4double) 165 { 166 G4double E = aDynamicElectron->GetKineticEnergy(); 167 Eprim = (absor) ? E + phononEnergy : E - phononEnergy; 168 169 G4double rand = G4UniformRand(); 170 G4double B = (E + Eprim + 2 * std::sqrt(E*Eprim)) 171 / (E + Eprim - 2 * std::sqrt(E*Eprim)); 172 G4double cosTheta = ((E + Eprim) / (2 * std::sqrt(E*Eprim))) 173 * (1 - std::pow(B, rand)) + std::pow(B, rand); 174 if(Interband) 175 { 176 cosTheta = 1 - 2 * G4UniformRand(); //Isotrope 177 } 178 G4double phi = twopi * G4UniformRand(); 179 G4ThreeVector zVers = aDynamicElectron->GetMomentumDirection(); 180 G4ThreeVector xVers = zVers.orthogonal(); 181 G4ThreeVector yVers = zVers.cross(xVers); 182 183 G4double xDir = std::sqrt(1. - cosTheta*cosTheta); 184 G4double yDir = xDir; 185 xDir *= std::cos(phi); 186 yDir *= std::sin(phi); 187 188 G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers)); 189 190 fParticleChangeForGamma->ProposeMomentumDirection(zPrimeVers.unit()); 191 fParticleChangeForGamma->SetProposedKineticEnergy(Eprim); 192 } 193 194 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 195