21#ifndef _SUPERELEMENT_LINEAR_EXTERNAL_H_
22#define _SUPERELEMENT_LINEAR_EXTERNAL_H_
24#include "fmatvec/fmatvec.h"
25#include "mbsim/discretization_interface.h"
26#include "mbsim/mbsim_event.h"
27#include "mbsim/contour_pdata.h"
29namespace MBSimFlexibleBody {
46 void setM(
const fmatvec::SymMat &M_);
51 void setK(
const fmatvec::SqrMat &K_);
61 const fmatvec::SymMat&
getM()
const {
return M; }
62 const fmatvec::Vec&
geth()
const {
return h; }
65 const fmatvec::SqrMat&
getdhdu()
const {
return Dhqp; }
73 void computeh(
const fmatvec::Vec& qElement,
const fmatvec::Vec& uElement) {
h = -
K * qElement -
D * uElement; }
74 void computedhdz(
const fmatvec::Vec& qElement,
const fmatvec::Vec& uElement) {}
79 fmatvec::Vec computeVelocity(
const fmatvec::Vec&q,
const fmatvec::Vec&u,
const MBSim::ContourPointData& cp) {
return computeJacobianOfMotion(q,cp).T()*u;}
80 fmatvec::Vec computeAngularVelocity(
const fmatvec::Vec&q,
const fmatvec::Vec&u,
const MBSim::ContourPointData& cp) {
return computeJacobianOfMotion(q,cp).T()*u;}
81 fmatvec::Vec computePosition(
const fmatvec::Vec&q,
const MBSim::ContourPointData& cp);
82 fmatvec::SqrMat computeOrientation(
const fmatvec::Vec&q,
const MBSim::ContourPointData& cp) {
throw MBSim::MBSimError(
"(SuperElementLinearExternal::computeOrientation): Not Implemented");}
83 fmatvec::Mat computeJacobianOfMotion(
const fmatvec::Vec&q,
const MBSim::ContourPointData& cp);
85 MBSim::ContourPointData addInterface(fmatvec::Mat J_, fmatvec::Vec KrP_);
101 fmatvec::SqrMat
Dhq, Dhqp;
103 std::vector<fmatvec::Mat>
J;
105 std::vector<fmatvec::Vec>
KrP;
discretization interface for flexible systems
Definition: discretization_interface.h:36
superelement for linear models from external preprocessing.
Definition: superelement_linear_external.h:38
void computedhdz(const fmatvec::Vec &qElement, const fmatvec::Vec &uElement)
compute Jacobian for implicit integration
Definition: superelement_linear_external.h:74
fmatvec::SqrMat Dhq
Definition: superelement_linear_external.h:101
int getuSize() const
Definition: superelement_linear_external.h:67
void setK(const fmatvec::SqrMat &K_)
Definition: superelement_linear_external.cc:45
fmatvec::Vec h
Definition: superelement_linear_external.h:91
const fmatvec::SymMat & getM() const
Definition: superelement_linear_external.h:61
double computeElasticEnergy(const fmatvec::Vec &q)
compute elastic energy
Definition: superelement_linear_external.h:77
void setProportionalDamping(double alpha_, double beta_)
Definition: superelement_linear_external.h:59
void computeM(const fmatvec::Vec &qElement)
compute mass matrix
Definition: superelement_linear_external.h:69
const fmatvec::SqrMat & getdhdu() const
Definition: superelement_linear_external.h:65
double beta
Definition: superelement_linear_external.h:99
double computeGravitationalEnergy(const fmatvec::Vec &q)
compute gravitational energy
Definition: superelement_linear_external.h:76
std::vector< fmatvec::Vec > KrP
Definition: superelement_linear_external.h:105
double computeKineticEnergy(const fmatvec::Vec &q, const fmatvec::Vec &u)
compute kinetic energy
Definition: superelement_linear_external.h:75
void setM(const fmatvec::SymMat &M_)
Definition: superelement_linear_external.cc:40
double alpha
Definition: superelement_linear_external.h:97
fmatvec::SymMat M
Definition: superelement_linear_external.h:89
fmatvec::SqrMat K
Definition: superelement_linear_external.h:93
int getqSize() const
Definition: superelement_linear_external.h:66
void computeh(const fmatvec::Vec &qElement, const fmatvec::Vec &uElement)
Definition: superelement_linear_external.h:73
const fmatvec::Vec & geth() const
Definition: superelement_linear_external.h:62
fmatvec::SqrMat D
Definition: superelement_linear_external.h:95
std::vector< fmatvec::Mat > J
Definition: superelement_linear_external.h:103
const fmatvec::SqrMat & getdhdq() const
Definition: superelement_linear_external.h:64