File indexing completed on 2025-11-30 10:11:42
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