//#####################################################################
// Copyright 2002-2004, Ronald Fedkiw.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
// Class ADVECTION_CONSERVATIVE_WENO  
//##################################################################### 
#ifndef __ADVECTION_CONSERVATIVE_WENO__
#define __ADVECTION_CONSERVATIVE_WENO__

#include <Core/Advection/ADVECTION_SEPARABLE_UNIFORM.h>
namespace PhysBAM{

template<class TV,class T2>
class ADVECTION_CONSERVATIVE_WENO:public ADVECTION_SEPARABLE_UNIFORM<TV,T2>
{
    typedef typename TV::SCALAR T;
    typedef VECTOR<int,1> IV;
    bool compute_epsilon;
    T epsilon;
public:
    using ADVECTION_SEPARABLE_UNIFORM<TV,T2>::WENO;

    ADVECTION_CONSERVATIVE_WENO()
    {
        Compute_Epsilon();
        Set_Epsilon();
    }

    void Set_Epsilon(const T epsilon_input=1e-6) override
    {compute_epsilon=false;epsilon=epsilon_input;}
    
    void Compute_Epsilon() override
    {compute_epsilon=true;}

//#####################################################################
    void Advection_Solver(const int m,const T dx,const ARRAY<T2,IV>& Z,const ARRAY<T,IV>& u,ARRAY<T2,IV>& u_Zx,
        ARRAY<T2>* flux) override;
//#####################################################################
};   
}
#endif

