// gen_LevelSet - An automatic generator of meshes from level-sets
// Copyright (C) 2012-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org> or <duboeuf@outlook.com>.


#include "levelSetSolver.h"


LevelSetSolver::~LevelSetSolver()
{
}

void LevelSetSolver::CheckProperties()
{
  for (int i=0; i<DataLS->LSs.size(); ++i)
  {
    LevelSetDomain* field = new LevelSetDomain(*(DataLS->LSs[i]));
//     DiscreteLevelSetDomain* field = new DiscreteLevelSetDomain(*(DataLS->LSs[i]));
    LSDomains.push_back(field);
  }
}

void LevelSetSolver::readInputFile ( const std::string &fileName )
{
  modelname = fileName;
  std::cout<<"model name : " << modelname << std::endl ;
  DataLS->readInputFile(fileName);
  CheckProperties();
  printf("--> %d LSs \n", (int)LSDomains.size());
}

void LevelSetSolver::solve()
{
  // write .ls file
  writeLSs(DataLS->LSs, DataLS->GModelBaseName);

  // cut current GModel and write GModelBaseName_cut.msh file
  GModel* cutModel;
  cutModel = genLS.process(DataLS->Model, LSDomains, DataLS->GModelBaseName);

  // define cutModel as current model
  if (cutModel!=NULL);
  {
    GModel::setCurrent(cutModel);
    delete DataLS->Model;
    DataLS->Model = cutModel;
    DataLS->GModelBaseName = DataLS->GModelBaseName + "_cut";
  }
}
