Пример #1
0
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]));
   }
}
Пример #2
0
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);
   }
}
Пример #3
0
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;
      }
}
Пример #4
0
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);

}
Пример #6
0
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;
      }
   }
}