// Scalar_Helmholtz_xfem - A linear solver for the scalar helmholtz equation using X-FEM
// Copyright (C) 2012-2026 Eric Bechet
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org>.

#ifndef _HELMHOLTZ_LEVELSET_H_
#define _HELMHOLTZ_LEVELSET_H_

#include <complex>
#include "helmholtz_xfem_domain.h"
#include "levelSetDomain.h"
#include "bimaterialXfemDomain.h"
#include "scalar_helmholtz.h"

class HelmholtzLevelSetSolver : public ScalarHelmholtzSolver
{
protected :
  std::vector<genTerm<genTensor0<double >,0>::Handle> Field_ANA;
  std::vector<genTerm<genTensor0<double >,0>::Handle> Field_DIFF;
  genDataHLS* DataHLS;
  std::vector<HelmholtzLevelsetDomain*> HLSdomains;
  std::vector<LevelSetDomain*> LSDomains;
  std::vector<BimaterialDomain*> BiDomains;

public :
  HelmholtzLevelSetSolver() : ScalarHelmholtzSolver() {DataHLS = new genDataHLS; Data = DataHLS;}
  virtual ~HelmholtzLevelSetSolver();
  //read data file
  virtual void readInputFile(const std::string &fileName);
  // builds local supports
  virtual void CheckProperties();
  // build the problem function spaces
  virtual void CreateFunctionSpace();

 

  void error();
  
  virtual PView *buildViewAna(const std::string &postFileName);
  virtual PView *buildViewDiff(const std::string &postFileName);
  virtual PView *buildViewSol(const std::string &postFileName);
 /*
  virtual PView* buildViewIm(const std::string &postFileName);
  virtual PView* buildViewArg(const std::string &postFileName);
  virtual PView* buildViewAbs(const std::string &postFileName);
  */
};

#endif //_HELMHOTZ_LEVELSET_H_
