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 // neutron_hp -- source file 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron trans 28 // A prototype of the low energy neutron transport model. 29 // 29 // 30 #include "G4InterpolationManager.hh" 30 #include "G4InterpolationManager.hh" 31 << 32 #include "G4HadronicException.hh" 31 #include "G4HadronicException.hh" 33 32 34 G4InterpolationScheme G4InterpolationManager:: << 33 G4InterpolationScheme G4InterpolationManager::MakeScheme(G4int it) 35 { << 34 { 36 G4InterpolationScheme result(LINLIN); << 35 G4InterpolationScheme result(LINLIN); 37 switch (it) { << 36 switch(it) 38 case 1: << 37 { 39 result = HISTO; << 38 case 1: 40 break; << 39 result = HISTO; 41 case 2: << 40 break; 42 result = LINLIN; << 41 case 2: 43 break; << 42 result = LINLIN; 44 case 3: << 43 break; 45 result = LINLOG; << 44 case 3: 46 break; << 45 result = LINLOG; 47 case 4: << 46 break; 48 result = LOGLIN; << 47 case 4: 49 break; << 48 result = LOGLIN; 50 case 5: << 49 break; 51 result = LOGLOG; << 50 case 5: 52 break; << 51 result = LOGLOG; 53 case 11: << 52 break; 54 result = CHISTO; << 53 case 11: 55 break; << 54 result = CHISTO; 56 case 12: << 55 break; 57 result = CLINLIN; << 56 case 12: 58 break; << 57 result = CLINLIN; 59 case 13: << 58 break; 60 result = CLINLOG; << 59 case 13: 61 break; << 60 result = CLINLOG; 62 case 14: << 61 break; 63 result = CLOGLIN; << 62 case 14: 64 break; << 63 result = CLOGLIN; 65 case 15: << 64 break; 66 result = CLOGLOG; << 65 case 15: 67 break; << 66 result = CLOGLOG; 68 case 21: << 67 break; 69 result = UHISTO; << 68 case 21: 70 break; << 69 result = UHISTO; 71 case 22: << 70 break; 72 result = ULINLIN; << 71 case 22: 73 break; << 72 result = ULINLIN; 74 case 23: << 73 break; 75 result = ULINLOG; << 74 case 23: 76 break; << 75 result = ULINLOG; 77 case 24: << 76 break; 78 result = ULOGLIN; << 77 case 24: 79 break; << 78 result = ULOGLIN; 80 case 25: << 79 break; 81 result = ULOGLOG; << 80 case 25: 82 break; << 81 result = ULOGLOG; 83 default: << 82 break; 84 throw G4HadronicException(__FILE__, __LI << 83 default: 85 "G4Interpolati << 84 throw G4HadronicException(__FILE__, __LINE__, "G4InterpolationManager: unknown interpolation scheme"); 86 break; << 85 break; 87 } << 86 } 88 return result; << 87 return result; 89 } << 88 } 90 89 91 void G4InterpolationManager::AppendScheme(G4in << 90 void G4InterpolationManager::AppendScheme(G4int aPoint, const G4InterpolationScheme & aScheme) 92 { << 91 { 93 if (aPoint != nEntries) { << 92 if(aPoint!=nEntries) 94 G4cout << "G4InterpolationManager::AppendS << 93 { 95 throw G4HadronicException(__FILE__, __LINE << 94 G4cout <<"G4InterpolationManager::AppendScheme - "<<aPoint<<" "<<nEntries<<G4endl; 96 "Wrong usage of << 95 throw G4HadronicException(__FILE__, __LINE__, "Wrong usage of G4InterpolationManager::AppendScheme"); 97 } << 96 } 98 if (nEntries == 0) { << 97 if(nEntries==0) 99 nEntries = 1; << 98 { 100 nRanges = 1; << 99 nEntries = 1; 101 start[0] = 0; << 100 nRanges = 1; 102 range[0] = 1; << 101 start[0] = 0; 103 scheme[0] = aScheme; << 102 range [0] = 1; 104 } << 103 scheme[0] = aScheme; 105 else if (aScheme == scheme[nRanges - 1]) { << 104 } 106 ++range[nRanges - 1]; << 105 else if(aScheme==scheme[nRanges-1]) 107 nEntries++; << 106 { 108 } << 107 ++range[nRanges-1]; 109 else { << 108 nEntries++; 110 nEntries++; << 109 } 111 nRanges++; << 110 else 112 G4int i; << 111 { 113 auto buffer = new G4int[nRanges]; << 112 nEntries++; 114 auto buffer1 = new G4int[nRanges]; << 113 nRanges++; 115 auto buff2 = new G4InterpolationScheme[nRa << 114 G4int i; 116 for (i = 0; i < nRanges - 1; i++) { << 115 G4int * buffer = new G4int[nRanges]; 117 buffer[i] = start[i]; << 116 G4int * buffer1 = new G4int[nRanges]; 118 buffer1[i] = range[i]; << 117 G4InterpolationScheme* buff2 = new G4InterpolationScheme[nRanges]; 119 buff2[i] = scheme[i]; << 118 for(i=0; i<nRanges-1; i++) 120 } << 119 { 121 delete[] start; << 120 buffer[i] = start[i]; 122 delete[] range; << 121 buffer1[i] = range[i]; 123 delete[] scheme; << 122 buff2[i] = scheme[i]; 124 start = buffer; << 123 } 125 range = buffer1; << 124 delete [] start; 126 scheme = buff2; << 125 delete [] range; 127 start[nRanges - 1] = start[nRanges - 2] + << 126 delete [] scheme; 128 range[nRanges - 1] = 1; << 127 start = buffer; 129 scheme[nRanges - 1] = aScheme; << 128 range = buffer1; 130 } << 129 scheme = buff2; 131 } << 130 start[nRanges-1] = start[nRanges-2]+range[nRanges-2]; >> 131 range[nRanges-1] = 1; >> 132 scheme[nRanges-1] = aScheme; >> 133 } >> 134 } 132 135