// elastic_genTerm_Cutmesh_Xfem - A linear solver for elastic problems using X-FEM
// Copyright (C) 2010-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information and contributions.
// Please report all bugs and problems to <bechet@cadxfem.org>.

#ifndef _ELASTIC_CUTMESH_XFEM_SOLVER_H_
#define _ELASTIC_CUTMESH_XFEM_SOLVER_H_

#include "elasticSolver.h"
#include "elasticXfemDomain.h"


class ElasticCutmeshXfemSolver : public ElasticSolver
{
protected :
  // function spaces
//  genFSpace<genTensor0<double> >::Handle FSpaceLagMult;  // Gaetan method
  std::vector<genFSpace<genTensor1<double> >::Handle> FSpaceStableLagMult;  // E. Bechet Method

  // supports for stableLagMult
  std::vector<StableLagrangeMultiplierDomain*> StableLagMultDomains;

public :
  ElasticCutmeshXfemSolver() : ElasticSolver() {}
  virtual ~ElasticCutmeshXfemSolver();
  //read data file
  virtual void readInputFile(const std::string &fileName);
  // builds local supports
  virtual void CheckProperties();
  // build the problem function spaces
  virtual void CreateFunctionSpaces();
  virtual void BuildFunctionSpaces();
  // assemble the problem
  virtual void AssembleRHS();
  virtual void AssembleLHS();

  // assemble the residual
  virtual void AssembleResidual();
//  virtual PView* buildStableLagrangeMultiplierView(const std::string &postFileName);
};


#endif // _ELASTIC_CUTMESH_XFEM_SOLVER_H_
