source: trunk/source/processes/hadronic/models/neutron_hp/src/G4InterpolationManager.cc @ 1358

Last change on this file since 1358 was 819, checked in by garnier, 16 years ago

import all except CVS

File size: 4.2 KB
Line 
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#include "G4HadronicException.hh"
32
33   G4InterpolationScheme G4InterpolationManager::MakeScheme(G4int it)
34   {
35     G4InterpolationScheme result(LINLIN);
36     switch(it)
37     {
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__, "G4InterpolationManager: unknown interpolation scheme");
85        break;       
86     }
87     return result;
88   }
89
90   void G4InterpolationManager::AppendScheme(G4int aPoint, const G4InterpolationScheme & aScheme)
91   {
92     if(aPoint!=nEntries) 
93     {
94       G4cout <<"G4InterpolationManager::AppendScheme - "<<aPoint<<" "<<nEntries<<G4endl;
95       throw G4HadronicException(__FILE__, __LINE__, "Wrong usage of G4InterpolationManager::AppendScheme");
96     }
97     if(nEntries==0)
98     {
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     {
107       ++range[nRanges-1];
108       nEntries++;
109     }
110     else
111     {
112       nEntries++;
113       nRanges++;
114       G4int i;
115       G4int * buffer = new G4int[nRanges];
116       G4int * buffer1 = new G4int[nRanges];
117       G4InterpolationScheme* buff2 = new G4InterpolationScheme[nRanges];
118       for(i=0; i<nRanges-1; i++) 
119       {
120         buffer[i]  = start[i];
121         buffer1[i] = range[i];
122         buff2[i]   = scheme[i];
123       }
124       delete [] start;
125       delete [] range;
126       delete [] scheme;
127       start  = buffer;
128       range  = buffer1;
129       scheme = buff2;
130       start[nRanges-1]  = start[nRanges-2]+range[nRanges-2];
131       range[nRanges-1]  = 1;
132       scheme[nRanges-1] = aScheme;
133     }
134   }
Note: See TracBrowser for help on using the repository browser.