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


#ifndef _ELASTODYNAMIC_MULTLAG_SOLVER_H
#define	_ELASTODYNAMIC_MULTLAG_SOLVER_H

#include "genTerm.h"
#include "elastodynamicMultLagDomain.h"
#include "genFSpace.h"
#include "elastodynamicSolver.h"
#include "InterfaceElastoDomain.h"
#include "lectureData.h"
#include "genDataLS.h"

class ElastodynamicMultLagSolver  : public ElastodynamicSolver{
protected :
  // function spaces
  std::vector<genFSpace<genTensor1<std::complex<double> > >::Handle> FSpacesDisp; // functional space
  std::vector<genTerm<genTensor2<std::complex<double> >,1>::Handle> EpsilonSpacesDisp;
  std::vector<genFSpace<genTensor1<std::complex<double> > >::Handle> FSpacesMultLag;
  // supports
  std::vector<ElastodynamicMultLagDomain*> ElastodynamicMultLagDomains;
  std::vector<InterfaceElastoDomain*> InterfaceElastoDomains;
  std::vector<genTerm<genTensor1<double>,0 >::Handle> FuncANA;
  lectureData* fichier;
  genDataLS* DataLS;
  
  
public :
  ElastodynamicMultLagSolver() : ElastodynamicSolver(), fichier(0) {
    DataLS = new genDataLS();
    Data = DataLS;
  }
  virtual ~ElastodynamicMultLagSolver();
  //read data file
  virtual void readInputFile(const std::string &fileName);
  // builds local supports
  virtual void CheckProperties();
  // build the problem function spaces

  virtual void BuildFunctionSpaces();
  // assemble the problem
  virtual void AssembleRHS();
  virtual void AssembleLHS();
  virtual void CreateFunctionSpaces();
  // export matrix K.txt in file
  
  void error_norm_L2();

  
  virtual PView *buildViewDispDiff_x(const std::string &postFileName);
  virtual PView *buildViewDispInc_x(const std::string &postFileName);
  virtual PView *buildViewDispAna_x(const std::string &postFileName);
  virtual PView *buildViewDispNum_x(const std::string &postFileName);
};

#endif //_ELASTODYNAMIC_MULTLAG_SOLVER_H