MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
hbeam_interp.cc File Reference
#include "mbconfig.h"
#include "matvecexp.h"
#include "Rot.hh"
#include "hbeam_interp.h"
Include dependency graph for hbeam_interp.cc:

Go to the source code of this file.

Enumerations

enum  { NODE1 = 0, NODE2 = 1, NUMNODES = 2 }
 

Functions

void Compute (const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal xi, const doublereal dexi_des, Vec3 &pos, Mat3x3 &orient, Vec3 &F, Vec3 &om, MatExp &A1, MatExp &A2, MatExp &A12, MatExp &A_tilde, MatExp &Theta_r_I, MatExp &Theta_tilde, MatExp &A_xi, VecExp &eta_r, VecExp &kappa, VecExp &eta_tilde)
 
void ComputeInterpolation (const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal xi, const doublereal dexi_des, Vec3 &pos, Mat3x3 &orient, Vec3 &F, Vec3 &om)
 
void ComputeFullInterpolation (const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal xi, const doublereal dexi_des, Vec3 &pos, Mat3x3 &orient, Mat3x3 *const or_delta_w_or, Mat3x3 *const delta_pos_w_or, Mat3x3 *const delta_pos_w_pos, Vec3 &F, Vec3 &om, Mat3x3 *const delta_om_ws_or, Mat3x3 *const delta_F_ws_or, Mat3x3 *const delta_F_ws_pos)
 

Enumeration Type Documentation

anonymous enum
Enumerator
NODE1 
NODE2 
NUMNODES 

Definition at line 85 of file hbeam_interp.cc.

85  {
86  NODE1 = 0,
87  NODE2 = 1,
88  NUMNODES = 2 /* serve eventualmente per dimensionare arrays */
89 };

Function Documentation

void Compute ( const Vec3 *const  node_pos,
const Mat3x3 *const  node_or,
const Vec3 *const  node_f,
const doublereal  xi,
const doublereal  dexi_des,
Vec3 pos,
Mat3x3 orient,
Vec3 F,
Vec3 om,
MatExp A1,
MatExp A2,
MatExp A12,
MatExp A_tilde,
MatExp Theta_r_I,
MatExp Theta_tilde,
MatExp A_xi,
VecExp eta_r,
VecExp kappa,
VecExp eta_tilde 
)
inline

Definition at line 92 of file hbeam_interp.cc.

References Vec3::Cross(), grad::Cross(), RoTrManip::DRoTr_I(), VecExp::GetMom(), MatExp::GetMom(), VecExp::GetVec(), MatExp::GetVec(), RoTrManip::Helix(), NODE1, NODE2, RoTrManip::RoTrAndDRoTr(), MatExp::Transpose(), and Mat3x3::Transpose().

Referenced by ComputeFullInterpolation(), and ComputeInterpolation().

111  {
112  A1 = MatExp(node_or[NODE1], node_pos[NODE1].Cross(node_or[NODE1]));
113  A2 = MatExp(node_or[NODE2], node_pos[NODE2].Cross(node_or[NODE2]));
114  A12 = A2*(A1.Transpose());
115  //VecExp e1(0.);
116  eta_r = RoTrManip::Helix(A12);
117  Theta_r_I = RoTrManip::DRoTr_I(eta_r);
118  eta_tilde = eta_r*xi;
119  RoTrManip::RoTrAndDRoTr(eta_tilde,A_tilde,Theta_tilde);
120  A_xi = A_tilde*A1;
121  //extract interpolated orientation and position
122  orient = A_xi.GetVec();
123  pos = (A_xi.GetMom()*(orient.Transpose())).Ax();
124 
125  kappa = Theta_tilde*eta_r*dexi_des;
126  //extract interpolated curvature and def. gradient
127  om = kappa.GetVec();
128  F = kappa.GetMom();
129  F -= pos.Cross(om); /* :) */
130 };
const Vec3 & GetVec(void) const
Definition: matvecexp.h:198
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
const Mat3x3 & GetVec(void) const
Definition: matvecexp.h:356
MatExp DRoTr_I(const VecExp &eta)
Definition: Rot.cc:255
const Vec3 & GetMom(void) const
Definition: matvecexp.h:202
VecExp Helix(const MatExp &H)
Definition: Rot.cc:282
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
Definition: matvec.h:3248
Mat3x3 Transpose(void) const
Definition: matvec3.h:816
MatExp Transpose(void) const
Definition: matvecexp.h:407
const Mat3x3 & GetMom(void) const
Definition: matvecexp.h:360
void RoTrAndDRoTr(const VecExp &eta, MatExp &H, MatExp &Th)
Definition: Rot.cc:230

Here is the call graph for this function:

void ComputeFullInterpolation ( const Vec3 *const  node_pos,
const Mat3x3 *const  node_or,
const Vec3 *const  node_f,
const doublereal  xi,
const doublereal  dexi_des,
Vec3 pos,
Mat3x3 orient,
Mat3x3 *const  or_delta_w_or,
Mat3x3 *const  delta_pos_w_or,
Mat3x3 *const  delta_pos_w_pos,
Vec3 F,
Vec3 om,
Mat3x3 *const  delta_om_ws_or,
Mat3x3 *const  delta_F_ws_or,
Mat3x3 *const  delta_F_ws_pos 
)

Definition at line 148 of file hbeam_interp.cc.

References Compute(), Vec3::Cross(), RoTrManip::Elle(), Eye3, MatExp::GetMom(), VecExp::GetVec(), MatExp::GetVec(), MatCross, NODE1, NODE2, and NUMNODES.

Referenced by HBeam::AssStiffnessMat().

162  {
163  MatExp A1, A2, A12, A_tilde, Theta_r_I, Theta_tilde, A_xi;
164  VecExp eta_r, kappa, eta_tilde;
165  Compute(node_pos,node_or, node_f,xi,dexi_des,pos,orient,F,om,
166  A1,A2,A12,A_tilde,Theta_r_I,Theta_tilde,A_xi,eta_r,
167  kappa,eta_tilde);
168 
169  MatExp eta_xi_delta_2(Theta_tilde*Theta_r_I*xi);
170  MatExp eta_xi_delta_1(A_tilde);
171  eta_xi_delta_1-=Theta_tilde*Theta_r_I*A2*xi;
172  //compute traslation wrenches at xi and at the nodes:
173  MatExp Trasl_n[NUMNODES];
174  Trasl_n[NODE1] = MatExp(Eye3, Mat3x3(MatCross, node_pos[NODE1]));
175  Trasl_n[NODE2] = MatExp(Eye3, Mat3x3(MatCross, node_pos[NODE2]));
176  MatExp Trasl_xi_bak(Eye3, Mat3x3(MatCross, -pos));
177  //compute delta_kappa_i
178  MatExp Lambda(RoTrManip::Elle(eta_tilde,eta_r*dexi_des));
179  MatExp delta_kappa_2(Lambda*xi);
180  delta_kappa_2+=Theta_tilde*dexi_des;
181  delta_kappa_2 = delta_kappa_2*Theta_r_I;
182  MatExp delta_kappa_1(delta_kappa_2*A2*-1);
183 
184  //transform eta_xi_delta_i to deltapos_ordelta_xi_i
185  MatExp dpos_ord_xi_1(Trasl_xi_bak*eta_xi_delta_1);
186  MatExp dpos_ord_xi_2(Trasl_xi_bak*eta_xi_delta_2);
187  //project to nodes delta_pos, or_delta:
188  MatExp dpos_ord_dpos_ord_1(dpos_ord_xi_1*Trasl_n[NODE1]);
189  MatExp dpos_ord_dpos_ord_2(dpos_ord_xi_2*Trasl_n[NODE2]);
190  //extract or_delta_w_or, delta_pos_w_or and delta_pos_w_pos
191  or_delta_w_or[NODE1] = dpos_ord_dpos_ord_1.GetVec();
192  or_delta_w_or[NODE2] = dpos_ord_dpos_ord_2.GetVec();
193  delta_pos_w_or[NODE1] = dpos_ord_dpos_ord_1.GetMom();
194  delta_pos_w_or[NODE2] = dpos_ord_dpos_ord_2.GetMom();
195  delta_pos_w_pos[NODE1] = dpos_ord_dpos_ord_1.GetVec();
196  delta_pos_w_pos[NODE2] = dpos_ord_dpos_ord_2.GetVec();
197  //project delta_kappa_1 to nodes delta_pos, or_delta:
198  MatExp dkappa_dpos_ord_1(delta_kappa_1*Trasl_n[NODE1]);
199  MatExp dkappa_dpos_ord_2(delta_kappa_2*Trasl_n[NODE2]);
200  //extract delta_om_ws_or, delta_F_ws_or and delta_F_ws_pos
201  delta_om_ws_or[NODE1] = dkappa_dpos_ord_1.GetVec();
202  delta_om_ws_or[NODE2] = dkappa_dpos_ord_2.GetVec();
203  //delta kappa.Mom()
204  delta_F_ws_or[NODE1] = dkappa_dpos_ord_1.GetMom();
205  delta_F_ws_pos[NODE1] = dkappa_dpos_ord_1.GetVec();
206  delta_F_ws_or[NODE2] = dkappa_dpos_ord_2.GetMom();
207  delta_F_ws_pos[NODE2] = dkappa_dpos_ord_2.GetVec();
208  //x cross delta kappa.Vec()
209  delta_F_ws_or[NODE1] -= pos.Cross(dkappa_dpos_ord_1.GetVec());
210  delta_F_ws_or[NODE2] -= pos.Cross(dkappa_dpos_ord_2.GetVec());
211  //kappa.Vec() x delta_pos
212  delta_F_ws_or[NODE1] += kappa.GetVec().Cross(delta_pos_w_or[NODE1]);
213  delta_F_ws_pos[NODE1] += kappa.GetVec().Cross(delta_pos_w_pos[NODE1]);
214  delta_F_ws_or[NODE2] += kappa.GetVec().Cross(delta_pos_w_or[NODE2]);
215  delta_F_ws_pos[NODE2] += kappa.GetVec().Cross(delta_pos_w_pos[NODE2]);
216 
217  //tarocco per l'aggiunta dell'offset f
218  //le curvature e le posizioni invece sono giuste perche'
219  //viene passato node_pos=x_node+node_or*f
220  Mat3x3 fodo;
221 
222  fodo = node_f[NODE1].Cross(or_delta_w_or[NODE1]);
223  delta_pos_w_or[NODE1] -= delta_pos_w_pos[NODE1]*fodo;
224  delta_F_ws_or[NODE1] -= delta_F_ws_pos[NODE1]*fodo;
225 
226  fodo = node_f[NODE2].Cross(or_delta_w_or[NODE2]);
227  delta_pos_w_or[NODE2] -= delta_pos_w_pos[NODE2]*fodo;
228  delta_F_ws_or[NODE2] -= delta_F_ws_pos[NODE2]*fodo;
229 }
const Vec3 & GetVec(void) const
Definition: matvecexp.h:198
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
const MatCross_Manip MatCross
Definition: matvec3.cc:639
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
void Compute(const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal xi, const doublereal dexi_des, Vec3 &pos, Mat3x3 &orient, Vec3 &F, Vec3 &om, MatExp &A1, MatExp &A2, MatExp &A12, MatExp &A_tilde, MatExp &Theta_r_I, MatExp &Theta_tilde, MatExp &A_xi, VecExp &eta_r, VecExp &kappa, VecExp &eta_tilde)
Definition: hbeam_interp.cc:92
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
MatExp Elle(const VecExp &phi, const VecExp &a)
Definition: Rot.cc:194

Here is the call graph for this function:

void ComputeInterpolation ( const Vec3 *const  node_pos,
const Mat3x3 *const  node_or,
const Vec3 *const  node_f,
const doublereal  xi,
const doublereal  dexi_des,
Vec3 pos,
Mat3x3 orient,
Vec3 F,
Vec3 om 
)

Definition at line 132 of file hbeam_interp.cc.

References Compute().

Referenced by HBeam::AssStiffnessVec(), and HBeam::DsDxi().

140  {
141  MatExp A1, A2, A12, A_tilde, Theta_r_I, Theta_tilde, A_xi;
142  VecExp eta_r, kappa, eta_tilde;
143  Compute(node_pos,node_or, node_f,xi,dexi_des,pos,orient,F,om,
144  A1,A2,A12,A_tilde,Theta_r_I,Theta_tilde,A_xi,eta_r,
145  kappa,eta_tilde);
146 };
void Compute(const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal xi, const doublereal dexi_des, Vec3 &pos, Mat3x3 &orient, Vec3 &F, Vec3 &om, MatExp &A1, MatExp &A2, MatExp &A12, MatExp &A_tilde, MatExp &Theta_r_I, MatExp &Theta_tilde, MatExp &A_xi, VecExp &eta_r, VecExp &kappa, VecExp &eta_tilde)
Definition: hbeam_interp.cc:92

Here is the call graph for this function: