33 #ifndef __H__UG__NAVIER_STOKES_TURBULENT_VISCOSITY_DATA_IMPL_H_
34 #define __H__UG__NAVIER_STOKES_TURBULENT_VISCOSITY_DATA_IMPL_H_
39 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
43 for (
size_t lev=approximationSpace.
num_levels()-2;(
int)lev>=0;lev--){
47 coarseLevelSideIter clsIter, clsIterEnd;
48 clsIter = lDD.template begin<side_type>(si);
49 clsIterEnd = lDD.template end<side_type>(si);
50 for (;clsIter != clsIterEnd;clsIter++){
54 for (
size_t i=0;i<numChildren;i++){
57 avgValue/=numChildren;
58 aaData[elem] = avgValue;
65 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
70 std::vector<DoFIndex> multInd;
71 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si){
74 for( ;iter !=iterEnd; ++iter)
77 for (
int d=0;d<
dim;d++){
78 u->dof_indices(side, d, multInd);
79 aaU[side][d]=
DoFRef(*u,multInd[0]);
107 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
108 template <
typename VType>
111 bool useGridFunction =
true;
112 if (u==
SPNULL) useGridFunction =
false;
114 std::vector<DoFIndex> multInd;
121 SetAttachmentValues(aaUHat , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
122 SetAttachmentValues(aaVol , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
133 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si)
136 ElemIterator iter = m_uInfo->template begin<elem_type>(si);
137 ElemIterator iterEnd = m_uInfo->template end<elem_type>(si);
140 for( ;iter !=iterEnd; ++iter)
145 const size_t numVertices = elem->num_vertices();
149 for(
size_t i = 0; i < numVertices; ++i){
150 vVrt[i] = elem->vertex(i);
151 coCoord[i] = posAcc[vVrt[i]];
168 typedef typename grid_type::template traits<side_type>::secure_container side_secure_container;
169 side_secure_container sides;
171 UG_ASSERT(
dynamic_cast<elem_type*
>(elem) != NULL,
"Only elements of type elem_type are currently supported");
173 domain.grid()->associated_elements_sorted(sides,
static_cast<elem_type*
>(elem) );
175 std::vector<DoFIndex> ind;
176 m_uInfo->dof_indices(elem,0,ind,
true,
true);
177 get_constrained_sides_cr<side_type,side_secure_container,TGridFunction>(sides,*m_uInfo,ind);
181 std::vector<number> vShape;
185 geo.
update(elem, &(coCoord[0]), domain.subset_handler().get());
187 geo.
update_hanging(elem, &(coCoord[0]), domain.subset_handler().get());
189 rTrialSpace.
shapes(vShape, localBary);
191 size_t nofsides = geo.
num_scv();
196 for (
size_t i=0;i<nofsides;i++){
201 for (
int d=0;d<
dim;d++){
202 u->dof_indices(sides[
s], d, multInd);
206 localValue = (*aaU)[sides[
s]];
207 localValue *= vShape[
s];
209 elementVolume += scv.
volume();
211 value *= elementVolume;
212 for (
size_t s=0;
s<nofsides;
s++){
213 aaUHat[sides[
s]] += value;
214 aaVol[sides[
s]] += elementVolume;
220 for(
int si = 0; si < domain.subset_handler()->num_subsets(); ++si)
222 SideIterator sideIter = m_uInfo->template begin<side_type>(si);
225 if ((m_turbZeroSg.size()!=0) && (m_turbZeroSg.contains(si)==
true)){
226 for( ;sideIter !=sideIterEnd; sideIter++)
230 if (useGridFunction){
232 u->dof_indices(side, d, multInd);
237 aaUHat[side] = (*aaU)[side];
240 for( ;sideIter !=sideIterEnd; sideIter++)
242 side_type* side = *sideIter;
243 if (pbm && pbm->
is_slave(side))
continue;
245 if (aaVol[side]==0)
continue;
246 aaUHat[side]/=(
number)aaVol[side];
251 if (
dim==2) constrainingSideAveraging<TGridFunction,side_type,ConstrainingEdge,VType>(aaUHat,m_uInfo);
253 constrainingSideAveraging<TGridFunction,side_type,ConstrainingTriangle,VType>(aaUHat,m_uInfo);
254 constrainingSideAveraging<TGridFunction,side_type,ConstrainingQuadrilateral,VType>(aaUHat,m_uInfo);
260 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
261 template <
typename VType>
264 bool useGridFunction =
true;
265 if (u==NULL) useGridFunction =
false;
267 std::vector<DoFIndex> multInd;
273 SetAttachmentValues(aaUHat , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
274 SetAttachmentValues(aaVol , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
285 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si)
288 ElemIterator iter = m_uInfo->template begin<elem_type>(si);
289 ElemIterator iterEnd = m_uInfo->template end<elem_type>(si);
292 for( ;iter !=iterEnd; ++iter)
297 const size_t numVertices = elem->num_vertices();
301 for(
size_t i = 0; i < numVertices; ++i){
302 vVrt[i] = elem->vertex(i);
303 coCoord[i] = posAcc[vVrt[i]];
320 typedef typename grid_type::template traits<side_type>::secure_container side_secure_container;
321 side_secure_container sides;
323 UG_ASSERT(
dynamic_cast<elem_type*
>(elem) != NULL,
"Only elements of type elem_type are currently supported");
325 domain.grid()->associated_elements_sorted(sides,
static_cast<elem_type*
>(elem) );
329 geo.
update(elem, &(coCoord[0]), domain.subset_handler().get());
331 geo.
update_hanging(elem, &(coCoord[0]), domain.subset_handler().get());
333 m_uInfo->dof_indices(elem,0,multInd,
true,
true);
334 get_constrained_sides_cr<side_type,side_secure_container,TGridFunction>(sides,*m_uInfo,multInd);
338 size_t nNaturalSides = geo.
num_sh();
342 for (
size_t i=0;i<nSides;i++){
344 size_t s = geo.node_id();
353 std::vector<number> vShape;
354 rTrialSpace.
shapes(vShape, scvLocalBary);
355 VType localValue = 0;
356 for (
size_t j=0;j<nNaturalSides;j++){
357 if (useGridFunction){
359 for (
int d=0;d<
dim;d++){
360 u->dof_indices(sides[j], d, multInd);
363 localValue += vShape[j]*uValue;
365 localValue += vShape[j]*aaU[sides[j]];
367 localValue *= scv.
volume();
368 aaVol[sides[
s]] += scv.
volume();
369 aaUHat[sides[
s]] += localValue;
375 for(
int si = 0; si < domain.subset_handler()->num_subsets(); ++si)
377 SideIterator sideIter = m_uInfo->template begin<side_type>(si);
378 SideIterator sideIterEnd = m_uInfo->template end<side_type>(si);
380 if ((m_turbZeroSg.size()!=0) && (m_turbZeroSg.contains(si)==
true)){
381 for( ;sideIter !=sideIterEnd; sideIter++)
384 if (pbm && pbm->
is_slave(side))
continue;
385 aaUHat[side] = aaU[side];
388 for( ;sideIter !=sideIterEnd; sideIter++)
391 if (pbm && pbm->
is_slave(side))
continue;
392 aaUHat[side]/=(
number)aaVol[side];
397 if (
dim==2) constrainingSideAveraging<TGridFunction,side_type,ConstrainingEdge,VType>(aaUHat,m_uInfo);
399 constrainingSideAveraging<TGridFunction,side_type,ConstrainingTriangle,VType>(aaUHat,m_uInfo);
400 constrainingSideAveraging<TGridFunction,side_type,ConstrainingQuadrilateral,VType>(aaUHat,m_uInfo);
405 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
407 bool useGridFunction =
true;
408 if (u==
SPNULL) useGridFunction =
false;
416 std::vector<DoFIndex> multInd;
421 for(
size_t i = 0; i < m_turbZeroSg.size(); ++i){
426 SetAttachmentValues(aaDefTensor , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
427 SetAttachmentValues(aaVol , m_uInfo->template begin<side_type>(), m_uInfo->template end<side_type>(), 0);
437 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si){
439 ElemIterator iter = m_uInfo->template begin<elem_type>(si);
440 ElemIterator iterEnd = m_uInfo->template end<elem_type>(si);
443 for( ;iter !=iterEnd; ++iter)
448 const size_t numVertices = elem->num_vertices();
449 for(
size_t i = 0; i < numVertices; ++i){
450 vVrt[i] = elem->vertex(i);
451 coCoord[i] = posAcc[vVrt[i]];
454 static const size_t MaxNumSidesOfElem = 10;
457 std::vector<MVD> uValue(MaxNumSidesOfElem);
460 typedef typename grid_type::template traits<side_type>::secure_container side_secure_container;
461 side_secure_container sides;
463 UG_ASSERT(
dynamic_cast<elem_type*
>(elem) != NULL,
"Only elements of type elem_type are currently supported");
465 domain.grid()->associated_elements_sorted(sides,
static_cast<elem_type*
>(elem) );
469 geo.
update(elem, &(coCoord[0]), domain.subset_handler().get());
471 geo.
update_hanging(elem, &(coCoord[0]), domain.subset_handler().get());
473 m_uInfo->dof_indices(elem,0,multInd,
true,
true);
474 get_constrained_sides_cr<side_type,side_secure_container,TGridFunction>(sides,*m_uInfo,multInd);
478 size_t nNaturalSides = geo.
num_sh();
482 if (useGridFunction){
483 for (
size_t s=0;
s < nNaturalSides;
s++){
484 for (
int d=0;d<
dim;d++){
485 m_uInfo->dof_indices(sides[
s], d, multInd);
486 uValue[
s][d]=
DoFRef(*u,multInd[0]);
491 for (
size_t s=0;
s < nNaturalSides;
s++)
492 uValue[
s]=(*aaU)[sides[
s]];
495 for (
size_t i=0;i < nSides;i++)
499 aaVol[sides[
s]] += scv.
volume();
502 for (
size_t ip=0;ip<nip;ip++){
506 for (
size_t s=0;
s < nNaturalSides;
s++){
507 for (
int d=0;d<
dim;d++){
508 ipVelocity[d] += scvf.
shape(
s)*uValue[
s][d];
514 for (
int i=0;i<
dim;i++){
515 for (
int j=i;j<
dim;j++){
516 ipDefTensorFlux[ind]= 0.5 * (ipVelocity[i] * scvf.
normal()[j] + ipVelocity[j] * scvf.
normal()[i]);
520 aaDefTensor[sides[scvf.
from()]]+=ipDefTensorFlux;
521 aaDefTensor[sides[scvf.
to()]]-=ipDefTensorFlux;
523 for(
size_t sgi = 0; sgi < m_turbZeroSg.size(); ++sgi){
524 const size_t sgsi=m_turbZeroSg[sgi];
525 if (geo.
num_bf(sgsi) == 0)
continue;
526 for(
size_t bfi = 0; bfi < geo.
num_bf(sgsi); ++bfi){
528 const size_t sideID = bf.node_id();
530 for (
int i=0;i<
dim;i++){
531 for (
int j=i;j<
dim;j++){
534 aaDefTensor[sides[sideID]][ind] -= 0.5 * (uValue[sideID][i] * bf.normal()[j] + uValue[sideID][j] * bf.normal()[i]);
543 for(
int si = 0; si < domain.subset_handler()->num_subsets(); ++si){
544 SideIterator sideIter = m_uInfo->template begin<side_type>(si);
545 SideIterator sideIterEnd = m_uInfo->template end<side_type>(si);
548 for( ;sideIter !=sideIterEnd; sideIter++)
551 if (pbm && pbm->
is_slave(side))
continue;
552 aaDefTensor[side]/=(
number)aaVol[side];
566 if (
dim==2) constrainingSideAveraging<TGridFunction,side_type,ConstrainingEdge,dimMat>(aaDefTensor,m_uInfo);
568 constrainingSideAveraging<TGridFunction,side_type,ConstrainingTriangle,dimMat>(aaDefTensor,m_uInfo);
569 constrainingSideAveraging<TGridFunction,side_type,ConstrainingQuadrilateral,dimMat>(aaDefTensor,m_uInfo);
574 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
581 for(
int si = 0; si < domain.subset_handler()->num_subsets(); ++si){
582 SideIterator sideIter = m_uInfo->template begin<side_type>(si);
583 SideIterator sideIterEnd = m_uInfo->template end<side_type>(si);
584 for( ;sideIter !=sideIterEnd; sideIter++)
587 if (pbm && pbm->
is_slave(side))
continue;
592 aaTensor[side].scale_by_fnorm();
597 template <
typename TData,
int dim,
typename TImpl,
typename TGr
idFunction>
600 bool useGridFunction =
true;
601 if (u==
SPNULL) useGridFunction =
false;
608 std::vector<DoFIndex> multInd;
610 for(
int si = 0; si < domain.subset_handler()->num_subsets(); ++si){
611 SideIterator sideIter = m_uInfo->template begin<side_type>(si);
612 SideIterator sideIterEnd = m_uInfo->template end<side_type>(si);
613 for( ;sideIter !=sideIterEnd; sideIter++)
616 if (pbm && pbm->
is_slave(side))
continue;
620 for (
int d=0;d<
dim;d++){
621 u->dof_indices(side, d, multInd);
622 uValue[d]=
DoFRef(*u,multInd[0]);
625 for (
int d=0;d<
dim;d++) uValue[d] = (*aaU)[side][d];
627 for (
int d1=0;d1 <
dim;d1++)
628 for (
int d2=d1;d2 <
dim;d2++){
629 Tij[ind] = uValue[d1]*uValue[d2];
638 template<
typename TGr
idFunction>
642 SetAttachmentValues(m_acTurbulentViscosity, m_grid->template begin<side_type>(), m_grid->template end<side_type>(), 0);
649 this->assembleDeformationTensor(m_acDeformation,m_acVolume,m_u,NULL);
651 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si)
653 if ((m_turbZeroSg.size()!=0) && (m_turbZeroSg.contains(si)==
true))
continue;
654 SideIterator sideIter = m_u->template begin<side_type>(si);
655 SideIterator sideIterEnd = m_u->template end<side_type>(si);
656 for( ;sideIter !=sideIterEnd; sideIter++)
660 if (m_pbm && m_pbm->is_slave(side))
continue;
661 number delta = m_acVolume[side];
664 m_acTurbulentViscosity[side] = m_c*m_c * delta*delta * m_acDeformation[side].fnorm();
668 if (
dim==2) constrainingSideAveraging<TGridFunction,side_type,ConstrainingEdge,number>(m_acTurbulentViscosity,m_u);
670 constrainingSideAveraging<TGridFunction,side_type,ConstrainingTriangle,number>(m_acTurbulentViscosity,m_u);
671 constrainingSideAveraging<TGridFunction,side_type,ConstrainingQuadrilateral,number>(m_acTurbulentViscosity,m_u);
675 this->transferToLowerLevels(m_acTurbulentViscosity,*m_spApproxSpace);
678 template<
typename TGr
idFunction>
691 SetAttachmentValues(m_acTurbulentViscosity, m_grid->template begin<side_type>(), m_grid->template end<side_type>(), 0);
693 SetAttachmentValues(m_acTurbulentCNew,m_grid->template begin<side_type>(), m_grid->template end<side_type>(), 0);
698 SetAttachmentValues(m_acMij,m_grid->template begin<side_type>(), m_grid->template end<side_type>(), 0);
702 this->elementFilter(m_acUHat,m_acVolumeHat,m_u,&m_acUHat);
705 this->addUiUjTerm(m_acMij,1.0,m_u,NULL);
707 this->elementFilter(m_acLij,m_acVolumeHat,
SPNULL,&m_acMij);
709 this->addUiUjTerm(m_acLij,-1.0,
SPNULL,&m_acUHat);
714 this->assembleDeformationTensor(m_acDeformationHat,m_acVolume,
SPNULL,&m_acUHat);
716 this->scaleTensorByNorm(m_acDeformationHat);
719 this->assembleDeformationTensor(m_acDeformation,m_acVolume,m_u,NULL);
721 this->scaleTensorByNorm(m_acDeformation);
724 this->elementFilter(m_acMij,m_acVolumeHat,
SPNULL,&m_acDeformation);
728 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si)
730 if ((m_turbZeroSg.size()!=0) && (m_turbZeroSg.contains(si)==
true))
continue;
731 SideIterator sideIter = m_u->template begin<side_type>(si);
732 SideIterator sideIterEnd = m_u->template end<side_type>(si);
733 for( ;sideIter !=sideIterEnd; sideIter++){
735 if (m_pbm && m_pbm->is_slave(side))
continue;
738 if (m_fixedRatio) kappa = m_kappa;
740 number delta = m_acVolume[side];
742 number deltaHat = m_acVolumeHat[side];
744 kappa = deltaHat /(
number) delta;
746 m_acDeformationHat[side] *= -kappa*kappa;
747 m_acMij[side] += m_acDeformationHat[side];
751 for (
int d1=0;d1<
dim;d1++)
752 for (
int d2=0;d2<
dim;d2++)
753 c += m_acLij[side](d1,d2)*m_acMij[side](d1,d2);
756 for (
int d1=0;d1<
dim;d1++)
757 for (
int d2=0;d2<
dim;d2++)
758 denom += m_acMij[side](d1,d2)*m_acMij[side](d1,d2);
765 if (m_spaceFilter==
false){
766 if (m_timeFilter==
false){
767 m_acTurbulentViscosity[side] = c * m_acDeformation[side].fnorm();
768 UG_LOG(
"nu_t = " << m_acTurbulentViscosity[side] <<
" c = " << c <<
" kappa = " << kappa <<
" co=[" << 0.5*(posAcc[side->vertex(0)][0] + posAcc[side->vertex(1)][0]) <<
"," << 0.5*(posAcc[side->vertex(0)][1] + posAcc[side->vertex(1)][1]) <<
"]\n");
770 m_acTurbulentC[side]= (m_timeFilterEps * c + (1-m_timeFilterEps)*m_acTurbulentC[side]);
771 m_acTurbulentViscosity[side] = m_acTurbulentC[side] * m_acDeformation[side].fnorm();
773 if (m_acTurbulentViscosity[side]+m_viscosityNumber<m_small) m_acTurbulentViscosity[side] = m_viscosityNumber + m_small; }
776 m_acTurbulentViscosity[side] = c;
780 if (m_spaceFilter==
true){
782 if (m_timeFilter==
false)
784 this->elementFilter(m_acTurbulentC,m_acVolumeHat,
SPNULL,&m_acTurbulentViscosity);
786 this->elementFilter(m_acTurbulentCNew,m_acVolumeHat,
SPNULL,&m_acTurbulentViscosity);
788 for(
int si = 0; si < domain.subset_handler()->
num_subsets(); ++si)
791 if ((m_turbZeroSg.size()!=0) && (m_turbZeroSg.contains(si)==
true))
continue;
792 SideIterator sideIter = m_u->template begin<side_type>(si);
793 SideIterator sideIterEnd = m_u->template end<side_type>(si);
794 for( ;sideIter !=sideIterEnd; sideIter++){
796 if (m_pbm && m_pbm->is_slave(side))
continue;
797 if (m_timeFilter==
true)
799 m_acTurbulentC[side]= (m_timeFilterEps * m_acTurbulentCNew[side] + (1-m_timeFilterEps)*m_acTurbulentC[side]);
800 m_acTurbulentViscosity[side] = m_acTurbulentC[side] * m_acDeformation[side].fnorm();
801 UG_LOG(
"nu_t = " << m_acTurbulentViscosity[side] <<
" c = " << m_acTurbulentC[side] <<
" co=[" << 0.5*(posAcc[side->vertex(0)][0] + posAcc[side->vertex(1)][0]) <<
"," << 0.5*(posAcc[side->vertex(0)][1] + posAcc[side->vertex(1)][1]) <<
"]\n");
802 if (m_acTurbulentViscosity[side]+m_viscosityNumber<m_small) m_acTurbulentViscosity[side] = m_viscosityNumber+m_small;
809 if (
dim==2) constrainingSideAveraging<TGridFunction,side_type,ConstrainingEdge,number>(m_acTurbulentViscosity,m_u);
811 constrainingSideAveraging<TGridFunction,side_type,ConstrainingTriangle,number>(m_acTurbulentViscosity,m_u);
812 constrainingSideAveraging<TGridFunction,side_type,ConstrainingQuadrilateral,number>(m_acTurbulentViscosity,m_u);
816 this->transferToLowerLevels(m_acTurbulentViscosity,*m_spApproxSpace);
function NavierStokes(fcts, subsets, discType)
SmartPtr< TDomain > domain()
const MathVector< worldDim > & normal() const
number shape(size_t sh) const
const MathVector< worldDim > & global_corner(size_t co) const
size_t num_corners() const
const SCV & scv(size_t i) const
const SCVF & scvf(size_t i) const
void add_boundary_subset(int subsetIndex)
const std::vector< BF > & bf(int subsetIndex) const
void update(GridObject *elem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
size_t num_constrained_dofs() const
void update_hanging(GridObject *elem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL, bool keepSCV=false, bool keepSCVF=false)
virtual void global_to_local(MathVector< dim > &locPos, const MathVector< worldDim > &globPos, const size_t maxIter=1000, const number tol=1e-10) const=0
SmartPtr< MultiGrid > multi_grid()
size_t num_levels() const
SmartPtr< DoFDistribution > dof_distribution(const GridLevel &gl, bool bCreate=true)
virtual void shapes(std::vector< std::vector< shape_type > > &vvShape, const std::vector< MathVector< dim > > &vLocPos) const=0
TGridFunction::domain_type domain_type
domain type
Definition: turbulent_viscosity_fvcr.h:418
domain_type::position_accessor_type position_accessor_type
position accessor type
Definition: turbulent_viscosity_fvcr.h:424
elem_type::side side_type
side type
Definition: turbulent_viscosity_fvcr.h:436
TGridFunction::template traits< side_type >::const_iterator SideIterator
side iterator
Definition: turbulent_viscosity_fvcr.h:442
void update()
Definition: turbulent_viscosity_fvcr_impl.h:679
TGridFunction::domain_type domain_type
domain type
Definition: turbulent_viscosity_fvcr.h:301
TGridFunction::template traits< side_type >::const_iterator SideIterator
side iterator
Definition: turbulent_viscosity_fvcr.h:325
void update()
Definition: turbulent_viscosity_fvcr_impl.h:639
elem_type::side side_type
side type
Definition: turbulent_viscosity_fvcr.h:319
TGridFunction::template traits< side_type >::const_iterator SideIterator
side iterator
Definition: turbulent_viscosity_fvcr.h:86
TGridFunction::domain_type domain_type
domain type
Definition: turbulent_viscosity_fvcr.h:65
void transferToLowerLevels(aSideNumber &aaData, ApproximationSpace< domain_type > &approximationSpace)
Definition: turbulent_viscosity_fvcr_impl.h:40
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
element iterator
Definition: turbulent_viscosity_fvcr.h:83
void addUiUjTerm(aSideTensor &aaDefTensor, const number factor, SmartPtr< TGridFunction > u, aSideDimVector *aaU)
Definition: turbulent_viscosity_fvcr_impl.h:598
elem_type::side side_type
side type
Definition: turbulent_viscosity_fvcr.h:80
void elementFilter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, aSideNumber &aaVol, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > *aaU)
Definition: turbulent_viscosity_fvcr_impl.h:109
void scaleTensorByNorm(aSideTensor &aaTensor)
Definition: turbulent_viscosity_fvcr_impl.h:575
void fillAttachment(aSideDimVector &aaU, SmartPtr< TGridFunction > u)
Definition: turbulent_viscosity_fvcr_impl.h:66
void scvFilter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, aSideNumber &aaVol, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > *aaU)
Definition: turbulent_viscosity_fvcr_impl.h:262
void assembleDeformationTensor(aSideTensor &aaDefTensor, aSideNumber &aaVol, SmartPtr< TGridFunction > u, aSideDimVector *aaU)
Definition: turbulent_viscosity_fvcr_impl.h:406
domain_type::position_accessor_type position_accessor_type
position accessor type
Definition: turbulent_viscosity_fvcr.h:71
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
element type
Definition: turbulent_viscosity_fvcr.h:77
bool is_slave(TElem *) const
Grid::VertexAttachmentAccessor< position_attachment_type > position_accessor_type
SmartPtr< TSubsetHandler > subset_handler()
size_t num_subsets() const
void SetAttachmentValues(TAttachmentAccessor &aaVal, TIter elemsBegin, TIter elemsEnd, const TVal &val)
const NullSmartPtr SPNULL
#define UG_ASSERT(expr, msg)
void assignValue(number &v, size_t ind, number value)
Definition: turbulent_viscosity_fvcr_impl.h:85
const number & DoFRef(const TMatrix &mat, const DoFIndex &iInd, const DoFIndex &jInd)
SurfaceView::traits< TElem >::const_iterator const_iterator