void Camera::move(Vector3 delta) { Vector3 localDelta = getLocalVector(delta); eye = eye - localDelta; center = center - localDelta; updateViewMatrix(); }
void PETScVector::copyValues(std::vector<double>& u) const { assert(u.size() == (std::size_t) (getLocalSize() + getGhostSize())); double* loc_x = getLocalVector(); std::copy_n(loc_x, getLocalSize() + getGhostSize(), u.begin()); restoreArray(loc_x); }
void DOFVectorBase<double>::getD2AtQPs( const ElInfo* elInfo, const Quadrature* quad, const FastQuadrature* quadFast, DenseVector<D2Type<double>::type>& d2AtQPs) const { FUNCNAME("DOFVector<double>::getD2AtQPs()"); TEST_EXIT_DBG(quad || quadFast)("neither quad nor quadFast defined\n"); if (quad && quadFast) { TEST_EXIT_DBG(quad == quadFast->getQuadrature()) ("quad != quadFast->quadrature\n"); } TEST_EXIT_DBG(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts()) ("invalid basis functions"); Element* el = elInfo->getElement(); int dow = Global::getGeo(WORLD); int nPoints = quadFast ? quadFast->getQuadrature()->getNumPoints() : quad->getNumPoints(); DenseVector<double> localVec(nBasFcts); getLocalVector(el, localVec); DimMat<double> D2Tmp(dim, dim, 0.0); int parts = Global::getGeo(PARTS, dim); const DimVec<WorldVector<double>>& grdLambda = elInfo->getGrdLambda(); d2AtQPs.change_dim(nPoints); if (quadFast) { for (int iq = 0; iq < nPoints; iq++) { for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) D2Tmp[k][l] = 0.0; for (int i = 0; i < nBasFcts; i++) { for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) D2Tmp[k][l] += localVec[i] * quadFast->getSecDer(iq, i, k, l); } for (int i = 0; i < dow; i++) for (int j = 0; j < dow; j++) { d2AtQPs[iq][i][j] = 0.0; for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) d2AtQPs[iq][i][j] += grdLambda[k][i]*grdLambda[l][j]*D2Tmp[k][l]; } } } else { const BasisFunction* basFcts = feSpace->getBasisFcts(); DimMat<double> D2Phi(dim, dim); for (int iq = 0; iq < nPoints; iq++) { for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) D2Tmp[k][l] = 0.0; for (int i = 0; i < nBasFcts; i++) { WARNING("not tested after index correction\n"); (*(basFcts->getD2Phi(i)))(quad->getLambda(iq), D2Phi); for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) D2Tmp[k][l] += localVec[i] * D2Phi[k][l]; } for (int i = 0; i < dow; i++) for (int j = 0; j < dow; j++) { d2AtQPs[iq][i][j] = 0.0; for (int k = 0; k < parts; k++) for (int l = 0; l < parts; l++) d2AtQPs[iq][i][j] += grdLambda[k][i] * grdLambda[l][j] * D2Tmp[k][l]; } } } }