14 size_t numNodes = numX*numY*numZ;
26 std::vector<double> uVector(1000,0.0);
27 std::vector<double> wVector(1000,0.0);
28 std::vector<double> zVector(2000,0.0);
35 for(
size_t iNode = 0;iNode < numNodes;iNode++){
36 uVector[iNode] =
static_cast<double>(iNode);
37 wVector[iNode] =
static_cast<double>(iNode+numNodes);
38 zVector[iNode] =
static_cast<double>(iNode+2*numNodes);
39 zVector[iNode+numNodes] =
static_cast<double>(iNode+3*numNodes);
44 std::vector<size_t> gridSize(3,0);
53 std::vector<size_t> probeStart(3,5);
55 std::vector<size_t> probeSize(3,1);
57 probeInterval.
Init(probeStart,probeSize);
59 std::vector<std::string> probeFieldNames;
60 probeFieldNames.push_back(
"U");
65 bool probeDefaultConstructor =
true;
67 serialUnitResults.
UpdateResult(
"Probe:DefaultConstructor",probeDefaultConstructor);
78 bool probeWorks =
true;
79 std::ostringstream probeStream;
80 int errorCode = myProbe.
Probe(probeStream);
82 std::cout <<
"Probe returned error code: " << errorCode << std::endl;
91 bool probeScalarField =
true;
93 std::istringstream probeInStream(probeStream.str());
96 for(
size_t probeZ = probeInterval[2].first;probeZ <= probeInterval[2].second;probeZ++){
97 size_t zDataIndex = probeZ*numX*numY;
98 for(
size_t probeY = probeInterval[1].first;probeY <= probeInterval[1].second;probeY++){
99 size_t yDataIndex = zDataIndex + probeY*numX;
100 for(
size_t probeX = probeInterval[0].first;probeX <= probeInterval[0].second;probeX++){
101 size_t stateDataIndex = yDataIndex + probeX;
103 probeInStream >> probeValue;
104 if(probeValue != uVector[stateDataIndex])
105 probeScalarField =
false;
111 if(!probeScalarField)
113 serialUnitResults.
UpdateResult(
"Probe:ProbeScalarField",probeScalarField);
117 bool switchProbeField =
true;
118 bool probeVectorField =
true;
119 bool detectWrongField =
true;
123 std::vector<size_t> probeDataIndices;
125 size_t numProbeNodes = probeDataIndices.size();
127 if(probeScalarField){
130 int errorCode = myProbe.
Probe(testState2,probeStream);
132 detectWrongField =
false;
134 probeFieldNames[0] =
"Z";
136 errorCode = myProbe.
Probe(probeStream);
138 switchProbeField =
false;
141 serialUnitResults.
UpdateResult(
"Probe:SwitchProbeField",switchProbeField);
142 std::istringstream probeInStream(probeStream.str());
143 for(
size_t iNode = 0;iNode < numProbeNodes;iNode++){
144 double probeComp1, probeComp2;
145 size_t probeDataIndex = probeDataIndices[iNode];
146 probeInStream >> probeComp1 >> probeComp2;
147 if(probeComp1 != zVector[probeDataIndex] &&
148 probeComp2 != zVector[probeDataIndex+numNodes])
149 probeVectorField =
false;
151 if(!probeVectorField)
153 serialUnitResults.
UpdateResult(
"Probe:ProbeVectorField",probeVectorField);
156 if(probeVectorField){
157 bool probeMultipleFields =
true;
158 probeFieldNames[0] =
"W";
159 probeFieldNames.push_back(
"U");
161 errorCode = myProbe.
Probe(testState1,probeStream);
163 std::cout <<
"Probe returned errorcode = " << errorCode << std::endl;
164 probeMultipleFields =
false;
167 std::istringstream probeInStream(probeStream.str());
168 for(
size_t iNode = 0;iNode < numProbeNodes;iNode++){
169 double probeFieldW, probeFieldU;
170 size_t probeDataIndex = probeDataIndices[iNode];
171 probeInStream >> probeFieldW >> probeFieldU;
172 if(probeFieldW != wVector[probeDataIndex] &&
173 probeFieldU != uVector[probeDataIndex])
174 probeMultipleFields =
false;
176 if(!probeMultipleFields)
178 serialUnitResults.
UpdateResult(
"Probe:ProbeMultipleFields",probeMultipleFields);
181 serialUnitResults.
UpdateResult(
"Probe:Works",probeWorks);
void GetFlatIndices(const sizeextent &extent, ContainerType &indices) const
void SetProbeInterval(const pcpp::IndexIntervalType &inInterval)
void SetState(const simulation::state::base &inState)
int Probe(const simulation::state::base &inState, std::ostream &outStream)
void RenewStream(std::ostringstream &outStream)
void SetProbeFields(const std::vector< std::string > &inFields)
virtual size_t Create(size_t number_of_nodes=0, size_t number_of_cells=0)
void TestProbe(ix::test::results &serialUnitResults)
void SetDataInterval(const pcpp::IndexIntervalType &inInterval)
Encapsulating class for collections of test results.
Testing constructs for unit testing.
void Init(const ContainerType &inflatextent)
void UpdateResult(const std::string &name, const ValueType &result)
Updates an existing test result.
Simple Block Structured Mesh object.
void AddField(const std::string &name, char loc, unsigned int ncomp, unsigned int dsize, const std::string &unit)
void SetFieldBuffer(const std::string &name, void *buf)
void InitSimple(const ContainerType &inSize)