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.size();
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.size();
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.size(); ++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.size();
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);
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
DiffusionFactory & GetDiffusionFactory()
The above copyright notice and this permission notice shall be included.
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.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
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.