Skip to content
Snippets Groups Projects
localgeodesicfefunctiontest.cc 1.76 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include <config.h>
    
    #include <iostream>
    
    #include <dune/common/fvector.hh>
    #include <dune/grid/common/quadraturerules.hh>
    
    #include <dune/src/rotation.hh>
    #include <dune/src/localgeodesicfefunction.hh>
    
    using namespace Dune;
    
    int main()
    {
        typedef Rotation<3,double> TargetSpace;
    
        const int dim = 2;
    
        FieldVector<double,3> xAxis(0);
        xAxis[0] = 1;
        FieldVector<double,3> yAxis(0);
        yAxis[1] = 1;
        FieldVector<double,3> zAxis(0);
        zAxis[2] = 1;
    
    
    
        TargetSpace v0 = Rotation<3,double>(xAxis,1);
        TargetSpace v1 = Rotation<3,double>(yAxis,2);
        TargetSpace v2 = Rotation<3,double>(zAxis,3);
    
        std::vector<TargetSpace> coef0(3), coef1(3), coef2(3);
        coef0[0] = v0;  coef0[1] = v1;  coef0[2] = v2;
        coef1[0] = v2;  coef1[1] = v0;  coef1[2] = v1;
        coef2[0] = v1;  coef2[1] = v2;  coef2[2] = v0;
    
        GeometryType triangle;
        triangle.makeTriangle();
    
        LocalGeodesicFEFunction<2,double,TargetSpace> f0(triangle, coef0);
        LocalGeodesicFEFunction<2,double,TargetSpace> f1(triangle, coef1);
        LocalGeodesicFEFunction<2,double,TargetSpace> f2(triangle, coef2);
    
        int quadOrder = 1;
    
        const Dune::QuadratureRule<double, dim>& quad 
            = Dune::QuadratureRules<double, dim>::rule(triangle, quadOrder);
        
        for (size_t pt=0; pt<quad.size(); pt++) {
            const Dune::FieldVector<double,dim>& quadPos = quad[pt].position();
    
            Dune::FieldVector<double,dim> l0 = quadPos;
            Dune::FieldVector<double,dim> l1, l2;
    
            l1[0] = 1-quadPos[0]-quadPos[1];
            l1[1] = quadPos[0];
    
            l2[0] = quadPos[1];
            l2[1] = 1-quadPos[0]-quadPos[1];
    
            
            std::cout << f0.evaluate(l0) << std::endl;
            std::cout << f1.evaluate(l1) << std::endl;
            std::cout << f2.evaluate(l2) << std::endl;
    
        }
    
    
    
    }