Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F59962336
material_points_factory.cc
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Apr 26, 09:30
Size
1 KB
Mime Type
text/x-c
Expires
Sun, Apr 28, 09:30 (2 d)
Engine
blob
Format
Raw Data
Handle
17208376
Attached To
R9484 sp4e-homework-lars-bertil
material_points_factory.cc
View Options
#include "material_points_factory.hh"
#include "compute_temperature.hh"
#include "csv_reader.hh"
#include "csv_writer.hh"
#include "material_point.hh"
#include <cmath>
#include <iostream>
/* -------------------------------------------------------------------------- */
std::unique_ptr<Particle> MaterialPointsFactory::createParticle() {
return std::make_unique<MaterialPoint>();
}
/* -------------------------------------------------------------------------- */
SystemEvolution&
MaterialPointsFactory::createSimulation(const std::string& fname,
Real timestep) {
this->system_evolution =
std::make_unique<SystemEvolution>(std::make_unique<System>());
CsvReader reader(fname);
reader.read(this->system_evolution->getSystem());
// check if it is a square number
auto N = this->system_evolution->getSystem().getNbParticles();
int side = std::sqrt(N);
if (side * side != N)
throw std::runtime_error("number of particles is not square");
auto temperature = std::make_shared<ComputeTemperature>();
this->system_evolution->addCompute(temperature);
return *system_evolution;
}
/* -------------------------------------------------------------------------- */
ParticlesFactoryInterface& MaterialPointsFactory::getInstance() {
if (not ParticlesFactoryInterface::factory)
ParticlesFactoryInterface::factory = new MaterialPointsFactory;
return *factory;
}
/* -------------------------------------------------------------------------- */
Event Timeline
Log In to Comment