MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
hbeam_interp.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void ComputeInterpolation (const Vec3 *const node_pos, const Mat3x3 *const node_or, const Vec3 *const node_f, const doublereal w, const doublereal wder, 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 w, const doublereal wder, 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)
 

Function Documentation

void ComputeFullInterpolation ( const Vec3 *const  node_pos,
const Mat3x3 *const  node_or,
const Vec3 *const  node_f,
const doublereal  w,
const doublereal  wder,
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  w,
const doublereal  wder,
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: