~ubuntu-branches/ubuntu/trusty/rheolef/trusty

« back to all changes in this revision

Viewing changes to nfem/basis/P1d_numbering.cc

  • Committer: Package Import Robot
  • Author(s): Pierre Saramito
  • Date: 2012-04-06 09:12:21 UTC
  • mfrom: (1.1.5)
  • Revision ID: package-import@ubuntu.com-20120406091221-m58me99p1nxqui49
Tags: 6.0-1
* New upstream release 6.0 (major changes):
  - massively distributed and parallel support
  - full FEM characteristic method (Lagrange-Gakerkin method) support
  - enhanced users documentation 
  - source code supports g++-4.7 (closes: #667356)
* debian/control: dependencies for MPI distributed solvers added
* debian/rules: build commands simplified
* debian/librheolef-dev.install: man1/* to man9/* added
* debian/changelog: package description rewritted (closes: #661689)

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
19
///
20
20
/// =========================================================================
21
 
#include "P1d_numbering.h"
22
 
namespace rheolef {
23
 
using namespace std;
24
 
 
25
 
std::string
26
 
numbering_P1d::name() const
27
 
{
28
 
  return "P1d";
29
 
}
30
 
numbering_P1d::size_type
31
 
numbering_P1d::idof (
32
 
        const size_type*      mesh_n_geo,
33
 
        const size_type*      mesh_n_element,
34
 
        const geo_element&    K, 
35
 
        size_type             i_dof_local) const
36
 
{
37
 
  /*
38
 
   * WARNING:  mixed mesh with t+q or T+P+H not supported too
39
 
   *           or mixtures or e+t, e+t+T etc...
40
 
   *           This requires ordered K_idx : all "e" and then all "t",
41
 
   *           and then all "q" ... => geo format version 3 ?
42
 
   */
43
 
  switch (K.type()) {
44
 
    case reference_element::p: return   K.index() + i_dof_local;
45
 
    case reference_element::e: return 2*K.index() + i_dof_local;
46
 
    case reference_element::t: return 3*K.index() + i_dof_local;
47
 
    case reference_element::q: return 4*K.index() + i_dof_local;
48
 
    case reference_element::T: return 4*K.index() + i_dof_local;
49
 
    case reference_element::P: return 6*K.index() + i_dof_local;
50
 
    case reference_element::H: return 8*K.index() + i_dof_local;
51
 
    default : {
52
 
        error_macro ("unexpected element type `" << K.type() << "'");
53
 
        return 0;
54
 
    }
55
 
  }
56
 
}
57
 
void
58
 
numbering_P1d::idof (
59
 
        const size_type*      mesh_n_geo,
60
 
        const size_type*      mesh_n_element,
61
 
        const geo_element&    K, 
62
 
        vector<size_type>&    i_dof) const
63
 
{
64
 
  for (size_type i_dof_local = 0; i_dof_local < K.size(); i_dof_local++)
65
 
    i_dof[i_dof_local] 
66
 
     = numbering_P1d::idof (mesh_n_geo, mesh_n_element, K, i_dof_local);
67
 
}
68
 
numbering_P1d::size_type
69
 
numbering_P1d::ndof (
70
 
              size_type  mesh_map_dimension,
71
 
        const size_type* mesh_n_geo,
72
 
        const size_type* mesh_n_element) const
73
 
{
74
 
    switch (mesh_map_dimension) {
75
 
      case 0: return   mesh_n_element[reference_element::p];
76
 
      case 1: return 2*mesh_n_element[reference_element::e];
77
 
      case 2: return 3*mesh_n_element[reference_element::t]
78
 
                   + 4*mesh_n_element[reference_element::q];
79
 
      case 3: return 4*mesh_n_element[reference_element::T]
80
 
                   + 6*mesh_n_element[reference_element::P]
81
 
                   + 8*mesh_n_element[reference_element::H];
82
 
      default : {
83
 
        error_macro ("unexpected dimension" << mesh_map_dimension);
84
 
        return 0;
85
 
      }
86
 
    }
87
 
}
88
 
bool
89
 
numbering_P1d::is_continuous () const
90
 
{
91
 
        return false;
92
 
}
93
 
 
94
 
} // namespace rheolef
 
21
#include "rheolef/config.h"
 
22
 
 
23
#ifdef _RHEOLEF_USE_NEW_CODE
 
24
#include "P1d_numbering_v2.cc"
 
25
#else
 
26
#include "P1d_numbering_v1.cc"
 
27
#endif