Nektar++
Diffusion.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: Diffusion.h
4 //
5 // For more information, please see: http://www.nektar.info
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description: Abstract base class for diffusion.
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
35 #ifndef NEKTAR_SOLVERUTILS_DIFFUSION
36 #define NEKTAR_SOLVERUTILS_DIFFUSION
37 
38 #include <functional>
39 #include <string>
40 
41 #include <boost/core/ignore_unused.hpp>
42 
46 #include <MultiRegions/ExpList.h>
49 
50 namespace Nektar
51 {
52 namespace SolverUtils
53 {
54 typedef std::function<void(const Array<OneD, Array<OneD, NekDouble>> &,
55  const TensorOfArray3D<NekDouble> &,
56  TensorOfArray3D<NekDouble> &)>
58 
59 typedef std::function<void(const Array<OneD, Array<OneD, NekDouble>> &,
63 
64 typedef std::function<void(const Array<OneD, Array<OneD, NekDouble>> &,
68 
69 /**
70  * Parameter list meaning:
71  * 1st: field conservative variables
72  * 2th: Devrivatives of field conservative varialbes
73  * 3rd: the current time for time-dependent boundary
74  * 4th: Fwd of field conservative variables optional
75  * 5th: Fwd of Devrivatives(2nd) optional
76  *
77  * a null pointer need to be passed for optional parameters
78  */
79 typedef std::function<void(
80  const Array<OneD, const Array<OneD, NekDouble>> &,
82  const Array<OneD, const Array<OneD, NekDouble>> &,
83  const Array<OneD, const Array<OneD, Array<OneD, NekDouble>>> &)>
85 
86 /**
87  * Parameter list meaning:
88  * 1st: nvariables
89  * 2nd: nspaceDimension
90  * 3rd: field conservative variables
91  * 4th: Devrivatives of field conservative varialbes
92  * 5th: nonzero flux index array, optional
93  * 6th: normal vectors optional
94  *
95  * a null pointer need to be passed for optional parameters
96  */
97 typedef std::function<void(
98  const int, const Array<OneD, Array<OneD, NekDouble>> &,
102 
103 /**
104  * Parameter list meaning:
105  * 1st: nvariables
106  * 2nd: nspaceDimension
107  * 3rd: trace conservative variables for Diffusion Flux Jacobian
108  * 4th: trace conservative variables( usually the jump of trace value)
109  * 5th: trace symmetric flux
110  * 6th: nonzero flux index array, optional
111  *
112  * a null pointer need to be passed for optional parameters
113  */
114 typedef std::function<void(
115  const int, const Array<OneD, Array<OneD, NekDouble>> &,
119 
120 /**
121  * Parameter list meaning:
122  * 1rd: trace conservative variables
123  */
124 typedef std::function<void(Array<OneD, Array<OneD, NekDouble>> &)>
126 
128 {
129 public:
130  /// Params for Ducros sensor
134 
136 
140 
142  const std::size_t nConvectiveFields,
144  const Array<OneD, Array<OneD, NekDouble>> &inarray,
145  Array<OneD, Array<OneD, NekDouble>> &outarray,
146  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
148  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
150 
152  const std::size_t nConvectiveFields,
154  const Array<OneD, Array<OneD, NekDouble>> &inarray,
155  Array<OneD, Array<OneD, NekDouble>> &outarray,
156  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
158  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
160 
162  const std::size_t nConvectiveFields,
164  const Array<OneD, Array<OneD, NekDouble>> &inarray,
165  Array<OneD, Array<OneD, NekDouble>> &outarray, NekDouble time,
166  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
168  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
170 
172  const std::size_t nConvectiveFields,
174  const Array<OneD, Array<OneD, NekDouble>> &inarray,
175  Array<OneD, Array<OneD, NekDouble>> &outarray,
176  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
177  const Array<OneD, Array<OneD, NekDouble>> &pBwd,
178  TensorOfArray3D<NekDouble> &qfield, Array<OneD, int> &nonZeroIndex)
179  {
180  v_DiffuseCoeffs(nConvectiveFields, fields, inarray, outarray, pFwd,
181  pBwd, qfield, nonZeroIndex);
182  }
183 
185  const std::size_t nConvectiveFields,
187  const Array<OneD, Array<OneD, NekDouble>> &inarray,
188  Array<OneD, Array<OneD, NekDouble>> &outarray, NekDouble time,
189  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
191  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
193 
194  // Diffusion Calculate the physical derivatives
197  const Array<OneD, Array<OneD, NekDouble>> &inarray,
199  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
201  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
203 
204  /// Diffusion Volume FLux
205 
208  const Array<OneD, Array<OneD, NekDouble>> &inarray,
210  TensorOfArray3D<NekDouble> &VolumeFlux,
211  Array<OneD, int> &nonZeroIndex = NullInt1DArray)
212  {
213  v_DiffuseVolumeFlux(fields, inarray, qfields, VolumeFlux, nonZeroIndex);
214  }
215 
216  /// Diffusion term Trace Flux
219  const Array<OneD, Array<OneD, NekDouble>> &inarray,
221  TensorOfArray3D<NekDouble> &VolumeFlux,
222  Array<OneD, Array<OneD, NekDouble>> &TraceFlux,
223  const Array<OneD, Array<OneD, NekDouble>> &pFwd =
225  const Array<OneD, Array<OneD, NekDouble>> &pBwd =
227  Array<OneD, int> &nonZeroIndex = NullInt1DArray)
228  {
229  v_DiffuseTraceFlux(fields, inarray, qfields, VolumeFlux, TraceFlux,
230  pFwd, pBwd, nonZeroIndex);
231  }
232 
234  const int nConvectiveFields,
236  const Array<OneD, Array<OneD, NekDouble>> &inarray,
237  const TensorOfArray3D<NekDouble> &qfield,
238  const TensorOfArray3D<NekDouble> &VolumeFlux,
239  TensorOfArray3D<NekDouble> &SymmFlux,
240  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
241  const Array<OneD, Array<OneD, NekDouble>> &pBwd,
242  Array<OneD, int> &nonZeroIndex,
243  Array<OneD, Array<OneD, NekDouble>> &solution_Aver =
245  Array<OneD, Array<OneD, NekDouble>> &solution_jump =
247  {
248  v_DiffuseTraceSymmFlux(nConvectiveFields, fields, inarray, qfield,
249  VolumeFlux, SymmFlux, pFwd, pBwd, nonZeroIndex,
250  solution_Aver, solution_jump);
251  }
252 
253  /// Add symmetric flux to field in coeff space
255  const std::size_t nConvectiveFields,
257  const Array<OneD, Array<OneD, NekDouble>> &inarray,
259  TensorOfArray3D<NekDouble> &VolumeFlux,
260  Array<OneD, Array<OneD, NekDouble>> &outarray,
261  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
262  const Array<OneD, Array<OneD, NekDouble>> &pBwd)
263  {
264  v_AddDiffusionSymmFluxToCoeff(nConvectiveFields, fields, inarray,
265  qfield, VolumeFlux, outarray, pFwd, pBwd);
266  }
267 
268  /// Add symmetric flux to field in coeff physical space
270  const std::size_t nConvectiveFields,
272  const Array<OneD, Array<OneD, NekDouble>> &inarray,
274  TensorOfArray3D<NekDouble> &VolumeFlux,
275  Array<OneD, Array<OneD, NekDouble>> &outarray,
276  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
277  const Array<OneD, Array<OneD, NekDouble>> &pBwd)
278  {
279  v_AddDiffusionSymmFluxToPhys(nConvectiveFields, fields, inarray, qfield,
280  VolumeFlux, outarray, pFwd, pBwd);
281  }
282 
284  const int nConvectiveFields, const int nDim, const int nPts,
285  const int nTracePts,
287  const Array<OneD, const int> &nonZeroIndex,
290  Array<OneD, Array<OneD, NekDouble>> &outarray);
291 
293 
294  template <typename FuncPointerT, typename ObjectPointerT>
295  void SetFluxVector(FuncPointerT func, ObjectPointerT obj)
296  {
297  m_fluxVector = std::bind(func, obj, std::placeholders::_1,
298  std::placeholders::_2, std::placeholders::_3);
299  }
300 
302  {
303  m_fluxVector = fluxVector;
304  }
305 
306  template <typename FuncPointerT, typename ObjectPointerT>
307  void SetFluxVectorNS(FuncPointerT func, ObjectPointerT obj)
308  {
310  std::bind(func, obj, std::placeholders::_1, std::placeholders::_2,
311  std::placeholders::_3);
312  }
313 
315  {
316  m_fluxVectorNS = fluxVector;
317  }
318 
319  template <typename FuncPointerT, typename ObjectPointerT>
320  void SetFluxPenaltyNS(FuncPointerT func, ObjectPointerT obj)
321  {
323  std::bind(func, obj, std::placeholders::_1, std::placeholders::_2,
324  std::placeholders::_3);
325  }
326 
328  {
329  m_fluxPenaltyNS = flux;
330  }
331 
332  template <typename FuncPointerT, typename ObjectPointerT>
333  void SetDiffusionFluxCons(FuncPointerT func, ObjectPointerT obj)
334  {
336  std::bind(func, obj, std::placeholders::_1, std::placeholders::_2,
337  std::placeholders::_3, std::placeholders::_4,
338  std::placeholders::_5, std::placeholders::_6);
339  }
340 
342  {
344  }
345 
346  template <typename FuncPointerT, typename ObjectPointerT>
347  void SetDiffusionFluxConsTrace(FuncPointerT func, ObjectPointerT obj)
348  {
350  std::bind(func, obj, std::placeholders::_1, std::placeholders::_2,
351  std::placeholders::_3, std::placeholders::_4,
352  std::placeholders::_5, std::placeholders::_6);
353  }
354 
356  {
358  }
359 
360  template <typename FuncPointerT, typename ObjectPointerT>
361  void SetSpecialBndTreat(FuncPointerT func, ObjectPointerT obj)
362  {
363  m_SpecialBndTreat = std::bind(func, obj, std::placeholders::_1);
364  }
365 
366  template <typename FuncPointerT, typename ObjectPointerT>
367  void SetDiffusionSymmFluxCons(FuncPointerT func, ObjectPointerT obj)
368  {
370  std::bind(func, obj, std::placeholders::_1, std::placeholders::_2,
371  std::placeholders::_3, std::placeholders::_4,
372  std::placeholders::_5, std::placeholders::_6);
373  }
374 
376  {
377  v_SetHomoDerivs(deriv);
378  }
379 
381  {
382  return v_GetFluxTensor();
383  }
384 
385  /// Get the average and jump value of conservative variables on trace
387  const std::size_t nConvectiveFields, const size_t npnts,
388  const Array<OneD, const Array<OneD, NekDouble>> &vFwd,
389  const Array<OneD, const Array<OneD, NekDouble>> &vBwd,
392  {
393  v_ConsVarAveJump(nConvectiveFields, npnts, vFwd, vBwd, aver, jump);
394  }
395 
396  /// Get trace normal
399  {
400  return v_GetTraceNormal();
401  }
402 
403 protected:
411 
413 
417  {
418  boost::ignore_unused(pSession, pFields);
419  };
420 
421  SOLVER_UTILS_EXPORT virtual void v_Diffuse(
422  const std::size_t nConvectiveFields,
424  const Array<OneD, Array<OneD, NekDouble>> &inarray,
425  Array<OneD, Array<OneD, NekDouble>> &outarray,
426  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
427  const Array<OneD, Array<OneD, NekDouble>> &pBwd);
428 
430  const std::size_t nConvectiveFields,
432  const Array<OneD, Array<OneD, NekDouble>> &inarray,
433  Array<OneD, Array<OneD, NekDouble>> &outarray,
434  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
435  const Array<OneD, Array<OneD, NekDouble>> &pBwd);
436 
438  const std::size_t nConvectiveFields,
440  const Array<OneD, Array<OneD, NekDouble>> &inarray,
441  Array<OneD, Array<OneD, NekDouble>> &outarray,
442  const Array<OneD, Array<OneD, NekDouble>> &vFwd,
443  const Array<OneD, Array<OneD, NekDouble>> &vBwd,
444  TensorOfArray3D<NekDouble> &qfield, Array<OneD, int> &nonZeroIndex);
445 
447  const std::size_t nConvectiveFields, const size_t npnts,
448  const Array<OneD, const Array<OneD, NekDouble>> &vFwd,
449  const Array<OneD, const Array<OneD, NekDouble>> &vBwd,
452 
453  /// Diffusion Flux, calculate the physical derivatives
456  const Array<OneD, Array<OneD, NekDouble>> &inarray,
458  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
459  const Array<OneD, Array<OneD, NekDouble>> &pBwd);
460 
461  /// Diffusion Volume Flux
464  const Array<OneD, Array<OneD, NekDouble>> &inarray,
466  TensorOfArray3D<NekDouble> &VolumeFlux, Array<OneD, int> &nonZeroIndex);
467 
468  /// Diffusion term Trace Flux
471  const Array<OneD, Array<OneD, NekDouble>> &inarray,
473  TensorOfArray3D<NekDouble> &VolumeFlux,
474  Array<OneD, Array<OneD, NekDouble>> &TraceFlux,
475  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
476  const Array<OneD, Array<OneD, NekDouble>> &pBwd,
477  Array<OneD, int> &nonZeroIndex);
478 
480  const int nConvectiveFields,
482  const Array<OneD, Array<OneD, NekDouble>> &inarray,
483  const TensorOfArray3D<NekDouble> &qfield,
484  const TensorOfArray3D<NekDouble> &VolumeFlux,
485  TensorOfArray3D<NekDouble> &SymmFlux,
486  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
487  const Array<OneD, Array<OneD, NekDouble>> &pBwd,
488  Array<OneD, int> &nonZeroIndex,
489  Array<OneD, Array<OneD, NekDouble>> &solution_Aver,
490  Array<OneD, Array<OneD, NekDouble>> &solution_jump)
491  {
492  boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
493  VolumeFlux, SymmFlux, pFwd, pBwd, nonZeroIndex,
494  solution_Aver, solution_jump);
495  ASSERTL0(false, "Not defined function v_DiffuseTraceSymmFlux.");
496  }
497 
499  const std::size_t nConvectiveFields,
501  const Array<OneD, Array<OneD, NekDouble>> &inarray,
503  TensorOfArray3D<NekDouble> &VolumeFlux,
504  Array<OneD, Array<OneD, NekDouble>> &outarray,
505  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
506  const Array<OneD, Array<OneD, NekDouble>> &pBwd)
507  {
508  boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
509  VolumeFlux, outarray, pFwd, pBwd);
510  }
512  const std::size_t nConvectiveFields,
514  const Array<OneD, Array<OneD, NekDouble>> &inarray,
516  TensorOfArray3D<NekDouble> &VolumeFlux,
517  Array<OneD, Array<OneD, NekDouble>> &outarray,
518  const Array<OneD, Array<OneD, NekDouble>> &pFwd,
519  const Array<OneD, Array<OneD, NekDouble>> &pBwd)
520  {
521  boost::ignore_unused(nConvectiveFields, fields, inarray, qfield,
522  VolumeFlux, outarray, pFwd, pBwd);
523  }
524 
526  {
527  boost::ignore_unused(deriv);
528  }
529 
531  {
532  static TensorOfArray3D<NekDouble> tmp;
533  return tmp;
534  }
535 
537  &v_GetTraceNormal();
538 
539  /// Compute primary derivatives
540  SOLVER_UTILS_EXPORT virtual void v_GetPrimVar(
542  const Array<OneD, Array<OneD, NekDouble>> &inarray,
543  Array<OneD, Array<OneD, NekDouble>> &primVar);
544 
545  /// Compute divergence and curl squared
548  const TensorOfArray3D<NekDouble> &pVarDer);
549 };
550 
551 /// A shared pointer to an EquationSystem object
552 typedef std::shared_ptr<SolverUtils::Diffusion> DiffusionSharedPtr;
553 
554 /// Datatype of the NekFactory used to instantiate classes derived
555 /// from the Diffusion class.
559 } // namespace SolverUtils
560 } // namespace Nektar
561 
562 #endif
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:215
#define SOLVER_UTILS_EXPORT
Provides a generic Factory class.
Definition: NekFactory.hpp:105
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToPhys(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Add symmetric flux to field in coeff physical space.
Definition: Diffusion.h:269
Array< OneD, NekDouble > m_divVelSquare
Definition: Diffusion.h:132
virtual SOLVER_UTILS_EXPORT void v_ConsVarAveJump(const std::size_t nConvectiveFields, const size_t npnts, const Array< OneD, const Array< OneD, NekDouble >> &vFwd, const Array< OneD, const Array< OneD, NekDouble >> &vBwd, Array< OneD, Array< OneD, NekDouble >> &aver, Array< OneD, Array< OneD, NekDouble >> &jump)
Definition: Diffusion.cpp:210
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
Definition: Diffusion.h:314
virtual SOLVER_UTILS_EXPORT void v_DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Diffusion Flux, calculate the physical derivatives.
Definition: Diffusion.cpp:221
void SetSpecialBndTreat(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:361
SOLVER_UTILS_EXPORT void DiffuseVolumeFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
Diffusion Volume FLux.
Definition: Diffusion.h:206
SOLVER_UTILS_EXPORT void Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
Definition: Diffusion.cpp:59
SOLVER_UTILS_EXPORT void AddDiffusionSymmFluxToCoeff(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Add symmetric flux to field in coeff space.
Definition: Diffusion.h:254
void SetFluxPenaltyNS(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:320
DiffusionFluxCons m_FunctorDiffusionfluxConsTrace
Definition: Diffusion.h:408
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceSymmFlux(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver, Array< OneD, Array< OneD, NekDouble >> &solution_jump)
Definition: Diffusion.h:479
SOLVER_UTILS_EXPORT void DiffuseTraceSymmFlux(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, const TensorOfArray3D< NekDouble > &qfield, const TensorOfArray3D< NekDouble > &VolumeFlux, TensorOfArray3D< NekDouble > &SymmFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex, Array< OneD, Array< OneD, NekDouble >> &solution_Aver=NullNekDoubleArrayOfArray, Array< OneD, Array< OneD, NekDouble >> &solution_jump=NullNekDoubleArrayOfArray)
Definition: Diffusion.h:233
SOLVER_UTILS_EXPORT void DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
Similar with Diffusion::Diffuse(): calculate diffusion flux The difference is in the outarray: it is ...
Definition: Diffusion.cpp:76
SOLVER_UTILS_EXPORT void DiffuseCalcDerivative(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray)
Definition: Diffusion.cpp:194
virtual SOLVER_UTILS_EXPORT void v_DiffuseVolumeFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, int > &nonZeroIndex)
Diffusion Volume Flux.
Definition: Diffusion.cpp:232
virtual SOLVER_UTILS_EXPORT void v_DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Definition: Diffusion.cpp:166
virtual TensorOfArray3D< NekDouble > & GetFluxTensor()
Definition: Diffusion.h:380
void SetFluxPenaltyNS(DiffusionFluxPenaltyNS flux)
Definition: Diffusion.h:327
Array< OneD, NekDouble > m_divVel
Params for Ducros sensor.
Definition: Diffusion.h:131
SOLVER_UTILS_EXPORT void GetDivCurl(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const TensorOfArray3D< NekDouble > &pVarDer)
Compute divergence and curl squared.
Definition: Diffusion.cpp:281
SOLVER_UTILS_EXPORT void DiffuseTraceFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &TraceFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &pBwd=NullNekDoubleArrayOfArray, Array< OneD, int > &nonZeroIndex=NullInt1DArray)
Diffusion term Trace Flux.
Definition: Diffusion.h:217
virtual SOLVER_UTILS_EXPORT ~Diffusion()
Definition: Diffusion.h:135
Array< OneD, NekDouble > m_curlVelSquare
Definition: Diffusion.h:133
DiffusionFluxVecCBNS m_fluxVectorNS
Definition: Diffusion.h:405
void SetFluxVectorNS(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:307
void SetDiffusionFluxConsTrace(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:347
void SetFluxVector(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:295
void SetDiffusionFluxCons(DiffusionFluxCons flux)
Definition: Diffusion.h:341
SOLVER_UTILS_EXPORT void InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Definition: Diffusion.cpp:47
virtual TensorOfArray3D< NekDouble > & v_GetFluxTensor()
Definition: Diffusion.h:530
DiffusionFluxCons m_FunctorDiffusionfluxCons
Definition: Diffusion.h:407
void SetHomoDerivs(Array< OneD, Array< OneD, NekDouble >> &deriv)
Definition: Diffusion.h:375
virtual SOLVER_UTILS_EXPORT void v_GetPrimVar(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &primVar)
Compute primary derivatives.
Definition: Diffusion.cpp:260
void SetDiffusionSymmFluxCons(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:367
SpecialBndTreat m_SpecialBndTreat
Definition: Diffusion.h:409
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetTraceNormal()
Get trace normal.
Definition: Diffusion.h:398
void SetDiffusionFluxCons(FuncPointerT func, ObjectPointerT obj)
Definition: Diffusion.h:333
virtual void v_SetHomoDerivs(Array< OneD, Array< OneD, NekDouble >> &deriv)
Definition: Diffusion.h:525
DiffusionSymmFluxCons m_FunctorSymmetricfluxCons
Definition: Diffusion.h:410
SOLVER_UTILS_EXPORT void AddSymmFluxIntegralToOffDiag(const int nConvectiveFields, const int nDim, const int nPts, const int nTracePts, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const int > &nonZeroIndex, TensorOfArray3D< NekDouble > &Fwdflux, TensorOfArray3D< NekDouble > &Bwdflux, Array< OneD, Array< OneD, NekDouble >> &outarray)
Definition: Diffusion.cpp:111
DiffusionFluxPenaltyNS m_fluxPenaltyNS
Definition: Diffusion.h:406
SOLVER_UTILS_EXPORT void DiffuseCoeffs(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, TensorOfArray3D< NekDouble > &qfield, Array< OneD, int > &nonZeroIndex)
Definition: Diffusion.h:171
virtual SOLVER_UTILS_EXPORT void v_AddDiffusionSymmFluxToCoeff(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Definition: Diffusion.h:498
virtual SOLVER_UTILS_EXPORT void v_DiffuseTraceFlux(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &Qfields, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &TraceFlux, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd, Array< OneD, int > &nonZeroIndex)
Diffusion term Trace Flux.
Definition: Diffusion.cpp:242
virtual SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & v_GetTraceNormal()
Definition: Diffusion.cpp:204
SOLVER_UTILS_EXPORT void FluxVec(TensorOfArray3D< NekDouble > &fluxvector)
void SetDiffusionFluxConsTrace(DiffusionFluxCons flux)
Definition: Diffusion.h:355
DiffusionFluxVecCB m_fluxVector
Definition: Diffusion.h:404
virtual SOLVER_UTILS_EXPORT void v_AddDiffusionSymmFluxToPhys(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, TensorOfArray3D< NekDouble > &qfield, TensorOfArray3D< NekDouble > &VolumeFlux, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Definition: Diffusion.h:511
virtual SOLVER_UTILS_EXPORT void v_Diffuse(const std::size_t nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const Array< OneD, Array< OneD, NekDouble >> &pFwd, const Array< OneD, Array< OneD, NekDouble >> &pBwd)
Definition: Diffusion.cpp:153
virtual SOLVER_UTILS_EXPORT void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Definition: Diffusion.h:414
SOLVER_UTILS_EXPORT void SetFluxVector(DiffusionFluxVecCB fluxVector)
Definition: Diffusion.h:301
SOLVER_UTILS_EXPORT void ConsVarAveJump(const std::size_t nConvectiveFields, const size_t npnts, const Array< OneD, const Array< OneD, NekDouble >> &vFwd, const Array< OneD, const Array< OneD, NekDouble >> &vBwd, Array< OneD, Array< OneD, NekDouble >> &aver, Array< OneD, Array< OneD, NekDouble >> &jump)
Get the average and jump value of conservative variables on trace.
Definition: Diffusion.h:386
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::function< void(Array< OneD, Array< OneD, NekDouble >> &)> SpecialBndTreat
Definition: Diffusion.h:125
std::function< void(const int, const Array< OneD, Array< OneD, NekDouble >> &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &, Array< OneD, int > &, const Array< OneD, Array< OneD, NekDouble >> &)> DiffusionFluxCons
Definition: Diffusion.h:101
DiffusionFactory & GetDiffusionFactory()
Definition: Diffusion.cpp:41
std::function< void(const Array< OneD, Array< OneD, NekDouble >> &, const Array< OneD, Array< OneD, NekDouble >> &, Array< OneD, Array< OneD, NekDouble >> &)> DiffusionFluxPenaltyNS
Definition: Diffusion.h:67
LibUtilities::NekFactory< std::string, Diffusion, std::string > DiffusionFactory
Datatype of the NekFactory used to instantiate classes derived from the Diffusion class.
Definition: Diffusion.h:557
std::function< void(const Array< OneD, const Array< OneD, NekDouble >> &, const Array< OneD, const Array< OneD, Array< OneD, NekDouble >>> &, NekDouble, const Array< OneD, const Array< OneD, NekDouble >> &, const Array< OneD, const Array< OneD, Array< OneD, NekDouble >>> &)> FunctorDerivBndCond
Definition: Diffusion.h:84
std::shared_ptr< SolverUtils::Diffusion > DiffusionSharedPtr
A shared pointer to an EquationSystem object.
Definition: Diffusion.h:552
std::function< void(const Array< OneD, Array< OneD, NekDouble >> &, const TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCB
Definition: Diffusion.h:57
std::function< void(const Array< OneD, Array< OneD, NekDouble >> &, TensorOfArray3D< NekDouble > &, TensorOfArray3D< NekDouble > &)> DiffusionFluxVecCBNS
Definition: Diffusion.h:62
std::function< void(const int, const Array< OneD, Array< OneD, NekDouble >> &, const Array< OneD, Array< OneD, NekDouble >> &, TensorOfArray3D< NekDouble > &, Array< OneD, int > &, const Array< OneD, Array< OneD, NekDouble >> &)> DiffusionSymmFluxCons
Definition: Diffusion.h:118
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:1
static Array< OneD, int > NullInt1DArray
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray
double NekDouble