Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // >> 24 // $Id: G4CoulombBarrier.cc,v 1.4 2005/06/04 13:29:20 jwellisc Exp $ >> 25 // GEANT4 tag $Name: geant4-07-01-patch-01 $ >> 26 // 27 // Hadronic Process: Nuclear De-excitations 27 // Hadronic Process: Nuclear De-excitations 28 // by V. Lara (Dec 1999) 28 // by V. Lara (Dec 1999) 29 // << 29 30 // 14-11-2007 modified barrier by JMQ (test30) << 31 // 15-11-2010 V.Ivanchenko use G4Pow and clean << 32 30 33 #include "G4CoulombBarrier.hh" 31 #include "G4CoulombBarrier.hh" 34 #include "G4PhysicalConstants.hh" << 32 #include "G4HadronicException.hh" 35 #include "G4SystemOfUnits.hh" << 33 #include <strstream> 36 #include "G4NuclearRadii.hh" << 37 34 38 G4CoulombBarrier::G4CoulombBarrier(G4int A, G4 << 35 G4CoulombBarrier::G4CoulombBarrier(const G4CoulombBarrier & ) : G4VCoulombBarrier() 39 : G4VCoulombBarrier(A, Z) << 40 { 36 { 41 factor = CLHEP::elm_coupling*Z; << 37 throw G4HadronicException(__FILE__, __LINE__, "G4CoulombBarrier::copy_constructor meant to not be accessable."); 42 SetParameters(0.4*G4NuclearRadii::RadiusCB(Z << 43 } 38 } 44 39 45 G4double G4CoulombBarrier::GetCoulombBarrier( << 40 46 G4int ARes, G4int ZRes, G4double U) c << 41 const G4CoulombBarrier & G4CoulombBarrier::operator=(const G4CoulombBarrier & ) 47 { 42 { 48 if (0 == theZ) { return 0.0; } << 43 throw G4HadronicException(__FILE__, __LINE__, "G4CoulombBarrier::operator= meant to not be accessable."); 49 G4double cb = factor*ZRes/(G4NuclearRadii::R << 44 return *this; 50 if (U > 0.0) { cb /= (1.0 + std::sqrt( U/((2 << 51 return cb; << 52 } 45 } 53 46 54 G4double G4CoulombBarrier::BarrierPenetrationF << 47 G4bool G4CoulombBarrier::operator==(const G4CoulombBarrier & ) const 55 { 48 { 56 // Data comes from << 49 return false; 57 // Dostrovsky, Fraenkel and Friedlander << 50 } 58 // Physical Review, vol 116, num. 3 1959 << 51 59 // << 52 G4bool G4CoulombBarrier::operator!=(const G4CoulombBarrier & ) const 60 // const G4int size = 5; << 53 { 61 // const G4double Zlist[size] = {10.0, 20.0, << 54 return true; 62 // const G4double Kprot[size] = {0.42, 0.58, << 55 } 63 // << 56 64 G4double res = 1.0; << 57 65 if(theZ == 1) { << 58 66 res = (aZ >= 70) ? 0.80 : << 59 G4double G4CoulombBarrier::GetCoulombBarrier(const G4int ARes, const G4int ZRes, const G4double U) const 67 (((0.2357e-5*aZ) - 0.42679e-3)*aZ + 0.2703 << 60 // Calculation of Coulomb potential energy (barrier) for outgoing fragment 68 res += 0.06*(theA - 1); << 61 { 69 << 62 G4double Barrier = 0.0; 70 } else if(theZ == 2 && theA <= 4) { << 63 if (ZRes > ARes || ARes < 1) { 71 res = (aZ >= 70) ? 0.98 : << 64 char errMessage[1024]; 72 (((0.23684e-5*aZ) - 0.42143e-3)*aZ + 0.252 << 65 std::ostrstream errOs(errMessage,1024); 73 res += 0.12*(4 - theA); << 66 errOs << "G4CoulombBarrier::GetCoulombBarrier: "; >> 67 errOs << "Wrong values for "; >> 68 errOs << "residual nucleus A = " << ARes << " "; >> 69 errOs << "and residual nucleus Z = " << ZRes << G4endl; >> 70 throw G4HadronicException(__FILE__, __LINE__, errMessage); >> 71 } >> 72 if (GetA() == 1 && GetZ() == 0) { >> 73 Barrier = 0.0; // Neutron Coulomb Barrier is 0 >> 74 } else { >> 75 G4double CompoundRadius = CalcCompoundRadius(static_cast<G4double>(ZRes)); >> 76 Barrier = elm_coupling/CompoundRadius * static_cast<G4double>(GetZ())*static_cast<G4double>(ZRes)/ >> 77 (std::pow(static_cast<G4double>(GetA()),1./3.) + std::pow(static_cast<G4double>(ARes),1./3.)); >> 78 >> 79 // Barrier penetration coeficient >> 80 G4double K = BarrierPenetrationFactor(ZRes); >> 81 >> 82 Barrier *= K; >> 83 >> 84 Barrier /= (1.0 + std::sqrt(U/(2.0*static_cast<G4double>(ARes)))); 74 } 85 } 75 return res; << 86 return Barrier; 76 } 87 } >> 88 >> 89 >> 90 77 91