Exemplo n.º 1
0
	//Lenze-Thirring precession:
	triple Force::L_T()
	{
		double Xa[6];
		double Xb[6];
		double Va[3], Voz[3];
		double H[3];
		double Flenze[3], FlenzeI[3];

		Xa[0] = X[0];
		Xa[1] = X[1];
		Xa[2] = X[2];

		Xa[3] = V[0];
		Xa[4] = V[1];
		Xa[5] = V[2];
		double R = X.getAbs();

		double Rp = (Global::R[0] + Global::R[1] + Global::R[2]) / 3.0;

		double  oz = Global::oz;
		Voz[0] = 0.0;
		Voz[1] = 0.0;
		Voz[2] = oz;

		trsv(time, 1, Global::IDC, Xa, Xb);

		Va[0] = Xb[3];
		Va[1] = Xb[4];
		Va[2] = Xb[5];

		double k = 2.0*mu*Rp*Rp / (5.0*SoL*SoL*R*R*R);
		for (int i = 1; i < 3; i++) {
			H[i] = k*(Voz[i] - (3.0*Xb[i] * oz*Xb[2]) / (R*R));
		}
		Flenze[0] = 2.0*(Va[1] * H[2] - Va[2] * H[1]);
		Flenze[1] = 2.0*(Va[2] * H[0] - Va[0] * H[2]);
		Flenze[2] = 2.0*(Va[0] * H[1] - Va[1] * H[0]);

		trpos(time, Global::IDC, 1, Flenze, FlenzeI);

		return FlenzeI;
	}
Exemplo n.º 2
0
void trsv(
	matrix_expression<TriangularA> const &A, 
	vector_expression<V> &b,
	boost::mpl::true_
){
	SIZE_CHECK(A().size1() == A().size2());
	SIZE_CHECK(A().size1()== b().size());
	CBLAS_DIAG cblasUnit = Unit?CblasUnit:CblasNonUnit;
	CBLAS_ORDER const storOrd= (CBLAS_ORDER)storage_order<typename TriangularA::orientation>::value;
	CBLAS_UPLO uplo = Upper?CblasUpper:CblasLower;
	

	int const n = A().size1();

	trsv(storOrd, uplo, CblasNoTrans,cblasUnit, n,
	        traits::storage(A),
	        traits::leading_dimension(A),
	        traits::storage(b),
	        traits::stride(b)
	);
}