Ignore:
Timestamp:
May 28, 2009, 4:26:57 PM (15 years ago)
Author:
garnier
Message:

maj sur la beta de geant 4.9.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/de_excitation/fission/src/G4CompetitiveFission.cc

    r1007 r1055  
    2525//
    2626//
    27 // $Id: G4CompetitiveFission.cc,v 1.9 2008/11/20 13:46:27 dennis Exp $
    28 // GEANT4 tag $Name: geant4-09-02 $
     27// $Id: G4CompetitiveFission.cc,v 1.11 2009/03/13 18:57:17 vnivanch Exp $
     28// GEANT4 tag $Name: geant4-09-03-beta-cand-01 $
    2929//
    3030// Hadronic Process: Nuclear De-excitations
    3131// by V. Lara (Oct 1998)
     32//
     33// J. M. Quesada (March 2009). Bugs fixed:
     34//          - Full relativistic calculation (Lorentz boosts)
     35//          - Fission pairing energy is included in fragment excitation energies
     36// Now Energy and momentum are conserved in fission
    3237
    3338#include "G4CompetitiveFission.hh"
     
    127132    }
    128133
     134
    129135    // Atomic Mass of Nucleus (in MeV)
    130     G4double M = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(Z,A)/MeV;
     136    G4double M = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(Z,A);
     137
    131138    // Nucleus Momentum
    132139    G4LorentzVector theNucleusMomentum = theNucleus.GetMomentum();
     
    147154    G4double FragmentsExcitationEnergy = 0.0;
    148155    G4double FragmentsKineticEnergy = 0.0;
     156
     157    //JMQ 04/03/09 It will be used latter to fix the bug in energy conservation
     158    G4double FissionPairingEnergy=G4PairingCorrection::GetInstance()->GetFissionPairingCorrection(A,Z);
    149159
    150160    G4int Trials = 0;
     
    162172        if (A2 < 1 || Z2 < 0)
    163173            throw G4HadronicException(__FILE__, __LINE__, "G4CompetitiveFission::BreakUp: Can't define second fragment! ");
    164         M2 = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(Z2,A2)/MeV;
     174
     175        M2 = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(Z2,A2);
    165176
    166177        // Check that fragment masses are less or equal than total energy
    167         //  if (M1 + M2 > theNucleusMomentum.mag()/MeV)
    168         if (M1 + M2 > theNucleusMomentum.e()/MeV)
     178        if (M1 + M2 > theNucleusMomentum.e())
    169179            throw G4HadronicException(__FILE__, __LINE__, "G4CompetitiveFission::BreakUp: Fragments Mass > Total Energy");
    170180
    171181        // Maximal Kinetic Energy (available energy for fragments)
    172         //  G4double Tmax = theNucleusMomentum.mag()/MeV - M1 - M2;
    173182        G4double Tmax = M + U - M1 - M2;
    174183
     
    180189   
    181190        // Excitation Energy
    182         FragmentsExcitationEnergy = Tmax - FragmentsKineticEnergy;
     191        //      FragmentsExcitationEnergy = Tmax - FragmentsKineticEnergy;
     192        // JMQ 04/03/09 BUG FIXED: in order to fulfill energy conservation the
     193        // fragments carry the fission pairing energy in form of
     194        //excitation energy
     195
     196        FragmentsExcitationEnergy = Tmax - FragmentsKineticEnergy+FissionPairingEnergy;
     197
     198    } while (FragmentsExcitationEnergy < 0.0 && Trials++ < 100);
    183199   
    184     } while (FragmentsExcitationEnergy < 0.0 && Trials++ < 100);
    185  
    186200 
    187201
     
    190204 
    191205
    192   // while (FragmentsExcitationEnergy < 0 && Trials < 100);
    193  
    194   // Fragment 1
     206    // while (FragmentsExcitationEnergy < 0 && Trials < 100);
     207 
     208    // Fragment 1
    195209    G4double U1 = FragmentsExcitationEnergy * (static_cast<G4double>(A1)/static_cast<G4double>(A));
    196210    // Fragment 2
     
    198212
    199213
    200     G4double Pmax = std::sqrt( 2 * ( ( (M1+U1)*(M2+U2) ) /
    201                                 ( (M1+U1)+(M2+U2) ) ) * FragmentsKineticEnergy);
    202 
    203     G4ParticleMomentum momentum1 = IsotropicVector( Pmax );
    204     G4ParticleMomentum momentum2( -momentum1 );
     214    //JMQ  04/03/09 Full relativistic calculation is performed
     215    //
     216    G4double Fragment1KineticEnergy=(FragmentsKineticEnergy*(FragmentsKineticEnergy+2*(M2+U2)))/(2*(M1+U1+M2+U2+FragmentsKineticEnergy));
     217    G4ParticleMomentum Momentum1(IsotropicVector(std::sqrt(Fragment1KineticEnergy*(Fragment1KineticEnergy+2*(M1+U1)))));
     218    G4ParticleMomentum Momentum2(-Momentum1);
     219    G4LorentzVector FourMomentum1(Momentum1,std::sqrt(Momentum1.mag2()+(M1+U1)*(M1+U1)));
     220    G4LorentzVector FourMomentum2(Momentum2,std::sqrt(Momentum2.mag2()+(M2+U2)*(M2+U2)));
     221
     222    //JMQ 04/03/09 now we do Lorentz boosts (instead of Galileo boosts)
     223    FourMomentum1.boost(theNucleusMomentum.boostVector());
     224    FourMomentum2.boost(theNucleusMomentum.boostVector());
     225   
     226    //////////JMQ 04/03: Old version calculation is commented
     227    // There was vioation of energy momentum conservation
     228
     229    //    G4double Pmax = std::sqrt( 2 * ( ( (M1+U1)*(M2+U2) ) /
     230    //                          ( (M1+U1)+(M2+U2) ) ) * FragmentsKineticEnergy);
     231
     232    //G4ParticleMomentum momentum1 = IsotropicVector( Pmax );
     233    //  G4ParticleMomentum momentum2( -momentum1 );
    205234
    206235    // Perform a Galileo boost for fragments
    207     momentum1 += (theNucleusMomentum.boostVector() * (M1+U1));
    208     momentum2 += (theNucleusMomentum.boostVector() * (M2+U2));
     236    //    momentum1 += (theNucleusMomentum.boostVector() * (M1+U1));
     237    //    momentum2 += (theNucleusMomentum.boostVector() * (M2+U2));
    209238
    210239
    211240    // Create 4-momentum for first fragment
    212241    // Warning!! Energy conservation is broken
    213     G4LorentzVector FourMomentum1( momentum1 , std::sqrt(momentum1.mag2() + (M1+U1)*(M1+U1)));
     242    //JMQ 04/03/09 ...NOT ANY MORE!! BUGS FIXED: Energy and momentum are NOW conserved
     243    //    G4LorentzVector FourMomentum1( momentum1 , std::sqrt(momentum1.mag2() + (M1+U1)*(M1+U1)));
    214244
    215245    // Create 4-momentum for second fragment
    216246    // Warning!! Energy conservation is broken
    217     G4LorentzVector FourMomentum2( momentum2 , std::sqrt(momentum2.mag2() + (M2+U2)*(M2+U2)));
     247    //JMQ 04/03/09 ...NOT ANY MORE!! BUGS FIXED: Energy and momentum are NOW conserved
     248    //    G4LorentzVector FourMomentum2( momentum2 , std::sqrt(momentum2.mag2() + (M2+U2)*(M2+U2)));
     249
     250    //////////
    218251
    219252    // Create Fragments
     
    227260    Fragment2->SetCreatorModel(G4String("G4CompetitiveFission"));
    228261#endif
    229   // Create Fragment Vector
     262    // Create Fragment Vector
    230263    G4FragmentVector * theResult = new G4FragmentVector;
    231264
Note: See TracChangeset for help on using the changeset viewer.