39 #include <boost/core/ignore_unused.hpp>    47         std::string Diffusion3DHomogeneous1D::type[] = {
    49                 "LDG3DHomogeneous1D",       Diffusion3DHomogeneous1D::create),
    51                 "LFRDG3DHomogeneous1D",     Diffusion3DHomogeneous1D::create),
    53                 "LFRSD3DHomogeneous1D",     Diffusion3DHomogeneous1D::create),
    55                 "LFRHU3DHomogeneous1D",     Diffusion3DHomogeneous1D::create),
    57                 "LFRcmin3DHomogeneous1D",   Diffusion3DHomogeneous1D::create),
    59                 "LFRcinf3DHomogeneous1D",   Diffusion3DHomogeneous1D::create),
    61                 "LDGNS3DHomogeneous1D",     Diffusion3DHomogeneous1D::create),
    63                 "LFRDGNS3DHomogeneous1D",   Diffusion3DHomogeneous1D::create),
    65                 "LFRSDNS3DHomogeneous1D",   Diffusion3DHomogeneous1D::create),
    67                 "LFRHUNS3DHomogeneous1D",   Diffusion3DHomogeneous1D::create),
    69                 "LFRcminNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create),
    71                 "LFRcinfNS3DHomogeneous1D", Diffusion3DHomogeneous1D::create)
    79         Diffusion3DHomogeneous1D::Diffusion3DHomogeneous1D(std::string diffType)
    83             m_diffType = diffType.substr(0, diffType.length()-15);
    94         void Diffusion3DHomogeneous1D::v_InitObject(
    98             int nConvectiveFields = pFields.num_elements();
   104             for (
int i = 0; i < nConvectiveFields; ++i)
   106                 pFields_plane0[i] = pFields[i]->GetPlane(0);
   108             m_planeDiff->InitObject(pSession, pFields_plane0);
   110             m_numPoints      = pFields[0]->GetTotPoints();
   111             m_planes         = pFields[0]->GetZIDs();
   112             m_numPlanes      = m_planes.num_elements();
   113             m_numPointsPlane = m_numPoints/m_numPlanes;
   114             m_homoLen        = pFields[0]->GetHomoLen();
   115             m_trans          = pFields[0]->GetTransposition();
   118             if (m_diffType == 
"LDG")
   121                 m_planeDiff->SetFluxVector(m_fluxVector);
   123             else if (m_diffType == 
"LDGNS")
   126                 m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
   128                 m_planeDiff->SetFluxPenaltyNS(m_fluxPenaltyNS);
   130             else if (m_diffType == 
"LFRDGNS" ||
   131                      m_diffType == 
"LFRHUNS" ||
   132                      m_diffType == 
"LFRSDNS" )
   135                 m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
   144                                                         (nConvectiveFields - 1);
   155             for (
int i = 0; i < m_numPlanes; ++i)
   157                 m_planePos[i] = i * m_numPointsPlane;
   167                 for (
int i = 0; i < nConvectiveFields; ++i)
   172                 for (
int i = 0; i < m_numPlanes; ++i)
   176                     for (
int j = 0; j < nConvectiveFields; ++j)
   180                             m_homoDerivStore[j] + m_planePos[i]);
   190         void Diffusion3DHomogeneous1D::v_Diffuse(
   191             const std::size_t                                 nConvectiveFields,
   198             boost::ignore_unused(pFwd, pBwd);
   202             const int nPointsTot = fields[0]->GetNpoints();
   209                 for (
int i = 0; i < nConvectiveFields - 1; ++i)
   211                     fields[0]->PhysDeriv(2, inarray[i], m_homoDerivStore[i]);
   217             for (
int i = 0; i < m_numPlanes; ++i)
   221                 for (
int j = 0; j < inarray.num_elements(); ++j)
   224                         m_numPointsPlane, tmp2 = inarray [j] + m_planePos[i]);
   227                 for (
int j = 0; j < nConvectiveFields; ++j)
   229                     m_fieldsPlane  [j] = fields[j]->GetPlane(i);
   231                         m_numPointsPlane, tmp2 = outarray[j] + m_planePos[i]);
   237                     m_planeDiff->SetHomoDerivs(m_homoDerivPlane[i]);
   241                 if (m_diffType == 
"LDGNS")
   244                     std::size_t nTracePts = m_fieldsPlane[0]->GetTrace()
   246                     std::size_t nScalar = m_inarrayPlane.num_elements();
   250                         for(std::size_t k = 0; k < nScalar; ++k)
   254                             m_fieldsPlane[k]->GetFwdBwdTracePhys(
   255                                 m_inarrayPlane[k], Fwd[k], Bwd[k]);
   259                     m_planeDiff->Diffuse(nConvectiveFields,
   268                     m_planeDiff->Diffuse(nConvectiveFields,
   277                         &viscTensor = m_planeDiff->GetFluxTensor();
   280                     for (
int j = 0; j < nConvectiveFields - 1; ++j)
   283                                      viscTensor[2][j+1], 1,
   284                                      tmp2 = viscHComp[j] + m_planePos[i], 1);
   293                 for (
int j = 0; j < nConvectiveFields - 1; ++j)
   295                     fields[j+1]->PhysDeriv(2, viscHComp[j], tmp);
   302                 for (
int j = 0; j < nConvectiveFields; ++j)
   304                     fields[j]->HomogeneousFwdTrans(inarray[j], tmp);
   306                     for (
int i = 0; i < m_numPlanes; ++i)
   308                         beta  = 2*M_PI*m_trans->GetK(i)/m_homoLen;
   313                                     &tmp[0] + i*m_numPointsPlane, 1,
   314                                     &tmp[0] + i*m_numPointsPlane, 1);
   317                     fields[0]->HomogeneousBwdTrans(tmp, tmp);
 
DiffusionFactory & GetDiffusionFactory()
 
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey. 
 
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y. 
 
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y. 
 
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory. 
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
 
std::shared_ptr< SessionReader > SessionReaderSharedPtr
 
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.