16 #include "GeoTessPosition.h"
20 using namespace geotess;
91 {
return model->getAverageMantleVelocity(waveType); };
100 {model->setAverageMantleVelocity(waveType, velocity); };
122 vector<GridProfile*>& neighbors, vector<int>& nodeIds,
123 vector<double>& coefficients);
144 void getNodeNeighbors(
const int& nodeId,
int neighbors[],
int& nNeighbors);
151 void getNodeNeighbors(
const int& nodeId, vector<int>& neighbors);
153 void getActiveNodeNeighbors(
const int& nodeid,
int neighbors[],
int& nNeighbors);
155 void getActiveNodeNeighbors(
const int& nodeid, vector<int>& neighbors);
165 double distance[],
double azimuth[],
int& nNeighbors)
168 model->getGrid().getVertexNeighbors(0, model->getGrid().getLastLevel(0),
171 nNeighbors = (int)nbrs.size();
173 for (set<int>::iterator it=nbrs.begin(); it != nbrs.end(); it++)
175 nid = profiles[*it]->getNodeId();
179 distance[i] = GeoTessUtils::angle(model->getGrid().getVertex(nodeid),
180 model->getGrid().getVertex(nid));
182 azimuth[i] = GeoTessUtils::azimuth(model->getGrid().getVertex(nodeid),
183 model->getGrid().getVertex(nid), NA_VALUE);
190 vector<double>& distance, vector<double>& azimuth)
193 model->getGrid().getVertexNeighbors(0, model->getGrid().getLastLevel(0),
196 int nNeighbors = (int)nbrs.size();
200 neighbors.reserve(nNeighbors);
201 distance.reserve(nNeighbors);
202 azimuth.reserve(nNeighbors);
204 for (set<int>::iterator it=nbrs.begin(); it != nbrs.end(); it++)
206 nid = profiles[*it]->getNodeId();
208 neighbors.push_back(nid);
210 distance.push_back(GeoTessUtils::angle(model->getGrid().getVertex(nodeid),
211 model->getGrid().getVertex(nid)));
213 azimuth.push_back(GeoTessUtils::azimuth(model->getGrid().getVertex(nodeid),
214 model->getGrid().getVertex(nid), NA_VALUE));
223 void getNodeSeparation(
const int& node1,
const int& node2,
double& distance);
228 void getNodeAzimuth(
const int& node1,
const int& node2,
double& azimuth);
232 string getTessId() {
return model->getGrid().getGridID(); }
241 void setInterpolatorType(
const string& interpolatorType);
249 GeoTessPosition* position;
253 inline void GridGeoTess::setInterpolatorType(
const string& interpolatorType)
255 string type = CPPUtils::uppercase_string(interpolatorType);
256 if (position->getInterpolatorType().toString() != type)
258 if (type ==
"LINEAR")
261 position = model->getPosition(GeoTessInterpolatorType::LINEAR);
263 else if (type ==
"NATURAL_NEIGHBOR")
266 position = model->getPosition(GeoTessInterpolatorType::NATURAL_NEIGHBOR);
271 os << endl <<
"ERROR in GridGeoTess::setInterpolatorType()" << endl
272 << interpolatorType <<
" is not a recognized interpolator type." << endl
273 <<
"Must be one of [ LINEAR | NATURAL_NEIGHBOR ]."
274 <<
"Version " << SlbmVersion <<
" File " << __FILE__ <<
" line " << __LINE__ << endl << endl;
280 inline void GridGeoTess::getNodeNeighbors(
const int& nodeId,
int neighbors[],
int& nNeighbors)
283 model->getGrid().getVertexNeighbors(0, model->getGrid().getLastLevel(0),
285 nNeighbors = (int)nbrs.size();
286 set<int>::iterator it;
288 for (it=nbrs.begin(); it != nbrs.end(); ++it)
289 neighbors[i++] = *it;
292 inline void GridGeoTess::getNodeNeighbors(
const int& nodeId, vector<int>& neighbors)
295 const int level = model->getGrid().getLastLevel(0);
296 model->getGrid().getVertexNeighbors(0, level, nodeId, nbrs);
297 neighbors.resize(nbrs.size());
298 set<int>::iterator it;
300 for (it=nbrs.begin(); it != nbrs.end(); ++it)
301 neighbors[i++] = *it;
304 inline void GridGeoTess::getActiveNodeNeighbors(
const int& activeNodeId,
int neighbors[],
int& nNeighbors)
306 int nodeId = getGridNodeId(activeNodeId);
312 model->getGrid().getVertexNeighbors(0, model->getGrid().getLastLevel(0),
316 for (set<int>::iterator it=nbrs.begin(); it != nbrs.end(); it++)
318 id = getActiveNodeId(profiles[*it]->getNodeId());
320 neighbors[nNeighbors++] = id;
325 inline void GridGeoTess::getActiveNodeNeighbors(
const int& activeNodeId, vector<int>& neighbors)
329 int nodeId = getGridNodeId(activeNodeId);
333 model->getGrid().getVertexNeighbors(0, model->getGrid().getLastLevel(0),
336 for (set<int>::iterator it=nbrs.begin(); it != nbrs.end(); it++)
338 id = getActiveNodeId(profiles[*it]->getNodeId());
340 neighbors.push_back(
id);
345 inline void GridGeoTess::getNodeSeparation(
const int& node1,
const int& node2,
double& distance)
347 distance = GeoTessUtils::angle(model->getGrid().getVertex(node1),
348 model->getGrid().getVertex(node2));
351 inline void GridGeoTess::getNodeAzimuth(
const int& node1,
const int& node2,
double& azimuth)
353 azimuth = GeoTessUtils::azimuth(model->getGrid().getVertex(node1),
354 model->getGrid().getVertex(node2), NaN_DOUBLE);