20 #ifndef NURBSDISK2S_H_
21 #define NURBSDISK2S_H_
23 #include "mbsimFlexibleBody/contours/contour2s.h"
24 #include "mbsimFlexibleBody/frames/node_frame.h"
25 #include "mbsimFlexibleBody/utils/contact_utils.h"
27 #include "openmbvcppinterface/nurbsdisk.h"
28 #include "mbsim/utils/boost_parameters.h"
29 #include <mbsim/utils/openmbv_utils.h>
31 #include "nurbs++/nurbs.h"
32 #include "nurbs++/nurbsS.h"
33 #include "nurbs++/vector.h"
39 namespace MBSimFlexibleBody {
68 virtual std::string getType()
const {
return "NurbsDisk2s"; }
71 void init(InitStage stage);
75 virtual fmatvec::Vec3 evalPosition(
const fmatvec::Vec2 &zeta);
76 virtual fmatvec::Vec3 evalWs(
const fmatvec::Vec2 &zeta);
77 virtual fmatvec::Vec3 evalWt(
const fmatvec::Vec2 &zeta);
78 virtual fmatvec::Vec3 evalWu(
const fmatvec::Vec2 &zeta) {
return evalWs(zeta); }
79 virtual fmatvec::Vec3 evalWv(
const fmatvec::Vec2 &zeta) {
return evalWt(zeta); }
80 virtual fmatvec::Vec3 evalWn(
const fmatvec::Vec2 &zeta);
82 virtual bool isZetaOutside(
const fmatvec::Vec2 &zeta) {
return zeta(0) < etaNodes[0] or zeta(0) > etaNodes[etaNodes.size()-1]; }
90 fmatvec::Vec3 evalPosition();
91 fmatvec::SqrMat3 evalOrientation();
95 virtual MBSim::ContactKinematics * findContactPairingWith(std::string type0, std::string type1) {
return findContactPairingFlexible(type0.c_str(), type1.c_str()); }
97 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBV, MBSim::tag, (optional (diffuseColor,(
const fmatvec::Vec3&),
"[-1;1;1]")(transparency,(
double),0))) {
98 openMBVNurbsDisk = OpenMBV::ObjectFactory::create<OpenMBV::NurbsDisk>();
207 std::shared_ptr<OpenMBV::NurbsDisk> openMBVNurbsDisk;
234 PLib::Vector<double> *uVec;
235 PLib::Vector<double> *vvec;
236 PLib::Vector<double> *vVec;
double Ri
inner and outer radius
Definition: nurbs_disk_2s.h:205
PlNurbsSurfaced * SurfaceVelocities
interpolated velocities of the surface-points
Definition: nurbs_disk_2s.h:218
void computeSurface()
interpolates the surface with node-data from body
Definition: nurbs_disk_2s.cc:360
int degU
interpolation degree azimuthal and radial
Definition: nurbs_disk_2s.h:200
std::vector< PlNurbsSurfaced > SurfaceJacobiansOfRotation
interpolated Jacobians of Rotation on the surface
Definition: nurbs_disk_2s.h:228
NurbsDisk2s(const std::string &name)
constructor
Definition: nurbs_disk_2s.cc:40
PLib::Vector< double > * uvec
knot vectors, used for the U und V coordinates of the surface
Definition: nurbs_disk_2s.h:233
int nj
number of elements in azimuthal and radial direction
Definition: nurbs_disk_2s.h:195
2s flexible
Definition: nurbs_disk_2s.h:54
void computeSurfaceJacobians()
interpolates the Jacobians of translation of the surface with the node-data from the body ...
Definition: nurbs_disk_2s.cc:462
fmatvec::Vec transformCW(const fmatvec::Vec &WrPoint)
initialize NURBS disk
Definition: nurbs_disk_2s.cc:285
std::vector< PlNurbsSurfaced > SurfaceJacobiansOfTranslation
interpolated Jacobians of Translation on the surface
Definition: nurbs_disk_2s.h:223
double computeError(const fmatvec::Vec &Vec1, const fmatvec::Vec &Vec2)
Definition: nurbs_disk_2s.cc:539
fmatvec::Vec getVVector()
Definition: nurbs_disk_2s.cc:520
PlNurbsSurfaced * Surface
interpolated surface of the contour
Definition: nurbs_disk_2s.h:213
void computeUVector(const int NbPts)
computes the U vector of the surface for a closed interpolation
Definition: nurbs_disk_2s.cc:318
void computeVVector(const int NbPts)
computes the V-vector of the surface for an open interpolation
Definition: nurbs_disk_2s.cc:337
fmatvec::Mat computeCurvatures(const double &radius, const double &phi)
Definition: nurbs_disk_2s.cc:314
basic contour described by two contour parameters
Definition: contour2s.h:33
int RefDofs
number of reference dofs of the flexible body
Definition: nurbs_disk_2s.h:190
fmatvec::Mat computeDirectionalDerivatives(const double &radius, const double &phi, const int °)
Definition: nurbs_disk_2s.cc:289
int testInsideBounds(const fmatvec::Vec &s)
Definition: nurbs_disk_2s.cc:529
virtual ~NurbsDisk2s()
destructor
Definition: nurbs_disk_2s.cc:49
fmatvec::Vec getUVector()
Definition: nurbs_disk_2s.cc:511
void computeSurfaceVelocities()
interpolates the velocities of the surface with the node-data from the body
Definition: nurbs_disk_2s.cc:444
fmatvec::Vec getControlPoints(const int u, const int v)
Definition: nurbs_disk_2s.cc:501