Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // This software was developed by Lawrence Liv 27 // This software was developed by Lawrence Livermore National Laboratory. 28 // 28 // 29 // Redistribution and use in source and binary 29 // Redistribution and use in source and binary forms, with or without 30 // modification, are permitted provided that t 30 // modification, are permitted provided that the following conditions are met: 31 // 31 // 32 // 1. Redistributions of source code must reta 32 // 1. Redistributions of source code must retain the above copyright notice, 33 // this list of conditions and the following 33 // this list of conditions and the following disclaimer. 34 // 2. Redistributions in binary form must repr 34 // 2. Redistributions in binary form must reproduce the above copyright notice, 35 // this list of conditions and the following 35 // this list of conditions and the following disclaimer in the documentation 36 // and/or other materials provided with the 36 // and/or other materials provided with the distribution. 37 // 3. The name of the author may not be used t 37 // 3. The name of the author may not be used to endorse or promote products 38 // derived from this software without specif 38 // derived from this software without specific prior written permission. 39 // 39 // 40 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``A 40 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 41 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 41 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 42 // MERCHANTABILITY AND FITNESS FOR A PARTICULA 42 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 43 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DI 43 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGE 44 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 45 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES 45 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 46 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AN 46 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 47 // WHETHER IN CONTRACT, STRICT LIABILITY, OR T 47 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 48 // OTHERWISE) ARISING IN ANY WAY OUT OF THE US 48 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 49 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 50 // 50 // 51 // Copyright (c) 2006 The Regents of the Unive 51 // Copyright (c) 2006 The Regents of the University of California. 52 // All rights reserved. 52 // All rights reserved. 53 // UCRL-CODE-224807 53 // UCRL-CODE-224807 54 // 54 // 55 // 55 // >> 56 // $Id: G4SmpNuDistDataU233_235.cc 67966 2013-03-13 09:38:38Z gcosmo $ 56 // 57 // 57 58 58 #include <cmath> 59 #include <cmath> 59 #include "G4fissionEvent.hh" 60 #include "G4fissionEvent.hh" 60 #include "G4Exp.hh" << 61 #include "G4Pow.hh" << 62 61 63 int G4fissionEvent::G4SmpNuDistDataU233_235(G4 62 int G4fissionEvent::G4SmpNuDistDataU233_235(G4double nubar) { 64 63 65 G4Pow* Pow = G4Pow::GetInstance(); << 66 /* 64 /* 67 Description 65 Description 68 Sample Number of Neutrons from fission in 66 Sample Number of Neutrons from fission in U-233 and U-235 using 69 Zucker and Holden's tabulated data for U-2 67 Zucker and Holden's tabulated data for U-235 70 The P(nu) distribution is given as a funct 68 The P(nu) distribution is given as a function of the average 71 number of neutrons from fission, based on 69 number of neutrons from fission, based on interpolation of the 72 U-235 data from Zucker and Holden. 70 U-235 data from Zucker and Holden. 73 */ 71 */ 74 72 75 /* 73 /* 76 Input 74 Input 77 nubar - average number of neutrons per 75 nubar - average number of neutrons per fission 78 Output 76 Output 79 G4SmpNuDistDataU233_235 - sampled multipl 77 G4SmpNuDistDataU233_235 - sampled multiplicity 80 78 81 */ 79 */ 82 80 83 G4double pnu[8], cpnu, sum; 81 G4double pnu[8], cpnu, sum; 84 G4double r; 82 G4double r; 85 83 86 /* 84 /* 87 Check if nubar is within the range of experi 85 Check if nubar is within the range of experimental values 88 */ 86 */ 89 if(nubar >= 2.25 && nubar <= 4.0) { 87 if(nubar >= 2.25 && nubar <= 4.0) { 90 /* 88 /* 91 Use Zucker and Holden Data 89 Use Zucker and Holden Data 92 */ 90 */ 93 if(nubar <= 2.8738) pnu[0]=-9.279554e-02* << 91 if(nubar <= 2.8738) pnu[0]=-9.279554e-02*std::pow(nubar,3)+8.036687e-01*std::pow(nubar,2)-2.342684*nubar+2.309035; 94 else if(nubar > 2.8738 && nubar <= 3.4272 << 92 else if(nubar > 2.8738 && nubar <= 3.4272) pnu[0]=1.50072e-2*std::pow(nubar,2)-1.109109e-1*nubar+2.063133e-1; 95 else pnu[0]=1.498897e+3*G4Exp(-3.883864*n << 93 else pnu[0]=1.498897e+3*std::exp(-3.883864*nubar); 96 94 97 if(nubar <= 3.2316) pnu[1]=3.531126e-2*Po << 95 if(nubar <= 3.2316) pnu[1]=3.531126e-2*std::pow(nubar,3)-2.787213e-1*std::pow(nubar,2)+5.824072e-1*nubar-1.067136e-1; 98 else pnu[1]=6.574492e-2*Pow->powN(nubar,2 << 96 else pnu[1]=6.574492e-2*std::pow(nubar,2)-5.425741e-1*nubar+1.123199; 99 97 100 pnu[2]=1.274643e-2*Pow->powN(nubar,3)-1.3 << 98 pnu[2]=1.274643e-2*std::pow(nubar,3)-1.387954e-1*std::pow(nubar,2)+3.264669e-1*nubar+1.77148e-1; 101 99 102 pnu[3]=5.473738e-2*Pow->powN(nubar,5)-8.8 << 100 pnu[3]=5.473738e-2*std::pow(nubar,5)-8.835826e-1*std::pow(nubar,4)+5.657201*std::pow(nubar,3)-1.802669e+1*std::pow(nubar,2)+2.867937e+1*nubar-1.794296e+1; 103 101 104 pnu[4]=-3.591076e-2*Pow->powN(nubar,3)+3. << 102 pnu[4]=-3.591076e-2*std::pow(nubar,3)+3.092624e-1*std::pow(nubar,2)-7.184805e-1*nubar+5.649400e-1; 105 103 106 if(nubar <= 2.8738) pnu[5]=1.699374e-2*Po << 104 if(nubar <= 2.8738) pnu[5]=1.699374e-2*std::pow(nubar,2)-1.069558e-3*nubar-6.981430e-2; 107 else pnu[5]=2.100175e-2*Pow->powN(nubar,3 << 105 else pnu[5]=2.100175e-2*std::pow(nubar,3)-1.705788e-1*std::pow(nubar,2)+5.575467e-1*nubar-6.245873e-1; 108 106 109 if(nubar <= 3.0387) pnu[6]=9.431919e-7*Po << 107 if(nubar <= 3.0387) pnu[6]=9.431919e-7*std::pow(nubar,8.958848); 110 else pnu[6]=4.322428e-3*Pow->powN(nubar,3 << 108 else pnu[6]=4.322428e-3*std::pow(nubar,3)-2.094790e-2*std::pow(nubar,2)+4.449671e-2*nubar-4.435987e-2; 111 109 112 pnu[7]=5.689084e-3*Pow->powN(nubar,4)-6.5 << 110 pnu[7]=5.689084e-3*std::pow(nubar,4)-6.591895e-2*std::pow(nubar,3)+2.886861e-1*std::pow(nubar,2)-5.588146e-1*nubar+4.009166e-1; 113 111 114 sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pn 112 sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7]; 115 113 116 pnu[0]=pnu[0]/sum; 114 pnu[0]=pnu[0]/sum; 117 pnu[1]=pnu[1]/sum; 115 pnu[1]=pnu[1]/sum; 118 pnu[2]=pnu[2]/sum; 116 pnu[2]=pnu[2]/sum; 119 pnu[3]=pnu[3]/sum; 117 pnu[3]=pnu[3]/sum; 120 pnu[4]=pnu[4]/sum; 118 pnu[4]=pnu[4]/sum; 121 pnu[5]=pnu[5]/sum; 119 pnu[5]=pnu[5]/sum; 122 pnu[6]=pnu[6]/sum; 120 pnu[6]=pnu[6]/sum; 123 pnu[7]=pnu[7]/sum; 121 pnu[7]=pnu[7]/sum; 124 122 125 r=fisslibrng(); 123 r=fisslibrng(); 126 124 127 if(r <= pnu[0]) return (int) 0; 125 if(r <= pnu[0]) return (int) 0; 128 126 129 cpnu=pnu[0]+pnu[1]; 127 cpnu=pnu[0]+pnu[1]; 130 if(r <= cpnu) return (int) 1; 128 if(r <= cpnu) return (int) 1; 131 129 132 cpnu=cpnu+pnu[2]; 130 cpnu=cpnu+pnu[2]; 133 if(r <= cpnu) return (int) 2; 131 if(r <= cpnu) return (int) 2; 134 132 135 cpnu=cpnu+pnu[3]; 133 cpnu=cpnu+pnu[3]; 136 if(r <= cpnu) return (int) 3; 134 if(r <= cpnu) return (int) 3; 137 135 138 cpnu=cpnu+pnu[4]; 136 cpnu=cpnu+pnu[4]; 139 if(r <= cpnu) return (int) 4; 137 if(r <= cpnu) return (int) 4; 140 138 141 cpnu=cpnu+pnu[5]; 139 cpnu=cpnu+pnu[5]; 142 if(r <= cpnu) return (int) 5; 140 if(r <= cpnu) return (int) 5; 143 141 144 cpnu=cpnu+pnu[6]; 142 cpnu=cpnu+pnu[6]; 145 if(r <= cpnu) return (int) 6; 143 if(r <= cpnu) return (int) 6; 146 else return (int) 7; 144 else return (int) 7; 147 } else { 145 } else { 148 /* 146 /* 149 Use Terrell's formula 147 Use Terrell's formula 150 */ 148 */ 151 return (int) G4SmpTerrell(nubar); 149 return (int) G4SmpTerrell(nubar); 152 } 150 } 153 } 151 } 154 152