ITK  4.4.0
Insight Segmentation and Registration Toolkit
itkFEMLoadBCMFC.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef __itkFEMLoadBCMFC_h
19 #define __itkFEMLoadBCMFC_h
20 
21 #include "itkFEMLoadBase.h"
22 
23 namespace itk
24 {
25 namespace fem
26 {
51 
52 // forward declaratons...
53 // class Solver;
54 
55 class LoadBCMFC : public Load
56 {
57 public:
59  typedef LoadBCMFC Self;
60  typedef Load Superclass;
63 
65  itkSimpleNewMacro(Self);
66 
68  itkTypeMacro(LoadBCMFC, Load);
69 
72  virtual::itk::LightObject::Pointer CreateAnother(void) const;
73 
80  class MFCTerm
81  {
82  public:
83 
88 
92  unsigned int dof;
93 
98 
102  MFCTerm(Element::ConstPointer element_, int dof_,
103  Element::Float value_) : m_element(element_), dof(dof_), value(value_)
104  {
105  }
106  };
107 
111  typedef std::vector<MFCTerm> LhsType;
112 
115 
125  LoadBCMFC(Element::ConstPointer element, int dof, vnl_vector<Element::Float> val);
126 
129  void SetIndex(int ind);
130 
133  int GetIndex();
134 
137 
141 
143  int GetNumberOfLeftHandSideTerms() const;
144 
146  int GetNumberOfRightHandSideTerms() const;
147 
149  const MFCTerm GetLeftHandSideTerm(int lhs) const;
150 
152  Element::Float GetRightHandSideTerm(int rhs) const;
153 
156  const std::vector<MFCTerm> & GetLeftHandSideArray() const;
157  std::vector<MFCTerm> & GetLeftHandSideArray();
159 
162  vnl_vector<Element::Float> & GetRightHandSideArray();
163 
164 // friend class Solver;
165 
166 protected:
167  virtual void PrintSelf(std::ostream& os, Indent indent) const;
168 
169  // private: // FIXME: CrankNicolsonSolver class, which is derived from Solver
170  // class also needs access to Index.
172  int m_Index;
173 
175 
182  vnl_vector<Element::Float> m_RightHandSide;
183 };
184 
185 }
186 } // end namespace itk::fem
187 
188 #endif // #ifndef __itkFEMLoadBCMFC_h
189