Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron transport model. 29 // 30 #include "G4InterpolationManager.hh" 31 32 #include "G4HadronicException.hh" 33 34 G4InterpolationScheme G4InterpolationManager::MakeScheme(G4int it) 35 { 36 G4InterpolationScheme result(LINLIN); 37 switch (it) { 38 case 1: 39 result = HISTO; 40 break; 41 case 2: 42 result = LINLIN; 43 break; 44 case 3: 45 result = LINLOG; 46 break; 47 case 4: 48 result = LOGLIN; 49 break; 50 case 5: 51 result = LOGLOG; 52 break; 53 case 11: 54 result = CHISTO; 55 break; 56 case 12: 57 result = CLINLIN; 58 break; 59 case 13: 60 result = CLINLOG; 61 break; 62 case 14: 63 result = CLOGLIN; 64 break; 65 case 15: 66 result = CLOGLOG; 67 break; 68 case 21: 69 result = UHISTO; 70 break; 71 case 22: 72 result = ULINLIN; 73 break; 74 case 23: 75 result = ULINLOG; 76 break; 77 case 24: 78 result = ULOGLIN; 79 break; 80 case 25: 81 result = ULOGLOG; 82 break; 83 default: 84 throw G4HadronicException(__FILE__, __LINE__, 85 "G4InterpolationManager: unknown interpolation scheme"); 86 break; 87 } 88 return result; 89 } 90 91 void G4InterpolationManager::AppendScheme(G4int aPoint, const G4InterpolationScheme& aScheme) 92 { 93 if (aPoint != nEntries) { 94 G4cout << "G4InterpolationManager::AppendScheme - " << aPoint << " " << nEntries << G4endl; 95 throw G4HadronicException(__FILE__, __LINE__, 96 "Wrong usage of G4InterpolationManager::AppendScheme"); 97 } 98 if (nEntries == 0) { 99 nEntries = 1; 100 nRanges = 1; 101 start[0] = 0; 102 range[0] = 1; 103 scheme[0] = aScheme; 104 } 105 else if (aScheme == scheme[nRanges - 1]) { 106 ++range[nRanges - 1]; 107 nEntries++; 108 } 109 else { 110 nEntries++; 111 nRanges++; 112 G4int i; 113 auto buffer = new G4int[nRanges]; 114 auto buffer1 = new G4int[nRanges]; 115 auto buff2 = new G4InterpolationScheme[nRanges]; 116 for (i = 0; i < nRanges - 1; i++) { 117 buffer[i] = start[i]; 118 buffer1[i] = range[i]; 119 buff2[i] = scheme[i]; 120 } 121 delete[] start; 122 delete[] range; 123 delete[] scheme; 124 start = buffer; 125 range = buffer1; 126 scheme = buff2; 127 start[nRanges - 1] = start[nRanges - 2] + range[nRanges - 2]; 128 range[nRanges - 1] = 1; 129 scheme[nRanges - 1] = aScheme; 130 } 131 } 132