Ignore:
Timestamp:
Dec 22, 2010, 3:52:27 PM (13 years ago)
Author:
garnier
Message:

geant4 tag 9.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc

    r1315 r1347  
    2424// ********************************************************************
    2525//
    26 //J.M. Quesada (August2008). Based on:
     26// $Id: G4AlphaEvaporationProbability.cc,v 1.18 2010/11/17 11:06:03 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-ref-00 $
     28//
     29// J.M. Quesada (August2008). Based on:
    2730//
    2831// Hadronic Process: Nuclear De-excitations
    2932// by V. Lara (Oct 1998)
    3033//
    31 // Modif (03 September 2008) by J. M. Quesada for external choice of inverse
    32 // cross section option
     34// Modified:
     35// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
     36// 17-11-2010 V.Ivanchenko integer Z and A
    3337
    3438#include "G4AlphaEvaporationProbability.hh"
     
    3640G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() :
    3741    G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier
    38 {
     42{}
     43
     44G4AlphaEvaporationProbability::~G4AlphaEvaporationProbability()
     45{}
     46
     47G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
     48  { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());}
    3949       
    40 }
    41 
    42 
    43 G4AlphaEvaporationProbability::G4AlphaEvaporationProbability(const G4AlphaEvaporationProbability &): G4EvaporationProbability()
    44 {
    45     throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::copy_constructor meant to not be accessable");
    46 }
    47 
    48 
    49 
    50 
    51 const G4AlphaEvaporationProbability & G4AlphaEvaporationProbability::
    52 operator=(const G4AlphaEvaporationProbability &)
    53 {
    54     throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::operator= meant to not be accessable");
    55     return *this;
    56 }
    57 
    58 
    59 G4bool G4AlphaEvaporationProbability::operator==(const G4AlphaEvaporationProbability &) const
    60 {
    61     return false;
    62 }
    63 
    64 G4bool G4AlphaEvaporationProbability::operator!=(const G4AlphaEvaporationProbability &) const
    65 {
    66     return true;
    67 }
    68 
    69 
    70  G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
    71   { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
     50G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &)
     51  { return 0.0; }
     52
     53G4double G4AlphaEvaporationProbability::CCoeficient(G4int aZ)
     54{
     55  // Data comes from
     56  // Dostrovsky, Fraenkel and Friedlander
     57  // Physical Review, vol 116, num. 3 1959
     58  //
     59  // const G4int size = 5;
     60  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
     61  //    G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
     62  G4double C = 0.0;
    7263       
    73  G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &)
    74   { return 0.0; }
    75 
    76 G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ)
    77 {
    78     // Data comes from
    79     // Dostrovsky, Fraenkel and Friedlander
    80     // Physical Review, vol 116, num. 3 1959
    81     //
    82     // const G4int size = 5;
    83     // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
    84     //  G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
    85     G4double C = 0.0;
    86        
    87        
    88     if (aZ <= 30) {
    89         C = 0.10;
    90     } else if (aZ <= 50) {
    91         C = 0.1 + -((aZ-50.)/20.)*0.02;
    92     } else if (aZ < 70) {
    93         C = 0.08 + -((aZ-70.)/20.)*0.02;
    94     } else {
    95         C = 0.06;
    96     }
    97     return C;
     64  if (aZ <= 30)
     65    {
     66      C = 0.10;
     67    }
     68  else if (aZ <= 50)
     69    {
     70      C = 0.1 - (aZ-30)*0.001;
     71    }
     72  else if (aZ < 70)
     73    {
     74      C = 0.08 - (aZ-50)*0.001;
     75    }
     76  else
     77    {
     78      C = 0.06;
     79    }
     80  return C;
    9881}
    9982
     
    10487//OPT=3,4 Kalbach's parameterization
    10588//
    106 G4double G4AlphaEvaporationProbability::CrossSection(const  G4Fragment & fragment,
    107                                                      const G4double K)
     89G4double
     90G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K)
    10891{
    10992  theA=GetA();
    11093  theZ=GetZ();
    111   ResidualA=fragment.GetA()-theA;
    112   ResidualZ=fragment.GetZ()-theZ;
    113  
    114   ResidualAthrd=std::pow(ResidualA,0.33333);
    115   FragmentA=fragment.GetA();
    116   FragmentAthrd=std::pow(FragmentA,0.33333);
    117  
     94  ResidualA=fragment.GetA_asInt()-theA;
     95  ResidualZ=fragment.GetZ_asInt()-theZ;
     96 
     97  ResidualAthrd=fG4pow->Z13(ResidualA);
     98  FragmentA=fragment.GetA_asInt();
     99  FragmentAthrd=fG4pow->Z13(FragmentA);
    118100 
    119101  if (OPTxs==0) {std::ostringstream errOs;
     
    133115}
    134116
    135 
    136 //
    137 //********************* OPT=1,2 : Chatterjee's cross section ************************
     117//
     118//********************* OPT=1,2 : Chatterjee's cross section ********************
    138119//(fitting to cross section from Bechetti & Greenles OM potential)
    139120
    140 G4double G4AlphaEvaporationProbability::GetOpt12(const  G4double K)
    141 {
    142 // c     ** alpha from huizenga and igo
     121G4double G4AlphaEvaporationProbability::GetOpt12(G4double K)
     122{
    143123  G4double Kc=K;
    144  
    145   // JMQ xsec is set constat above limit of validity
    146   if (K>50) Kc=50;
    147  
     124
     125  // JMQ xsec is set constant above limit of validity
     126  if (K > 50*MeV) { Kc = 50*MeV; }
     127
    148128  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
    149  
     129
    150130  G4double     p0 = 10.95;
    151131  G4double     p1 = -85.2;
     
    160140  G4double     delta=1.2;         
    161141
    162  
    163142  Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
    164143  p = p0 + p1/Ec + p2/(Ec*Ec);
    165144  landa = landa0*ResidualA + landa1;
    166   mu = mu0*std::pow(ResidualA,mu1);
    167   nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
     145  G4double resmu1 = fG4pow->powZ(ResidualA,mu1);
     146  mu = mu0*resmu1;
     147  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
    168148  q = landa - nu/(Ec*Ec) - 2*p*Ec;
    169149  r = mu + 2*nu/Ec + p*(Ec*Ec);
    170  
     150
    171151  ji=std::max(Kc,Ec);
    172152  if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
    173153  else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
    174                  
     154 
    175155  if (xs <0.0) {xs=0.0;}
    176  
     156             
    177157  return xs;
    178  
    179158}
    180159
    181160// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
    182 G4double G4AlphaEvaporationProbability::GetOpt34(const  G4double K)
     161G4double G4AlphaEvaporationProbability::GetOpt34(G4double K)
    183162// c     ** alpha from huizenga and igo
    184163{
    185  
    186164  G4double landa, mu, nu, p , signor(1.),sig;
    187165  G4double ec,ecsq,xnulam,etest(0.),a;
    188166  G4double b,ecut,cut,ecut2,geom,elab;
    189167
    190 
    191168  G4double     flow = 1.e-18;
    192169  G4double     spill= 1.e+18;
    193170
    194   G4double       p0 = 10.95;
     171  G4double     p0 = 10.95;
    195172  G4double     p1 = -85.2;
    196173  G4double     p2 = 1146.;
     
    204181 
    205182  G4double      ra=1.20;
    206  
     183       
    207184  //JMQ 13/02/09 increase of reduced radius to lower the barrier
    208185  // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
     
    211188  p = p0 + p1/ec + p2/ecsq;
    212189  landa = landa0*ResidualA + landa1;
    213   a = std::pow(ResidualA,mu1);
     190  a = fG4pow->powZ(ResidualA,mu1);
    214191  mu = mu0 * a;
    215192  nu = a* (nu0+nu1*ec+nu2*ecsq); 
    216193  xnulam = nu / landa;
    217   if (xnulam > spill) xnulam=0.;
    218   if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
    219  
     194  if (xnulam > spill) { xnulam=0.; }
     195  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
     196
    220197  a = -2.*p*ec + landa - nu/ecsq;
    221198  b = p*ecsq + mu + 2.*nu/ec;
    222199  ecut = 0.;
    223200  cut = a*a - 4.*p*b;
    224   if (cut > 0.) ecut = std::sqrt(cut);
     201  if (cut > 0.) { ecut = std::sqrt(cut); }
    225202  ecut = (ecut-a) / (p+p);
    226203  ecut2 = ecut;
    227 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
    228 //ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
    229 //  if (cut < 0.) ecut2 = ecut - 2.;
    230   if (cut < 0.) ecut2 = ecut;
    231   elab = K * FragmentA / ResidualA;
     204  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
     205  // ecut<0 means that there is no cut with energy axis, i.e. xs is set
     206  // to 0 bellow minimum
     207  //  if (cut < 0.) ecut2 = ecut - 2.;
     208  if (cut < 0.) { ecut2 = ecut; }
     209  elab = K * FragmentA / G4double(ResidualA);
    232210  sig = 0.;
    233211 
    234212  if (elab <= ec) { //start for E<Ec
    235     if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
     213    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
    236214  }           //end for E<Ec
    237215  else {           //start for E>Ec
    238216    sig = (landa*elab+mu+nu/elab) * signor;
    239217    geom = 0.;
    240     if (xnulam < flow || elab < etest) return sig;
     218    if (xnulam < flow || elab < etest) { return sig; }
    241219    geom = std::sqrt(theA*K);
    242220    geom = 1.23*ResidualAthrd + ra + 4.573/geom;
     
    245223  }           //end for E>Ec
    246224  return sig;
    247  
    248 }
    249 
    250 //   ************************** end of cross sections *******************************
     225}
     226
Note: See TracChangeset for help on using the changeset viewer.