49 const std::string& name,
53 OutputEvery(oe), OutputCounter(0)
98 :
buf(size), m_pMod(pMod)
119 return (
void *)&
buf[0];
146 : m_size(size), m_outbuf(outbuf)
177 : m_size(size), m_buf(buf), m_outbuf(outsize), m_data(data)
180 std::vector<BufCast *>::const_iterator i = data.end();
183 size_t minsize = (*i)->offset() + (*i)->size();
184 ASSERT(outsize >= minsize);
205 for (
size_t i = 0; i <
m_data.size(); i++) {
236 for (std::vector<ScalarValue *>::iterator i =
Values.begin();
246 char *curbuf = &
buf[0];
247 for (std::vector<ScalarValue *>::iterator i =
Values.begin(); i !=
Values.end(); ++i) {
279 std::vector<BufCast *> data(nCh);
281 size_t minsize = data[data.size() - 1]->offset() + data[data.size() - 1]->size();
282 size_t size = minsize;
286 silent_cerr(
"ReadStreamContentModifier: invalid size " << i
292 if (size < minsize) {
293 silent_cerr(
"ReadStreamContentModifier: size " << size
294 <<
" is less than min size " << minsize
303 silent_cerr(
"ReadStreamContentModifier: unknown modifier type at line " << HP.
GetLineData() << std::endl);
324 silent_cerr(
"ReadStreamContent: "
325 "missing type, assuming \"values\" "
339 silent_cerr(
"illegal number of channels for StreamContent "
344 std::vector<ScalarValue *> Values(nch);
362 silent_cerr(
"StreamContent: "
363 "position flag already defined "
370 }
else if (HP.
IsKeyWord(
"orientation" "matrix")) {
372 silent_cerr(
"StreamContent: "
373 "orientation flag already defined "
380 }
else if (HP.
IsKeyWord(
"orientation" "matrix" "transpose")) {
381 if (uFlags & GeometryData::ORIENTATION_MASK) {
382 silent_cerr(
"StreamContent: "
383 "orientation flag already defined "
392 silent_cerr(
"StreamContent: "
393 "velocity flag already defined "
400 }
else if (HP.
IsKeyWord(
"angular" "velocity")) {
402 silent_cerr(
"StreamContent: "
403 "angular velocity flag already defined "
416 std::vector<const StructNode *>
nodes;
423 silent_cerr(
"ReadStreamContent: no structural nodes " << std::endl);
427 for (; i != e; ++i) {
435 nodes.insert(nodes.end(), pSN);
451 silent_cerr(
"ReadStreamContent: unknown type "
463 : sOutFileName(sOutFileName),
464 iPrecision(iPrecision),
480 silent_cerr(msg <<
"(" << uLabel <<
"): "
481 "unable to open echo file \"" <<
sOutFileName <<
"\"" << std::endl);
488 outFile.setf(std::ios::scientific);
491 <<
"# generated by " << msg <<
"(" << uLabel <<
")"
493 if (nChannels == 1) {
500 <<
"# Channels #1-" << nChannels
511 for (
unsigned i = 1; i < size; i++) {
522 std::string sOutFileName;
529 silent_cerr(
"ReadStreamOutEcho: "
530 "unable to parse echo file name "
540 if (iPrecision <= 0) {
541 silent_cerr(
"ReadStreamOutEcho: "
542 "invalid echo precision " << iPrecision
572 }
else if (HP.
IsKeyWord(
"buffer" "stream")) {
576 silent_cerr(
"ReadOutputElem(" << uLabel <<
"): "
577 "unknown \"type\" at line " << HP.
GetLineData() << std::endl);
616 const char *s = HP.
IsWord(streamOutputContentTypeWordSet);
618 StreamOutputContentTypeMap::iterator it = streamOutputContentTypeMap.find(std::string(s));
619 if (it == streamOutputContentTypeMap.end()) {
620 silent_cerr(
"[streamoutelem.cc] ReadStreamContent:unknown stream output content type "
625 return it->second->Read(pDM, HP);
639 if (uFlags & GeometryData::X) {
640 silent_cerr(
"StreamContent: "
641 "position flag already defined "
648 }
else if (HP.
IsKeyWord(
"orientation" "matrix")) {
649 if (uFlags & GeometryData::ORIENTATION_MASK) {
650 silent_cerr(
"StreamContent: "
651 "orientation flag already defined "
658 }
else if (HP.
IsKeyWord(
"orientation" "matrix" "transpose")) {
659 if (uFlags & GeometryData::ORIENTATION_MASK) {
660 silent_cerr(
"StreamContent: "
661 "orientation flag already defined "
669 if (uFlags & GeometryData::V) {
670 silent_cerr(
"StreamContent: "
671 "velocity flag already defined "
678 }
else if (HP.
IsKeyWord(
"angular" "velocity")) {
680 silent_cerr(
"StreamContent: "
681 "angular velocity flag already defined "
694 std::vector<const StructNode *>
nodes;
720 silent_cerr(
"illegal number of channels for StreamContent "
725 std::vector<ScalarValue *> Values(nch);
741 return streamOutputContentTypeMap.find(std::string(s)) != streamOutputContentTypeMap.end();
747 pedantic_cout(
"registering stream output content type \"" << name <<
"\""
749 return streamOutputContentTypeMap.insert(StreamOutputContentTypeMap::value_type(name, rf)).second;
754 if (streamOutputInitFunctionCalls++ > 0)
763 if (streamOutputInitFunctionCalls == 0) {
764 silent_cerr(
"DestroyStreamOutputContentTypes() called once too many" << std::endl);
768 if (--streamOutputInitFunctionCalls > 0) {
773 for (StreamOutputContentTypeMap::iterator i = streamOutputContentTypeMap.begin(); i != streamOutputContentTypeMap.end(); ++i) {
776 streamOutputContentTypeMap.clear();
std::vector< ScalarValue * > Values
virtual int GetOutSize(void) const
void Set(size_t size, const char *buf)
std::map< std::string, StreamOutputContentTypeReader * > StreamOutputContentTypeMap
StreamContentValue(const std::vector< ScalarValue * > &v, StreamContent::Modifier *pMod)
virtual void Modify(void)=0
unsigned streamOutputInitFunctionCalls
void Set(size_t size, const char *buf)
#define MBDYN_EXCEPT_ARGS
StreamOutElem(unsigned int uL, const std::string &name, unsigned int oe)
virtual StreamContent * Read(DataManager *pDM, MBDynParser &HP)
Elem * ReadOutputElem(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, StreamOutElem::Type eType, StreamContent::Type sType)
std::vector< char > m_outbuf
virtual integer GetInt(integer iDefval=0)
void Echo(const doublereal *pbuf, unsigned nChannels)
virtual const void * GetOutBuf(void) const =0
virtual const char * IsWord(const HighParser::WordSet &ws)
StreamOutputContentTypeMap streamOutputContentTypeMap
bool SetStreamOutputContentType(const char *name, StreamOutputContentTypeReader *rf)
virtual ~StreamContent(void)
virtual void WorkSpaceDim(integer *piRows, integer *piCols) const
void * GetBuf(void) const
void DestroyStreamOutputContentTypes(void)
virtual const char * GetFileName(enum Delims Del=DEFAULTDELIM)
const void * GetOutBuf(void) const
virtual const void * GetOutBuf(void) const
StreamOutEcho(std::string &sOutFileName, int iPrecision, doublereal dShift)
virtual bool IsWord(const std::string &s) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &X, const VectorHandler &XP)
bool Init(const std::string &msg, unsigned uLabel, unsigned nChannels)
virtual void Set(size_t size, const char *buf)=0
StreamContent * ReadStreamContent(DataManager *pDM, MBDynParser &HP, StreamContent::Type type)
virtual StructNode::Type GetStructNodeType(void) const =0
DataManager::ElemContainerType::const_iterator begin(Elem::Type t) const
StreamOutEcho * ReadStreamOutEcho(MBDynParser &HP)
virtual bool IsKeyWord(const char *sKeyWord)
Elem * ReadSocketStreamElem(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, StreamContent::Type type)
StreamContent::Modifier * ReadStreamContentModifier(MBDynParser &HP, integer nCh)
unsigned GetNumChannels(void) const
void Copy(scalar_func_type &d1, const scalar_func_type &d2, LocalDofMap *)
virtual Elem::Type GetElemType(void) const
virtual int GetOutSize(void) const =0
std::vector< BufCast * > m_data
#define ASSERT(expression)
StreamOutputContentTypeWordSetType streamOutputContentTypeWordSet
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
const void * GetOutBuf(void) const
Copy(size_t size, const char *buf)
Elem * ReadBufferStreamElem(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, StreamContent::Type type)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &X, const VectorHandler &XP)
virtual StreamContent * Read(DataManager *pDM, MBDynParser &HP)
void InitStreamOutputContentTypes(void)
StreamContentCopyCast(size_t size, const char *buf, size_t outsize, const std::vector< BufCast * > &data)
virtual ~StreamOutElem(void)
static doublereal buf[BUFSIZE]
void ReadScalarValues(DataManager *pDM, MBDynParser &HP, std::vector< ScalarValue * > &Values)
int GetOutSize(void) const
void ReadBufCast(HighParser &HP, std::vector< BufCast * > &data)
virtual HighParser::ErrOut GetLineData(void) const
virtual ~StreamContentValue(void)
Node * ReadNode(MBDynParser &HP, Node::Type type) const
DataManager::ElemContainerType::const_iterator end(Elem::Type t) const
virtual void Resize(integer iNewSize)=0
int GetOutSize(void) const
StreamContent(size_t size, Modifier *pMod)
virtual doublereal GetReal(const doublereal &dDefval=0.0)