Skip to content
Snippets Groups Projects
Commit 661b7cf3 authored by Niklaus Johner's avatar Niklaus Johner
Browse files

Added the necessary functions to add frames with periodic boundary conditions

to a CoordGroup.
parent 483d0e72
No related branches found
No related tags found
No related merge requests found
......@@ -38,6 +38,8 @@ namespace {
void (CoordGroupHandle::*capture1)()=&CoordGroupHandle::Capture;
void (CoordGroupHandle::*capture2)(uint)=&CoordGroupHandle::Capture;
void (CoordGroupHandle::*add_frame1)(const geom::Vec3List&)=&CoordGroupHandle::AddFrame;
void (CoordGroupHandle::*add_frame2)(const geom::Vec3List&,const geom::Vec3&,const geom::Vec3&)=&CoordGroupHandle::AddFrame;
}
void export_CoordGroup()
......@@ -47,7 +49,8 @@ void export_CoordGroup()
.def("GetEntity",&CoordGroupHandle::GetEntity)
.def("GetAtomCount",&CoordGroupHandle::GetAtomCount)
.def("AddFrames", &CoordGroupHandle::AddFrames)
.def("AddFrame", &CoordGroupHandle::AddFrame)
.def("AddFrame", add_frame1)
.def("AddFrame", add_frame2)
.def("GetFrameCount",&CoordGroupHandle::GetFrameCount)
.def("GetFramePositions",&CoordGroupHandle::GetFramePositions)
.def("SetFramePositions",&CoordGroupHandle::SetFramePositions)
......
......@@ -103,6 +103,16 @@ CoordGroupHandle::operator bool() const
}
}
void CoordGroupHandle::AddFrame(const geom::Vec3List& clist, const geom::Vec3& cell_size, const geom::Vec3& cell_angles)
{
this->CheckValidity();
if (source_->IsMutable()) {
source_->AddFrame(clist,cell_size,cell_angles);
} else {
throw IntegrityError("Can't add frame to immutable CoordGroup");
}
}
void CoordGroupHandle::AddFrames(const CoordGroupHandle& cg)
{
this->CheckValidity();
......@@ -142,7 +152,7 @@ CoordFramePtr CoordGroupHandle::GetFrame(uint frame) const
this->CheckValidity();
return source_->GetFrame(frame);
}
AtomHandleList CoordGroupHandle::GetAtomList() const
{
this->CheckValidity();
......
......@@ -69,7 +69,8 @@ public:
/// \brief add frame
//void AddFrame(const std::vector<geom::Vec3>& clist);
void AddFrame(const geom::Vec3List& clist);
void AddFrame(const geom::Vec3List& clist,const geom::Vec3& cell_size,const geom::Vec3& cell_angles);
void AddFrames(const CoordGroupHandle& cg);
/// \brief set an indidivial atom position in the given frame
void SetAtomPos(uint frame, AtomHandle atom, const geom::Vec3& pos);
......
......@@ -70,6 +70,7 @@ public:
void Capture(uint f);
virtual void AddFrame(const std::vector<geom::Vec3>& coords) = 0;
virtual void AddFrame(const std::vector<geom::Vec3>& coords,const geom::Vec3& cell_size,const geom::Vec3& cell_angles) = 0;
virtual void InsertFrame(int pos, const std::vector<geom::Vec3>& coords) = 0;
protected:
void SetMutable(bool flag);
......
......@@ -30,6 +30,12 @@ void InMemCoordSource::AddFrame(const std::vector<geom::Vec3>& coords)
frames_.push_back(fp);
}
void InMemCoordSource::AddFrame(const std::vector<geom::Vec3>& coords,const geom::Vec3& cell_size,const geom::Vec3& cell_angles)
{
CoordFramePtr fp(new CoordFrame(coords,cell_size,cell_angles));
frames_.push_back(fp);
}
void InMemCoordSource::InsertFrame(int pos, const std::vector<geom::Vec3>& coords)
{
CoordFrameList::iterator it = frames_.begin();
......
......@@ -44,6 +44,7 @@ public:
void AddFrame(const CoordFramePtr& frame);
virtual void AddFrame(const std::vector<geom::Vec3>& coords);
virtual void AddFrame(const std::vector<geom::Vec3>& coords,const geom::Vec3& cell_size,const geom::Vec3& cell_angles);
virtual void InsertFrame(int pos, const std::vector<geom::Vec3>& coords);
private:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment