62 silent_cerr(
"\"zero\" template drive caller "
63 "at line " << HP.
GetLineData() <<
" is deprecated; "
64 "use \"null\" instead" << std::endl);
104 std::vector<DriveCaller *>
m_dc;
110 if (
typeid(T) ==
typeid(
Vec3)) {
111 if (dc.size() != 3) {
115 }
else if (
typeid(T) ==
typeid(
Vec6)) {
116 if (dc.size() != 6) {
126 for (
unsigned i = 0; i <
m_dc.size(); i++) {
136 std::vector<DriveCaller *> tmpdc(
m_dc.size());
138 for (
unsigned i = 0; i <
m_dc.size(); i++) {
139 tmpdc[i] =
m_dc[i]->pCopy();
148 virtual std::ostream&
Restart(std::ostream& out)
const {
151 for (
unsigned i = 0; i <
m_dc.size(); i++) {
152 out <<
", ",
m_dc[i]->Restart(out);
159 for (
unsigned i = 0; i <
m_dc.size(); i++) {
160 out <<
", ",
m_dc[i]->Restart(out);
169 for (
unsigned i = 0; i <
m_dc.size(); i++) {
170 t(i + 1) =
m_dc[i]->dGet(dVar);
176 inline T
Get(
void)
const {
179 for (
unsigned i = 0; i <
m_dc.size(); i++) {
180 t(i + 1) =
m_dc[i]->dGet();
188 for (
unsigned i = 0; i <
m_dc.size(); i++) {
200 for (
unsigned i = 0; i <
m_dc.size(); i++) {
201 t(i + 1) =
m_dc[i]->dGetP();
215 std::vector<DriveCaller *>
m_dc;
221 if (dc.size() != 9) {
227 for (
unsigned i = 0; i <
m_dc.size(); i++) {
237 std::vector<DriveCaller *> tmpdc(
m_dc.size());
239 for (
unsigned i = 0; i <
m_dc.size(); i++) {
240 tmpdc[i] =
m_dc[i]->pCopy();
249 virtual std::ostream&
Restart(std::ostream& out)
const {
252 for (
unsigned i = 0; i <
m_dc.size(); i++) {
253 out <<
", ",
m_dc[i]->Restart(out);
260 for (
unsigned i = 0; i <
m_dc.size(); i++) {
261 out <<
", ",
m_dc[i]->Restart(out);
270 for (
unsigned i = 0; i <
m_dc.size(); i++) {
271 t(i/3 + 1, i%3 + 1) =
m_dc[i]->dGet(dVar);
280 for (
unsigned i = 0; i <
m_dc.size(); i++) {
281 t(i/3 + 1, i%3 + 1) =
m_dc[i]->dGet();
289 for (
unsigned i = 0; i <
m_dc.size(); i++) {
301 for (
unsigned i = 0; i <
m_dc.size(); i++) {
302 t(i/3 + 1, i%3 + 1) =
m_dc[i]->dGetP();
316 std::vector<DriveCaller *>
m_dc;
322 if (dc.size() != 36) {
328 for (
unsigned i = 0; i <
m_dc.size(); i++) {
338 std::vector<DriveCaller *> tmpdc(
m_dc.size());
340 for (
unsigned i = 0; i <
m_dc.size(); i++) {
341 tmpdc[i] =
m_dc[i]->pCopy();
350 virtual std::ostream&
Restart(std::ostream& out)
const {
353 for (
unsigned i = 0; i <
m_dc.size(); i++) {
354 out <<
", ",
m_dc[i]->Restart(out);
361 for (
unsigned i = 0; i <
m_dc.size(); i++) {
362 out <<
", ",
m_dc[i]->Restart(out);
371 for (
unsigned i = 0; i <
m_dc.size(); i++) {
372 t(i/6 + 1, i%6 + 1) =
m_dc[i]->dGet(dVar);
381 for (
unsigned i = 0; i <
m_dc.size(); i++) {
382 t(i/6 + 1, i%6 + 1) =
m_dc[i]->dGet();
390 for (
unsigned i = 0; i <
m_dc.size(); i++) {
402 for (
unsigned i = 0; i <
m_dc.size(); i++) {
403 t(i/6 + 1, i%6 + 1) =
m_dc[i]->dGetP();
419 std::vector<DriveCaller *> dc;
420 unsigned nr = 0, nc = 1;
421 if (
typeid(T) ==
typeid(
Vec3)) {
424 }
else if (
typeid(T) ==
typeid(
Vec6)) {
427 }
else if (
typeid(T) ==
typeid(
Mat3x3)) {
431 }
else if (
typeid(T) ==
typeid(
Mat6x6)) {
436 silent_cerr(
"component template drive used with unknown type" << std::endl);
443 for (
unsigned ir = 0; ir < nr; ir++) {
444 for (
unsigned ic = ir; ic < nc; ic++) {
454 dc[nc*ic + ir] = dc[nc*ir + ic]->
pCopy();
459 }
else if (nc > 1 && HP.
IsKeyWord(
"diag")) {
460 for (
unsigned ir = 0; ir < nr; ir++) {
469 for (
unsigned ic = ir + 1; ic < nc; ic++) {
472 dc[nc*ic + ir] = dc[nc*ir + ic]->pCopy();
477 for (
unsigned i = 0; i < dc.size(); i++) {
512 std::vector<DrivesArray<T> >
m_dc;
521 for (
unsigned i = 0; i <
m_dc.size(); i++) {
528 std::vector<DrivesArray<T> > dc(
m_dc.size());
529 for (
unsigned i = 0; i <
m_dc.size(); i++) {
530 dc[i].pDriveCaller =
m_dc[i].pDriveCaller->pCopy();
543 virtual std::ostream&
Restart(std::ostream& out)
const {
544 out <<
"array, " <<
m_dc.size();
545 for (
unsigned i = 0; i <
m_dc.size(); i++) {
548 m_dc[i].pDriveCaller->Restart(out);
554 for (
unsigned i = 0; i <
m_dc.size(); i++) {
557 m_dc[i].pDriveCaller->Restart(out);
564 for (
unsigned i = 0; i <
m_dc.size(); i++) {
565 v += (
m_dc[i].t)*(
m_dc[i].pDriveCaller->dGet(dVar));
570 inline T
Get(
void)
const {
572 for (
unsigned i = 0; i <
m_dc.size(); i++) {
573 v += (
m_dc[i].t)*(
m_dc[i].pDriveCaller->dGet());
579 for (
unsigned i = 0; i <
m_dc.size(); i++) {
580 if (!
m_dc[i].pDriveCaller->bIsDifferentiable()) {
589 for (
unsigned i = 0; i <
m_dc.size(); i++) {
590 v += (
m_dc[i].t)*(
m_dc[i].pDriveCaller->dGetP());
603 std::vector<DrivesArray<doublereal> >
m_dc;
612 for (
unsigned i = 0; i <
m_dc.size(); i++) {
619 std::vector<DrivesArray<doublereal> > dc(
m_dc.size());
620 for (
unsigned i = 0; i <
m_dc.size(); i++) {
621 dc[i].pDriveCaller =
m_dc[i].pDriveCaller->pCopy();
634 virtual std::ostream&
Restart(std::ostream& out)
const {
635 out <<
"array, " <<
m_dc.size();
636 for (
unsigned i = 0; i <
m_dc.size(); i++) {
637 out <<
", ",
m_dc[i].pDriveCaller->Restart(out);
643 for (
unsigned i = 0; i <
m_dc.size(); i++) {
644 out <<
", ",
m_dc[i].pDriveCaller->Restart(out);
651 for (
unsigned i = 0; i <
m_dc.size(); i++) {
652 v +=
m_dc[i].pDriveCaller->dGet(dVar);
659 for (
unsigned i = 0; i <
m_dc.size(); i++) {
660 v +=
m_dc[i].pDriveCaller->dGet();
679 unsigned short int iNumDr = HP.
GetInt();
681 silent_cerr(
"At least one drive is required "
682 "in array template drive" << std::endl);
685 }
else if (iNumDr == 1) {
689 std::vector<DrivesArray<T> > dc(iNumDr);
691 for (
unsigned short int i = 0; i < iNumDr; i++) {
693 dc[i].t =
GetT(HP, t);
733 bool IsWord(
const std::string& s)
const {
739 bool IsWord(
const std::string& s)
const {
745 bool IsWord(
const std::string& s)
const {
751 bool IsWord(
const std::string& s)
const {
757 bool IsWord(
const std::string& s)
const {
773 pedantic_cout(
"registering template drive caller 1D \"" << name <<
"\""
775 return DC1DFuncMap.insert(DC1DFuncMapType::value_type(name, rf)).second;
781 pedantic_cout(
"registering template drive caller 3D \"" << name <<
"\""
783 return DC3DFuncMap.insert(DC3DFuncMapType::value_type(name, rf)).second;
789 pedantic_cout(
"registering template drive caller 6D \"" << name <<
"\""
791 return DC6DFuncMap.insert(DC6DFuncMapType::value_type(name, rf)).second;
797 pedantic_cout(
"registering template drive caller 3x3D \"" << name <<
"\""
799 return DC3x3DFuncMap.insert(DC3x3DFuncMapType::value_type(name, rf)).second;
805 pedantic_cout(
"registering template drive caller 6x6D \"" << name <<
"\""
807 return DC6x6DFuncMap.insert(DC6x6DFuncMapType::value_type(name, rf)).second;
814 const char *s = HP.
IsWord(DC1DWordSet);
821 silent_cerr(
"unknown template drive caller 1D type \"" << s <<
"\" "
826 return func->second->Read(pDM, HP);
832 const char *s = HP.
IsWord(DC3DWordSet);
839 silent_cerr(
"unknown template drive caller 3D type \"" << s <<
"\" "
844 return func->second->Read(pDM, HP);
850 const char *s = HP.
IsWord(DC6DWordSet);
857 silent_cerr(
"unknown template drive caller 6D type \"" << s <<
"\" "
862 return func->second->Read(pDM, HP);
868 const char *s = HP.
IsWord(DC3x3DWordSet);
875 silent_cerr(
"unknown template drive caller 3x3D type \"" << s <<
"\" "
880 return func->second->Read(pDM, HP);
886 const char *s = HP.
IsWord(DC6x6DWordSet);
893 silent_cerr(
"unknown template drive caller 6x6D type \"" << s <<
"\" "
898 return func->second->Read(pDM, HP);
919 return ReadDCVec<MBDynParser::VecRelManip>(pDM, HP, rf);
925 return ReadDCVec<MBDynParser::VecAbsManip>(pDM, HP, rf);
983 silent_cerr(
"DestroyTplDC() called once too many" << std::endl);
std::map< std::string, TplDriveCallerRead< doublereal > *, ltstrcase > DC1DFuncMapType
void PushManip(const Manip *)
std::map< std::string, TplDriveCallerRead< Mat3x3 > *, ltstrcase > DC3x3DFuncMapType
TplDriveCaller< T > * GetTplDriveCaller(void)
ArrayTplDriveCaller(std::vector< DrivesArray< doublereal > > dc)
virtual TplDriveCaller< T > * Read(const DataManager *pDM, MBDynParser &HP)
virtual TplDriveCaller< Mat3x3 > * pCopy(void) const
int getNDrives(void) const
#define MBDYN_EXCEPT_ARGS
bool IsWord(const std::string &s) const
virtual integer GetInt(integer iDefval=0)
static DC3x3DWordSetType DC3x3DWordSet
TplDriveCaller< doublereal > * ReadDC1D(const DataManager *pDM, MBDynParser &HP)
ArrayTplDriveCaller(std::vector< DrivesArray< T > > &dc)
virtual const char * IsWord(const HighParser::WordSet &ws)
int getNDrives(void) const
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
bool SetDC3D(const char *name, TplDriveCallerRead< Vec3 > *rf)
virtual TplDriveCaller< T > * Read(const DataManager *pDM, MBDynParser &HP)
virtual std::ostream & Restart(std::ostream &out) const
virtual std::ostream & Restart_int(std::ostream &out) const
const Manip * GetManip(void) const
virtual TplDriveCaller< T > * pCopy(void) const
bool bIsDifferentiable(void) const
virtual std::ostream & Restart(std::ostream &out) const
static DC6DWordSetType DC6DWordSet
T Get(const doublereal &dVar) const
bool IsWord(const std::string &s) const
Mat3x3 Get(const doublereal &dVar) const
std::vector< DriveCaller * > m_dc
virtual std::ostream & Restart(std::ostream &out) const
bool IsWord(const std::string &s) const
static DC6x6DFuncMapType DC6x6DFuncMap
static DC3x3DFuncMapType DC3x3DFuncMap
bool SetDC3x3D(const char *name, TplDriveCallerRead< Mat3x3 > *rf)
virtual TplDriveCaller< T > * pCopy(void) const
bool SetDC1D(const char *name, TplDriveCallerRead< doublereal > *rf)
void func(const T &u, const T &v, const T &w, doublereal e, T &f)
std::vector< DrivesArray< doublereal > > m_dc
int getNDrives(void) const
TplDriveCaller< Vec6 > * ReadDC6D(const DataManager *pDM, MBDynParser &HP)
~ArrayTplDriveCaller(void)
TplDriveCaller< Vec3 > * ReadDCVecRel(const DataManager *pDM, MBDynParser &HP, const ReferenceFrame &rf)
T Get(const doublereal &dVar) const
~CompTplDriveCaller(void)
static TplDriveCaller< Vec3 > * ReadDCVec(const DataManager *pDM, MBDynParser &HP, const ReferenceFrame &rf)
bool IsWord(const std::string &s) const
virtual std::ostream & Restart_int(std::ostream &out) const
CompTplDriveCaller(std::vector< DriveCaller * > &dc)
#define SAFENEW(pnt, item)
static DC6DFuncMapType DC6DFuncMap
TplDriveCaller< Vec3 > * ReadDCVecAbs(const DataManager *pDM, MBDynParser &HP, const ReferenceFrame &rf)
std::vector< DriveCaller * > m_dc
virtual bool IsKeyWord(const char *sKeyWord)
bool SetDC6D(const char *name, TplDriveCallerRead< Vec6 > *rf)
virtual std::ostream & Restart(std::ostream &out) const
bool bIsDifferentiable(void) const
static DC3DWordSetType DC3DWordSet
virtual TplDriveCaller< Mat6x6 > * pCopy(void) const
CompTplDriveCaller(std::vector< DriveCaller * > &dc)
doublereal Get(const doublereal &dVar) const
virtual TplDriveCaller< doublereal > * pCopy(void) const
#define ASSERT(expression)
std::vector< DriveCaller * > m_dc
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
TplDriveCaller< Mat6x6 > * ReadDC6x6D(const DataManager *pDM, MBDynParser &HP)
DriveCaller * pDriveCaller
int getNDrives(void) const
CompTplDriveCaller(std::vector< DriveCaller * > &dc)
virtual DriveCaller * pCopy(void) const =0
virtual TplDriveCaller< T > * Read(const DataManager *pDM, MBDynParser &HP)
doublereal GetT(MBDynParser &HP, const doublereal &t)
std::map< std::string, TplDriveCallerRead< Mat6x6 > *, ltstrcase > DC6x6DFuncMapType
static DC1DFuncMapType DC1DFuncMap
bool bIsDifferentiable(void) const
bool SetDC6x6D(const char *name, TplDriveCallerRead< Mat6x6 > *rf)
bool IsWord(const std::string &s) const
static DC3DFuncMapType DC3DFuncMap
doublereal Get(void) const
std::vector< DrivesArray< T > > m_dc
~CompTplDriveCaller(void)
virtual ~ArrayTplDriveCaller(void)
DriveCaller * GetDriveCaller(bool bDeferred=false)
static DC6x6DWordSetType DC6x6DWordSet
virtual TplDriveCaller< T > * Read(const DataManager *pDM, MBDynParser &HP)
bool bIsDifferentiable(void) const
virtual doublereal Get(const doublereal &d)
std::map< std::string, TplDriveCallerRead< Vec6 > *, ltstrcase > DC6DFuncMapType
virtual TplDriveCaller< T > * Read(const DataManager *pDM, MBDynParser &HP)
~CompTplDriveCaller(void)
virtual HighParser::ErrOut GetLineData(void) const
std::map< std::string, TplDriveCallerRead< Vec3 > *, ltstrcase > DC3DFuncMapType
TplDriveCaller< Vec3 > * ReadDC3D(const DataManager *pDM, MBDynParser &HP)
Mat6x6 Get(const doublereal &dVar) const
int getNDrives(void) const
TplDriveCaller< Mat3x3 > * ReadDC3x3D(const DataManager *pDM, MBDynParser &HP)
virtual std::ostream & Restart_int(std::ostream &out) const
virtual std::ostream & Restart(std::ostream &out) const
virtual std::ostream & Restart_int(std::ostream &out) const
static DC1DWordSetType DC1DWordSet
virtual std::ostream & Restart_int(std::ostream &out) const