File indexing completed on 2025-10-31 09:02:31
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 #ifndef G4CompetitiveFission_h
0032 #define G4CompetitiveFission_h 1
0033 
0034 #include "G4VEvaporationChannel.hh"
0035 #include "G4Fragment.hh"
0036 #include "G4VEmissionProbability.hh"
0037 #include "G4FissionParameters.hh"
0038 #include <CLHEP/Units/SystemOfUnits.h>
0039 #include "G4Exp.hh"
0040 
0041 class G4VFissionBarrier;
0042 class G4VEmissionProbability;
0043 class G4VLevelDensityParameter;
0044 class G4PairingCorrection;
0045 
0046 class G4CompetitiveFission : public G4VEvaporationChannel
0047 {
0048 public:
0049   
0050   G4CompetitiveFission();
0051   ~G4CompetitiveFission() override;
0052 
0053   void Initialise() override;
0054   
0055   G4Fragment* EmittedFragment(G4Fragment* theNucleus) override;
0056 
0057   G4double GetEmissionProbability(G4Fragment* theNucleus) override;
0058 
0059   void SetFissionBarrier(G4VFissionBarrier * aBarrier);
0060 
0061   void SetEmissionStrategy(G4VEmissionProbability * aFissionProb);
0062 
0063   void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity);
0064 
0065   inline G4double GetFissionBarrier(void) const;
0066 
0067   inline G4double GetLevelDensityParameter(void) const;
0068 
0069   inline G4double GetMaximalKineticEnergy(void) const;
0070 
0071   G4CompetitiveFission(const G4CompetitiveFission &right) = delete;
0072   const G4CompetitiveFission & operator=(const G4CompetitiveFission &right) = delete;
0073   G4bool operator==(const G4CompetitiveFission &right) const = delete;
0074   G4bool operator!=(const G4CompetitiveFission &right) const = delete;
0075 
0076 private:
0077 
0078   
0079   G4int FissionAtomicNumber(G4int A);
0080 
0081   G4double MassDistribution(G4double x, G4int A);
0082 
0083   
0084   G4int FissionCharge(G4int A, G4int Z, G4double Af);
0085 
0086   
0087   G4double FissionKineticEnergy(G4int A, G4int Z,
0088                 G4int Af1, G4int Zf1,
0089                 G4int Af2, G4int Zf2,
0090                 G4double U, G4double Tmax);
0091     
0092   inline G4double Ratio(G4double A, G4double A11, 
0093                         G4double B1, G4double A00) const;
0094 
0095   inline G4double SymmetricRatio(G4int A, G4double A11) const;
0096 
0097   inline G4double AsymmetricRatio(G4int A, G4double A11) const;
0098 
0099   inline G4double LocalExp(G4double x) const;
0100 
0101   
0102   G4double maxKineticEnergy{0.0};
0103   G4double fissionBarrier{0.0};
0104   G4double fissionProbability{0.0};
0105   G4double fFactor{1.0};
0106 
0107   
0108   G4VFissionBarrier* theFissionBarrierPtr;
0109 
0110   
0111   G4VEmissionProbability* theFissionProbabilityPtr;
0112 
0113   
0114   G4VLevelDensityParameter* theLevelDensityPtr;
0115   G4PairingCorrection* pairingCorrection;
0116 
0117   G4bool myOwnFissionProbability{true};
0118   G4bool myOwnFissionBarrier{true};
0119   G4bool myOwnLevelDensity{true};
0120 
0121   G4FissionParameters theParam;
0122   
0123   G4int theSecID;  
0124   G4bool isInitialised{false};
0125 };
0126 
0127 inline G4double G4CompetitiveFission::GetFissionBarrier(void) const 
0128 { 
0129   return fissionBarrier; 
0130 }
0131 
0132 inline G4double G4CompetitiveFission::GetMaximalKineticEnergy(void) const 
0133 { 
0134   return maxKineticEnergy; 
0135 }
0136 
0137 inline
0138 G4double G4CompetitiveFission::Ratio(G4double A, G4double A11,
0139                      G4double B1, G4double A00) const
0140 {
0141   G4double res;
0142   if (A11 >= A*0.5 && A11 <= (A00+10.0)) {
0143     G4double x = (A11-A00)/A;
0144     res = 1.0 - B1*x*x;
0145   } else {
0146     G4double x = 10.0/A;
0147     res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10.0)/A;
0148   }
0149   return res;
0150 }
0151 
0152 inline
0153 G4double G4CompetitiveFission::AsymmetricRatio(G4int A, G4double A11) const
0154 {
0155   return Ratio(G4double(A),A11,23.5,134.0);
0156 }
0157 
0158 inline
0159 G4double G4CompetitiveFission::SymmetricRatio(G4int A, G4double A11) const
0160 {
0161   G4double A0 = G4double(A);
0162   return Ratio(A0,A11,5.32,A0*0.5);
0163 }
0164 
0165 inline G4double G4CompetitiveFission::LocalExp(G4double x) const
0166 {
0167   return (std::abs(x) < 8.) ? G4Exp(-0.5*x*x) : 0.0;
0168 }
0169 
0170 #endif
0171 
0172