HybridFluxGenerator.hpp 1.67 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#ifndef HYBRIDFLUXGENERATOR_HPP
#define HYBRIDFLUXGENERATOR_HPP

#include "generators/SampleGenerator.hpp"
#include "CirculantEmbedding.hpp"


class PDESolver;

class HybridFaceNormalFluxGenerator : public SampleGenerator<Scalar> {
private:
    // Created in constructor
    MatrixGraphs *faceMGraphs;

    MatrixGraphs *cellMGraphs;

    void createPDESolver();

    void createMGraphs();

    void drawSample(const SampleID &id) override;

public:
    // Created in constructor
    PDESolver *pdeSolver;

    // Created in drawSample
    SampleSolution *solutionFaceValues;

    SampleSolution *solutionFaceFlux;

    SampleSolution *solutionCellFlux;

    HybridFaceNormalFluxGenerator(Meshes &meshes) :
        SampleGenerator(meshes) {
        createPDESolver();
        createMGraphs();
    }

    ~HybridFaceNormalFluxGenerator();

    string Name() const override {
        return "HybridFaceNormalFluxGenerator";
    }

    Scalar EvalSample(int face, const cell &c) override;
};

class HybridCellFluxGenerator : public SampleGenerator<VectorField> {
    const HybridFaceNormalFluxGenerator &generator;

public:
    HybridCellFluxGenerator(Meshes &meshes,
                            const HybridFaceNormalFluxGenerator &generator) :
        SampleGenerator(meshes),
        generator(generator) {
    }

    VectorField EvalSample(const cell &c) override;
};



//    MatrixGraphs cellMGraphs;         cellMGraphs(MatrixGraphs(meshes, dof(new CellDoF(3)))),
//    MatrixGraphs faceMGraphs;         faceMGraphs(MatrixGraphs(meshes, dof(new FaceDoF(1)))),
//
//    Vector *faceFlux = nullptr;
//    Vector *faceValues = nullptr;
//    Vector *cellFlux = nullptr;

#endif //HYBRIDFLUXGENERATOR_HPP