Page MenuHomec4science

test_computeTemp.cc
No OneTemporary

File Metadata

Created
Fri, Jun 7, 01:01

test_computeTemp.cc

#include "my_types.hh"
#include "fft.hh"
#include "material_point.hh"
#include "compute_temperature.hh"
#include <gtest/gtest.h>
/*****************************************************************/
// sujet 4.2
// Fixture class
class materialUniformT : public ::testing::Test {
protected:
void SetUp() override {
std::vector<MaterialPoint> points;
for(int i = 0; i < size*size; i++) {
MaterialPoint p;
Vector position;
position[0] = (i % size) * (2.0 / (size - 1)) - 1; //from -1 to 1
position[1] = int(i / size) * (2.0 / (size - 1)) - 1; //from -1 to 1
position[2] = 0;
p.getPosition() = position;
p.getTemperature() = 0.0;
p.getHeatRate() = 0.0;
points.push_back(p);
}
for (auto& p : points) {
system.addParticle(std::make_shared<MaterialPoint>(p));
}
computeTemp = std::make_shared<ComputeTemperature>(timestep);
}
int size = 10;
Real timestep = 0.01;
System system;
std::shared_ptr<ComputeTemperature> computeTemp;
};
/*****************************************************************/
TEST_F(materialUniformT, uniformInit) {
computeTemp->compute(system);
for (int i = 0; i < size * size; i++) {
auto& p = static_cast<MaterialPoint&>(system.getParticle(i));
ASSERT_NEAR(p.getTemperature(), 0.0, 1e-15);
}
}
/*****************************************************************/
/*****************************************************************/
// sujet 4.3
// Fixture class
class materialSource : public ::testing::Test {
protected:
void SetUp() override {
std::vector<MaterialPoint> points;
for(int i = 0; i < size*size; i++) {
MaterialPoint p;
Vector position;
position[0] = (i % size) * (2.0 / (size - 1)) - 1; //from -1 to 1
position[1] = int(i / size) * (2.0 / (size - 1)) - 1; //from -1 to 1
position[2] = 0;
p.getPosition() = position;
p.getTemperature() = 0.0;
if (position[0] == -0.5)
p.getHeatRate() = -1;
else if (position[0] == 0.5)
p.getHeatRate() = 1;
else
p.getHeatRate() = 1;
points.push_back(p);
}
for (auto& p : points) {
system.addParticle(std::make_shared<MaterialPoint>(p));
}
computeTemp = std::make_shared<ComputeTemperature>(timestep);
}
int size = 17;
Real timestep = 0.01;
System system;
std::shared_ptr<ComputeTemperature> computeTemp;
};
/*****************************************************************/
TEST_F(materialSource, SourceSink) {
Real tmp_old = 1;
Real tmp = 0;
while(abs(tmp-tmp_old)/tmp_old < 1e-4) { //to reach steady state
tmp_old = tmp;
computeTemp->compute(system);
for (int i = 0; i < system.getNbParticles(); i++){
auto& p = static_cast<MaterialPoint&>(system.getParticle(i));
tmp += abs(p.getTemperature());
}
}
for (int i = 0; i < size * size; i++) {
auto& p = static_cast<MaterialPoint&>(system.getParticle(i));
if (p.getPosition()[0] <= -0.5)
ASSERT_NEAR(p.getTemperature(), -1 - (1.0/(size - 1))*p.getPosition()[0], 1e-4);
else if (p.getPosition()[0] >= -0.5 && p.getPosition()[0] < 0.5)
ASSERT_NEAR(p.getTemperature(), (1.0/(size - 1))*p.getPosition()[0], 1e-4);
else
ASSERT_NEAR(p.getTemperature(), 1 - (1.0/(size - 1))*p.getPosition()[0], 1e-4);
}
}
/*****************************************************************/

Event Timeline