30#include <gridfields/array.h>
32#include <libdap/Array.h>
33#include <libdap/util.h>
38#include "ugrid_utils.h"
39#include "LocationType.h"
40#include "MeshDataVariable.h"
41#include "TwoDMeshTopology.h"
45#define BESDEBUG( x, y )
54 myGridLocation = node;
59static locationType determineLocationType(libdap::Array *rangeVar)
62 string locationString = getAttributeValue(rangeVar, UGRID_LOCATION);
63 BESDEBUG(
"ugrid",
"determineLocationType() - UGRID_LOCATION: " << locationString << endl);
65 if (locationString.empty()) {
66 locationString = getAttributeValue(rangeVar, UGRID_GRID_LOCATION);
67 BESDEBUG(
"ugrid",
"determineLocationType() - UGRID_GRID_LOCATION: " << locationString << endl);
70 if (locationString.empty()) {
71 string msg =
"MeshDataVariable::determineLocation() - The range variable '" + rangeVar->name()
72 +
"' is missing the required attribute named '" +
73 UGRID_LOCATION +
"' and its alternate attribute named '" +
74 UGRID_GRID_LOCATION +
"'";
75 BESDEBUG(
"ugrid", msg);
81 if (locationString.compare(UGRID_NODE) == 0) {
82 BESDEBUG(
"ugrid",
"determineLocationType() - Location is node. locationString: " << locationString << endl);
86 if (locationString.compare(UGRID_EDGE) == 0) {
87 BESDEBUG(
"ugrid",
"determineLocationType() - Location is edge. locationString: " << locationString << endl);
91 if (locationString.compare(UGRID_FACE) == 0) {
92 BESDEBUG(
"ugrid",
"determineLocationType() - Location is face. locationString: " << locationString << endl);
95 string msg =
"determineLocation() - The range variable '" + rangeVar->name() +
"' has a '" + UGRID_LOCATION
96 +
"' attribute with an unrecognized value of '" + locationString +
"' The acceptable values are: '"
97 + UGRID_NODE +
"', '" + UGRID_EDGE +
"', and '" + UGRID_FACE +
"'";
98 BESDEBUG(
"ugrid", msg);
103void MeshDataVariable::init(libdap::Array *rangeVar)
105 if (_initialized)
return;
107 meshDataVar = rangeVar;
109 "MeshDataVariable::init() - The user submitted the range data array: " << rangeVar->name() << endl);
111 locationType rank = determineLocationType(rangeVar);
113 setGridLocation(rank);
115 meshName = getAttributeValue(rangeVar, UGRID_MESH);
116 if (meshName.empty()) {
117 string msg =
"MeshDataVariable::init() - The range variable '" + rangeVar->name()
118 +
"' is missing the required attribute named '" + UGRID_MESH +
"' ";
119 BESDEBUG(
"ugrid", msg);
124 "MeshDataVariable::init() - Range data array '" << meshDataVar->name() <<
"' references the 'mesh' variable '" << meshName <<
"'" << endl);
static std::string lowercase(const std::string &s)