text: 
  #ifndef SRC_ASSEMBLER_PHYSICS_SHALLOWWATER2D_H_
  #define SRC_ASSEMBLER_PHYSICS_SHALLOWWATER2D_H_
  
  #include "physics2d.h"
  
  namespace espreso {
  
  enum class Property;
  struct ShallowWater2DConfiguration;
  
  struct ShallowWater2D: public Physics2D
  {
  	ShallowWater2D(Mesh *mesh, Instance *instance, const ShallowWater2DConfiguration &configuration);
  
  	MatrixType getMatrixType(const Step &step, size_t domain) const;
  	bool isMatrixTimeDependent(const Step &step) const;
  	bool isMatrixTemperatureDependent(const Step &step) const;
  
  	std::vector<size_t> solutionsIndicesToStore() const { return { 0 }; }
  	std::vector<std::pair<ElementType, Property> > propertiesToStore() const { return {}; }
  
  	void prepare();
  
  	void preprocessData(const Step &step);
  	void processElement(const Step &step, Matrices matrices, const Element *e, DenseMatrix &Ke, DenseMatrix &Me, DenseMatrix &Re, DenseMatrix &fe, const std::vector<Solution*> &solution) const;
  	void processFace(const Step &step, Matrices matrices, const Element *e, DenseMatrix &Ke, DenseMatrix &Me, DenseMatrix &Re, DenseMatrix &fe, const std::vector<Solution*> &solution) const;
  	void processEdge(const Step &step, Matrices matrices, const Element *e, DenseMatrix &Ke, DenseMatrix &Me, DenseMatrix &Re, DenseMatrix &fe, const std::vector<Solution*> &solution) const;
  	void processNode(const Step &step, Matrices matrices, const Element *e, DenseMatrix &Ke, DenseMatrix &Me, DenseMatrix &Re, DenseMatrix &fe, const std::vector<Solution*> &solution) const;
  	void processSolution(const Step &step);
  
  	void analyticRegularization(size_t domain);
  
  	const std::vector<Property>& pointDOFs() const
  	{
  		static std::vector<Property> pointDOFs = { Property::MOMENTUM_X, Property::MOMENTUM_Y };
  		return pointDOFs;
  	}
  	const std::vector<Property>& midPointDOFs() const
  	{
  		static std::vector<Property> midPointDOFs = { Property::MOMENTUM_X, Property::MOMENTUM_Y };
  		return midPointDOFs;
  	}
  	const std::vector<Property>& edgeDOFs() const
  	{
  		static std::vector<Property> edgeDOFs = { };
  		return edgeDOFs;
  	}
  	const std::vector<Property>& faceDOFs() const
  	{
  		static std::vector<Property> faceDOFs = { };
  		return faceDOFs;
  	}
  	const std::vector<Property>& elementDOFs() const
  	{
  		static std::vector<Property> elementDOFs = { };
  		return elementDOFs;
  	}
  
  protected:
  	const ShallowWater2DConfiguration &_configuration;
  };
  
  }
  
  
  
  #endif /* SRC_ASSEMBLER_PHYSICS_SHALLOWWATER2D_H_ */
  