1 #include "FuncApproxBase.h"
2 
3 int FuncApproxBase::defaultNPtsPerDim_ = 10;
4 
FuncApproxBase()5 FuncApproxBase::FuncApproxBase()
6   : nSamples_(1),
7     nInputs_(1),
8     nPtsPerDim_(defaultNPtsPerDim_),
9     lowerBounds_(1, 0.0),
10     upperBounds_(1, 0.0)
11 {;}
12 
13 
FuncApproxBase(int nInputs,int nSamples)14 FuncApproxBase::FuncApproxBase(int nInputs, int nSamples)
15 	: nSamples_(nSamples),
16 		nInputs_(nInputs),
17 		nPtsPerDim_(defaultNPtsPerDim_),
18 		lowerBounds_(nInputs, 0.0),
19 		upperBounds_(nInputs, 0.0)
20 {
21 	;
22 }
23 
24 
25 // generate a 2D grid.
26 
generate2DGridPoints(std::vector<std::vector<double>> & gridPts,int var1,int var2,const std::vector<double> & settings)27 void FuncApproxBase::generate2DGridPoints(std::vector<std::vector<double> >& gridPts,
28 					  int var1,
29 					  int var2,
30 					  const std::vector<double>& settings)
31 {
32 
33   int i, j; // stupid SGI doesn't meet standards for loop scoping.
34 
35   // grid size is N x N.
36   gridPts.resize(nPtsPerDim_ * nPtsPerDim_);
37 
38   // set all coordinates to preset values
39   for (i=0; i< (int) gridPts.size(); i++)
40     {
41       gridPts[i] = settings;
42     }
43 
44   // now vary the two active coordinates
45 
46   double dx1 = upperBounds_[var1] - lowerBounds_[var1];
47   double dx2 = upperBounds_[var2] - lowerBounds_[var2];
48 
49   for (i=0; i<nPtsPerDim_; i++)
50     {
51       double x1 = lowerBounds_[var1]
52 	+ ((double) i)/((double) (nPtsPerDim_-1)) * dx1;
53       for (j=0; j<nPtsPerDim_; j++)
54 	{
55 	  double x2 = lowerBounds_[var2]
56 	    + ((double) j)/((double) (nPtsPerDim_-1)) * dx2;
57 	  gridPts[i*nPtsPerDim_ + j][var1] = x1;
58 	  gridPts[i*nPtsPerDim_ + j][var2] = x2;
59 	}
60     }
61 }
62 
63 
64 // generate an N-dimensional grid
generateGridPoints(std::vector<std::vector<double>> & gridPts)65 void FuncApproxBase::generateGridPoints(std::vector<std::vector<double> >& gridPts)
66 {
67   throw std::runtime_error("FuncApproxBase::generateGridPoints not implemented yet");
68 }
69