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