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);
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);