| 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
 
 | /*=========================================================================
  Program:   Insight Segmentation & Registration Toolkit
  Module:    itkFEMLoadGrav.h
  Language:  C++
  Date:      $Date$
  Version:   $Revision$
  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 __itkFEMLoadGrav_h
#define __itkFEMLoadGrav_h
#include "itkFEMLoadElementBase.h"
#include "vnl/vnl_vector.h"
namespace itk {
namespace fem {
/**
 * \class LoadGrav
 * \brief Abstract gravity load class.
 *
 * This load is integrated over a whole element. The load vector is returned in a 
 * Fg member function defined in a derived class. The Fg function accepts a vector 
 * specifying a point in global coordinate system and returns a load vector
 * defined at the point. Derived LoadClasses must define this function.
 */
class LoadGrav : public LoadElement
{
  FEM_ABSTRACT_CLASS(LoadGrav,LoadElement)
public:
  virtual vnl_vector<Float> Fg(vnl_vector<Float>) = 0;
};
/**
 * \class LoadGravConst
 * \brief Constant gravity load class.
 *
 * This is a special case of LoadGrav. The load vector is the same on
 * every point in space.
 */
class LoadGravConst : public LoadGrav
{
  FEM_CLASS(LoadGravConst,LoadGrav)
public:
  vnl_vector<Float> Fg_value;
  virtual vnl_vector<Float> Fg(vnl_vector<Float>)
    {
    return Fg_value;
    }
  /**
   * Read an object from input stream.
   */
  virtual void Read( std::istream& f, void* info );
  /**
   * Write an object to the output stream
   */
  virtual void Write( std::ostream& f ) const;
};
FEM_CLASS_INIT(LoadGravConst)
}} // end namespace itk::fem
#endif // #ifndef __itkFEMLoadGrav_h
 |