void DC2DT6::Convection(Point<real_t>& v, real_t coef) { for (size_t j=1; j<=6; j++) { eMat(4,j) += _a3*coef*(v*_tr->DSh(j,_s[0])); eMat(5,j) += _a3*coef*(v*_tr->DSh(j,_s[1])); eMat(6,j) += _a3*coef*(v*_tr->DSh(j,_s[2])); } }
void DC2DT6::Convection(const Vect<real_t>& v, real_t coef) { LocalMatrix<real_t,6,2> ve; for (size_t i=1; i<=6; i++) { size_t n = _theElement->getNodeLabel(i); ve(i,1) = v(2*n-1); ve(i,2) = v(2*n ); } for (size_t j=1; j<=6; j++) { eMat(4,j) += _a3*coef*(ve(4,1)*(_tr->DSh(j,_s[0])).x+ve(4,2)*(_tr->DSh(j,_s[0])).y); eMat(5,j) += _a3*coef*(ve(5,1)*(_tr->DSh(j,_s[1])).x+ve(5,2)*(_tr->DSh(j,_s[1])).y); eMat(6,j) += _a3*coef*(ve(6,1)*(_tr->DSh(j,_s[2])).x+ve(6,2)*(_tr->DSh(j,_s[2])).y); } }
void DC2DT6::Diffusion(real_t coef) { real_t a = _a3*coef*_diff; for (size_t i=1; i<=6; i++) for (size_t j=1; j<=6; j++) { real_t c = 0; for (size_t k=0; k<3; k++) c += _tr->DSh(i,_s[k])*_tr->DSh(j,_s[k]); eMat(i,j) += a*c; } }
Eigen::MatrixXd Reconstruction3D::computeP(const Eigen::MatrixXd& F) { Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::FullPivHouseholderQRPreconditioner> svd(F.transpose(), Eigen::ComputeFullU | Eigen::ComputeFullV); //Eigen::JacobiSVD<Eigen::MatrixXd> svd(F.transpose(), Eigen::ComputeFullV); Eigen::MatrixXd kernel = svd.matrixV().col(svd.matrixV().cols() - 1); Eigen::Matrix3d eMat(3, 3); eMat(0, 0) = kernel(0); eMat(0, 1) = kernel(1); eMat(0, 2) = kernel(2); eMat(1, 0) = kernel(3); eMat(1, 1) = kernel(4); eMat(1, 2) = kernel(5); eMat(2, 0) = kernel(6); eMat(2, 1) = kernel(7); eMat(2, 2) = kernel(8); Eigen::Vector3d e(-kernel(5), kernel(2), -kernel(1)); Eigen::MatrixXd Fe(3, 4); Fe.block(0, 0, 3, 3) = F; Fe.col(3) = e; //Fe(0, 3) = -e(1, 2); //Fe(1, 3) = e(0, 2); //Fe(2, 3) = -e(0, 1); Eigen::MatrixXd P = eMat * Fe; std::cout << std::fixed << std::endl << "[Info] Epipole : " << std::endl << e.transpose() << std::endl << std::endl << "[Info] Epipole Skew Matrix : " << std::endl << eMat << std::endl << std::endl << "[Info] F : " << std::endl << F << std::endl << std::endl << "[Info] Fe : " << std::endl << Fe << std::endl << std::endl << "[Info] P' : " << std::endl << P << std::endl << std::endl; return P; }
/*! * \brief calcExpansion estimates the thermal expansion value for corrections. * \param tp * \param SET */ void SimpleTemperatureCompensation::calcExpansion(TrafoParam &tp) { FunctionConfiguration myConfig = this->getFunctionConfiguration(); QMap<QString,QString> stringParameter = myConfig.stringParameter; QMap<QString,double> doubleParameter = myConfig.doubleParameter; QString material = ""; double actTemp = 20.0; double refTemp = 20.0; double tempAccuracy = 0.0; double expansionCoefficient = 0.0; if(stringParameter.contains("material")){ material = static_cast<QString>(stringParameter.find("material").value()); protMaterial = material; expansionCoefficient = Materials::getExpansionCoefficient(material); protExpansionCoeff = QString::number(expansionCoefficient,'f',6); } if(doubleParameter.contains("actualTemperature")){ actTemp = static_cast<double>(doubleParameter.find("actualTemperature").value()); protActTemp = QString::number(actTemp,'f',2); } if(doubleParameter.contains("referenceTemperature")){ refTemp = static_cast<double>(doubleParameter.find("referenceTemperature").value()); protRefTemp = QString::number(refTemp,'f',2); } if(doubleParameter.contains("temperatureAccuracy")){ tempAccuracy = static_cast<double>(doubleParameter.find("temperatureAccuracy").value()); protTempAccuracy = QString::number(tempAccuracy,'f',2); } double expansion = (actTemp-refTemp)*expansionCoefficient; protExpansion = QString::number(expansion,'f',6); double m = 1.0/(1+ (expansion)); OiMat eMat(4,4); for(int i = 0; i < 4; i++){ eMat.setAt(i,i, 1.0); } OiMat scale(4,4); scale.setAt(0,0,m); scale.setAt(1,1,m); scale.setAt(2,2,m); scale.setAt(3,3,1.0); tp.setHomogenMatrix(eMat, eMat, scale); this->calcAccuracy(tp,tempAccuracy,expansion); this->calcAccuracy(tp,tempAccuracy,expansion); }
void EC2D2T3::FEBlock(real_t omega) { real_t c = 0.25*_mu*omega*OFELI_THIRD*_area/_rho; for (size_t i=1; i<=3; i++) { eMat(2*i-1,2*i ) -= c; eMat(2*i ,2*i-1) += c; for (size_t j=1; j<=3; j++) { real_t e = OFELI_THIRD*_area*(_N[i-1]*_N[j-1]); eMat(2*i-1,2*j-1) += e; eMat(2*i ,2*j ) += e; eMat(2*i-1,2*j ) -= c; eMat(2*i ,2*j-1) += c; } } }