Exemple #1
0
  void FluxFluxBoundary<D> ::
  T_CalcElementMatrix (const FiniteElement & base_fel,
		       const ElementTransformation & eltrans, 
		       FlatMatrix<SCAL> elmat,
		       LocalHeap & lh) const {

    const CompoundFiniteElement &  cfel      // product space 
      =  dynamic_cast<const CompoundFiniteElement&> (base_fel);
    
    // This FE is already multiplied by normal:
    const HDivNormalFiniteElement<D-1> & fel_q = // q.n space
      dynamic_cast<const HDivNormalFiniteElement<D-1>&> (cfel[GetInd1()]);

    const HDivNormalFiniteElement<D-1> & fel_r = // r.n space
      dynamic_cast<const HDivNormalFiniteElement<D-1>&> (cfel[GetInd2()]);
    
    elmat = SCAL(0.0);

    IntRange rq = cfel.GetRange(GetInd1());
    IntRange rr = cfel.GetRange(GetInd2());
    int ndofq = rq.Size();
    int ndofr = rr.Size();
 
    FlatMatrix<SCAL> submat(ndofr, ndofq, lh);  
    submat = SCAL(0.0);
    
    FlatVector<> qshape(fel_q.GetNDof(), lh);
    FlatVector<> rshape(fel_r.GetNDof(), lh);

    const IntegrationRule ir(fel_q.ElementType(), 
			     fel_q.Order() + fel_r.Order());

    for (int i = 0 ; i < ir.GetNIP(); i++) {

      MappedIntegrationPoint<D-1,D> mip(ir[i], eltrans);

      SCAL cc = coeff_c -> T_Evaluate<SCAL>(mip);

      fel_r.CalcShape (ir[i], rshape);
      fel_q.CalcShape (ir[i], qshape);
      // mapped q.n-shape is simply reference q.n-shape / measure
      qshape *= 1.0/mip.GetMeasure();
      rshape *= 1.0/mip.GetMeasure();
      //                              [ndofr x 1]  [1 x ndofq]
      submat += (cc*mip.GetWeight()) * rshape  * Trans(qshape);
    }       

    elmat.Rows(rr).Cols(rq) += submat;
    if (GetInd1() != GetInd2())
      elmat.Rows(rq).Cols(rr) += Conj(Trans(submat));
  }
Exemple #2
0
void Primitive::drawBlock(sf::RenderWindow& render, int positionX, int positionY, BlockColor color)
{
    RectangleShape rshape(Vector2f(static_cast<float>(blockSize), static_cast<float>(blockSize)));
    rshape.setPosition(Vector2f(static_cast<float>(positionX * blockSize), static_cast<float>(positionY * blockSize)));
    switch (color)
    {
    case BlockColor::BLUE:
        rshape.setFillColor(Color::Blue);
        rshape.setOutlineColor(Color::Blue);
        render.draw(rshape);
        break;
    case BlockColor::GREEN:
        rshape.setFillColor(Color::Green);
        rshape.setOutlineColor(Color::Green);
        render.draw(rshape);
        break;
    case BlockColor::RED:
        rshape.setFillColor(Color::Red);
        rshape.setOutlineColor(Color::Red);
        render.draw(rshape);
        break;
    case BlockColor::YELLOW:
        rshape.setFillColor(Color::Yellow);
        rshape.setOutlineColor(Color::Yellow);
        render.draw(rshape);
        break;
    case BlockColor::CFFFF66:
        rshape.setFillColor(Color(0xFF, 0xFF, 0x66));
        rshape.setOutlineColor(Color(0xFF, 0xFF, 0x66));
        render.draw(rshape);
        break;
    case BlockColor::CFFCC33:
        rshape.setFillColor(Color(0xFF, 0xCC, 0x33));
        rshape.setOutlineColor(Color(0xFF, 0xCC, 0x33));
        render.draw(rshape);
        break;
    case BlockColor::CFF6600:
        rshape.setFillColor(Color(0xFF, 0x66, 0x00));
        rshape.setOutlineColor(Color(0xFF, 0x66, 0x00));
        render.draw(rshape);
        break;
    case BlockColor::CFF0066:
        rshape.setFillColor(Color(0xFF, 0x00, 0x66));
        rshape.setOutlineColor(Color(0xFF, 0x00, 0x66));
        render.draw(rshape);
        break;
    case BlockColor::CFF0099:
        rshape.setFillColor(Color(0xFF, 0x00, 0x99));
        rshape.setOutlineColor(Color(0xFF, 0x00, 0x99));
        render.draw(rshape);
        break;
    case BlockColor::CCC00CC:
        rshape.setFillColor(Color(0xCC, 0x00, 0xCC));
        rshape.setOutlineColor(Color(0xCC, 0x00, 0xCC));
        render.draw(rshape);
        break;
    case BlockColor::C6600CC:
        rshape.setFillColor(Color(0x66, 0x00, 0xCC));
        rshape.setOutlineColor(Color(0x66, 0x00, 0xCC));
        render.draw(rshape);
        break;
    case BlockColor::C3300CC:
        rshape.setFillColor(Color(0x33, 0x00, 0xCC));
        rshape.setOutlineColor(Color(0x33, 0x00, 0xCC));
        render.draw(rshape);
        break;
    case BlockColor::C00CCFF:
        rshape.setFillColor(Color(0x00, 0xCC, 0xFF));
        rshape.setOutlineColor(Color(0x00, 0xCC, 0xFF));
        render.draw(rshape);
        break;
    case BlockColor::C33FFCC:
        rshape.setFillColor(Color(0x33, 0xFF, 0xCC));
        rshape.setOutlineColor(Color(0x33, 0xFF, 0xCC));
        render.draw(rshape);
        break;
    case BlockColor::C33FF66:
        rshape.setFillColor(Color(0x33, 0xFF, 0x66));
        rshape.setOutlineColor(Color(0x33, 0xFF, 0x66));
        render.draw(rshape);
        break;
    case BlockColor::C33FF00:
        rshape.setFillColor(Color(0x33, 0xFF, 0x00));
        rshape.setOutlineColor(Color(0x33, 0xFF, 0x00));
        render.draw(rshape);
        break;
    case BlockColor::CCCFF33:
        rshape.setFillColor(Color(0xCC, 0xFF, 0x33));
        rshape.setOutlineColor(Color(0xCC, 0xFF, 0x33));
        render.draw(rshape);
        break;
    case BlockColor::C999999:
        rshape.setFillColor(Color(0x99, 0x99, 0x99));
        rshape.setOutlineColor(Color(0x99, 0x99, 0x99));
        render.draw(rshape);
        break;
    default:
        break;
    }
}