Plugins
filter.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-2014: G-CSC, Goethe University Frankfurt
3  * Author: Christian Wehner
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef __H__UG__NAVIER_STOKES__INCOMPRESSIBLE__FILTER__
34 #define __H__UG__NAVIER_STOKES__INCOMPRESSIBLE__FILTER__
35 
36 #include <vector>
39 #include "lib_grid/lg_base.h"
46 
47 namespace ug{
48 namespace NavierStokes{
49 
50 template <typename TGridFunction>
51 class WallObject{
52 public:
53  inline int si(){return m_subset_index;}
54  inline number coord(){return m_coord;}
55  inline size_t direction(){return m_direction;}
57  return std::abs(co[m_direction]-m_coord);
58  }
60  m_subset_index = u->subset_id_by_name(subset);
62  m_coord=coord;
63  }
64 private:
66  size_t m_direction;
68 };
69 
70 template <int dim,typename elem_type,typename TGridFunction>
73  typedef typename TGridFunction::template traits<elem_type>::const_iterator ElemIterator;
75  typedef typename TGridFunction::domain_type domain_type;
76  // get domain
77  domain_type& domain = *u->domain().get();
78  // create Multiindex
79  std::vector<DoFIndex> multInd;
80  for(int si = 0; si < domain.subset_handler()->num_subsets(); ++si){
81  ElemIterator iter = u->template begin<elem_type>(si);
82  ElemIterator iterEnd = u->template end<elem_type>(si);
83  for( ;iter !=iterEnd; ++iter)
84  {
85  elem_type* elem = *iter;
86  for (int d=0;d<dim;d++){
87  u->dof_indices(elem, d, multInd);
88  DoFRef(*u,multInd[0])=aaU[elem][d];
89  }
90  }
91  }
92 }
93 
94 template <int dim,typename elem_type,typename TGridFunction>
97  typedef typename TGridFunction::template traits<elem_type>::const_iterator ElemIterator;
99  typedef typename TGridFunction::domain_type domain_type;
100  // get domain
101  domain_type& domain = *u->domain().get();
102  // create Multiindex
103  std::vector<DoFIndex> multInd;
104  for(int si = 0; si < domain.subset_handler()->num_subsets(); ++si){
105  ElemIterator iter = u->template begin<elem_type>(si);
106  ElemIterator iterEnd = u->template end<elem_type>(si);
107  for( ;iter !=iterEnd; ++iter)
108  {
109  elem_type* elem = *iter;
110  for (int d=0;d<dim;d++){
111  u->dof_indices(elem, d, multInd);
112  aaU[elem][d]=DoFRef(*u,multInd[0]);
113  }
114  }
115  }
116 }
117 
118 template <typename elem_type,typename attachment_type,typename grid_type>
120  attachment_type& attachment,
121  grid_type& grid
122  ){
123  grid.template attach_to<elem_type>(attachment);
124  accessor.access(grid,attachment);
125 };
126 
127 template <typename TGridFunction>
129 public:
131  static const size_t dim = TGridFunction::dim;
132 
134  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
135 
137  typedef typename TGridFunction::domain_type domain_type;
138 
141 
143  typedef typename elem_type::side side_type;
144 
145  // vertex type
147 
148  // data types used in attachments
150  typedef number type1;
152 
153  // filter for side attachment
156 
159 
162 
163  // filter for crouzeix-raviart type grid function
166 
167  // filter for vertex attachment
170 
173 
176 
177  // filter for general grid function, result stored in nodes
180 
181  // filter grid function
182  virtual void apply(SmartPtr<TGridFunction> u){}
183 
184  virtual number width(vertex_type* vrt){return -1;}
185 
186  virtual number width(side_type* side){return -1;}
187 
188  virtual void compute_filterwidth(){}
189 
191  virtual ~FilterBaseClass(){}
192 };
193 
194 // wrapper class for filtering
195 template <typename TImpl,typename TGridFunction>
197 : public FilterBaseClass<TGridFunction>
198 {
199  public:
201  static const size_t dim = TGridFunction::dim;
202 
204  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
205 
207  typedef typename TGridFunction::domain_type domain_type;
208 
211 
213  typedef typename elem_type::side side_type;
214 
215  // vertex type
217 
218  // data types
222 
223  // filter for side attachment
226  getImpl().apply_filter(aaUHat,SPNULL,aaU);
227  }
228 
231  getImpl().apply_filter(aaUHat,SPNULL,aaU);
232  }
233 
236  getImpl().apply_filter(aaUHat,SPNULL,aaU);
237  }
238 
239  // filter for crouzeix-raviart type grid function
242  UG_LOG("son class\n");
243  getImpl().apply_filter(aaUHat,u,aaUHat);
244  }
245 
246  // filter for vertex attachment
249  getImpl().apply_filter(aaUHat,SPNULL,aaU);
250  }
251 
254  getImpl().apply_filter(aaUHat,SPNULL,aaU);
255  }
256 
259  getImpl().apply_filter(aaUHat,SPNULL,aaU);
260  }
261 
262  // filter for general grid function, result stored in nodes
265  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
266  getImpl().apply_filter(aaUHat,u);
267  } else {
268  getImpl().apply_filter(aaUHat,u,aaUHat);
269  }
270  }
271 
272  template <typename TElem>
274  // define attachment types
277 
278  domain_type& domain = *u->domain().get();
279  grid_type& grid = *domain.grid();
280 
281  // attach
282  grid.template attach_to<TElem>(aUHat);
283  acUHat.access(grid,aUHat);
284  getImpl().apply_filter(acUHat,u,acUHat);
285  copyAttachmentToGridFunction<dim,TElem,TGridFunction>(u,acUHat);
286  grid.template detach_from<TElem>(aUHat);
287  }
288 
289  // filter grid function
291  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
292  apply_<side_type>(u);
293  } else {
294  apply_<vertex_type>(u);
295  }
296  }
297 
298  template<typename VType,typename TElem>
300  typedef typename TGridFunction::domain_type TDomain;
301  typedef typename TDomain::grid_type TGrid;
302  TDomain domain = *u->domain().get();
303  typedef typename TGridFunction::template traits<TElem>::const_iterator ElemIterator;
304  PeriodicBoundaryManager* pbm = (domain.grid())->periodic_boundary_manager();
305  std::vector<DoFIndex> dofInd;
306  for (int j=0;j<(int)walls.size();j++){
307  int si = walls[j].si();
308  ElemIterator elemIter = u->template begin<TElem>(si);
309  ElemIterator elemIterEnd = u->template end<TElem>(si);
310  for( ;elemIter !=elemIterEnd; elemIter++)
311  {
312  TElem* elem = *elemIter;
313  if (pbm && pbm->is_slave(elem)) continue;
314  VType localValue;
315  for (int d=0;d<TGridFunction::dim;d++){
316  u->dof_indices(elem, d, dofInd);
317  assignVal(localValue,d,DoFRef(*u,dofInd[0]));
318  }
319  acUHat[elem]=localValue;
320  }
321  }
322  }
323 
324  template<typename VType,typename TElem>
326  SmartPtr<TGridFunction> u,std::vector<WallObject<TGridFunction> > walls){
327  typedef typename TGridFunction::domain_type TDomain;
328  typedef typename TDomain::grid_type TGrid;
329  TDomain domain = *u->domain().get();
330  typedef typename TGridFunction::template traits<TElem>::const_iterator ElemIterator;
331  PeriodicBoundaryManager* pbm = (domain.grid())->periodic_boundary_manager();
332  std::vector<DoFIndex> dofInd;
333  for (int j=0;j<(int)walls.size();j++){
334  int si = walls[j].si();
335  ElemIterator elemIter = u->template begin<TElem>(si);
336  ElemIterator elemIterEnd = u->template end<TElem>(si);
337  for( ;elemIter !=elemIterEnd; elemIter++)
338  {
339  TElem* elem = *elemIter;
340  if (pbm && pbm->is_slave(elem)) continue;
341  acUHat[elem]=acU[elem];
342  }
343  }
344  }
345 
346  void assignVal(number& v,size_t ind,number value){
347  v=value;
348  }
349 
350  void assignVal(MathVector<2>& v,size_t ind,number value){
351  v[ind]=value;
352  }
353 
354  void assignVal(MathVector<3>& v,size_t ind,number value){
355  v[ind]=value;
356  }
357 
358  void assignVal(MathSymmetricMatrix<2>& v,size_t ind,number value){
359  v[ind]=value;
360  }
361 
362  void assignVal(MathSymmetricMatrix<3>& v,size_t ind,number value){
363  v[ind]=value;
364  }
365 
366  protected:
368  TImpl& getImpl() {return static_cast<TImpl&>(*this);}
369 
371  const TImpl& getImpl() const {return static_cast<const TImpl&>(*this);}
372 };
373 
374 template <int dim>
375 struct Region{
376  size_t firstIndex;
378 };
379 
380 // Box filter with constant filter width
381 template <typename TGridFunction>
383  : public FilterImplBaseClass<ConstantBoxFilter<TGridFunction>,TGridFunction>
384 {
385 public:
386  // base type
388 
389  // dimension
390  static const size_t dim = TGridFunction::dim;
391 
392  // element type
393  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
394 
395  // domain type
396  typedef typename TGridFunction::domain_type domain_type;
397 
398  // side type
399  typedef typename elem_type::side side_type;
400 
401  // vertex type
403 
404  // grid type
406 
407  // position accessor type
409 
411  typedef typename TGridFunction::template dim_traits<dim>::const_iterator ElemIterator;
412 
414  typedef typename TGridFunction::template traits<side_type>::const_iterator SideIterator;
415 
417  typedef typename TGridFunction::template traits<vertex_type>::const_iterator VertexIterator;
418 
419  // accessor types
422 
423  // filter for crouzeix-raviart type data
424  template <typename VType>
427 
428  // filter for fv1 type data
429  template <typename VType>
432  UG_THROW("not implemented");
433  };
434 
435  // filter for crouzeix-raviart grid function with output in node attachment
436  template <typename VType>
439  UG_THROW("not implemented");
440  };
441 
442  // compute average mesh size
444 
445  inline number width(vertex_type* vrt){ return m_width; }
446 
447  inline number width(side_type* side){ return m_width; }
448 
450  m_walls.push_back(w);
451  }
452 
453  // constructors
455  m_width = width;
456  m_uInfo = u;
457  domain_type& domain = *u->domain().get();
458  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
459  domain.grid()->template attach_to<side_type>(m_aSideVolume);
460  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
461  } else {
462  domain.grid()->template attach_to<vertex_type>(m_aVertexVolume);
463  m_acSideVolume.access(*domain.grid(),m_aVertexVolume);
464  }
465  }
466 
468  m_uInfo = u;
469  domain_type& domain = *u->domain().get();
470  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
471  domain.grid()->template attach_to<side_type>(m_aSideVolume);
472  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
473  } else {
474  domain.grid()->template attach_to<vertex_type>(m_aVertexVolume);
475  m_acSideVolume.access(*domain.grid(),m_aVertexVolume);
476  }
478  }
479 
481  domain_type& domain = *m_uInfo->domain().get();
482  domain.grid()->template detach_from<side_type>(m_aSideVolume);
483  domain.grid()->template detach_from<vertex_type>(m_aVertexVolume);
484  }
485 
486 private:
487  template <typename VType>
490  std::vector< MathVector<dim> >& coord,
491  VType values[DimFV1Geometry<dim>::maxNumSCV],
493  std::vector<side_type*>& sides
494  );
495 
496  // volume attachment
501 
503 
505 
506  // grid function
508 
509  std::vector<WallObject<TGridFunction> > m_walls;
510 
511  using base_type::assignVal;
513 };
514 
515 // Box filter with constant filter width
516 template <typename TGridFunction>
518 : public FilterImplBaseClass<VariableBoxFilter<TGridFunction>,TGridFunction>
519 {
520 public:
521  // base type
523 
524  // dimension
525  static const size_t dim = TGridFunction::dim;
526 
527  // element type
528  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
529 
530  // domain type
531  typedef typename TGridFunction::domain_type domain_type;
532 
533  // side type
534  typedef typename elem_type::side side_type;
535 
536  // vertex type
538 
539  // grid type
541 
542  // position accessor type
544 
546  typedef typename TGridFunction::template dim_traits<dim>::const_iterator ElemIterator;
547 
549  typedef typename TGridFunction::template traits<side_type>::const_iterator SideIterator;
550 
552  typedef typename TGridFunction::template traits<vertex_type>::const_iterator VertexIterator;
553 
554  // accessor types
557 
558  // filter for crouzeix-raviart type data
559  template <typename VType>
562 
563  // filter for fv1 type data
564  template <typename VType>
567  UG_THROW("not implemented");
568  };
569 
570  // filter for crouzeix-raviart grid function with output in node attachment
571  template <typename VType>
574  UG_THROW("not implemented");
575  };
576 
577  // compute average mesh size
579 
580  inline number width(vertex_type* vrt){
581  std::vector<DoFIndex> multInd;
582  m_width->inner_dof_indices(vrt,0, multInd);
583  return DoFRef(*m_width,multInd[0]);
584  }
585 
586  inline number width(side_type* side){
587  std::vector<DoFIndex> multInd;
588  m_width->inner_dof_indices(side,0, multInd);
589  return DoFRef(*m_width,multInd[0]);
590  }
591 
592  template <typename TElem>
594  domain_type& domain = *m_width->domain().get();
595  std::vector<DoFIndex> multInd;
596  for(int si = 0; si < domain.subset_handler()->num_subsets(); ++si)
597  {
598  // get iterators
599  ElemIterator iter = m_width->template begin<elem_type>(si);
600  ElemIterator iterEnd = m_width->template end<elem_type>(si);
601 
602  // loop elements of dimension
603  for( ;iter !=iterEnd; ++iter)
604  {
605  // get Elem
606  elem_type* elem = *iter;
607  m_width->inner_dof_indices(elem,0, multInd);
608  DoFRef(*m_width,multInd[0])=width;
609  }
610  }
611  }
612 
613  template <typename TElem>
615  domain_type& domain = *m_width->domain().get();
616  std::vector<DoFIndex> multInd;
617  number maxwidth = 0;
618  for(int si = 0; si < domain.subset_handler()->num_subsets(); ++si)
619  {
620  // get iterators
621  ElemIterator iter = m_width->template begin<elem_type>(si);
622  ElemIterator iterEnd = m_width->template end<elem_type>(si);
623 
624  // loop elements of dimension
625  for( ;iter !=iterEnd; ++iter)
626  {
627  // get Elem
628  elem_type* elem = *iter;
629  m_width->inner_dof_indices(elem,0, multInd);
630  maxwidth=std::max(DoFRef(*m_width,multInd[0]),maxwidth);
631  }
632  }
633  m_maxwidth = maxwidth;
634  return maxwidth;
635  }
636 
638  m_walls.push_back(w);
639  }
640 
641  template <typename VType,typename TElem>
643  domain_type& domain = *m_width->domain().get();
644 
645  }
646 
647  // constructors
649  m_width = fwidth;
650  m_uInfo = u;
651  domain_type& domain = *u->domain().get();
652  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
653  domain.grid()->template attach_to<side_type>(m_aSideVolume);
654  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
655  } else {
656  domain.grid()->template attach_to<vertex_type>(m_aVertexVolume);
657  m_acSideVolume.access(*domain.grid(),m_aVertexVolume);
658  }
659  if (initWidth){
661  if (m_width->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
662  init_width<side_type>(width);
663  }
664  if (m_width->local_finite_element_id(0) == LFEID(LFEID::LAGRANGE, dim, 1)){
665  init_width<vertex_type>(width);
666  }
667  }
668  }
669 
671  domain_type& domain = *m_uInfo->domain().get();
672  domain.grid()->template detach_from<side_type>(m_aSideVolume);
673  domain.grid()->template detach_from<vertex_type>(m_aVertexVolume);
674  }
675 
676 private:
677  template <typename VType>
680  std::vector< MathVector<dim> >& coord,
681  VType values[DimFV1Geometry<dim>::maxNumSCV],
683  std::vector<side_type*>& sides
684  );
685 
686  // volume attachment
691 
693 
694  // grid function
696 
697  // filter width
699 
701 
702  std::vector<WallObject<TGridFunction> > m_walls;
703 
704  using base_type::assignVal;
706 };
707 
708 
709 
710 // Box filter with local filter volume given by vertex-centered FV (fv1 geometry)
711 template <typename TGridFunction>
713  : public FilterImplBaseClass<FV1BoxFilter<TGridFunction>,TGridFunction>
714 {
715 public:
716  // base type
718 
719  // dimension
720  static const size_t dim = TGridFunction::dim;
721 
722  // element type
723  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
724 
725  // domain type
726  typedef typename TGridFunction::domain_type domain_type;
727 
728  // side type
729  typedef typename elem_type::side side_type;
730 
731  // vertex type
733 
734  // grid type
736 
737  // position accessor type
739 
740  // element iterator
741  typedef typename TGridFunction::template dim_traits<dim>::const_iterator ElemIterator;
742 
743  // side iterator
744  typedef typename TGridFunction::template traits<side_type>::const_iterator SideIterator;
745 
746  // vertex iterator
747  typedef typename TGridFunction::template traits<vertex_type>::const_iterator VertexIterator;
748 
751 
752  // filter for crouzeix-raviart type data
753  template <typename VType>
756 
757  // filter for fv1 type data
758  template <typename VType>
761 
762  // filter for crouzeix-raviart grid function with output in node attachment
763  template <typename VType>
766  {
767  UG_THROW("not implemented");
768  };
769 
770  // return filter width
771  inline number width(vertex_type* vrt){ return pow(m_acVertexVolume[vrt],(number)1.0/dim); }
772 
773  inline number width(side_type* side){ return pow(m_acSideVolume[side],(number)1.0/dim); }
774 
776  if (m_uInfo->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
778  } else {
780  }
781  }
782 
784 
786 
788  m_walls.push_back(w);
789  }
790 
791  // constructor
793  m_uInfo = u;
794  domain_type& domain = *u->domain().get();
795  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
796  domain.grid()->template attach_to<side_type>(m_aSideVolume);
797  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
798  } else {
799  domain.grid()->template attach_to<vertex_type>(m_aVertexVolume);
800  m_acSideVolume.access(*domain.grid(),m_aVertexVolume);
801  }
802  }
803 
804  // destructor
806  domain_type& domain = *m_uInfo->domain().get();
807  domain.grid()->template detach_from<side_type>(m_aSideVolume);
808  domain.grid()->template detach_from<vertex_type>(m_aVertexVolume);
809  }
810 
811 private:
812  // volume attachment
817 
818  // grid function
820 
821  std::vector<WallObject<TGridFunction> > m_walls;
822 
823  using base_type::assignVal;
825 };
826 
827 
828 // Box filter with local filter volume given by vertex-centered FV (fv1 geometry)
829 template <typename TGridFunction>
831  : public FilterImplBaseClass<FVCRBoxFilter<TGridFunction>,TGridFunction>
832 {
833 public:
834  // base type
836 
837  // dimension
838  static const size_t dim = TGridFunction::dim;
839 
840  // element type
841  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
842 
843  // domain type
844  typedef typename TGridFunction::domain_type domain_type;
845 
846  // side type
847  typedef typename elem_type::side side_type;
848 
849  // vertex type
851 
852  // grid type
854 
855  // position accessor type
857 
858  // element iterator
859  typedef typename TGridFunction::template dim_traits<dim>::const_iterator ElemIterator;
860 
861  // side iterator
862  typedef typename TGridFunction::template traits<side_type>::const_iterator SideIterator;
863 
864  // vertex iterator
865  typedef typename TGridFunction::template traits<vertex_type>::const_iterator VertexIterator;
866 
869 
870  // filter for crouzeix-raviart type data
871  template <typename VType>
874 
875  // filter for fv1 type data
876  template <typename VType>
879  {
880  UG_THROW("not implemented");
881  };
882 
883  // filter for crouzeix-raviart grid function with output in node attachment
884  template <typename VType>
887  {
888  UG_THROW("not implemented");
889  };
890 
892  m_walls.push_back(w);
893  }
894 
895  // return filter width
896  inline number width(vertex_type* vrt){ UG_THROW("not implemented"); return 0; }
897 
898  inline number width(side_type* side){ return pow(m_acSideVolume[side],(number)1.0/dim); }
899 
901  if (m_uInfo->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
903  } else {
905  }
906  }
907 
909  UG_LOG("not implemented\n");
910  }
911 
913 
914  // constructors
916  m_uInfo = u;
917  domain_type& domain = *u->domain().get();
918  if (u->local_finite_element_id(0) != LFEID(LFEID::CROUZEIX_RAVIART, dim, 1))
919  UG_THROW("Only implemented for Crouzeix-Raviart type functions.");
920  domain.grid()->template attach_to<side_type>(m_aSideVolume);
921  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
922  }
923 
925  domain_type& domain = *m_uInfo->domain().get();
926  domain.grid()->template detach_from<side_type>(m_aSideVolume);
927  }
928 
929  private:
930  // volume attachment
933  //ANumber m_aVertexVolume;
934  //aVertexNumber m_acVertexVolume;
935 
936  // grid function
938 
939  std::vector<WallObject<TGridFunction> > m_walls;
940 
941  using base_type::assignVal;
943 };
944 
945 // Box filter with local filter volume given by vertex-centered FV (fv1 geometry)
946 template <typename TGridFunction>
948 : public FilterImplBaseClass<ElementBoxFilter<TGridFunction>,TGridFunction>
949 {
950 public:
951  // base type
953 
954  // dimension
955  static const size_t dim = TGridFunction::dim;
956 
957  // element type
958  typedef typename TGridFunction::template dim_traits<dim>::grid_base_object elem_type;
959 
960  // domain type
961  typedef typename TGridFunction::domain_type domain_type;
962 
963  // side type
964  typedef typename elem_type::side side_type;
965 
966  // vertex type
968 
969  // grid type
971 
972  // position accessor type
974 
975  // element iterator
976  typedef typename TGridFunction::template dim_traits<dim>::const_iterator ElemIterator;
977 
978  // side iterator
979  typedef typename TGridFunction::template traits<side_type>::const_iterator SideIterator;
980 
981  // vertex iterator
982  typedef typename TGridFunction::template traits<vertex_type>::const_iterator VertexIterator;
983 
986 
987  // filter for crouzeix-raviart type data
988  template <typename VType>
991 
992  // filter for fv1 type data
993  template <typename VType>
996 
997  // filter for crouzeix-raviart grid function with output in node attachment
998  template <typename VType>
1001  {
1002  UG_THROW("not implemented");
1003  };
1004 
1005  // return filter width
1006  inline number width(vertex_type* vrt){ return pow(m_acVertexVolume[vrt],(number)1.0/dim); }
1007 
1008  inline number width(side_type* side){ return pow(m_acSideVolume[side],(number)1.0/dim); }
1009 
1011  if (m_uInfo->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
1013  } else {
1015  }
1016  }
1017 
1018  void compute_filterwidth_fv1();
1019 
1020  void compute_filterwidth_fvcr();
1021 
1023  m_walls.push_back(w);
1024  }
1025 
1026  // constructors
1028  m_uInfo = u;
1029  domain_type& domain = *u->domain().get();
1030  if (u->local_finite_element_id(0) == LFEID(LFEID::CROUZEIX_RAVIART, dim, 1)){
1031  domain.grid()->template attach_to<side_type>(m_aSideVolume);
1032  m_acSideVolume.access(*domain.grid(),m_aSideVolume);
1033  } else {
1034  domain.grid()->template attach_to<side_type>(m_aVertexVolume);
1035  m_acSideVolume.access(*domain.grid(),m_aVertexVolume);
1036  }
1037  }
1038 
1040  domain_type& domain = *m_uInfo->domain().get();
1041  domain.grid()->template detach_from<side_type>(m_aSideVolume);
1042  domain.grid()->template detach_from<vertex_type>(m_aVertexVolume);
1043  }
1044 
1045 private:
1046  // volume attachment
1051 
1052  // grid function
1054 
1055  std::vector<WallObject<TGridFunction> > m_walls;
1056 
1057  using base_type::assignVal;
1059 };
1060 
1061 } // end namespace NavierStokes
1062 } // end namespace ug
1063 
1064 #include "filter_impl.h"
1065 
1066 #endif /* __H__UG__LIB_DISC__NAVIER_STOKES__INCOMPRESSIBLE__FILTER__ */
function NavierStokes(fcts, subsets, discType)
TGridFunction * get()
Definition: filter.h:384
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
Definition: filter.h:393
domain_type::position_accessor_type position_accessor_type
Definition: filter.h:408
ConstantBoxFilter(SmartPtr< TGridFunction > u)
Definition: filter.h:467
number m_width
Definition: filter.h:502
number width(vertex_type *vrt)
Definition: filter.h:445
number compute_average_element_size(SmartPtr< TGridFunction > u)
Definition: filter_impl.h:78
TGridFunction::template traits< vertex_type >::const_iterator VertexIterator
vertex iterator
Definition: filter.h:417
std::vector< WallObject< TGridFunction > > m_walls
Definition: filter.h:509
PeriodicAttachmentAccessor< side_type, ANumber > aSideNumber
Definition: filter.h:420
ANumber m_aVertexVolume
Definition: filter.h:499
void apply_filter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaU)
Definition: filter_impl.h:183
SmartPtr< TGridFunction > m_uInfo
Definition: filter.h:507
ConstantBoxFilter(SmartPtr< TGridFunction > u, number width)
Definition: filter.h:454
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
element iterator
Definition: filter.h:411
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaU)
Definition: filter.h:430
aSideNumber m_acSideVolume
Definition: filter.h:498
void collectSides(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &acUHat, PeriodicAttachmentAccessor< side_type, Attachment< number > > &acVolume, std::vector< MathVector< dim > > &coord, VType values[DimFV1Geometry< dim >::maxNumSCV], number volumes[DimFV1Geometry< dim >::maxNumSCV], std::vector< side_type * > &sides)
Definition: filter_impl.h:101
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:437
aVertexNumber m_acVertexVolume
Definition: filter.h:500
~ConstantBoxFilter()
Definition: filter.h:480
static const size_t dim
Definition: filter.h:390
position_accessor_type m_posAcc
Definition: filter.h:504
TGridFunction::template traits< side_type >::const_iterator SideIterator
side iterator
Definition: filter.h:414
FilterImplBaseClass< ConstantBoxFilter< TGridFunction >, TGridFunction > base_type
Definition: filter.h:387
number width(side_type *side)
Definition: filter.h:447
Vertex vertex_type
Definition: filter.h:402
domain_type::grid_type grid_type
Definition: filter.h:405
void add_wall(WallObject< TGridFunction > w)
Definition: filter.h:449
elem_type::side side_type
Definition: filter.h:399
ANumber m_aSideVolume
Definition: filter.h:497
TGridFunction::domain_type domain_type
Definition: filter.h:396
PeriodicAttachmentAccessor< vertex_type, ANumber > aVertexNumber
Definition: filter.h:421
Definition: filter.h:949
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
Definition: filter.h:958
static const size_t dim
Definition: filter.h:955
ElementBoxFilter(SmartPtr< TGridFunction > u)
Definition: filter.h:1027
number width(vertex_type *vrt)
Definition: filter.h:1006
aSideNumber m_acSideVolume
Definition: filter.h:1048
void compute_filterwidth_fvcr()
Definition: filter_impl.h:1206
number width(side_type *side)
Definition: filter.h:1008
void apply_filter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaU)
Definition: filter_impl.h:1258
void compute_filterwidth()
Definition: filter.h:1010
FilterImplBaseClass< ElementBoxFilter< TGridFunction >, TGridFunction > base_type
Definition: filter.h:952
TGridFunction::template traits< side_type >::const_iterator SideIterator
Definition: filter.h:979
domain_type::grid_type grid_type
Definition: filter.h:970
~ElementBoxFilter()
Definition: filter.h:1039
elem_type::side side_type
Definition: filter.h:964
void add_wall(WallObject< TGridFunction > w)
Definition: filter.h:1022
void compute_filterwidth_fv1()
Definition: filter_impl.h:1076
PeriodicAttachmentAccessor< side_type, ANumber > aSideNumber
Definition: filter.h:984
TGridFunction::domain_type domain_type
Definition: filter.h:961
aVertexNumber m_acVertexVolume
Definition: filter.h:1050
Vertex vertex_type
Definition: filter.h:967
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
Definition: filter.h:976
SmartPtr< TGridFunction > m_uInfo
Definition: filter.h:1053
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:999
PeriodicAttachmentAccessor< vertex_type, ANumber > aVertexNumber
Definition: filter.h:985
ANumber m_aSideVolume
Definition: filter.h:1047
ANumber m_aVertexVolume
Definition: filter.h:1049
domain_type::position_accessor_type position_accessor_type
Definition: filter.h:973
TGridFunction::template traits< vertex_type >::const_iterator VertexIterator
Definition: filter.h:982
std::vector< WallObject< TGridFunction > > m_walls
Definition: filter.h:1055
Definition: filter.h:714
void compute_filterwidth()
Definition: filter.h:775
void add_wall(WallObject< TGridFunction > w)
Definition: filter.h:787
static const size_t dim
Definition: filter.h:720
elem_type::side side_type
Definition: filter.h:729
TGridFunction::template traits< side_type >::const_iterator SideIterator
Definition: filter.h:744
void compute_filterwidth_fvcr()
Definition: filter_impl.h:764
std::vector< WallObject< TGridFunction > > m_walls
Definition: filter.h:821
number width(side_type *side)
Definition: filter.h:773
domain_type::position_accessor_type position_accessor_type
Definition: filter.h:738
void apply_filter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaU)
Definition: filter_impl.h:822
Vertex vertex_type
Definition: filter.h:732
TGridFunction::template traits< vertex_type >::const_iterator VertexIterator
Definition: filter.h:747
PeriodicAttachmentAccessor< vertex_type, ANumber > aVertexNumber
Definition: filter.h:750
domain_type::grid_type grid_type
Definition: filter.h:735
FV1BoxFilter(SmartPtr< TGridFunction > u)
Definition: filter.h:792
TGridFunction::domain_type domain_type
Definition: filter.h:726
number width(vertex_type *vrt)
Definition: filter.h:771
ANumber m_aSideVolume
Definition: filter.h:813
FilterImplBaseClass< FV1BoxFilter< TGridFunction >, TGridFunction > base_type
Definition: filter.h:717
PeriodicAttachmentAccessor< side_type, ANumber > aSideNumber
Definition: filter.h:749
aSideNumber m_acSideVolume
Definition: filter.h:814
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
Definition: filter.h:723
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:764
ANumber m_aVertexVolume
Definition: filter.h:815
SmartPtr< TGridFunction > m_uInfo
Definition: filter.h:819
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
Definition: filter.h:741
void compute_filterwidth_fv1()
Definition: filter_impl.h:721
aVertexNumber m_acVertexVolume
Definition: filter.h:816
~FV1BoxFilter()
Definition: filter.h:805
Definition: filter.h:832
Vertex vertex_type
Definition: filter.h:850
PeriodicAttachmentAccessor< vertex_type, ANumber > aVertexNumber
Definition: filter.h:868
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
Definition: filter.h:841
domain_type::position_accessor_type position_accessor_type
Definition: filter.h:856
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaU)
Definition: filter.h:877
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:885
domain_type::grid_type grid_type
Definition: filter.h:853
PeriodicAttachmentAccessor< side_type, ANumber > aSideNumber
Definition: filter.h:867
void apply_filter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaU)
Definition: filter_impl.h:930
~FVCRBoxFilter()
Definition: filter.h:924
TGridFunction::template traits< vertex_type >::const_iterator VertexIterator
Definition: filter.h:865
FilterImplBaseClass< FVCRBoxFilter< TGridFunction >, TGridFunction > base_type
Definition: filter.h:835
number width(vertex_type *vrt)
Definition: filter.h:896
elem_type::side side_type
Definition: filter.h:847
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
Definition: filter.h:859
FVCRBoxFilter(SmartPtr< TGridFunction > u)
Definition: filter.h:915
void compute_filterwidth()
Definition: filter.h:900
std::vector< WallObject< TGridFunction > > m_walls
Definition: filter.h:939
TGridFunction::domain_type domain_type
Definition: filter.h:844
number width(side_type *side)
Definition: filter.h:898
SmartPtr< TGridFunction > m_uInfo
Definition: filter.h:937
ANumber m_aSideVolume
Definition: filter.h:931
static const size_t dim
Definition: filter.h:838
void compute_filterwidth_fv1()
Definition: filter.h:908
void add_wall(WallObject< TGridFunction > w)
Definition: filter.h:891
aSideNumber m_acSideVolume
Definition: filter.h:932
TGridFunction::template traits< side_type >::const_iterator SideIterator
Definition: filter.h:862
void compute_filterwidth_fvcr()
Definition: filter_impl.h:1027
Definition: filter.h:128
MathVector< dim > type0
Definition: filter.h:149
virtual number width(vertex_type *vrt)
Definition: filter.h:184
static const size_t dim
dimension
Definition: filter.h:131
virtual void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:178
number type1
Definition: filter.h:150
virtual void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type1 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type1 > > &aaU)
Definition: filter.h:171
virtual number width(side_type *side)
Definition: filter.h:186
TGridFunction::domain_type domain_type
domain type
Definition: filter.h:137
virtual void apply(SmartPtr< TGridFunction > u)
Definition: filter.h:182
domain_type::grid_type grid_type
grid type
Definition: filter.h:140
virtual void apply(PeriodicAttachmentAccessor< side_type, Attachment< type1 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type1 > > &aaU)
Definition: filter.h:157
virtual void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaU)
Definition: filter.h:168
virtual ~FilterBaseClass()
Definition: filter.h:191
virtual void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type2 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type2 > > &aaU)
Definition: filter.h:174
MathSymmetricMatrix< dim > type2
Definition: filter.h:151
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
element type
Definition: filter.h:134
virtual void apply(PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaU)
Definition: filter.h:154
Vertex vertex_type
Definition: filter.h:146
virtual void compute_filterwidth()
Definition: filter.h:188
virtual void apply(PeriodicAttachmentAccessor< side_type, Attachment< type2 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type2 > > &aaU)
Definition: filter.h:160
elem_type::side side_type
side type
Definition: filter.h:143
virtual void apply(PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:164
FilterBaseClass()
Definition: filter.h:190
domain_type::grid_type grid_type
grid type
Definition: filter.h:210
FilterBaseClass< TGridFunction >::type2 type2
Definition: filter.h:221
const TImpl & getImpl() const
const access to implementation
Definition: filter.h:371
void apply(PeriodicAttachmentAccessor< side_type, Attachment< type1 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type1 > > &aaU)
Definition: filter.h:229
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
element type
Definition: filter.h:204
void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type2 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type2 > > &aaU)
Definition: filter.h:257
FilterBaseClass< TGridFunction >::type1 type1
Definition: filter.h:220
void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:263
TGridFunction::domain_type domain_type
domain type
Definition: filter.h:207
elem_type::side side_type
side type
Definition: filter.h:213
void assignVal(MathVector< 2 > &v, size_t ind, number value)
Definition: filter.h:350
void assignVal(MathVector< 3 > &v, size_t ind, number value)
Definition: filter.h:354
TImpl & getImpl()
access to implementation
Definition: filter.h:368
static const size_t dim
dimension
Definition: filter.h:201
void copyWallData(PeriodicAttachmentAccessor< TElem, Attachment< VType > > &acUHat, SmartPtr< TGridFunction > u, std::vector< WallObject< TGridFunction > > walls)
Definition: filter.h:299
void apply(PeriodicAttachmentAccessor< side_type, Attachment< type2 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type2 > > &aaU)
Definition: filter.h:234
Vertex vertex_type
Definition: filter.h:216
void copyWallData(PeriodicAttachmentAccessor< TElem, Attachment< VType > > &acUHat, PeriodicAttachmentAccessor< TElem, Attachment< VType > > &acU, SmartPtr< TGridFunction > u, std::vector< WallObject< TGridFunction > > walls)
Definition: filter.h:325
void apply(SmartPtr< TGridFunction > u)
Definition: filter.h:290
void apply(PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaUHat, PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaU)
Definition: filter.h:224
void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type1 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type1 > > &aaU)
Definition: filter.h:252
void assignVal(number &v, size_t ind, number value)
Definition: filter.h:346
void apply_(SmartPtr< TGridFunction > u)
Definition: filter.h:273
void assignVal(MathSymmetricMatrix< 3 > &v, size_t ind, number value)
Definition: filter.h:362
void assignVal(MathSymmetricMatrix< 2 > &v, size_t ind, number value)
Definition: filter.h:358
FilterBaseClass< TGridFunction >::type0 type0
Definition: filter.h:219
void apply(PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaUHat, PeriodicAttachmentAccessor< vertex_type, Attachment< type0 > > &aaU)
Definition: filter.h:247
void apply(PeriodicAttachmentAccessor< side_type, Attachment< type0 > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:240
Definition: filter.h:519
position_accessor_type m_posAcc
Definition: filter.h:692
number compute_average_element_size(SmartPtr< TGridFunction > u)
Definition: filter_impl.h:355
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:572
TGridFunction::domain_type domain_type
Definition: filter.h:531
PeriodicAttachmentAccessor< vertex_type, ANumber > aVertexNumber
Definition: filter.h:556
TGridFunction::template dim_traits< dim >::const_iterator ElemIterator
element iterator
Definition: filter.h:546
void collectSides(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &acUHat, PeriodicAttachmentAccessor< side_type, Attachment< number > > &acVolume, std::vector< MathVector< dim > > &coord, VType values[DimFV1Geometry< dim >::maxNumSCV], number volumes[DimFV1Geometry< dim >::maxNumSCV], std::vector< side_type * > &sides)
Definition: filter_impl.h:378
void add_wall(WallObject< TGridFunction > w)
Definition: filter.h:637
elem_type::side side_type
Definition: filter.h:534
number m_maxwidth
Definition: filter.h:700
ANumber m_aVertexVolume
Definition: filter.h:689
std::vector< WallObject< TGridFunction > > m_walls
Definition: filter.h:702
ANumber m_aSideVolume
Definition: filter.h:687
TGridFunction::template traits< side_type >::const_iterator SideIterator
side iterator
Definition: filter.h:549
FilterImplBaseClass< VariableBoxFilter< TGridFunction >, TGridFunction > base_type
Definition: filter.h:522
aVertexNumber m_acVertexVolume
Definition: filter.h:690
~VariableBoxFilter()
Definition: filter.h:670
VariableBoxFilter(SmartPtr< TGridFunction > u, SmartPtr< TGridFunction > fwidth, bool initWidth=false)
Definition: filter.h:648
Vertex vertex_type
Definition: filter.h:537
void apply_filter(PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< vertex_type, Attachment< VType > > &aaU)
Definition: filter.h:565
TGridFunction::template dim_traits< dim >::grid_base_object elem_type
Definition: filter.h:528
aSideNumber m_acSideVolume
Definition: filter.h:688
number width(side_type *side)
Definition: filter.h:586
number width(vertex_type *vrt)
Definition: filter.h:580
void check_volume_sizes(PeriodicAttachmentAccessor< TElem, Attachment< VType > > &acUHat, SmartPtr< TGridFunction > u)
Definition: filter.h:642
domain_type::grid_type grid_type
Definition: filter.h:540
SmartPtr< TGridFunction > m_width
Definition: filter.h:698
domain_type::position_accessor_type position_accessor_type
Definition: filter.h:543
TGridFunction::template traits< vertex_type >::const_iterator VertexIterator
vertex iterator
Definition: filter.h:552
number max_width(number width)
Definition: filter.h:614
void init_width(number width)
Definition: filter.h:593
SmartPtr< TGridFunction > m_uInfo
Definition: filter.h:695
static const size_t dim
Definition: filter.h:525
void apply_filter(PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaUHat, SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< side_type, Attachment< VType > > &aaU)
Definition: filter_impl.h:463
PeriodicAttachmentAccessor< side_type, ANumber > aSideNumber
Definition: filter.h:555
Definition: filter.h:51
int m_subset_index
Definition: filter.h:65
WallObject(SmartPtr< TGridFunction > u, size_t direction, number coord, const char *subset)
Definition: filter.h:59
number dist(MathVector< TGridFunction::dim > co)
Definition: filter.h:56
size_t m_direction
Definition: filter.h:66
number m_coord
Definition: filter.h:67
number coord()
Definition: filter.h:54
int si()
Definition: filter.h:53
size_t direction()
Definition: filter.h:55
bool access(Grid &g, TAttachment &a)
bool is_slave(TElem *) const
Grid::VertexAttachmentAccessor< position_attachment_type > position_accessor_type
SmartPtr< TGrid > grid()
static const int dim
TGrid grid_type
size_t num_subsets() const
const NullSmartPtr SPNULL
#define UG_THROW(msg)
#define UG_LOG(msg)
double number
void initAttachment(PeriodicAttachmentAccessor< elem_type, attachment_type > &accessor, attachment_type &attachment, grid_type &grid)
Definition: filter.h:119
void copyAttachmentToGridFunction(SmartPtr< TGridFunction > u, PeriodicAttachmentAccessor< elem_type, Attachment< MathVector< dim > > > &aaU)
Definition: filter.h:71
void copyGridFunctionToAttachment(PeriodicAttachmentAccessor< elem_type, Attachment< MathVector< dim > > > &aaU, SmartPtr< TGridFunction > u)
Definition: filter.h:95
const number & DoFRef(const TMatrix &mat, const DoFIndex &iInd, const DoFIndex &jInd)
geometry_traits< TElem >::const_iterator const_iterator
Definition: filter.h:375
size_t firstIndex
Definition: filter.h:376
MathVector< dim > periodicOffset
Definition: filter.h:377