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