Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

ElInfo3d.h 4.64 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
// ============================================================================
// ==                                                                        ==
// == AMDiS - Adaptive multidimensional simulations                          ==
// ==                                                                        ==
// ============================================================================
// ==                                                                        ==
// ==  crystal growth group                                                  ==
// ==                                                                        ==
// ==  Stiftung caesar                                                       ==
// ==  Ludwig-Erhard-Allee 2                                                 ==
// ==  53175 Bonn                                                            ==
// ==  germany                                                               ==
// ==                                                                        ==
// ============================================================================
// ==                                                                        ==
// ==  http://www.caesar.de/cg/AMDiS                                         ==
// ==                                                                        ==
// ============================================================================

/** \file ElInfo3d.h */

#ifndef AMDIS_ELINFO3D_H
#define AMDIS_ELINFO3D_H

#include "ElInfo.h"
#include "MemoryManager.h"
Thomas Witkowski's avatar
Thomas Witkowski committed
27
#include "OpenMP.h"
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

namespace AMDiS {

  // ============================================================================
  // ===== class ElInfo3d =======================================================
  // ============================================================================


  /** \ingroup Traverse
   * \brief
   * ElInfo class for 3-dimensional elements (\ref Tetrahedron).
   */
  class ElInfo3d : public ElInfo
  {
  public:
    MEMORY_MANAGED(ElInfo3d);

    /** \brief
     * Constructor. Calls ElInfo's protected Constructor.
     */
Thomas Witkowski's avatar
Thomas Witkowski committed
48 49 50
    ElInfo3d(Mesh* aMesh) 
      : ElInfo(aMesh) 
    {
Thomas Witkowski's avatar
Thomas Witkowski committed
51
      tmpWorldVecs.resize(4);
Thomas Witkowski's avatar
Thomas Witkowski committed
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

    /** \brief
     * Assignment operator
     */
    ElInfo3d& operator=(const ElInfo3d& rhs) {
      ElInfo::operator=(rhs);
      el_type = rhs.el_type;
      orientation = rhs.orientation;
      return *this;
    } 

    /** \brief
     * 3-dimensional realisation of ElInfo's fillElInfo method.
     */
    void fillElInfo(int ichild, const ElInfo *elinfo_old);

    /** \brief
     * 3-dimensional realisation of ElInfo's fillMacroInfo method.
     */
    void fillMacroInfo(const MacroElement *);

    /** \brief
     * 3-dimensional realisation of ElInfo's worldToCoord method.
     */
    const int worldToCoord(const WorldVector<double>& w, DimVec<double>* l) const;

    /** \brief
     * 3-dimensional realisation of ElInfo's calcGrdLambda method.
     */
Thomas Witkowski's avatar
Thomas Witkowski committed
82
    double calcGrdLambda(DimVec<WorldVector<double> >& grd_lam);
83 84 85 86

    /** \brief
     * 3-dimensional realisation of ElInfo's getNormal method.
     */
Thomas Witkowski's avatar
Thomas Witkowski committed
87
    double getNormal(int side, WorldVector<double> &normal);
88 89 90 91 92 93 94 95 96

    /** \brief
     * update ElInfo after refinement (of some neighbours). Only in 3d!
     */
    void update();

    /** \brief
     * get ElInfo's \ref el_type
     */
97 98 99
    inline unsigned char getType() const { 
      return el_type; 
    };
100 101 102 103

    /** \brief
     * get ElInfo's \ref orientation
     */
104 105 106
    inline signed char getOrientation() const { 
      return orientation; 
    };
107 108 109 110

    /** \brief
     * set ElInfo's \ref el_type to t
     */
111 112 113
    inline void setType(unsigned char t) { 
      el_type = t; 
    };
114 115 116 117

    /** \brief
     * set ElInfo's \ref orientation to o
     */
118 119 120
    inline void setOrientation(signed char o) { 
      orientation = o; 
    };
121

122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
    void getRefSimplexCoords(VectorOfFixVecs<DimVec<double> > *coords) const
    {
      FUNCNAME("ElInfo3d::getRefSimplexCoords()");

      ERROR_EXIT("NOT YET\n");
    }

    void getSubElementCoords(VectorOfFixVecs<DimVec<double> > *coords,
			     int iChild) const 
    {
      FUNCNAME("ElInfo3d::getSubElementCoords()");

      ERROR_EXIT("NOT YET\n");
    }

137 138 139 140 141 142 143 144 145 146 147 148
  protected:

    /** \brief
     * \ref el 's type. Is Filled automatically by the traversal routines.
     */
    unsigned char el_type;

    /** \brief
     * +/- 1: sign of the determinant of the transformation to the reference
     * element with vertices (0,0,0), (1,1,1), (1,1,0), (1,0,0).
     */
    signed char orientation;
Thomas Witkowski's avatar
Thomas Witkowski committed
149 150 151 152

    /** \brief
     * Tmp vectors used for calculations in calcGrdLambda and getNormal().
     */
153
    std::vector< WorldVector<double> > tmpWorldVecs;
154 155 156 157 158
  };

}

#endif // AMDIS_ELINFO3D_H