Simbody  3.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MatrixCharacteristics.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMMATRIX_MATRIX_CHARACTERISTICS_H_
2 #define SimTK_SIMMATRIX_MATRIX_CHARACTERISTICS_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm): SimTKcommon *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11  * *
12  * Portions copyright (c) 2005-12 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
33 #include "SimTKcommon/Scalar.h"
34 
35 #include <iostream>
36 #include <cassert>
37 #include <complex>
38 #include <cstddef>
39 #include <utility> // for std::pair
40 
41 namespace SimTK {
42 
91 class MatrixStructure;
92 class MatrixStorage;
93 class MatrixOutline;
94 class MatrixCondition;
95 class MatrixCharacter;
96 class MatrixCommitment;
97 
98 
99 // ------------------------------ MatrixStructure -----------------------------
104 // ----------------------------------------------------------------------------
106 public:
107  enum Structure {
108  NoStructure = 0x00000000,
109  Matrix1d = 0x00000001,
110  Zero = 0x00000002,
111  Identity = 0x00000004,
112  Permutation = 0x00000008,
113  RepeatedDiagonal = 0x00000010,
114  Diagonal = 0x00000020,
115  BiDiagonal = 0x00000040,
116  TriDiagonal = 0x00000080,
117  BandedSymmetric = 0x00000100,
118  BandedHermitian = 0x00000200,
119  Banded = 0x00000400,
120  Triangular = 0x00000800,
121  QuasiTriangular = 0x00001000,
122  Hessenberg = 0x00002000,
123  Symmetric = 0x00004000,
124  Hermitian = 0x00008000,
125  SkewSymmetric = 0x00010000,
126  SkewHermitian = 0x00020000,
127  Full = 0x00040000
128  };
129  static const char* name(Structure);
130 
131  typedef unsigned int StructureMask; // 32 bits
132  static const StructureMask AnyStructure = 0x0007ffffU; // see above
133  static const StructureMask UncommittedStructure = 0xffffffffU;
134  static StructureMask calcStructureMask(Structure);
135 
140  enum Position {
141  NoPosition = 0x0000,
142  Lower = 0x0001, // matrix is lower triangular (default)
143  Upper = 0x0002 // matrix is upper triangular
144  };
145  static const char* name(Position);
146 
147  typedef unsigned short PositionMask; // 16 bits
148  static const PositionMask AnyPosition = 0x0003U; // see above
149  static const PositionMask UncommittedPosition = 0xffffU;
150  static PositionMask calcPositionMask(Structure);
151 
157  enum DiagValue {
158  NoDiagValue = 0x0000,
159  StoredDiag = 0x0001, // could be anything (default)
160  ZeroDiag = 0x0002, // zero (e.g. for skew matrices)
161  UnitDiag = 0x0004 // unit (one) diagonal is used frequently by Lapack
162  };
163  static const char* name(DiagValue);
164 
165  typedef unsigned short DiagValueMask; // 16 bits
166  static const DiagValueMask AnyDiagValue = 0x0003U;
167  static const DiagValueMask UncommittedDiagValue = 0xffffU;
168  static DiagValueMask calcDiagValueMask(Structure);
169 
171  if (structure == NoStructure)
172  structure = Full;
173  if (position == NoPosition)
174  position = Lower;
175  if (diagValue == NoDiagValue)
176  diagValue = StoredDiag;
177  return *this;
178  }
179 
180  std::string name() const {
181  return std::string(name(getStructure()))
182  + "|" + std::string(name(getPosition()))
183  + "|" + std::string(name(getDiagValue()));
184  }
185 
186  struct Mask {
187  Mask() {setToUncommitted();}
189  : structure(sm), position(pm), diagValue(dm) {}
191  { structure=UncommittedStructure; position=UncommittedPosition;
192  diagValue=UncommittedDiagValue; return *this; }
193  bool isUncommitted() const
194  { return structure==UncommittedStructure && position==UncommittedPosition
195  && diagValue==UncommittedDiagValue; }
196  bool isSatisfiedBy(Structure str, Position pos, DiagValue diag) const
197  { return ((StructureMask)str&structure)==(StructureMask)str
198  && ((PositionMask)pos&position)==(PositionMask)pos
199  && ((DiagValueMask)diag&diagValue)==(DiagValueMask)diag; }
200  bool isSatisfiedBy(const MatrixStructure& actual) const
201  { return isSatisfiedBy(actual.getStructure(), actual.getPosition(),
202  actual.getDiagValue()); }
203 
207  };
208 
209  MatrixStructure() {setToNone();}
210 
213  MatrixStructure(Structure s, Position p=NoPosition, DiagValue d=NoDiagValue)
214  : structure(s), position(p), diagValue(d) {}
215 
220  Mask mask() const;
221 
222  Structure getStructure() const {return structure;}
223  Position getPosition() const {return position;}
224  DiagValue getDiagValue() const {return diagValue;}
225 
226  MatrixStructure& setStructure(Structure s) {structure=s; return *this;}
227  MatrixStructure& setPosition (Position p) {position=p; return *this;}
228  MatrixStructure& setDiagValue(DiagValue d) {diagValue=d; return *this;}
229 
231  { structure=s; position=p; diagValue=d; return *this; }
232 
234  { structure=NoStructure; position=NoPosition;
235  diagValue=NoDiagValue; return *this; }
236 
237 private:
238  Structure structure:32;
239  Position position:16;
240  DiagValue diagValue:16;
241 };
242 
243 
244 // ------------------------------ MatrixStorage -------------------------------
249 // ----------------------------------------------------------------------------
251 public:
252  enum Packing {
253  NoPacking = 0x0000,
254  Full = 0x0001, // full storage layout
255  TriInFull = 0x0002, // a triangular piece of a full storage layout
256  TriPacked = 0x0004, // triangle packed into minimal storage, at performance cost
257  Banded = 0x0008, // a packed, banded storage format
258  Vector = 0x0010, // a possibly-strided or scattered vector
259  Scalar = 0x0020, // a single scalar is stored
260  Permutation = 0x0040 // a permuted identity matrix
261  };
262  static const char* name(Packing);
263  typedef unsigned short PackingMask;
264  static const PackingMask AllPacking = 0x007fU; // see above
265  static const PackingMask UncommittedPacking = 0xffffU;
266 
267  enum Placement {
268  NoPlacement = 0x0000,
269  Lower = 0x0001, // stored in lower triangle of full matrix
270  Upper = 0x0002, // stored in upper triangle of full matrix
271  };
272  static const char* name(Placement);
273  typedef unsigned short PlacementMask;
274  static const PlacementMask AllPlacement = 0x0003U; // see above
275  static const PlacementMask UncommittedPlacement = 0xffffU;
276 
277  enum Order {
278  NoOrder = 0x0000,
279  ColumnOrder = 0x0001, // matrix is stored by columns
280  RowOrder = 0x0002, // matrix is stored by rows
281  };
282  static const char* name(Order);
283  typedef unsigned short OrderMask;
284  static const OrderMask AllOrder = 0x03U; // see above
285  static const OrderMask UncommittedOrder = 0xffU;
286 
287  enum Diagonal {
288  NoDiag = 0x0000,
289  StoredDiag = 0x0001, // matrix diagonal is stored
290  AssumedDiag = 0x0002 // matrix diagonal is not stored but has known value
291  };
292  static const char* name(Diagonal);
293  typedef unsigned short DiagonalMask;
294  static const DiagonalMask AllDiagonal = 0x0003U; // see above
295  static const DiagonalMask UncommittedDiagonal = 0xffffU;
296 
299  struct Mask {
301  : packing(UncommittedPacking), placement(UncommittedPlacement),
302  order(UncommittedOrder), diagonal(UncommittedDiagonal) {}
304  : packing(pkm), placement(plm), order(om), diagonal(dm) {}
306  { packing=UncommittedPacking; placement=UncommittedPlacement;
307  order=UncommittedOrder; diagonal=UncommittedDiagonal; return *this; }
308  bool isUncommitted() const
309  { return packing==UncommittedPacking && placement==UncommittedPlacement
310  && order==UncommittedOrder && diagonal==UncommittedDiagonal; }
311  bool isSatisfiedBy(Packing pack, Placement place, Order ord, Diagonal diag) const
312  { return ((PackingMask)pack & packing) == (PackingMask) pack
313  && ((PlacementMask)place & placement) == (PlacementMask)place
314  && ((OrderMask)ord & order) == (OrderMask) ord
315  && ((DiagonalMask)diag & diagonal) == (DiagonalMask) diag; }
316  bool isSatisfiedBy(const MatrixStorage& actual) const
317  { return isSatisfiedBy(actual.getPacking(), actual.getPlacement(),
318  actual.getOrder(), actual.getDiagonal());}
319 
324  };
325 
326  static MatrixStorage calcDefaultStorage(const MatrixStructure&,
327  const MatrixOutline&);
328 
329  std::string name() const {
330  return std::string(name(getPacking()))
331  + "|" + std::string(name(getPlacement()))
332  + "|" + std::string(name(getOrder()))
333  + "|" + std::string(name(getDiagonal()));
334  }
335 
340  Mask mask() const {
341  Mask ms; // initially uncommitted
342  if (packing) ms.packing = (PackingMask)packing;
343  if (placement) ms.placement = (PlacementMask)placement;
344  if (order) ms.order = (OrderMask)order;
345  if (diagonal) ms.diagonal = (DiagonalMask)diagonal;
346  return ms;
347  }
348 
351  : packing(NoPacking), placement(NoPlacement), order(NoOrder), diagonal(NoDiag) {}
352 
356  MatrixStorage(Packing pk, Placement pl=NoPlacement, Order o=NoOrder, Diagonal d=NoDiag)
357  : packing(pk), placement(pl), order(o), diagonal(d) {}
358 
362  : packing(pk), placement(NoPlacement), order(o), diagonal(StoredDiag) {}
363 
367  if (packing==NoPacking)
368  packing = Full;
369  if (placement==NoPlacement)
370  placement = Lower;
371  if (order==NoOrder)
372  order = ColumnOrder;
373  if (diagonal==NoDiag)
374  diagonal = StoredDiag;
375  return *this;
376  }
377 
380  { packing=NoPacking; placement=NoPlacement;
381  order=NoOrder; diagonal=NoDiag; return *this; }
382 
383  MatrixStorage& setPacking(Packing p) {packing = p; return *this;}
384  MatrixStorage& setPlacement(Placement p) {placement = p; return *this;}
385  MatrixStorage& setOrder(Order o) {order = o; return *this;}
386  MatrixStorage& setDiagonal(Diagonal d) {diagonal = d; return *this;}
387 
388  Packing getPacking() const {return packing;}
389  Placement getPlacement() const {return placement;}
390  Order getOrder() const {return order;}
391  Diagonal getDiagonal() const {return diagonal;}
392 
393 private:
394  Packing packing:16;
395  Placement placement:16;
396  Order order:16;
397  Diagonal diagonal:16;
398 };
399 
400 
401 // ------------------------------- MatrixOutline ------------------------------
422 // ----------------------------------------------------------------------------
424 public:
425  enum Outline {
426  NoOutline = 0x0000,
427  Scalar = 0x0001, // 1x1
428  Column = 0x0002, // mx1, m != 1
429  Row = 0x0004, // 1xn, n != 1
430  Square = 0x0008, // mxn, m == n
431  Wide = 0x0010, // mxn, m < n
432  Tall = 0x0020, // mxn, m > n
433  Rectangular = 0x0040 // mxn
434  };
435  static const char* name(Outline);
436 
437  typedef unsigned short OutlineMask;
438  static const OutlineMask AnyOutline = 0x007fU; // see above
439  static const OutlineMask UncommittedOutline = 0xffffU;
440 
441  struct Mask {
442  Mask() : outline(UncommittedOutline) {}
443  explicit Mask(OutlineMask mask) : outline(mask) {}
444  Mask& setToUncommitted() {outline=UncommittedOutline; return *this;}
445  bool isUncommitted() const {return outline==UncommittedOutline;}
446  bool isSatisfiedBy(const MatrixOutline& actual) const
447  { return ((OutlineMask)actual.outline & outline) == (OutlineMask)actual.outline; }
448 
450  };
451 
452  std::string name() const {return std::string(name(getOutline()));}
453 
456  MatrixOutline() : outline(NoOutline) {}
457 
459  MatrixOutline(Outline outline) : outline(outline) {}
460 
462  MatrixOutline& setToNone() {outline=NoOutline; return *this;}
463 
467  static OutlineMask calcMask(Outline);
468 
471  Mask mask() const {return Mask(calcMask(getOutline()));}
472 
474  bool isSizeOK(int m, int n) const;
475 
477  void getMinimumSize(int& m, int& n) const;
478 
480  static MatrixOutline calcFromSize(int m, int n);
481 
483  Outline getOutline() const {return outline;}
484 
485 private:
486  Outline outline:16;
487 };
488 
489 
490 
491 // ---------------------------- MatrixCondition -------------------------------
500 // ----------------------------------------------------------------------------
502 public:
503  enum Condition {
504  UnknownCondition = 0x0000,
505  Orthogonal = 0x0001, // implies well conditioned
506  PositiveDefinite = 0x0002, // implies well conditioned
507  WellConditioned = 0x0004, // implies full rank
508  FullRank = 0x0008, // but might have bad conditioning
509  Singular = 0x0010 // implies possible bad conditioning
510  };
511  static const char* name(Condition);
512 
513  typedef unsigned short ConditionMask; // 16 bits in mask
514  static const ConditionMask AnyCondition = 0x001fU; // see above
515  static const ConditionMask UncommittedCondition = 0xffffU;
516 
517  enum Diagonal {
518  UnknownDiagonal = 0x0000,
519  ZeroDiagonal = 0x0001,
520  OneDiagonal = 0x0002,
521  RealDiagonal = 0x0004,
522  ImaginaryDiagonal = 0x0008
523  };
524  static const char* name(Diagonal);
525 
526  typedef unsigned short DiagonalMask; // 16 bits in mask
527  static const DiagonalMask AnyDiagonal = 0x000fU; // see above
528  static const DiagonalMask UncommittedDiagonal = 0xffffU;
529 
531  struct Mask {
532  Mask() : condition(UncommittedCondition), diagonal(UncommittedDiagonal) {}
533  Mask(ConditionMask cmask, DiagonalMask dmask) : condition(cmask), diagonal(dmask) {}
535  { condition=UncommittedCondition; diagonal=UncommittedDiagonal; return *this;}
536  bool isUncommitted() const
537  { return condition==UncommittedCondition && diagonal==UncommittedDiagonal;}
538  bool isSatisfiedBy(const MatrixCondition& actual) const
539  { return ((ConditionMask)actual.condition & condition) == (ConditionMask)actual.condition
540  && ((DiagonalMask) actual.diagonal & diagonal) == (DiagonalMask)actual.diagonal; }
541 
544  };
545 
546  std::string name() const
547  { return std::string(name(getCondition())) + "|" + std::string(name(getDiagonal()));}
548 
551  MatrixCondition() : condition(UnknownCondition), diagonal(UnknownDiagonal) {}
552 
555  MatrixCondition(Condition cond, Diagonal diag=UnknownDiagonal) : condition(cond) {}
556 
558  MatrixCondition& setToNone() {condition=UnknownCondition; diagonal=UnknownDiagonal; return *this;}
559 
565  static ConditionMask calcMask(Condition);
566 
572  static DiagonalMask calcMask(Diagonal);
573 
576  Mask mask() const
577  { return Mask(calcMask(getCondition()), calcMask(getDiagonal())); }
578 
579  Condition getCondition() const {return condition;}
580  Diagonal getDiagonal() const {return diagonal;}
581 
582  MatrixCondition& setCondition(Condition c) {condition=c; return *this;}
583  MatrixCondition& setDiagonal (Diagonal d) {diagonal=d; return *this;}
584 
585 private:
586  Condition condition:16;
587  Diagonal diagonal:16;
588 };
589 
590 
591 
592 // ------------------------------ MatrixCharacter -----------------------------
593 
601 
602 // ----------------------------------------------------------------------------
604 public:
607  MatrixCharacter() : nr(0), nc(0), lband(0), uband(0) {}
608 
609  // Some handy predefined MatrixCharacters.
610  class LapackFull;
611  class Vector;
612  class RowVector;
613 
616  nr=nc=lband=uband=0;
617  structure.setToNone(); outline.setToNone();
618  storage.setToNone(); condition.setToNone();
619  return *this;
620  }
621 
622  // These are dimensions of the logical matrix and have nothing to do with how
623  // much storage may be used to hold the elements.
624  int nrow() const {return nr;}
625  int ncol() const {return nc;}
626  std::pair<int,int> getSize() const {return std::pair<int,int>(nrow(),ncol());}
627  ptrdiff_t nelt() const {return (ptrdiff_t)nrow() * (ptrdiff_t)ncol();}
628 
629  int getLowerBandwidth() const {return lband;}
630  int getUpperBandwidth() const {return uband;}
631  std::pair<int,int> getBandwidth() const
632  { return std::pair<int,int>(getLowerBandwidth(), getUpperBandwidth()); }
633 
634  const MatrixStructure& getStructure() const {return structure;}
635  const MatrixStorage& getStorage() const {return storage;}
636  const MatrixOutline& getOutline() const {return outline;}
637  const MatrixCondition& getCondition() const {return condition;}
638 
639  MatrixStructure& updStructure() {return structure;}
640  MatrixStorage& updStorage() {return storage;}
641  MatrixOutline& updOutline() {return outline;}
642  MatrixCondition& updCondition() {return condition;}
643 
644  MatrixCharacter& setStructure(const MatrixStructure& sa) {structure = sa; return *this;}
645  MatrixCharacter& setStorage (const MatrixStorage& sa) {storage = sa; return *this;}
646  MatrixCharacter& setOutline (const MatrixOutline& oa) {outline = oa; return *this;}
647  MatrixCharacter& setCondition(const MatrixCondition& ca) {condition = ca; return *this;}
648 
649 
652  { setSize(m,n); outline = MatrixOutline::calcFromSize(m,n); return *this; }
654  { setNumRows(m); outline = MatrixOutline::calcFromSize(m,ncol()); return *this; }
656  { setNumCols(n); outline = MatrixOutline::calcFromSize(nrow(),n); return *this; }
657 
658  MatrixCharacter& setBandwidth(int lb, int ub) {
659  assert(lb>=0 && lb>=0);
660  lband = lb; uband = ub;
661  return *this;
662  }
664  assert(lb>=0);
665  lband = lb;
666  return *this;
667  }
669  assert(ub>=0);
670  uband = ub;
671  return *this;
672  }
673 
674  class Mask; // defined below
675 
676 protected:
677  MatrixCharacter(int m, int n,
678  int lb, int ub,
679  MatrixStructure structure,
680  MatrixStorage storage,
681  MatrixCondition condition)
682  : nr(m), nc(n), lband(lb), uband(ub),
683  structure(structure), storage(storage),
684  outline(MatrixOutline::calcFromSize(m,n)),
685  condition(condition) {}
686 
687 
688  int nr,
689  nc;
690  int lband,
691  uband;
696 
697 private:
698  // These are private because they don't set the outline as well.
699  MatrixCharacter& setSize(int m, int n)
700  { assert(m>=0 && n>=0); nr = m; nc = n; return *this; }
701  MatrixCharacter& setNumRows(int m)
702  { assert(m>=0); nr = m; return *this; }
703  MatrixCharacter& setNumCols(int n)
704  { assert(n>=0); nc = n; return *this; }
705 };
706 
708 SimTK_SimTKCOMMON_EXPORT std::ostream&
709 operator<<(std::ostream& o, const MatrixCharacter&);
710 
717 public:
718  LapackFull(int m, int n)
719  : MatrixCharacter(m,n,0,0,
721  MatrixStorage(MatrixStorage::Full,MatrixStorage::ColumnOrder),
722  MatrixCondition()) {}
723 };
724 
730 public:
731  Vector(int m)
732  : MatrixCharacter(m,1,0,0,
733  MatrixStructure(MatrixStructure::Matrix1d),
735  MatrixCondition()) {}
736 };
737 
743 public:
744  RowVector(int n)
745  : MatrixCharacter(1,n,0,0,
746  MatrixStructure(MatrixStructure::Matrix1d),
748  MatrixCondition()) {}
749 };
750 
751 // -------------------------- MatrixCharacter::Mask ---------------------------
754 // ----------------------------------------------------------------------------
756 public:
758 
759  typedef unsigned int SizeMask;
760  static const SizeMask SizeUncommitted = 0xffffffffU;
761 
762  bool isResizeable() const {return nr==SizeUncommitted || nc==SizeUncommitted;}
764  bool isNumRowsLocked() const {return nr!=SizeUncommitted;}
765  bool isNumColsLocked() const {return nc!=SizeUncommitted;}
766 
767  unsigned int getNumRowsMask() const {return nr;}
768  unsigned int getNumColsMask() const {return nc;}
769  unsigned int getLowerBandwidthMask() const {return lband;}
770  unsigned int getUpperBandwidthMask() const {return uband;}
771 
772  int getDefaultNumRows() const {return isNumRowsLocked() ? nr : 0;}
773  int getDefaultNumCols() const {return isNumColsLocked() ? nc : 0;}
774 
779 
785  return *this;
786  }
787 
789  bool isUncommitted() const {
790  return nr==SizeUncommitted && nc==SizeUncommitted
794  }
795 
797  bool isSatisfiedBy(const MatrixCharacter& actual) const {
798  return isSizeOK(actual.nr, actual.nc)
799  && isBandwidthOK(actual.lband, actual.uband)
801  && storage.isSatisfiedBy(actual.getStorage())
802  && outline.isSatisfiedBy(actual.getOutline())
803  && condition.isSatisfiedBy(actual.getCondition());
804  }
805 
807  bool isSizeOK(int m, int n) const
808  { return ((SizeMask)m & nr) == (SizeMask)m
809  && ((SizeMask)n & nc) == (SizeMask)n; }
810 
813  bool isBandwidthOK(int lower, int upper) const
814  { return ((SizeMask)lower & lband) == (SizeMask)lower
815  && ((SizeMask)upper & uband) == (SizeMask)upper; }
816 
818  nc;
820  uband;
825 
826 friend class MatrixCommitment;
827 };
828 
829 // ----------------------------- MatrixCommitment -----------------------------
830 
835 
836 // ----------------------------------------------------------------------------
838 public:
839  MatrixCommitment() {} // set commitments to "none" and masks to "uncommitted"
840 
844  { new (this) MatrixCommitment(str, MatrixStorage(), MatrixOutline(), MatrixCondition());}
845 
846  class Vector;
847  class RowVector;
848  class Triangular;
849  class Symmetric;
850  class Hermitian;
851  class SkewSymmetric;
852  class SkewHermitian;
853 
854  MatrixCommitment& commitSize(int m, int n)
855  { commitNumRows(m); commitNumCols(n); return *this; }
857  { SimTK_SIZECHECK_NONNEG(m, "MatrixCommitment::commitNumRows()");
858  masks.nr = m; return *this; }
860  { SimTK_SIZECHECK_NONNEG(n, "MatrixCommitment::commitNumCols()");
861  masks.nc = n; return *this; }
862 
864  { commitLowerBandwidth(lb); commitUpperBandwidth(ub); return *this;}
866  { SimTK_SIZECHECK_NONNEG(lb, "MatrixCommitment::commitLowerBandwidth()");
867  masks.lband = lb; return *this; }
869  { SimTK_SIZECHECK_NONNEG(ub, "MatrixCommitment::commitUpperBandwidth()");
870  masks.uband = ub; return *this; }
871 
873  { structure=s; masks.structure=s.mask(); return *this; }
875  { storage=s; masks.storage =s.mask(); return *this; }
877  { outline=o; masks.outline =o.mask(); return *this; }
879  { condition=c; masks.condition=c.mask(); return *this; }
880 
891  MatrixCharacter calcDefaultCharacter(int minNumRows, int minNumCols) const;
892 
894  const MatrixStructure& getStructureCommitment() const {return structure;}
895  const MatrixStorage& getStorageCommitment() const {return storage;}
896  const MatrixOutline& getOutlineCommitment() const {return outline;}
897  const MatrixCondition& getConditionCommitment() const {return condition;}
898 
900  const MatrixStructure::Mask& getStructureMask() const {return masks.structure;}
901  const MatrixStorage::Mask& getStorageMask() const {return masks.storage;}
902  const MatrixOutline::Mask& getOutlineMask() const {return masks.outline;}
903  const MatrixCondition::Mask& getConditionMask() const {return masks.condition;}
904 
909 
910  int getDefaultNumRows() const {return masks.getDefaultNumRows();}
911  int getDefaultNumCols() const {return masks.getDefaultNumRows();}
912 
913  bool isSizeOK(int m, int n) const {return masks.isSizeOK(m,n);}
914  bool isSizeOK(const std::pair<int,int>& mn) const
915  { return isSizeOK(mn.first, mn.second); }
916 
917  bool isBandwidthOK(int lower, int upper) const {return masks.isBandwidthOK(lower,upper);}
918 
919  bool isSatisfiedBy(const MatrixCharacter& actual) const
920  { return masks.isSatisfiedBy(actual); }
921  bool isStructureOK(const MatrixStructure& s) const
922  { return getStructureMask().isSatisfiedBy(s); }
923  bool isStorageOK(const MatrixStorage& s) const
924  { return getStorageMask().isSatisfiedBy(s); }
925  bool isOutlineOK(const MatrixOutline& o) const
926  { return getOutlineMask().isSatisfiedBy(o); }
927  bool isConditionOK(const MatrixCondition& c) const
928  { return getConditionMask().isSatisfiedBy(c); }
929 
930  bool isResizeable() const {return masks.isResizeable();}
931  bool isFullyResizeable() const {return masks.isFullyResizeable();;}
932  bool isNumRowsLocked() const {return masks.isNumRowsLocked();}
933  bool isNumColsLocked() const {return masks.isNumColsLocked();}
934 
935  bool isStructureCommitted() const
936  { return !getStructureMask().isUncommitted(); }
937  bool isStorageCommitted() const
938  { return !getStorageMask().isUncommitted();}
939  bool isOutlineCommitted() const
940  { return !getOutlineMask().isUncommitted(); }
941  bool isConditionCommitted() const
942  { return !getConditionMask().isUncommitted();}
943 
945  void clear() {
946  structure.setToNone();
947  storage.setToNone();
948  outline.setToNone();
949  condition.setToNone();
950  masks.setToUncommitted();
951  }
952 
953 protected:
955  const MatrixStorage& storage,
956  const MatrixOutline& outline,
957  const MatrixCondition& condition)
958  : structure(structure), storage(storage),
959  outline(outline), condition(condition),
960  masks() // set to all 1's
961  {
962  if (outline.getOutline()==MatrixOutline::Scalar) commitSize(1,1);
963  else if (outline.getOutline()==MatrixOutline::Column) commitNumCols(1);
964  else if (outline.getOutline()==MatrixOutline::Row) commitNumRows(1);
965 
966  masks.structure = structure.mask();
967  masks.storage = storage.mask();
968  masks.outline = outline.mask();
969  masks.condition = condition.mask();
970  }
971 
978 
982 };
983 
984 
987 public:
991  ( MatrixStructure(MatrixStructure::Matrix1d),
992  MatrixStorage(),
993  MatrixOutline(MatrixOutline::Column),
994  MatrixCondition())
995  {
996  }
998  explicit Vector(int m)
1000  ( MatrixStructure(MatrixStructure::Matrix1d),
1001  MatrixStorage(),
1002  MatrixOutline(MatrixOutline::Column),
1003  MatrixCondition())
1004  {
1005  commitNumRows(m);
1006  }
1007 };
1008 
1011 public:
1015  ( MatrixStructure(MatrixStructure::Matrix1d),
1016  MatrixStorage(),
1018  MatrixCondition())
1019  {
1020  }
1022  explicit RowVector(int n)
1024  ( MatrixStructure(MatrixStructure::Matrix1d),
1025  MatrixStorage(),
1027  MatrixCondition())
1028  {
1029  commitNumCols(n);
1030  }
1031 };
1032 
1035 public:
1039  {
1040  }
1041 };
1042 
1046 public:
1050  {
1051  }
1052 };
1053 
1058 public:
1062  MatrixStorage(),
1063  MatrixOutline(),
1064  MatrixCondition().setDiagonal(MatrixCondition::RealDiagonal))
1065  {
1066  }
1067 };
1068 
1073 public:
1077  MatrixStorage(),
1078  MatrixOutline(),
1079  MatrixCondition().setDiagonal(MatrixCondition::ZeroDiagonal))
1080  {
1081  }
1082 };
1083 
1088 public:
1092  MatrixStorage(),
1093  MatrixOutline(),
1094  MatrixCondition().setDiagonal(MatrixCondition::ImaginaryDiagonal))
1095  {
1096  }
1097 };
1098 
1100 SimTK_SimTKCOMMON_EXPORT std::ostream&
1101 operator<<(std::ostream& o, const MatrixCommitment&);
1102 
1103 // End of MatrixCharacteristics group.
1105 
1106 } //namespace SimTK
1107 
1108 #endif // SimTK_SIMMATRIX_MATRIX_CHARACTERISTICS_H_
const MatrixStorage::Mask & getStorageMask() const
Definition: MatrixCharacteristics.h:901
bool isBandwidthOK(int lower, int upper) const
Check whether an actual bandwidth satisfies the bandwidth commitment.
Definition: MatrixCharacteristics.h:813
MatrixOutline & updOutline()
Definition: MatrixCharacteristics.h:641
MatrixCondition & updCondition()
Definition: MatrixCharacteristics.h:642
int nrow() const
Definition: MatrixCharacteristics.h:624
MatrixCommitment & commitBandwidth(int lb, int ub)
Definition: MatrixCharacteristics.h:863
MatrixCommitment & commitSize(int m, int n)
Definition: MatrixCharacteristics.h:854
Use this class to represent sets of acceptable values for each of the storage attributes (packing...
Definition: MatrixCharacteristics.h:299
Definition: MatrixCharacteristics.h:429
StructureMask structure
Definition: MatrixCharacteristics.h:204
Vector(int m)
Commit to a column vector of a particular length.
Definition: MatrixCharacteristics.h:998
PackingMask packing
Definition: MatrixCharacteristics.h:320
Matrix "outline" refers to the characteristic relationship between the number of rows and columns of ...
Definition: MatrixCharacteristics.h:423
MatrixStructure & updStructure()
Definition: MatrixCharacteristics.h:639
#define SimTK_SimTKCOMMON_EXPORT
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:202
LapackFull(int m, int n)
Definition: MatrixCharacteristics.h:718
std::string name() const
Definition: MatrixCharacteristics.h:329
MatrixCharacter()
Default constructor sets lengths to zero and the other characteristics to "none specified".
Definition: MatrixCharacteristics.h:607
bool isNumColsLocked() const
Definition: MatrixCharacteristics.h:933
MatrixCharacter & setCondition(const MatrixCondition &ca)
Definition: MatrixCharacteristics.h:647
Mask & setToUncommitted()
Definition: MatrixCharacteristics.h:305
Packing
Definition: MatrixCharacteristics.h:252
MatrixStructure & set(Structure s, Position p, DiagValue d)
Definition: MatrixCharacteristics.h:230
Vector(int m)
Definition: MatrixCharacteristics.h:731
Structure
Definition: MatrixCharacteristics.h:107
bool isBandwidthOK(int lower, int upper) const
Definition: MatrixCharacteristics.h:917
MatrixStructure & setMissingAttributes()
Definition: MatrixCharacteristics.h:170
Use this class to represent a set of acceptable Condition values.
Definition: MatrixCharacteristics.h:531
MatrixStructure & setPosition(Position p)
Definition: MatrixCharacteristics.h:227
OutlineMask outline
Definition: MatrixCharacteristics.h:449
Structure getStructure() const
Definition: MatrixCharacteristics.h:222
bool isOutlineCommitted() const
Definition: MatrixCharacteristics.h:939
Placement
Definition: MatrixCharacteristics.h:267
MatrixStorage storage
Definition: MatrixCharacteristics.h:975
std::string name() const
Definition: MatrixCharacteristics.h:180
int getDefaultNumCols() const
Definition: MatrixCharacteristics.h:911
This is the default commitment for a skew Hermitian (*not* skew symmetric) matrix.
Definition: MatrixCharacteristics.h:1087
MatrixCondition::Mask condition
Definition: MatrixCharacteristics.h:824
unsigned short ConditionMask
Definition: MatrixCharacteristics.h:513
MatrixCondition & setDiagonal(Diagonal d)
Definition: MatrixCharacteristics.h:583
int nc
actual number of columns
Definition: MatrixCharacteristics.h:688
bool isSatisfiedBy(const MatrixOutline &actual) const
Definition: MatrixCharacteristics.h:446
Predefined MatrixCharacter for an ordinary column vector of a particular size.
Definition: MatrixCharacteristics.h:729
Mask(PackingMask pkm, PlacementMask plm, OrderMask om, DiagonalMask dm)
Definition: MatrixCharacteristics.h:303
MatrixCharacter & setActualNumCols(int n)
Definition: MatrixCharacteristics.h:655
Definition: MatrixCharacteristics.h:441
MatrixCondition & setToNone()
Restore to default-constructed state of "none".
Definition: MatrixCharacteristics.h:558
MatrixStorage & updStorage()
Definition: MatrixCharacteristics.h:640
Mask()
Definition: MatrixCharacteristics.h:532
Matrix "condition" is a statement about the numerical characteristics of a Matrix.
Definition: MatrixCharacteristics.h:501
SizeMask nr
number of rows
Definition: MatrixCharacteristics.h:817
MatrixCommitment & commitUpperBandwidth(int ub)
Definition: MatrixCharacteristics.h:868
const MatrixStructure & getStructure() const
Definition: MatrixCharacteristics.h:634
Outline
Definition: MatrixCharacteristics.h:425
int getLowerBandwidth() const
Definition: MatrixCharacteristics.h:629
const Real Zero
Real(0)
unsigned short OrderMask
Definition: MatrixCharacteristics.h:283
Matrix "structure" refers to an inherent mathematical (or at least algorithmic) characteristic of the...
Definition: MatrixCharacteristics.h:105
A MatrixCharacter is a set containing a value for each of the matrix characteristics except element t...
Definition: MatrixCharacteristics.h:603
unsigned int getLowerBandwidthMask() const
Definition: MatrixCharacteristics.h:769
Matrix "storage" refers to the physical layout of data in the computer’s memory.
Definition: MatrixCharacteristics.h:250
This class collects masks of each characteristic type for representing sets of accceptable characteri...
Definition: MatrixCharacteristics.h:755
RowVector(int n)
Commit to a row vector of a particular length.
Definition: MatrixCharacteristics.h:1022
unsigned int getUpperBandwidthMask() const
Definition: MatrixCharacteristics.h:770
MatrixCommitment & commitNumRows(int m)
Definition: MatrixCharacteristics.h:856
unsigned short PositionMask
Definition: MatrixCharacteristics.h:147
ptrdiff_t nelt() const
Definition: MatrixCharacteristics.h:627
Definition: MatrixCharacteristics.h:186
bool isFullyResizeable() const
Definition: MatrixCharacteristics.h:763
MatrixStorage & setToNone()
Restore this object to its default-constructed state of "none".
Definition: MatrixCharacteristics.h:379
OrderMask order
Definition: MatrixCharacteristics.h:322
Vector()
Commit to a resizeable column vector.
Definition: MatrixCharacteristics.h:989
DiagValueMask diagValue
Definition: MatrixCharacteristics.h:206
MatrixOutline(Outline outline)
This is an implicit conversion from the Outline enum to a MatrixOutline object.
Definition: MatrixCharacteristics.h:459
bool isUncommitted() const
Definition: MatrixCharacteristics.h:445
bool isSatisfiedBy(const MatrixStorage &actual) const
Definition: MatrixCharacteristics.h:316
MatrixStructure structure
These are the commitments as specified.
Definition: MatrixCharacteristics.h:974
bool isSatisfiedBy(Structure str, Position pos, DiagValue diag) const
Definition: MatrixCharacteristics.h:196
bool isUncommitted() const
Definition: MatrixCharacteristics.h:308
Mask mask() const
Given a Structure commitment, which more-restrictive Structures will still satisfy this commitment...
Mask()
Definition: MatrixCharacteristics.h:187
MatrixCommitment & commitNumCols(int n)
Definition: MatrixCharacteristics.h:859
RowVector(int n)
Definition: MatrixCharacteristics.h:744
unsigned int SizeMask
Definition: MatrixCharacteristics.h:759
MatrixCondition(Condition cond, Diagonal diag=UnknownDiagonal)
This is an implicit conversion from the Condition enum to a MatrixCondition object.
Definition: MatrixCharacteristics.h:555
void clear()
Set commitment s to "none" and masks to "uncommitted" for all characteristics.
Definition: MatrixCharacteristics.h:945
MatrixCommitment & commitStructure(const MatrixStructure &s)
Definition: MatrixCharacteristics.h:872
MatrixStorage(Packing pk, Placement pl=NoPlacement, Order o=NoOrder, Diagonal d=NoDiag)
This constructor is also an implicit conversion from the Packing enum to a MatrixStorage object which...
Definition: MatrixCharacteristics.h:356
Predefined MatrixCharacter for an ordinary Lapack-style full matrix of a particular dimension m x n (...
Definition: MatrixCharacteristics.h:716
Order
Definition: MatrixCharacteristics.h:277
unsigned short DiagValueMask
Definition: MatrixCharacteristics.h:165
MatrixStorage & setPacking(Packing p)
Definition: MatrixCharacteristics.h:383
Packing getPacking() const
Definition: MatrixCharacteristics.h:388
const MatrixStorage & getStorageCommitment() const
Definition: MatrixCharacteristics.h:895
MatrixOutline outline
Definition: MatrixCharacteristics.h:976
static MatrixOutline calcFromSize(int m, int n)
Determine the outline from given actual dimensions.
Hermitian()
Definition: MatrixCharacteristics.h:1059
const MatrixCondition & getConditionCommitment() const
Definition: MatrixCharacteristics.h:897
Placement getPlacement() const
Definition: MatrixCharacteristics.h:389
MatrixStructure & setDiagValue(DiagValue d)
Definition: MatrixCharacteristics.h:228
MatrixCharacter & setOutline(const MatrixOutline &oa)
Definition: MatrixCharacteristics.h:646
std::string name() const
Definition: MatrixCharacteristics.h:452
bool isOutlineOK(const MatrixOutline &o) const
Definition: MatrixCharacteristics.h:925
DiagValue
For triangular, symmetric, and hermitian matrices the diagonal elements may have a single...
Definition: MatrixCharacteristics.h:157
static const SizeMask SizeUncommitted
Definition: MatrixCharacteristics.h:760
MatrixStructure(Structure s, Position p=NoPosition, DiagValue d=NoDiagValue)
This constructor is also an implicit conversion from the Structure enum to a MatrixStructure object w...
Definition: MatrixCharacteristics.h:213
SkewSymmetric()
Definition: MatrixCharacteristics.h:1074
MatrixStorage storage
Definition: MatrixCharacteristics.h:693
This is the default commitment for a triangular matrix.
Definition: MatrixCharacteristics.h:1034
Diagonal getDiagonal() const
Definition: MatrixCharacteristics.h:391
MatrixCharacter & setStorage(const MatrixStorage &sa)
Definition: MatrixCharacteristics.h:645
bool isSizeOK(int m, int n) const
Check whether an actual size satisfies the size commitment.
Definition: MatrixCharacteristics.h:807
MatrixCharacter & setActualNumRows(int m)
Definition: MatrixCharacteristics.h:653
MatrixStructure()
Definition: MatrixCharacteristics.h:209
MatrixOutline & setToNone()
Set the outline back to its default-constructed value of "none".
Definition: MatrixCharacteristics.h:462
SizeMask uband
upper bandwidth, if banded
Definition: MatrixCharacteristics.h:819
int uband
actual upper bandwidth, if banded
Definition: MatrixCharacteristics.h:690
bool isStructureCommitted() const
Definition: MatrixCharacteristics.h:935
This is the default commitment for a row vector.
Definition: MatrixCharacteristics.h:1010
Mask(ConditionMask cmask, DiagonalMask dmask)
Definition: MatrixCharacteristics.h:533
unsigned int getNumColsMask() const
Definition: MatrixCharacteristics.h:768
int lband
actual lower bandwidth, if banded
Definition: MatrixCharacteristics.h:690
Predefined MatrixCharacter for an ordinary row vector of a particular size.
Definition: MatrixCharacteristics.h:742
int ncol() const
Definition: MatrixCharacteristics.h:625
const MatrixStorage & getStorage() const
Definition: MatrixCharacteristics.h:635
Mask mask() const
When "this" outline is used as a commitment, it represents a mask of acceptable outlines.
Definition: MatrixCharacteristics.h:471
Diagonal getDiagonal() const
Definition: MatrixCharacteristics.h:580
Mask(OutlineMask mask)
Definition: MatrixCharacteristics.h:443
This is a user-includable header which includes everything needed to make use of SimMatrix Scalar cod...
MatrixCharacter(int m, int n, int lb, int ub, MatrixStructure structure, MatrixStorage storage, MatrixCondition condition)
Definition: MatrixCharacteristics.h:677
MatrixCondition()
The default constructor sets the condition to Unknown, which is typically where it remains...
Definition: MatrixCharacteristics.h:551
MatrixCharacter & setUpperBandwidth(int ub)
Definition: MatrixCharacteristics.h:668
const MatrixCondition & getCondition() const
Definition: MatrixCharacteristics.h:637
unsigned short PackingMask
Definition: MatrixCharacteristics.h:263
std::string name() const
Definition: MatrixCharacteristics.h:546
Mask()
Definition: MatrixCharacteristics.h:757
DiagValue getDiagValue() const
Definition: MatrixCharacteristics.h:224
Mask & setToUncommitted()
Definition: MatrixCharacteristics.h:444
PlacementMask placement
Definition: MatrixCharacteristics.h:321
bool isStructureOK(const MatrixStructure &s) const
Definition: MatrixCharacteristics.h:921
bool isNumRowsLocked() const
Definition: MatrixCharacteristics.h:764
MatrixCharacter::Mask masks
These are the bitmasks of acceptable characteristics which would satisfy the above-specified commitme...
Definition: MatrixCharacteristics.h:981
MatrixCharacter & setToNone()
Restore this MatrixCharacter to its default-constructed state of "none".
Definition: MatrixCharacteristics.h:615
MatrixCharacter & setActualSize(int m, int n)
Set the actual size and update the outline to match.
Definition: MatrixCharacteristics.h:651
RowVector()
Commit to a resizeable row vector.
Definition: MatrixCharacteristics.h:1013
Mask & setToUncommitted()
Definition: MatrixCharacteristics.h:534
MatrixStorage & setMissingAttributes()
Assuming this is an actual matrix description, set any unspecified attributes to appropriate defaults...
Definition: MatrixCharacteristics.h:366
bool isNumRowsLocked() const
Definition: MatrixCharacteristics.h:932
Mask mask() const
Calculate the commitment mask associated with specifying "this" set of storage attributes as a commit...
Definition: MatrixCharacteristics.h:340
int getDefaultNumRows() const
Definition: MatrixCharacteristics.h:910
Position
For triangular matrices, we have to know which triangle we're talking about.
Definition: MatrixCharacteristics.h:140
unsigned int getNumRowsMask() const
Definition: MatrixCharacteristics.h:767
int getDefaultUpperBandwidth() const
Definition: MatrixCharacteristics.h:778
MatrixCommitment & commitOutline(const MatrixOutline &o)
Definition: MatrixCharacteristics.h:876
MatrixCommitment & commitLowerBandwidth(int lb)
Definition: MatrixCharacteristics.h:865
MatrixStorage & setOrder(Order o)
Definition: MatrixCharacteristics.h:385
std::ostream & operator<<(std::ostream &o, const ContactForce &f)
Definition: CompliantContactSubsystem.h:387
bool isUncommitted() const
Definition: MatrixCharacteristics.h:536
MatrixCommitment & commitCondition(const MatrixCondition &c)
Definition: MatrixCharacteristics.h:878
Diagonal
Definition: MatrixCharacteristics.h:287
MatrixCommitment & commitStorage(const MatrixStorage &s)
Definition: MatrixCharacteristics.h:874
std::pair< int, int > getBandwidth() const
Definition: MatrixCharacteristics.h:631
MatrixStorage()
Default constructor leaves all fields unspecified.
Definition: MatrixCharacteristics.h:350
bool isSizeOK(const std::pair< int, int > &mn) const
Definition: MatrixCharacteristics.h:914
Mask()
Definition: MatrixCharacteristics.h:442
DiagonalMask diagonal
Definition: MatrixCharacteristics.h:543
MatrixCharacter & setStructure(const MatrixStructure &sa)
Definition: MatrixCharacteristics.h:644
const MatrixCondition::Mask & getConditionMask() const
Definition: MatrixCharacteristics.h:903
Generic Row.
Definition: Row.h:118
bool isConditionOK(const MatrixCondition &c) const
Definition: MatrixCharacteristics.h:927
MatrixCondition & setCondition(Condition c)
Definition: MatrixCharacteristics.h:582
Definition: MatrixCharacteristics.h:428
bool isFullyResizeable() const
Definition: MatrixCharacteristics.h:931
unsigned short PlacementMask
Definition: MatrixCharacteristics.h:273
MatrixOutline::Mask outline
Definition: MatrixCharacteristics.h:823
MatrixCommitment(const MatrixStructure &str)
This is an implicit conversion from a MatrixStructure specification to a MatrixCommitment with storag...
Definition: MatrixCharacteristics.h:843
bool isStorageCommitted() const
Definition: MatrixCharacteristics.h:937
int getDefaultNumRows() const
Definition: MatrixCharacteristics.h:772
#define SimTK_SIZECHECK_NONNEG(sz, where)
Definition: ExceptionMacros.h:147
MatrixCondition condition
Definition: MatrixCharacteristics.h:977
Diagonal
Definition: MatrixCharacteristics.h:517
MatrixStorage & setDiagonal(Diagonal d)
Definition: MatrixCharacteristics.h:386
Mask()
Definition: MatrixCharacteristics.h:300
MatrixStructure & setToNone()
Definition: MatrixCharacteristics.h:233
int getDefaultLowerBandwidth() const
Definition: MatrixCharacteristics.h:777
DiagonalMask diagonal
Definition: MatrixCharacteristics.h:323
Mask & setToUncommitted()
Definition: MatrixCharacteristics.h:190
bool isUpperBandwidthLocked() const
Definition: MatrixCharacteristics.h:776
bool isUncommitted() const
Return if all fields are set to "Uncommitted" (all bits are one).
Definition: MatrixCharacteristics.h:789
This is the default commitment for skew symmetric (*not* skew Hermitian) matrix.
Definition: MatrixCharacteristics.h:1072
Mask(StructureMask sm, PositionMask pm, DiagValueMask dm)
Definition: MatrixCharacteristics.h:188
MatrixStorage(Packing pk, Order o)
This constructor is for the common case of just packing and order, with no particular placement and a...
Definition: MatrixCharacteristics.h:361
RowVectors are much less common than Vectors.
Definition: BigMatrix.h:191
bool isSatisfiedBy(Packing pack, Placement place, Order ord, Diagonal diag) const
Definition: MatrixCharacteristics.h:311
bool isConditionCommitted() const
Definition: MatrixCharacteristics.h:941
MatrixCharacter::Mask::SizeMask getUpperBandwidthMask() const
Definition: MatrixCharacteristics.h:908
bool isLowerBandwidthLocked() const
Definition: MatrixCharacteristics.h:775
SizeMask nc
number of columns
Definition: MatrixCharacteristics.h:817
SkewHermitian()
Definition: MatrixCharacteristics.h:1089
bool isStorageOK(const MatrixStorage &s) const
Definition: MatrixCharacteristics.h:923
const MatrixStructure & getStructureCommitment() const
These report the commitment as it was specified.
Definition: MatrixCharacteristics.h:894
A MatrixCommitment provides a set of acceptable matrix characteristics.
Definition: MatrixCharacteristics.h:837
Position getPosition() const
Definition: MatrixCharacteristics.h:223
unsigned short DiagonalMask
Definition: MatrixCharacteristics.h:526
PositionMask position
Definition: MatrixCharacteristics.h:205
std::pair< int, int > getSize() const
Definition: MatrixCharacteristics.h:626
ConditionMask condition
Definition: MatrixCharacteristics.h:542
bool isResizeable() const
Definition: MatrixCharacteristics.h:762
This is the default commitment for a Hermitian (*not* symmetric) matrix.
Definition: MatrixCharacteristics.h:1057
bool isSatisfiedBy(const MatrixStructure &actual) const
Definition: MatrixCharacteristics.h:200
bool isResizeable() const
Definition: MatrixCharacteristics.h:930
Condition
Definition: MatrixCharacteristics.h:503
MatrixCharacter::Mask::SizeMask getNumColsMask() const
Definition: MatrixCharacteristics.h:906
MatrixCommitment()
Definition: MatrixCharacteristics.h:839
const MatrixOutline::Mask & getOutlineMask() const
Definition: MatrixCharacteristics.h:902
This is the default commitment for a symmetric (*not* Hermitian) matrix.
Definition: MatrixCharacteristics.h:1045
const MatrixOutline & getOutlineCommitment() const
Definition: MatrixCharacteristics.h:896
bool isSatisfiedBy(const MatrixCharacter &actual) const
Definition: MatrixCharacteristics.h:919
MatrixCharacter::Mask::SizeMask getLowerBandwidthMask() const
Definition: MatrixCharacteristics.h:907
Condition getCondition() const
Definition: MatrixCharacteristics.h:579
bool isSizeOK(int m, int n) const
Definition: MatrixCharacteristics.h:913
MatrixCondition condition
Definition: MatrixCharacteristics.h:695
int nr
actual number of rows
Definition: MatrixCharacteristics.h:688
MatrixStorage & setPlacement(Placement p)
Definition: MatrixCharacteristics.h:384
MatrixStorage::Mask storage
Definition: MatrixCharacteristics.h:822
MatrixCharacter::Mask::SizeMask getNumRowsMask() const
Definition: MatrixCharacteristics.h:905
MatrixStructure & setStructure(Structure s)
Definition: MatrixCharacteristics.h:226
unsigned short DiagonalMask
Definition: MatrixCharacteristics.h:293
MatrixOutline outline
Definition: MatrixCharacteristics.h:694
bool isNumColsLocked() const
Definition: MatrixCharacteristics.h:765
MatrixStructure::Mask structure
Definition: MatrixCharacteristics.h:821
Triangular()
Definition: MatrixCharacteristics.h:1036
bool isSatisfiedBy(const MatrixCharacter &actual) const
Check whether an actual matrix character satisfies this matrix commitment.
Definition: MatrixCharacteristics.h:797
MatrixCharacter & setBandwidth(int lb, int ub)
Definition: MatrixCharacteristics.h:658
Mask mask() const
Return the commitment mask corresponding to use of "this" condition as a commitment.
Definition: MatrixCharacteristics.h:576
SizeMask lband
lower bandwidth, if banded
Definition: MatrixCharacteristics.h:819
MatrixOutline()
Default constructor produces an object containing no outline specification.
Definition: MatrixCharacteristics.h:456
bool isSatisfiedBy(const MatrixCondition &actual) const
Definition: MatrixCharacteristics.h:538
const MatrixOutline & getOutline() const
Definition: MatrixCharacteristics.h:636
int getUpperBandwidth() const
Definition: MatrixCharacteristics.h:630
MatrixStructure structure
Definition: MatrixCharacteristics.h:692
Symmetric()
Definition: MatrixCharacteristics.h:1047
Outline getOutline() const
Return the outline value stored in this MatrixOutline object.
Definition: MatrixCharacteristics.h:483
MatrixCommitment(const MatrixStructure &structure, const MatrixStorage &storage, const MatrixOutline &outline, const MatrixCondition &condition)
Definition: MatrixCharacteristics.h:954
This is the default commitment for a column vector.
Definition: MatrixCharacteristics.h:986
MatrixCharacter & setLowerBandwidth(int lb)
Definition: MatrixCharacteristics.h:663
Definition: MatrixCharacteristics.h:427
Mask & setToUncommitted()
Set all bits to one ("Uncommitted").
Definition: MatrixCharacteristics.h:781
unsigned short OutlineMask
Definition: MatrixCharacteristics.h:437
int getDefaultNumCols() const
Definition: MatrixCharacteristics.h:773
Order getOrder() const
Definition: MatrixCharacteristics.h:390
const MatrixStructure::Mask & getStructureMask() const
These report the masks of acceptable values generated from the commitment.
Definition: MatrixCharacteristics.h:900
bool isUncommitted() const
Definition: MatrixCharacteristics.h:193
unsigned int StructureMask
Definition: MatrixCharacteristics.h:131