Example #1
0
long create_mapping(LinPdeSysT & pde_system,
                    std::size_t  pde_index,
                    DomainType const & domain,
                    QuantityContainerT & quantities,
                    long start_index = 0)
{
  typedef typename viennagrid::result_of::cell<DomainType>::type CellTag;

  typedef typename viennagrid::result_of::const_element_range<DomainType, CellTag>::type   CellContainer;
  typedef typename viennagrid::result_of::iterator<CellContainer>::type                    CellIterator;

  typedef typename QuantityContainerT::value_type       QuantityType;

  long map_index = start_index;

  long unknown_id = pde_system.unknown(pde_index)[0].id();

  QuantityType & quan = quantities.at(unknown_id);

  CellContainer cells(domain);
  for (CellIterator cit = cells.begin(); cit != cells.end(); ++cit)
  {
    if (quan.get_unknown_mask(*cit))   // quantity is set to unknown here, so it gets an unknown index assigned
    {
      quan.set_unknown_index(*cit, map_index);
      map_index += pde_system.unknown(pde_index).size();
    }
    else
      quan.set_unknown_index(*cit, -1);
  }

  return map_index;
}
      void operator()(LinPdeSysT const & pde_system,
                      SegmentT   const & segment,
                      StorageType      & storage,
                      MatrixT          & system_matrix,
                      VectorT          & load_vector)
      {
        typedef viennamath::equation                          equ_type;
        typedef viennamath::expr                              expr_type;
        typedef typename expr_type::interface_type            interface_type;
        typedef typename expr_type::numeric_type              numeric_type;

        typedef typename viennagrid::result_of::cell_tag<SegmentT>::type CellTag;

        std::size_t map_index = viennafvm::create_mapping(pde_system, segment, storage);

        system_matrix.clear();
        system_matrix.resize(map_index, map_index, false);
        load_vector.clear();
        load_vector.resize(map_index);


        for (std::size_t pde_index = 0; pde_index < pde_system.size(); ++pde_index)
        {
#ifdef VIENNAFVM_DEBUG
          std::cout << std::endl;
          std::cout << "//" << std::endl;
          std::cout << "//   Equation " << pde_index << std::endl;
          std::cout << "//" << std::endl;
#endif
          assemble(pde_system, pde_index,
                   segment, storage,
                   system_matrix, load_vector);

        } // for pde_index
      } // functor
Example #3
0
long create_mapping(LinPdeSysT & pde_system,
                    DomainType const & domain,
                    QuantityContainerT & quantities)
{
  long next_index = 0;

  for (std::size_t pde_index = 0; pde_index < pde_system.size(); ++pde_index)
  {
    next_index = create_mapping(pde_system, pde_index, domain, quantities, next_index);
  }

  return next_index;
}