7#ifndef __DtNmap2D_visc__hh__
8#define __DtNmap2D_visc__hh__
18#include "function/vector.hh"
19#include "operator/sparseMatrix.hh"
25 const Cmplx cmplx_i(0,1);
34 dimX, dimY, dimZ, dimdiv
52#if __cplusplus >= 201103L
72#if __cplusplus >= 201103L
79 return (-cmplx_i*
ell);
84 if (n*
c0*M_PI<omega*L)
85 return cmplx_i*
sqrt(sqr(omega/
c0)-sqr(n*M_PI/L));
86 return sqrt(sqr(n*M_PI/L)-sqr(omega/
c0));
103 virtual std::ostream&
info(std::ostream&
os)
const;
104 virtual Cmplx get_lambda()
const;
124 const Real omega=1.0,
133 virtual std::ostream&
info(std::ostream&
os)
const;
134 virtual Cmplx get_lambda()
const;
155 const Real omega=1.0,
164 virtual std::ostream&
info(std::ostream&
os)
const;
165 virtual Cmplx get_lambda()
const;
185 const Real omega=1.0,
194 virtual std::ostream&
info(std::ostream&
os)
const;
195 virtual Cmplx get_lambda()
const;
213 template<
class F,
class G>
225 if (n == 0)
factor = 1.0 / L;
232 template<
class F,
class G>
250 template<
class F,
class G>
251 void addExactDtN_X_2Dcossin_wp(
Matrix<Cmplx>&
dest,
const SpaceOnCells<Real>& spc,
273 template<
class F,
class G>
274 void addExactDtN_X_2Dsincos_wp(
Matrix<Cmplx>&
dest,
const SpaceOnCells<Real>& spc,
303 for (
int m=0; m<n;m ++)
310 for (
int l=0; l<m; l++)
311 for (
int j=0; j<m; j++)
320 for(
int i=l; i<m; i++)
327 Vector<Cmplx>
Rhs(m);
328 Vector<Cmplx>
Sol(m);
332 for (
int l=0; l<m; l++)
338 for (
int j=l; j<m; j++)
352 std::unique_ptr<concepts::Operator<Cmplx> > solver(
nullptr);
355 for (
int l=0; l<m; l++)
365 for (
int l=0; l<m; l++)
374 for(
int l=0; l<=m; l++)
384 for (
int m=0; m<n;m ++)
391 for (
int l=0; l<m; l++)
392 for (
int j=0; j<m; j++)
401 for(
int i=l; i<m; i++)
408 Vector<Cmplx>
Rhs(m);
409 Vector<Cmplx>
Sol(m);
413 for (
int l=0; l<m; l++)
419 for (
int j=l; j<m; j++)
433 std::unique_ptr<concepts::Operator<Cmplx> > solver(
nullptr);
436 for (
int l=0; l<m; l++)
446 for (
int l=0; l<m; l++)
455 for(
int l=0; l<=m; l++)
466 for (
int m=0; m<n;m ++)
473 for (
int l=0; l<m; l++)
474 for (
int j=0; j<m; j++)
483 for(
int i=l; i<m; i++)
490 Vector<Cmplx>
Rhs(m);
491 Vector<Cmplx>
Sol(m);
495 for (
int l=0; l<m; l++)
501 for (
int j=l; j<m; j++)
515 std::unique_ptr<concepts::Operator<Cmplx> > solver(
nullptr);
518 for (
int l=0; l<m; l++)
528 for (
int l=0; l<m; l++)
537 for(
int l=0; l<=m; l++)
548 for (
int m=0; m<n;m ++)
555 for (
int l=0; l<m; l++)
556 for (
int j=0; j<m; j++)
565 for(
int i=l; i<m; i++)
572 Vector<Cmplx>
Rhs(m);
573 Vector<Cmplx>
Sol(m);
577 for (
int l=0; l<m; l++)
583 for (
int j=l; j<m; j++)
597 std::unique_ptr<concepts::Operator<Cmplx> > solver(
nullptr);
600 for (
int l=0; l<m; l++)
610 for (
int l=0; l<m; l++)
619 for(
int l=0; l<=m; l++)
627 const int n =
VBasis.size();
630 for (
int m=0; m<n;m ++)
637 for (
int l=0; l<m; l++)
638 for (
int j=0; j<m; j++)
641 for(
int i=l; i<m; i++)
650 for (
int l=0; l<m; l++)
653 for (
int j=l; j<m; j++)
667 std::unique_ptr<concepts::Operator<F> > solver(
nullptr);
670 for (
int l=0; l<m; l++)
678 for (
int l=0; l<m; l++)
683 for(
int l=0; l<=m; l++)
691 const int n =
VBasis.size();
692 const int dim =
VBasis[0].size();
695 for (
int m=0; m<n;m ++)
702 for (
int l=0; l<m; l++)
703 for (
int j=0; j<m; j++)
706 for(
int d=0; d<dim; d++)
708 for(
int i=l; i<m; i++)
717 for (
int l=0; l<m; l++)
720 for(
int d=0; d<dim; d++)
722 for (
int j=l; j<m; j++)
736 std::unique_ptr<concepts::Operator<F> > solver(
nullptr);
739 for (
int l=0; l<m; l++)
747 for (
int d=1; d<dim; d++)
749 for (
int l=0; l<m; l++)
750 for (
int d=0; d<dim; d++)
755 for(
int l=0; l<=m; l++)
773 for (
int idx = 0; idx <
NDtN ; idx++)
777#if __cplusplus >= 201103L
virtual Wsym_x< dim > * clone() const
Virtual copy constructor.
Wsym_x(const int n=1, const Real omega=1.0, const Real c0=1.0, const Real rho0=1.0, const Real nu=0.1, const Real L=1.0)
Constructor.
virtual Cmplx operator()(const Real p, const Real t=0.0) const
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual Wsym_y< dim > * clone() const
Virtual copy constructor.
virtual Cmplx operator()(const Real p, const Real t=0.0) const
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
Wsym_y(const int n=1, const Real omega=1.0, const Real c0=1.0, const Real rho0=1.0, const Real nu=0.1, const Real L=1.0)
Constructor.
Wunsym_x(const int n=1, const Real omega=1.0, const Real c0=1.0, const Real rho0=1.0, const Real nu=0.1, const Real L=1.0)
Constructor.
virtual Cmplx operator()(const Real p, const Real t=0.0) const
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
virtual Wunsym_x< dim > * clone() const
Virtual copy constructor.
Wunsym_y(const int n=1, const Real omega=1.0, const Real c0=1.0, const Real rho0=1.0, const Real nu=0.1, const Real L=1.0)
Constructor.
virtual Cmplx operator()(const Real p, const Real t=0.0) const
virtual Wunsym_y< dim > * clone() const
Virtual copy constructor.
virtual std::ostream & info(std::ostream &os) const
Returns information in an output stream.
#define conceptsAssert(cond, exc)
Set< F > makeSet(uint n, const F &first,...)
std::complex< Real > Cmplx
Type for a complex number. It also depends on the setting of Real.