*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
nonLinCF.h 2.12 KiB
Newer Older
Valentin Hanser's avatar
Valentin Hanser committed
#ifndef NONLINCF_H
#define NONLINCF_H


#include <fem.hpp>
#include <solve.hpp>
#include <ngstd.hpp>
#include <vector>
#include <cmath>
#include <memory>
#include <iostream>
#include <cmath>
#include <cstring>


#include "../basicClasses/ngData_class.h"
Valentin Hanser's avatar
Valentin Hanser committed
#include "../basicClasses/magCurve.h"


using namespace ngstd;
using namespace ngfem;
using namespace ngsolve;
using namespace ngcomp;

// #define _Pi 3.141592653589793
Valentin Hanser's avatar
Valentin Hanser committed

template <unsigned int DIM>
std::pair<unsigned int, unsigned int> findNearestNeighbour(const vector<vector<MappedIntegrationPoint<DIM, DIM>> > & mips, const BaseMappedIntegrationPoint& mip);

template <typename T, unsigned int DIM>
class nonLinCF:public ngScalar_class<T, DIM>
Valentin Hanser's avatar
Valentin Hanser committed
{ 
Valentin Hanser's avatar
Valentin Hanser committed
    public:
        nonLinCF(shared_ptr<MeshAccess>& mesh, IntegrationRule& intrule, 
                        const shared_ptr<CoefficientFunction>& ptrInput, 
                        vector<double> H_KL, 
                        vector<double> B_KL, 
                        const std::string cFieldIn="H", const std::string cFieldOut="B", 
                        const shared_ptr<CoefficientFunction>& ptrMask=nullptr, unsigned int order=1);
Valentin Hanser's avatar
Valentin Hanser committed


        ~nonLinCF() = default;



        bool HasConverged(double aMeanError, double aMaxError);
Valentin Hanser's avatar
Valentin Hanser committed

        void Update();
        
        void UpdateEnergyDensity();
        const shared_ptr<ngScalar_class<T, DIM>> GetEnergyDensity();
        const shared_ptr<ngScalar_class<T, DIM>> GetIterationError();
Valentin Hanser's avatar
Valentin Hanser committed


        unsigned int getOrder() const;
        KL GetKL();

        shared_ptr<CoefficientFunction> GetInputCF() const;
        void SetInputCF(shared_ptr<CoefficientFunction>) ;

Valentin Hanser's avatar
Valentin Hanser committed
      

    private:
        

        shared_ptr<CoefficientFunction> ptrInput;
        
        const std::string sFieldIn;        
        const std::string sFieldOut;
        using ngScalar_class<T, DIM>::data;
        using ngScalar_class<T, DIM>::mips;
Valentin Hanser's avatar
Valentin Hanser committed

        // data
        shared_ptr<ngScalar_class<double, DIM>> ptrError;
        shared_ptr<ngScalar_class<T, DIM>> ptrEnergyDens;
Valentin Hanser's avatar
Valentin Hanser committed

        
        std::shared_ptr<KL>  oKL;


        double meanError;
        double maxError;

};

#endif /* NONLINCF_H */