Itasca C++ Interface
irblock.h
1 #pragma once
2 #include "base/src/farray.h"
3 
4 namespace itasca {
5  class IThing;
6  class IGroup;
7  class IContainer;
8 }
9 
10 namespace itascaxd {
11  class IPiece;
12  class IPieceMechanical;
13  class IBodyMechanical;
14  class IRigidBodyMechanical;
15  class IBody;
16  class IContact;
17  class IHalfFacet;
18  class IHalfVertex;
19 }
20 
21 namespace rblock {
22  using namespace itasca;
23  using namespace itascaxd;
24 
25  class IRBlock {
26  public:
28  inline static const TType type_ = 0x5595cd9e;
30  virtual IThing * getIThing()=0;
32  virtual const IThing * getIThing() const=0;
34  virtual IRBlock * getNextIRBlock()=0;
36  virtual const IRBlock * getNextIRBlock() const=0;
38  virtual DExtent3 getExtent() const=0;
39  // Return the cell extent
40  virtual const DExtent &getCellExtent() const=0;
41 
42 
44  virtual void getGeometry(FArray<DVect> *vert,FArray<int> *fac=0) const=0;
46  virtual DVect getBallOffset() const=0;
48  virtual double getBallRadius() const=0;
50  virtual double getAspectRatio() const=0;
52  virtual void getFacetGeometry(FArray<DVect> *vert) const=0;
54  virtual DVect getVertexOfFacet(int fac,int ver) const=0;
56  virtual double getFacetArea(int fac) const = 0;
58  virtual DVect getVertex(int ver) const=0;
60  virtual DVect getClosestPointOnFacet(const DVect &,int fac) const =0;
63  virtual int getFacetClosestToPoint(const DVect &) const =0;
65  virtual DVect getFacetNormal(int fac) const=0;
67  virtual DVect getFacetPosition(int fac) const=0;
69  virtual bool getIsIn(const DVect &) const = 0;
70 
71 
73  virtual int getNumberFacets() const=0;
75  virtual int getNumberVertices() const=0;
77  virtual const IPiece * getIPiece() const = 0;
78  virtual IPiece * getIPiece() = 0;
80  virtual const IBody * getIBody() const = 0;
81  virtual IBody * getIBody() = 0;
83  virtual const IBodyMechanical * getIBodyMechanical() const = 0;
84  virtual IBodyMechanical * getIBodyMechanical() = 0;
86  virtual const IRigidBodyMechanical * getIRigidBodyMechanical() const = 0;
87  virtual IRigidBodyMechanical * getIRigidBodyMechanical() = 0;
89  virtual DAVect getMoi() const=0;
91  virtual DAVect getInertialMoi() const=0;
94  virtual double getMoiComp(int) const = 0;
97  virtual double getInertialMoiComp(int) const = 0;
98 
99 #ifdef THREED
101  virtual SymTensor getInertialMoiTensor() const = 0;
102  virtual SymTensor getMoiTensor() const = 0;
103 #endif
105  virtual void setMoiComp(const double &,int) = 0;
106 
108  virtual void setMoi(const DAVect &d)=0;
109 
111  virtual void setMoiFix(bool b)=0;
112  virtual bool isMoiFix()=0;
113  virtual bool isMoiFix() const=0;
114 
116  virtual void setVolumeNoScale(const double &d)=0;
117 
119  virtual void getContactList(FArray<IContact *> *ret,const TType &type=0,const IPiece *p2=0)=0;
121  virtual void getContactList(FArray<const IContact *> *ret,const TType &type=0,const IPiece *p2=0) const=0;
123  virtual quint64 getContactCount(bool active,const TType &type=0,bool domainToo = false) const=0;
124 
126  virtual DMatrix<DIM,DIM> getStress() const=0;
127 
130  virtual bool rotate(const DVect &rotp,const DVect &axis,const double &w,bool update=true,bool noThrow = false) = 0;
132  virtual bool scale(const double &)=0;
134  virtual void getSurfaceRotMatrix(DMatrix<dim,dim> *) const=0;
135 
137  virtual bool getFix(quint32 dof) const=0;
139  virtual void setFix(quint32 dof,bool b)=0;
141  virtual double getVolume() const=0;
143  virtual double getLocalDamping() const=0;
145  virtual void setLocalDamping(const double &d)=0;
147  virtual double getDensity() const=0;
149  virtual void setDensity(const double &d)=0;
151  virtual double getInertialMass() const=0;
153  virtual double getMass() const=0;
155  virtual int getFragmentIndex() const=0;
157  virtual void setFragmentIndex(int ind)=0;
159  virtual DVect getCentroid() const=0;
161  virtual void setCentroid(const DVect &p)=0;
163  virtual DVect getDisplacement() const=0;
165  virtual void setDisplacement(const DVect &v)=0;
166 #ifdef TWOD
168  virtual double getAngDisplacement() const=0;
170  virtual void setAngDisplacement(const double &v)=0;
171 #endif
173  virtual DVect getVelocity() const=0;
175  virtual void setVelocity(const DVect &p)=0;
177  virtual DAVect getAngVelocity() const=0;
179  virtual void setAngVelocity(const DAVect &p)=0;
181  virtual DVect getAppliedForce() const=0;
183  virtual void setAppliedForce(const DVect &v)=0;
185  virtual DAVect getAppliedMoment() const=0;
187  virtual void setAppliedMoment(const DAVect &v)=0;
189  virtual DVect getContactForce() const=0;
191  virtual void setContactForce(const DVect &v)=0;
193  virtual DVect getUnbalancedForce() const=0;
195  virtual DAVect getUnbalancedMoment() const=0;
197  virtual DAVect getContactMoment() const=0;
199  virtual void setContactMoment(const DAVect &v)=0;
200 
202  virtual DVect getPosition() const = 0;
204  virtual double getRounding() const = 0;
205 #ifdef THREED
206  virtual DVect getEulerFromOrient() const=0;
207  virtual void setOrientFromEuler(const DVect3 &d)=0;
208 #endif
209 
211  virtual QString getFaceGroupName(uint side,const ISlotID &slot=ISlotID()) const=0;
212 
213  virtual bool getBit(int bit) const=0;
214  virtual void setBit(int bit,bool b) const=0;
215 
216  };
217 } // namespace rblock
218 // EoF
219 
DMatrix is a Matrix that defaults to type double...
Definition: matrix.h:741
Definition: igroup.h:41
Base class for items that will be stored in containers.
Definition: ithing.h:30
Definition: ibody.h:20
Definition: ibodymechanical.h:13
Definition: ipiece.h:15
Definition: irigidbodymechanical.h:7
Definition: irblock.h:25
virtual bool scale(const double &)=0
Scale the rblock to have this area or volume.
virtual void getFacetGeometry(FArray< DVect > *vert) const =0
Get the vertices listed out in facet format.
virtual DVect getBallOffset() const =0
Returns the ball position containing the block.
virtual double getFacetArea(int fac) const =0
Get the area of a facet.
virtual int getNumberVertices() const =0
Return the number of vertices.
virtual void getContactList(FArray< IContact * > *ret, const TType &type=0, const IPiece *p2=0)=0
Return a list of IContacts.
virtual double getMoiComp(int) const =0
virtual DAVect getContactMoment() const =0
Return the resultant of all contact moments.
virtual DVect getVertex(int ver) const =0
Get the vertex.
virtual void setFragmentIndex(int ind)=0
Set the fragment index.
virtual DAVect getAngVelocity() const =0
Get the angular velocity.
virtual DVect getUnbalancedForce() const =0
Return the unbalanced force.
virtual DVect getFacetNormal(int fac) const =0
Get the facet normal.
virtual IThing * getIThing()=0
Return an IThing interface for this object.
virtual void setLocalDamping(const double &d)=0
Set the local damping coefficient.
virtual double getAspectRatio() const =0
Returns the aspect ratio of the block.
virtual DVect getFacetPosition(int fac) const =0
Get the facet position.
virtual const IBodyMechanical * getIBodyMechanical() const =0
Return the IBodyMechanical pointer.
virtual const IPiece * getIPiece() const =0
Return the IPiece pointer.
virtual DVect getClosestPointOnFacet(const DVect &, int fac) const =0
Get the closest point on a facet to a point in space.
virtual double getInertialMoiComp(int) const =0
virtual void setVelocity(const DVect &p)=0
Set the velocity.
virtual DAVect getAppliedMoment() const =0
Return the applied moment.
virtual DVect getContactForce() const =0
Return the resultant of all contact forces.
virtual IRBlock * getNextIRBlock()=0
Return the next IRBlock object in the global list, or 0 if it is the last set.
virtual const IThing * getIThing() const =0
Return a const IThing interface for this object.
virtual const IRigidBodyMechanical * getIRigidBodyMechanical() const =0
Return the IRigidBodyMechanical pointer.
virtual void setAngVelocity(const DAVect &p)=0
Set the angular velocity.
virtual void getContactList(FArray< const IContact * > *ret, const TType &type=0, const IPiece *p2=0) const =0
Return a list of const IContacts.
virtual void getSurfaceRotMatrix(DMatrix< dim, dim > *) const =0
Get the rotation matrix with reference to the principal axis system.
virtual QString getFaceGroupName(uint side, const ISlotID &slot=ISlotID()) const =0
Support for face groups.
virtual DAVect getMoi() const =0
Return the inertia tensor in principal axis form.
virtual DVect getVertexOfFacet(int fac, int ver) const =0
Get the vertex of a facet.
virtual void setAppliedForce(const DVect &v)=0
Set the applied force.
virtual double getVolume() const =0
Get the volume.
virtual quint64 getContactCount(bool active, const TType &type=0, bool domainToo=false) const =0
Return the number of contacts.
virtual double getRounding() const =0
Return the rounding.
virtual DVect getCentroid() const =0
Get the centroid.
virtual void setContactMoment(const DAVect &v)=0
Set the contact moment.
virtual DVect getPosition() const =0
Return the rblock position. This is implementation dependent.
virtual const IRBlock * getNextIRBlock() const =0
Return the next IRBlock object in the global list, or 0 if it is the last set.
virtual double getLocalDamping() const =0
Return the local damping coefficient.
virtual DExtent3 getExtent() const =0
Return the DExtent3 extent.
virtual DAVect getUnbalancedMoment() const =0
Return the unbalanced moment.
virtual DVect getVelocity() const =0
Get the velocity.
virtual int getNumberFacets() const =0
Return the number of facets.
virtual DMatrix< DIM, DIM > getStress() const =0
Return the current stress computed for this rblock.
virtual DVect getDisplacement() const =0
Get the displacement.
virtual int getFacetClosestToPoint(const DVect &) const =0
virtual void setCentroid(const DVect &p)=0
Set the centroid.
virtual void setAppliedMoment(const DAVect &v)=0
Set the applied moment.
virtual double getInertialMass() const =0
Return the inertial mass.
virtual bool getFix(quint32 dof) const =0
Return a boolean indicating the fixity condition.
virtual DVect getAppliedForce() const =0
Return the applied force.
virtual DAVect getInertialMoi() const =0
Return the inertial (may be scaled) inertia tensor in principal axis form.
virtual double getDensity() const =0
Return the density.
virtual void setMoiFix(bool b)=0
When setting the MOI from FISH one needs make sure that it is not reset no matter what.
virtual void setDisplacement(const DVect &v)=0
Set the displacement.
virtual int getFragmentIndex() const =0
Return the fragment index.
virtual double getBallRadius() const =0
Returns the ball radius containing the block.
virtual bool getIsIn(const DVect &) const =0
Returns a boolean indicating whether a point in space is inside or outside of the rigid block.
virtual void getGeometry(FArray< DVect > *vert, FArray< int > *fac=0) const =0
Get the list of vertices and facets. Nothing is done with the second array in 2D.
virtual void setMoi(const DAVect &d)=0
Set the principal values of the inertia tensor directly.
virtual void setFix(quint32 dof, bool b)=0
Set the fixity condition.
virtual void setVolumeNoScale(const double &d)=0
Set the volume without scaling the rblock.
virtual double getMass() const =0
Return the mass.
virtual bool rotate(const DVect &rotp, const DVect &axis, const double &w, bool update=true, bool noThrow=false)=0
virtual const IBody * getIBody() const =0
Return the IBody pointer.
virtual void setDensity(const double &d)=0
Set the density.
virtual void setMoiComp(const double &, int)=0
Set a component of the inertia tensor. Admissible values are: 11,12,13,22,23,33 in 3D.
virtual void setContactForce(const DVect &v)=0
Set the contact force.
An array class that attempts to minimize unnecessary heap access.
uint32 TType
class type indicator
Definition: basedef.h:46
DExtent3 DExtent
A DExtent2 in 2D, a DExtent3 in 3D.
Definition: dim.h:156
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition: dim.h:150
DAVect3 DAVect
Angular vector of doubles, either 2D or 3D.
Definition: dim.h:158
namespace Itasca
Definition: basememory.cpp:10
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4