Skip to content
Snippets Groups Projects
Commit eda949d7 authored by Martin Schönherr's avatar Martin Schönherr
Browse files

include vertical cylinder object

parent 8d04b0b8
No related branches found
No related tags found
No related merge requests found
#include "VerticalCylinder.h"
VerticalCylinder::VerticalCylinder(const double& centerX, const double& centerY, const double& centerZ, const double& radius, const double& height)
: centerX(centerX), centerY(centerY), centerZ(centerZ), radius(radius), height(height)
{
}
VerticalCylinder::~VerticalCylinder()
{
}
SPtr<VerticalCylinder> VerticalCylinder::makeShared(double centerX, double centerY, double centerZ, double radius, double height)
{
return SPtr<VerticalCylinder>(new VerticalCylinder(centerX, centerY, centerZ, radius, height));
}
Object* VerticalCylinder::clone() const
{
return new VerticalCylinder(centerX, centerY, centerZ, radius, height);
}
double VerticalCylinder::getX1Centroid()
{
return centerX;
}
double VerticalCylinder::getX1Minimum()
{
return centerX - radius;
}
double VerticalCylinder::getX1Maximum()
{
return centerX + radius;
}
double VerticalCylinder::getX2Centroid()
{
return centerY;
}
double VerticalCylinder::getX2Minimum()
{
return centerY - radius;
}
double VerticalCylinder::getX2Maximum()
{
return centerY + radius;
}
double VerticalCylinder::getX3Centroid()
{
return centerZ;
}
double VerticalCylinder::getX3Minimum()
{
return centerZ - 0.5 * height;
}
double VerticalCylinder::getX3Maximum()
{
return centerZ + 0.5 * height;
}
bool VerticalCylinder::isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset)
{
double offset = maxOffset;
if (x1 < centerX || x2 < centerY || x3 < centerZ)
offset = minOffset;
const double deltaX1 = x1 - centerX;
const double deltaX2 = x2 - centerY;
const double deltaX3 = x3 - centerZ;
if( deltaX3 > 0.5 * height || deltaX3 < - 0.5 * height )
return false;
return (deltaX1*deltaX1 + deltaX2*deltaX2) < ((this->radius - offset) * (this->radius - offset));
}
void VerticalCylinder::scale(double delta)
{
this->radius += delta;
this->height += delta;
}
// _ ___ __ __________ _ __
// | | / (_)____/ /___ ______ _/ / ____/ /_ __(_)___/ /____
// | | / / / ___/ __/ / / / __ `/ / /_ / / / / / / __ / ___/
// | |/ / / / / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__ )
// |___/_/_/ \__/\__,_/\__,_/_/_/ /_/\__,_/_/\__,_/____/
//
#ifndef VERTICAL_CYLINDER_H
#define VERTICAL_CYLINDER_H
#include "../Object.h"
#include <VirtualFluidsDefinitions.h>
#include <core/DataTypes.h>
#include <core/PointerDefinitions.h>
class VF_PUBLIC VerticalCylinder : public Object
{
public:
HOSTDEVICE VerticalCylinder(const double& centerX, const double& centerY, const double& centerZ, const double& radius, const double& height);
HOSTDEVICE virtual ~VerticalCylinder();
static SPtr<VerticalCylinder> makeShared(double centerX, double centerY, double centerZ, double radius, double height);
HOSTDEVICE Object* clone() const override;
double getX1Centroid() override;
double getX1Minimum() override;
double getX1Maximum() override;
double getX2Centroid() override;
double getX2Minimum() override;
double getX2Maximum() override;
double getX3Centroid() override;
double getX3Minimum() override;
double getX3Maximum() override;
HOSTDEVICE bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) override;
void scale(double delta) override;
protected:
double centerX;
double centerY;
double centerZ;
double radius;
double height;
};
#endif
......@@ -24,17 +24,21 @@
#include "io/SimulationFileWriter/SimulationFileWriter.h"
#include "grid/GridBuilder/LevelGridBuilder.h"
#include "grid/GridBuilder/ParallelGridBuilder.h"
#include "geometries/Sphere/Sphere.h"
#include "geometries/VerticalCylinder/VerticalCylinder.h"
#include "geometries/Cuboid/Cuboid.h"
#include "geometries/TriangularMesh/TriangularMesh.h"
#include "geometries/Conglomerate/Conglomerate.h"
#include "geometries/TriangularMesh/TriangularMeshStrategy.h"
#include "grid/GridFactory.h"
#include "grid/GridBuilder/MultipleGridBuilder.h"
#include <grid/GridMocks.h>
#include "grid/GridStrategy/GridStrategyMocks.h"
#include "VirtualFluidsBasics/utilities/logger/Logger.h"
#include "geometries/Conglomerate/Conglomerate.h"
#include "io/STLReaderWriter/STLReader.h"
#include "io/STLReaderWriter/STLWriter.h"
#include "geometries/TriangularMesh/TriangularMeshStrategy.h"
#include "Output/FileWriter.h"
//#include "DataStructureInitializer/GridReaderFiles/GridReader.h"
......@@ -278,7 +282,8 @@ void multipleLevel(const std::string& configPath)
gridBuilder->addCoarseGrid(0, -25, -40, 100, 75, 60, 2.0);
//TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/circleBinaer.stl");
gridBuilder->addGrid(new Sphere(50,25,10,15), 2);
//gridBuilder->addGrid(new Sphere(50,25,10,15), 2);
gridBuilder->addGrid(new VerticalCylinder(50, 25, 10, 15, 15), 2);
//gridBuilder->addGeometry(triangularMesh);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment