SyFi  0.3
SyFi::Bubble Class Reference

#include <Bubble.h>

Inheritance diagram for SyFi::Bubble:
SyFi::StandardFE SyFi::FE

List of all members.

Public Member Functions

 Bubble ()
 Bubble (Polygon &p, unsigned int order=3)
virtual ~Bubble ()
virtual void compute_basis_functions ()

Detailed Description

Definition at line 26 of file Bubble.h.


Constructor & Destructor Documentation

Definition at line 29 of file Bubble.cpp.

References SyFi::StandardFE::description.

                      : StandardFE()
        {
                description = "Bubble";
        }
SyFi::Bubble::Bubble ( Polygon p,
unsigned int  order = 3 
)

Definition at line 34 of file Bubble.cpp.

References compute_basis_functions().

virtual SyFi::Bubble::~Bubble ( ) [inline, virtual]

Definition at line 31 of file Bubble.h.

{}

Member Function Documentation

Reimplemented from SyFi::StandardFE.

Definition at line 39 of file Bubble.cpp.

References SyFi::barycenter_tetrahedron(), SyFi::barycenter_triangle(), SyFi::StandardFE::description, SyFi::StandardFE::dofs, SyFi::StandardFE::N(), SyFi::Polygon::no_vertices(), SyFi::StandardFE::Ns, SyFi::StandardFE::p, SyFi::Polygon::str(), SyFi::Polygon::vertex(), and SyFi::x.

Referenced by Bubble().

        {

                // remove previously computed basis functions and dofs
                Ns.clear();
                dofs.clear();

                if ( p == NULL )
                {
                        throw(std::logic_error("You need to set a polygon before the basisfunctions can be computed"));
                }

                if ( p->str().find("ReferenceLine") != string::npos )
                {
                        Ns.insert(Ns.end(), x*(1-x));
                        description = "Bubble_1D";
                }
                else if ( p->str().find("Triangle") != string::npos )
                {

                        GiNaC::ex b = barycenter_triangle(p->vertex(0), p->vertex(1), p->vertex(2));
                        GiNaC::ex N = GiNaC::numeric(1);
                        for (unsigned int d=0; d< b.nops(); d++)
                        {
                                N = N*b.op(d).rhs();
                        }
                        Ns.insert(Ns.end(), N);

                        description = "Bubble_2D";

                }
                else if ( p->str().find("Tetrahedron") != string::npos )
                {
                        GiNaC::ex b = barycenter_tetrahedron(p->vertex(0), p->vertex(1),
                                p->vertex(2), p->vertex(3));
                        GiNaC::ex N = GiNaC::numeric(1);
                        for (unsigned int d=0; d< b.nops(); d++)
                        {
                                N = N*b.op(d).rhs();
                        }
                        Ns.insert(Ns.end(), N);

                        description = "Bubble_3D";
                }

                // create and insert dof
                GiNaC::lst midpoint = GiNaC::lst();
                for (unsigned int d=0; d< p->vertex(1).nops(); d++)
                {
                        midpoint.append(GiNaC::numeric(0));
                }
                for (unsigned int i=1; i<= p->no_vertices(); i++)
                {
                        for (unsigned int d=0; d< p->vertex(i-1).nops(); d++)
                        {
                                midpoint.let_op(d)  += p->vertex(i-1).op(d);
                        }
                }

                for (unsigned int d=0; d< p->vertex(1).nops(); d++)
                {
                        midpoint.let_op(d)  = midpoint.op(d)/p->no_vertices();
                }

                dofs.insert(dofs.end(), midpoint);
        }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator