| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 
 | /*=========================================================================
  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: itkFEMElement2DC0LinearTriangular.h,v $
  Language:  C++
  Date:      $Date: 2009-01-28 21:29:04 $
  Version:   $Revision: 1.7 $
  Copyright (c) Insight Software Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkFEMElement2DC0LinearTriangular_h
#define __itkFEMElement2DC0LinearTriangular_h
#include "itkFEMElementStd.h"
namespace itk {
namespace fem {
/**
 * \class Element2DC0LinearTriangular
 * \brief 3-noded, linear, C0 continuous finite element in 2D space.
 */
class Element2DC0LinearTriangular : public ElementStd<3,2>
{
  typedef ElementStd<3,2> TemplatedParentClass;
  FEM_ABSTRACT_CLASS( Element2DC0LinearTriangular, TemplatedParentClass )
public:
  //////////////////////////////////////////////////////////////////////////
  /**
   * Methods related to numeric integration
   */
  enum { DefaultIntegrationOrder = 1 };
  virtual void GetIntegrationPointAndWeight(unsigned int i, VectorType& pt, Float& w, unsigned int order) const;
  virtual unsigned int GetNumberOfIntegrationPoints(unsigned int order) const;
  //////////////////////////////////////////////////////////////////////////
  /**
   * Methods related to the geometry of an element
   */
  virtual VectorType ShapeFunctions( const VectorType& pt ) const;
  virtual void ShapeFunctionDerivatives( const VectorType& pt, MatrixType& shapeD ) const;
  // FIXME: Write a proper implementation
  virtual bool GetLocalFromGlobalCoordinates( const VectorType& globalPt , VectorType& localPt) const;
  // Since the Jacobian is not quadratic, we need to provide our
  // own implementation of calculating the determinant and inverse.
  virtual Float JacobianDeterminant( const VectorType& pt, const MatrixType* pJ = 0 ) const;
  virtual void JacobianInverse( const VectorType& pt, MatrixType& invJ, const MatrixType* pJ = 0 ) const;
  /**
   * Draw the element on the specified device context
   */
#ifdef FEM_BUILD_VISUALIZATION
  void Draw(CDC* pDC, Solution::ConstPointer sol) const;
#endif
  /**
   * Constants for integration rules.
   */
  static const Float trigGaussRuleInfo[6][7][4];
  /**
   * Array that holds number of integration point for each order
   * of numerical integration.
   */
  static const unsigned int Nip[6];
};
}} // end namespace itk::fem
#endif  // #ifndef __itkFEMElement2DC0LinearTriangular_h
 |