21 std::cout <<
"TestEOS_ComputeBuffers" << std::endl;
25 std::vector<bool> dimComputeEOS(2,
true);
27 for(
int nDim = 2;nDim <= 3;nDim++){
34 realGridExtent.resize(numDim*2,0.0);
35 for(
int iDim = 0;iDim < numDim;iDim++)
36 realGridExtent[iDim*2 + 1] = 1.0;
39 std::vector<size_t> &numNodes(testGrid.
GridSizes());
40 numNodes.resize(numDim);
46 size_t numNodesDomain = 1;
47 size_t numCellsDomain = 1;
48 std::vector<double> dX(numDim,0.0);
51 for(
int iDim = 0;iDim < numDim;iDim++){
52 numNodesDomain *= numNodes[iDim];
53 numCellsDomain *= (numNodes[iDim]-1);
54 dX[iDim] = (realGridExtent[iDim*2+1] - realGridExtent[iDim*2])/(numNodes[iDim]-1);
55 gridMetric[iDim] = 1.0/dX[iDim];
59 std::cout <<
"Grid finalization failed." << std::endl;
68 double specGasConst = 1.0;
71 std::vector<double> vVec(numDim,0.0);
76 std::vector<double> expectedPressure(numNodesDomain,1.0);
77 std::vector<double> expectedTemperature(numNodesDomain,1.0);
79 std::vector<double> ke(numNodesDomain,0.0);
80 std::vector<double> rho(numNodesDomain,1.0);
81 std::vector<double> rhoV(numDim*numNodesDomain,0.0);
82 std::vector<double> rhoE(numNodesDomain,0.0);
87 for(
int iDim = 0;iDim < numDim;iDim++){
88 for(
int iPoint = 0;iPoint < numNodesDomain;iPoint++){
89 rhoV[iDim*numNodesDomain + iPoint] = rho[iPoint]*vVec[iDim];
90 ke[iPoint] += .5*rho[iPoint]*vVec[iDim]*vVec[iDim];
94 for(
int iPoint = 0;iPoint < numNodesDomain;iPoint++){
95 rhoE[iPoint] = 1.0/(gamma-1.0) + ke[iPoint];
98 std::vector<double> T(numNodesDomain,0.);
99 std::vector<double> p(numNodesDomain,0.);
100 std::vector<double> rhom1(numNodesDomain,0.);
101 std::vector<double>
velocity(numDim*numNodesDomain,0.);
102 std::vector<double> internalEnergy(numNodesDomain,0.);
108 std::vector<double *> myStateBuffers(numDim+2,NULL);
109 myStateBuffers[0] = &rho[0];
110 for(
int iDim = 0;iDim < numDim;iDim++)
111 myStateBuffers[iDim+1] = &rhoV[iDim*numNodesDomain];
112 myStateBuffers[numDim+1] = &rhoE[0];
114 std::vector<double *> myDVBuffers(4+numDim,NULL);
115 myDVBuffers[0] = &p[0];
116 myDVBuffers[1] = &T[0];
117 myDVBuffers[2] = &rhom1[0];
119 for(
int iDim = 0;iDim < numDim;iDim++)
120 myDVBuffers[iDim+3] = &velocity[iDim*numNodesDomain];
121 myDVBuffers[numDim+3] = &internalEnergy[0];
141 std::cout <<
"Failed to initialize EOS" << std::endl;
149 std::cout <<
"ComputeDVBuffer failed." << std::endl;
156 std::cout <<
"ComputePressure failed." << std::endl;
160 std::cout <<
"ComputeTemperature failed." << std::endl;
163 bool computeEOSWorks =
true;
164 bool pfailed =
false;
165 bool tfailed =
false;
167 bool printPressure=
true;
168 bool printTemperature=
true;
169 for(
int iNode = 0;iNode < numNodesDomain;iNode++){
170 if(std::abs(p[iNode] - expectedPressure[iNode]) > 1e-15){
172 std::cout <<
"In EOS_ComputeBuffers, Expected p=" << expectedPressure[iNode]
173 <<
" got p=" << p[iNode] <<
" at iNode=" << iNode << std::endl;
174 std::cout <<
"No further messages will be generated for " << std::endl;
175 printPressure =
false;
177 computeEOSWorks =
false;
181 if(std::abs(T[iNode] - expectedTemperature[iNode]) > 1e-15){
182 if(printTemperature){
183 std::cout <<
"In EOS_ComputeBuffers, Expected T=" << expectedTemperature[iNode]
184 <<
" got T=" << T[iNode] <<
" at iNode=" << iNode << std::endl;
185 std::cout <<
"No further messages will be generated for " << std::endl;
186 printTemperature =
false;
188 computeEOSWorks =
false;
193 dimComputeEOS[numDim-2] = computeEOSWorks ;
195 std::cout <<
"Pressure failed" << std::endl;
198 std::cout <<
"Temperature failed" << std::endl;
202 bool computeEOSWorks =
true;
204 for(
int nDim = 2;nDim <= 3;nDim++){
205 computeEOSWorks = computeEOSWorks && dimComputeEOS[nDim-2];
208 serialUnitResults.
UpdateResult(
"EOS:ComputeBuffers",computeEOSWorks);
void const size_t const size_t const size_t const int const int const double * gridMetric
int ComputeDVBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSizes, const std::vector< double *> &stateBuffers, std::vector< double *> &dvBuffers)
simulation::grid::parallel_blockstructured grid_t
simulation::state::base state_t
void Flatten(ContainerType &output) const
bool CheckResult(bool &localResult, pcpp::CommunicatorType &testComm)
void SetupPressureBuffer(double *const inPtr)
int ComputePressureBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSizes)
Compute pressure for the entire buffer.
void SetGamma(const double &inValue)
void SetSpecificGasConstant(const double &inValue)
void const size_t const size_t const size_t const int const double const int const double * velocity
void SetupInternalEnergyBuffer(double *const inPtr)
void SetupTemperatureBuffer(double *const inPtr)
Encapsulating class for collections of test results.
pcpp::IndexIntervalType & PartitionBufferInterval()
const std::vector< size_t > & GridSizes() const
void SetupSpecificVolumeBuffer(double *const inPtr)
void SetGridSpacings(const std::vector< double > &inSpacing)
int InitializeMaterialProperties()
Derive material properties from a minimum required set.
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t double * a
Testing constructs for unit testing.
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t * bufferInterval
void UpdateResult(const std::string &name, const ValueType &result)
Updates an existing test result.
Perfect Gas Equation of State.
const std::vector< double > & PhysicalExtent() const
void TestEOS_ComputeBuffers(ix::test::results &serialUnitResults)
Simple Block Structured Mesh object.
int ComputeTemperatureBuffer(const pcpp::IndexIntervalType ®ionInterval, const std::vector< size_t > &bufferSizes)
Compute temperature for the entire buffer.
int Finalize(bool allocateCoordinateData=false)
void InitSimple(const ContainerType &inSize)