MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
jointreg.cc
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/jointreg.cc,v 1.20 2017/01/12 14:46:43 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati <masarati@aero.polimi.it>
9  * Paolo Mantegazza <mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */
31 
32 /* joint regularization */
33 
34 #include "mbconfig.h" /* This goes first in every *.c,*.cc file */
35 
36 #include "jointreg.h"
37 #include "dataman.h"
38 #include "driven.h"
39 
40 /* JointRegularization - begin */
41 
43  const Joint *j,
44  flag fOut)
45 : Elem(uL, fOut),
46 InitialAssemblyElem(uL, fOut),
47 pJ(j)
48 {
49  NO_OP;
50 }
51 
53 {
54  NO_OP;
55 }
56 
57 unsigned int
59 {
60  return 0;
61 }
62 
63 /* JointRegularization - end */
64 
65 
66 /* TikhonovRegularization - begin */
67 
69  const Joint *j,
70  const std::vector<doublereal>& c,
71  flag fOut)
72 : Elem(uL, fOut),
73 JointRegularization(uL, j, fOut),
74 dC(c)
75 {
76  NO_OP;
77 }
78 
80 {
81  NO_OP;
82 }
83 
86 {
88 }
89 
90 
91 void
93  integer* piNumCols) const
94 {
95  *piNumRows = *piNumCols = pJ->iGetNumDof();
96 }
97 
98 /* assemblaggio residuo */
101  doublereal dCoef,
102  const VectorHandler& XCurr,
103  const VectorHandler& XPrimeCurr)
104 {
105  integer iFirstIndex = pJ->iGetFirstIndex();
106  unsigned iNumDofs = pJ->iGetNumDof();
107 
108  WorkVec.ResizeReset(iNumDofs);
109 
110  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
111  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
112  dC[iCnt - 1]*XCurr(iFirstIndex + iCnt)/dCoef);
113  }
114 
115  return WorkVec;
116 }
117 
118 /* assemblaggio jacobiano */
121  doublereal dCoef,
122  const VectorHandler& XCurr,
123  const VectorHandler& XPrimeCurr)
124 {
125  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
126 
127  integer iFirstIndex = pJ->iGetFirstIndex();
128  unsigned iNumDofs = pJ->iGetNumDof();
129 
130  WM.ResizeReset(iNumDofs, 0);
131 
132  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
133  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
134  - dC[iCnt - 1]/dCoef);
135  }
136 
137  return WorkMat;
138 }
139 
140 /* inverse dynamics capable element */
141 bool
143 {
144  return true;
145 }
146 
147 /* Inverse Dynamics Jacobian matrix assembly */
150  const VectorHandler& XCurr)
151 {
152  return AssJac(WorkMat, 1., XCurr, XCurr);
153 }
154 
155 void
157  integer* piNumCols) const
158 {
159  *piNumRows = *piNumCols = pJ->iGetInitialNumDof();
160 }
161 
164  const VectorHandler& XCurr)
165 {
166  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
167 
168  integer iFirstIndex = pJ->iGetFirstIndex();
169  unsigned iNumDofs = pJ->iGetInitialNumDof();
170 
171  WM.ResizeReset(iNumDofs, 0);
172  unsigned tmp1 = 0;
173  unsigned tmp2 = 0;
174 
175  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
176  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
177  - dC[tmp2]);
178  if(tmp1 == 1) {
179  tmp1 = 0;
180  tmp2++;
181  } else {
182  tmp1++;
183  }
184  }
185 
186 
187 
188  return WorkMat;
189 }
190 
193  const VectorHandler& XCurr)
194 {
195 
196  integer iFirstIndex = pJ->iGetFirstIndex();
197  unsigned iNumDofs = pJ->iGetInitialNumDof();
198 
199  WorkVec.ResizeReset(iNumDofs);
200 
201  unsigned tmp1 = 0;
202  unsigned tmp2 = 0;
203 
204  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
205  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
206  dC[tmp2]*XCurr(iFirstIndex + iCnt));
207  if(tmp1 == 1) {
208  tmp1 = 0;
209  tmp2++;
210  } else {
211  tmp1++;
212  }
213  }
214 
215 
216  return WorkVec;
217 }
218 
219 /* TikhonovRegularization - end */
220 
221 
222 /* DynamicRegularization - begin */
223 
225  const Joint *j,
226  const std::vector<doublereal>& c,
227  flag fOut)
228 : Elem(uL, fOut),
229 JointRegularization(uL, j, fOut),
230 dC(c),
231 dLambda(c.size())
232 {
233  NO_OP;
234 }
235 
237 {
238  NO_OP;
239 }
240 
243 {
245 }
246 
247 void
249  integer* piNumCols) const
250 {
251  *piNumRows = *piNumCols = pJ->iGetNumDof();
252 }
253 
254 void
256  const VectorHandler& XP)
257 {
258  for (std::vector<doublereal>::iterator i = dLambda.begin();
259  i != dLambda.end(); ++i )
260  {
261  *i = 0.;
262  }
263 }
264 
265 /* assemblaggio residuo */
268  doublereal dCoef,
269  const VectorHandler& XCurr,
270  const VectorHandler& XPrimeCurr)
271 {
272  integer iFirstIndex = pJ->iGetFirstIndex();
273  unsigned iNumDofs = pJ->iGetNumDof();
274 
275  WorkVec.ResizeReset(iNumDofs);
276 
277  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
278  unsigned iCntm1 = iCnt - 1;
279  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
280  dC[iCntm1]*dLambda[iCntm1]/dCoef);
281  dLambda[iCntm1] = XCurr(iFirstIndex + iCnt);
282  }
283 
284  return WorkVec;
285 }
286 
287 /* assemblaggio jacobiano */
290  doublereal dCoef,
291  const VectorHandler& XCurr,
292  const VectorHandler& XPrimeCurr)
293 {
294  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
295 
296  integer iFirstIndex = pJ->iGetFirstIndex();
297  unsigned iNumDofs = pJ->iGetNumDof();
298 
299  WM.ResizeReset(iNumDofs, 0);
300  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
301  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
302  - dC[iCnt - 1]/dCoef);
303  }
304 
305  return WorkMat;
306 }
307 
308 
309 void
311  integer* piNumCols) const
312 {
313  *piNumRows = *piNumCols = pJ->iGetInitialNumDof();
314 }
315 
318  const VectorHandler& XCurr)
319 {
320  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
321 
322  integer iFirstIndex = pJ->iGetFirstIndex();
323  unsigned iNumDofs = pJ->iGetInitialNumDof();
324 
325  WM.ResizeReset(iNumDofs, 0);
326 
327  unsigned tmp1 = 0;
328  unsigned tmp2 = 0;
329 
330  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
331  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
332  - dC[tmp2]);
333  if(tmp1 == 1) {
334  tmp1 = 0;
335  tmp2++;
336  } else {
337  tmp1++;
338  }
339  }
340 
341  return WorkMat;
342 }
343 
346  const VectorHandler& XCurr)
347 {
348  integer iFirstIndex = pJ->iGetFirstIndex();
349  unsigned iNumDofs = pJ->iGetInitialNumDof();
350 
351  WorkVec.ResizeReset(iNumDofs);
352 
353  std::vector<doublereal> dInitialLambda(iNumDofs);
354 
355  for (std::vector<doublereal>::iterator i = dInitialLambda.begin();
356  i != dInitialLambda.end(); ++i )
357  {
358  *i = 0.;
359  }
360 
361  unsigned tmp1 = 0;
362  unsigned tmp2 = 0;
363 
364  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
365  unsigned iCntm1 = iCnt - 1;
366  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
367  dC[tmp2]*dInitialLambda[iCntm1]);
368  if(tmp1 == 1) {
369  tmp1 = 0;
370  tmp2++;
371  } else {
372  tmp1++;
373  }
374 
375  dInitialLambda[iCntm1] = XCurr(iFirstIndex + iCnt);
376  }
377 
378 
379  return WorkVec;
380 }
381 
382 /* JacobianRegularization - begin */
383 
385  const Joint *j,
386  const std::vector<doublereal>& c,
387  flag fOut)
388 : Elem(uL, fOut),
389 JointRegularization(uL, j, fOut),
390 dC(c)
391 {
392  NO_OP;
393 }
394 
396 {
397  NO_OP;
398 }
399 
402 {
404 }
405 
406 
407 void
409  integer* piNumCols) const
410 {
411  *piNumRows = *piNumCols = pJ->iGetNumDof();
412 }
413 
414 /* assemblaggio residuo */
417  doublereal dCoef,
418  const VectorHandler& XCurr,
419  const VectorHandler& XPrimeCurr)
420 {
421 /*
422  integer iFirstIndex = pJ->iGetFirstIndex();
423  unsigned iNumDofs = pJ->iGetNumDof();
424 
425  WorkVec.ResizeReset(iNumDofs);
426 
427  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
428  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
429  dC[iCnt - 1]*XCurr(iFirstIndex + iCnt)/dCoef);
430  }
431 */
432  return WorkVec;
433 }
434 
435 /* assemblaggio jacobiano */
438  doublereal dCoef,
439  const VectorHandler& XCurr,
440  const VectorHandler& XPrimeCurr)
441 {
442  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
443 
444  integer iFirstIndex = pJ->iGetFirstIndex();
445  unsigned iNumDofs = pJ->iGetNumDof();
446 
447  WM.ResizeReset(iNumDofs, 0);
448 
449  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
450  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
451  - dC[iCnt - 1]/dCoef);
452  }
453 
454  return WorkMat;
455 }
456 
457 void
459  integer* piNumCols) const
460 {
461  *piNumRows = *piNumCols = pJ->iGetInitialNumDof();
462 }
463 
466  const VectorHandler& XCurr)
467 {
468  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
469 
470  integer iFirstIndex = pJ->iGetFirstIndex();
471  unsigned iNumDofs = pJ->iGetInitialNumDof();
472 
473  WM.ResizeReset(iNumDofs, 0);
474  unsigned tmp1 = 0;
475  unsigned tmp2 = 0;
476 
477  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
478  WM.PutItem(iCnt, iFirstIndex + iCnt, iFirstIndex + iCnt,
479  - dC[tmp2]);
480  if(tmp1 == 1) {
481  tmp1 = 0;
482  tmp2++;
483  } else {
484  tmp1++;
485  }
486  }
487 
488 
489 
490  return WorkMat;
491 }
492 
495  const VectorHandler& XCurr)
496 {
497 /*
498  integer iFirstIndex = pJ->iGetFirstIndex();
499  unsigned iNumDofs = pJ->iGetInitialNumDof();
500 
501  WorkVec.ResizeReset(iNumDofs);
502 
503  unsigned tmp1 = 0;
504  unsigned tmp2 = 0;
505 
506  for (unsigned iCnt = 1; iCnt <= iNumDofs; iCnt++) {
507  WorkVec.PutItem(iCnt, iFirstIndex + iCnt,
508  dC[tmp2]*XCurr(iFirstIndex + iCnt));
509  if(tmp1 == 1) {
510  tmp1 = 0;
511  tmp2++;
512  } else {
513  tmp1++;
514  }
515  }
516 */
517 
518  return WorkVec;
519 }
520 
521 /* JacobianRegularization - end */
522 
523 /* JointRegularization - end */
524 
525 
526 Elem *
528  MBDynParser& HP,
529  unsigned int uLabel)
530 {
531  DEBUGCOUTFNAME("ReadRegularizationJoint");
532 
533  const char* sKeyWords[] = {
534  "tikhonov",
535  "dynamic",
536  "jacobian",
537 
538  0
539  };
540 
541  /* enum delle parole chiave */
542  enum KeyWords {
543  UNKNOWN = -1,
544 
545  TIKHONOV = 0,
546  DYNAMIC,
547  JACOBIAN,
548 
550  };
551 
552  /* tabella delle parole chiave */
553  KeyTable K(HP, sKeyWords);
554 
555  /* lettura del tipo di vincolo */
556  KeyWords CurrKeyWord = KeyWords(HP.IsKeyWord());
557 
558 #ifdef DEBUG
559  if (CurrKeyWord >= 0) {
560  std::cout << "joint regularization type: " << sKeyWords[CurrKeyWord] << std::endl;
561  }
562 #endif // DEBUG
563 
564  Elem* pEl = 0;
565 
566  switch (CurrKeyWord) {
567 
568  case TIKHONOV:
569  case DYNAMIC:
570  case JACOBIAN:
571  {
572  Elem *pTmpEl = pDM->pFindElem(Elem::JOINT, uLabel);
573  Joint *pJ = dynamic_cast<Joint *>(pTmpEl);
574  if (pJ == 0) {
575  DrivenElem *pDE = dynamic_cast<DrivenElem *>(pTmpEl);
576  if (pDE != 0) {
577  pJ = dynamic_cast<Joint *>(pDE->pGetElem());
578  }
579  }
580 
581  if (pJ == 0) {
583  << "(" << uLabel << "): "
584  "unable to find "
586  << "(" << uLabel << ") "
587  "at line " << HP.GetLineData()
588  << std::endl);
590  }
591 
592  unsigned iNumDofs = pJ->iGetNumDof();
593  if (iNumDofs == 0) {
595  << "(" << uLabel << "): "
596  "no dofs for "
598  << "(" << uLabel << ") "
599  "at line " << HP.GetLineData()
600  << std::endl);
602 
603  }
604 
605  std::vector<doublereal> dC(iNumDofs);
606  if (HP.IsKeyWord("list")) {
607  for (unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
608  dC[iCnt] = HP.GetReal();
609  }
610 
611  } else if (HP.IsArg()) {
612  doublereal d = HP.GetReal();
613 
614  for (unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
615  dC[iCnt] = d;
616  }
617 
618  } else {
619  for (unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
620  dC[iCnt] = 1e-6;
621  }
622  }
623 
624  switch (CurrKeyWord) {
625  case TIKHONOV:
628  TikhonovRegularization(uLabel, pJ, dC, 0));
629  break;
630 
631  case DYNAMIC:
634  DynamicRegularization(uLabel, pJ, dC, 0));
635  break;
636 
637  case JACOBIAN:
640  JacobianRegularization(uLabel, pJ, dC, 0));
641  break;
642 
643  default:
645  }
646 
647  } break;
648 
649  /* Aggiungere qui altri vincoli */
650 
651  default:
652  break;
653  }
654 
655  /* Se non c'e' il punto e virgola finale */
656  if (pEl == 0) {
657  DEBUGCERR("");
658  silent_cerr("error in allocation of "
660  << "(" << uLabel << ")" << std::endl);
661 
663  }
664 
665  if (HP.IsArg()) {
666  silent_cerr("semicolon expected at line " << HP.GetLineData()
667  << std::endl);
669  }
670 
671  return pEl;
672 } /* ReadJointRegularization() */
Elem * ReadJointRegularization(DataManager *pDM, MBDynParser &HP, unsigned int uLabel)
Definition: jointreg.cc:527
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:416
long int flag
Definition: mbdyn.h:43
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: jointreg.cc:317
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
virtual unsigned int iGetInitialNumDof(void) const =0
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:408
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual ~DynamicRegularization(void)
Definition: jointreg.cc:236
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: jointreg.cc:345
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: jointreg.cc:465
std::vector< doublereal > dC
Definition: jointreg.h:91
JacobianRegularization(unsigned int uL, const Joint *j, const std::vector< doublereal > &c, flag fOut)
Definition: jointreg.cc:384
void ResizeReset(integer iNewRow, integer iNewCol)
Definition: submat.cc:1084
#define DEBUGCERR(msg)
Definition: myassert.h:235
std::vector< doublereal > dLambda
Definition: jointreg.h:149
#define NO_OP
Definition: myassert.h:74
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: jointreg.cc:163
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:437
virtual ~TikhonovRegularization(void)
Definition: jointreg.cc:79
virtual void PutItem(integer iSubRow, integer iRow, const doublereal &dCoef)
Definition: submat.h:1445
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: jointreg.cc:192
virtual bool bInverseDynamics(void) const
Definition: jointreg.cc:142
TikhonovRegularization(unsigned int uL, const Joint *j, const std::vector< doublereal > &c, flag fOut)
Definition: jointreg.cc:68
Elem * pFindElem(Elem::Type Typ, unsigned int uElem, unsigned int iDeriv) const
Definition: elman.cc:650
virtual ~JacobianRegularization(void)
Definition: jointreg.cc:395
void PutItem(integer iSubIt, integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:997
virtual JointRegularization::Type GetJointRegularizationType(void) const
Definition: jointreg.cc:242
virtual bool IsKeyWord(const char *sKeyWord)
Definition: parser.cc:910
DynamicRegularization(unsigned int uL, const Joint *j, const std::vector< doublereal > &c, flag fOut)
Definition: jointreg.cc:224
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:120
const Joint * pJ
Definition: jointreg.h:47
virtual JointRegularization::Type GetJointRegularizationType(void) const
Definition: jointreg.cc:401
std::vector< doublereal > dC
Definition: jointreg.h:201
KeyWords
Definition: dataman4.cc:94
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Definition: mynewmem.h:698
virtual unsigned int iGetNumDof(void) const
Definition: elem.cc:118
JointRegularization(unsigned int uL, const Joint *j, flag fOut)
Definition: jointreg.cc:42
static std::stack< cleanup * > c
Definition: cleanup.cc:59
virtual bool IsArg(void)
Definition: parser.cc:807
Definition: elem.h:75
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
Definition: jointreg.cc:255
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:156
const char * psElemNames[]
Definition: enums.cc:39
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:100
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:289
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:92
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: jointreg.cc:494
Definition: joint.h:50
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:248
SparseSubMatrixHandler & SetSparse(void)
Definition: submat.h:1178
virtual ~JointRegularization(void)
Definition: jointreg.cc:52
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
virtual Elem * pGetElem(void) const
Definition: nestedelem.cc:60
long int integer
Definition: colamd.c:51
virtual JointRegularization::Type GetJointRegularizationType(void) const
Definition: jointreg.cc:85
virtual HighParser::ErrOut GetLineData(void) const
Definition: parsinc.cc:697
virtual unsigned int iGetInitialNumDof(void) const
Definition: jointreg.cc:58
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:458
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: jointreg.cc:267
std::vector< doublereal > dC
Definition: jointreg.h:148
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: jointreg.cc:310
virtual doublereal GetReal(const doublereal &dDefval=0.0)
Definition: parser.cc:1056