/* $Id: dirichlettr.h,v 1.1.1.1 1996/10/02 10:35:49 roitzsch Exp $ */

#ifndef DIRICHLETTR_H
#define DIRICHLETTR_H

#include "dirichletA.h"

//-------------------------------------------------------------------------
class ConstTransDirichlet: public ConstDirichletBCs
{
  public:

    ConstTransDirichlet(char* fileName);

    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};


class StepDirichlet: public VarDirichletBCs
{
  protected:

    Real  xStep;
    virtual Real value(Vector<Real>& x) const;

  public:

    StepDirichlet();

    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};
//-------------------------------------------------------------------------

class UserTransDirichlet: public VarDirichletBCs
{
  public:

    UserTransDirichlet();

    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;

  protected:

    virtual Real value(Vector<Real>& x) const;
    virtual Real value(Vector<Real>& x, Real time) const;

    virtual Real userBC1d(Real x, Real t) const;
    virtual Real userBC2d(Real x, Real y, Real t) const;
    virtual Real userBC3d(Real x, Real y, Real z, Real t) const;

};
//-------------------------------------------------------------------------

class JumpDirichlet: public StepDirichlet
{
    virtual Real value(Vector<Real>& x) const;

  public:

    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};
//-------------------------------------------------------------------------

class TransDirichlet: public VarDirichletBCs
{
    Real value(Vector<Real>& x) const; 

  public:

    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const; 
};
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------


class StefanDirichletBCs : public VarDirichletBCs
{
  protected:

    Real kappa0, kappa1, c0, c1, theta1;

    Real value(Vector<Real>& x, Real time) const;

  public:

    StefanDirichletBCs();
    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};
//-------------------------------------------------------------------------

class CastingDirichletBCs : public VarDirichletBCs
{
  protected:

    Real kappa0, kappa1, c0, c1, theta1;

    Real value(Vector<Real>& x, Real time) const;

  public:

    CastingDirichletBCs();
    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};

//-------------------------------------------------------------------------

class PorousMediaDirichletBCs : public VarDirichletBCs
{
  public:

    PorousMediaDirichletBCs();
    virtual void setBC(int node, int id, Vector<Real>& x, int comp, Real time);
    virtual Real initialValue(Vector<Real>& x, Real time, int comp=1) const;
};

#endif
