3 #if HAL_CPU_CLASS >= HAL_CPU_CLASS_150 15 stateStruct(*reinterpret_cast<struct
state_elements *>(&statesArray)),
17 _perf_UpdateFilter(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_UpdateFilter")),
18 _perf_CovariancePrediction(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_CovariancePrediction")),
19 _perf_FuseVelPosNED(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseVelPosNED")),
20 _perf_FuseMagnetometer(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseMagnetometer")),
21 _perf_FuseAirspeed(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseAirspeed")),
22 _perf_FuseSideslip(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseSideslip")),
23 _perf_TerrainOffset(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_TerrainOffset")),
24 _perf_FuseOptFlow(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseOptFlow")),
25 _perf_FuseBodyOdom(hal.util->perf_alloc(
AP_HAL::
Util::PC_ELAPSED,
"EK3_FuseBodyOdom"))
56 if (
AP::ins().get_sample_rate() > 0) {
74 float gps_delay_sec = 0;
75 if (!
AP::gps().get_lag(gps_delay_sec)) {
80 gcs().
send_text(MAV_SEVERITY_ERROR,
"EKF3 waiting for GPS config data");
82 gcs().
send_text(MAV_SEVERITY_WARNING,
"EKF3 waiting for GPS config data");
84 gcs().
send_text(MAV_SEVERITY_INFO,
"EKF3 waiting for GPS config data");
90 maxTimeDelay_ms =
MAX(maxTimeDelay_ms ,
MIN((uint16_t)(gps_delay_sec * 1000.0
f),250));
104 uint16_t ekf_delay_ms = maxTimeDelay_ms + (int)(ceilf((
float)maxTimeDelay_ms * 0.5f));
211 memset(&
P[0][0], 0,
sizeof(
P));
436 float pitch=0, roll=0;
437 if (initAccVec.
length() > 0.001f) {
441 pitch = asinf(initAccVec.
x);
444 roll = atan2f(-initAccVec.
y , -initAccVec.
z);
487 memset(
P, 0,
sizeof(
P));
491 rot_vec_var.
x = rot_vec_var.
y = rot_vec_var.
z =
sq(0.1
f);
506 P[11][11] =
P[10][10];
507 P[12][12] =
P[10][10];
510 P[14][14] =
P[13][13];
511 P[15][15] =
P[13][13];
514 P[17][17] =
P[16][16];
515 P[18][18] =
P[16][16];
518 P[20][20] =
P[19][19];
519 P[21][21] =
P[19][19];
522 P[23][23] =
P[22][22];
545 #if EK3_DISABLE_INTERRUPTS 546 irqstate_t istate = irqsave();
596 #if EK3_DISABLE_INTERRUPTS 716 Vector3f delVelNav = Tbn_temp*delVelNewCorrected;
766 if (quatErr[0] >= 0.0
f) {
771 deltaAngErr.
x = scaler * quatErr[1];
772 deltaAngErr.
y = scaler * quatErr[2];
773 deltaAngErr.
z = scaler * quatErr[3];
779 float errorGain = 0.5f / timeDelay;
783 delAngCorrection = deltaAngErr * errorGain *
dtIMUavg;
815 outputStates.
velocity += velCorrection;
818 outputStates.
position += posCorrection;
867 float alpha = 0.1f *
dt;
876 for (uint8_t i=0; i<=2; i++) processNoiseVariance[i] = dAngBiasVar;
881 for (uint8_t i=3; i<=5; i++) {
882 uint8_t stateIndex = i + 10;
883 if (
P[stateIndex][stateIndex] > 1E-8
f) {
884 processNoiseVariance[i] = dVelBiasVar;
887 processNoiseVariance[i] = 10.0f * dVelBiasVar * (1e-8
f / fmaxf(
P[stateIndex][stateIndex],1e-9
f));
895 for (uint8_t i=6; i<=8; i++) processNoiseVariance[i] = magEarthVar;
896 for (uint8_t i=9; i<=11; i++) processNoiseVariance[i] = magBodyVar;
901 for (uint8_t i=12; i<=13; i++) processNoiseVariance[i] = windVelVar;
922 daxVar = dayVar = dazVar =
sq(
dt*_gyrNoise);
924 dvxVar = dvyVar = dvzVar =
sq(
dt*_accNoise);
934 SF[3] = 2*
q1*SF[2] + 2*
q2*SF[1] + 2*
q3*SF[0];
935 SF[4] = 2*
q0*SF[1] - 2*
q1*SF[0] + 2*
q3*SF[2];
936 SF[5] = 2*
q0*SF[2] + 2*
q2*SF[0] - 2*
q3*SF[1];
937 SF[6] = day/2 - day_b/2;
938 SF[7] = daz/2 - daz_b/2;
939 SF[8] = dax/2 - dax_b/2;
940 SF[9] = dax_b/2 - dax/2;
941 SF[10] = daz_b/2 - daz/2;
942 SF[11] = day_b/2 - day/2;
964 SQ[0] = dvzVar*(SG[5] - 2*
q0*
q1)*(SG[1] - SG[2] - SG[3] + SG[4]) - dvyVar*(SG[5] + 2*
q0*
q1)*(SG[1] - SG[2] + SG[3] - SG[4]) + dvxVar*(SG[6] - 2*
q0*
q2)*(SG[7] + 2*
q0*q3);
965 SQ[1] = dvzVar*(SG[6] + 2*
q0*
q2)*(SG[1] - SG[2] - SG[3] + SG[4]) - dvxVar*(SG[6] - 2*
q0*
q2)*(SG[1] + SG[2] - SG[3] - SG[4]) + dvyVar*(SG[5] + 2*
q0*
q1)*(SG[7] - 2*
q0*q3);
966 SQ[2] = dvzVar*(SG[5] - 2*
q0*
q1)*(SG[6] + 2*
q0*q2) - dvyVar*(SG[7] - 2*
q0*
q3)*(SG[1] - SG[2] + SG[3] - SG[4]) - dvxVar*(SG[7] + 2*
q0*
q3)*(SG[1] + SG[2] - SG[3] - SG[4]);
967 SQ[3] = (dayVar*
q1*SG[0])/2 - (dazVar*
q1*SG[0])/2 - (daxVar*q2*
q3)/4;
968 SQ[4] = (dazVar*q2*SG[0])/2 - (daxVar*q2*SG[0])/2 - (dayVar*
q1*
q3)/4;
969 SQ[5] = (daxVar*q3*SG[0])/2 - (dayVar*q3*SG[0])/2 - (dazVar*
q1*
q2)/4;
970 SQ[6] = (daxVar*
q1*
q2)/4 - (dazVar*q3*SG[0])/2 - (dayVar*
q1*
q2)/4;
971 SQ[7] = (dazVar*
q1*
q3)/4 - (daxVar*
q1*q3)/4 - (dayVar*q2*SG[0])/2;
972 SQ[8] = (dayVar*q2*
q3)/4 - (daxVar*
q1*SG[0])/2 - (dazVar*q2*
q3)/4;
977 SPP[0] = SF[12] + SF[13] - 2*q2*SF[2];
978 SPP[1] = SF[17] - SF[18] - SF[19] + SF[20];
979 SPP[2] = SF[17] - SF[18] + SF[19] - SF[20];
980 SPP[3] = SF[17] + SF[18] - SF[19] - SF[20];
981 SPP[4] = 2*
q0*q2 - 2*
q1*
q3;
982 SPP[5] = 2*
q0*
q1 - 2*q2*
q3;
983 SPP[6] = 2*
q0*q3 - 2*
q1*
q2;
984 SPP[7] = 2*
q0*
q1 + 2*q2*
q3;
985 SPP[8] = 2*
q0*q3 + 2*
q1*
q2;
986 SPP[9] = 2*
q0*q2 + 2*
q1*
q3;
990 nextP[0][0] =
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10] + (daxVar*SQ[10])/4 + SF[9]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) + SF[11]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SF[10]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) + SF[14]*(
P[0][10] +
P[1][10]*SF[9] +
P[2][10]*SF[11] +
P[3][10]*SF[10] +
P[10][10]*SF[14] +
P[11][10]*SF[15] +
P[12][10]*SPP[10]) + SF[15]*(
P[0][11] +
P[1][11]*SF[9] +
P[2][11]*SF[11] +
P[3][11]*SF[10] +
P[10][11]*SF[14] +
P[11][11]*SF[15] +
P[12][11]*SPP[10]) + SPP[10]*(
P[0][12] +
P[1][12]*SF[9] +
P[2][12]*SF[11] +
P[3][12]*SF[10] +
P[10][12]*SF[14] +
P[11][12]*SF[15] +
P[12][12]*SPP[10]) + (dayVar*
sq(q2))/4 + (dazVar*
sq(q3))/4;
991 nextP[0][1] =
P[0][1] + SQ[8] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10] + SF[8]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SF[7]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SF[11]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) - SF[15]*(
P[0][12] +
P[1][12]*SF[9] +
P[2][12]*SF[11] +
P[3][12]*SF[10] +
P[10][12]*SF[14] +
P[11][12]*SF[15] +
P[12][12]*SPP[10]) + SPP[10]*(
P[0][11] +
P[1][11]*SF[9] +
P[2][11]*SF[11] +
P[3][11]*SF[10] +
P[10][11]*SF[14] +
P[11][11]*SF[15] +
P[12][11]*SPP[10]) - (
q0*(
P[0][10] +
P[1][10]*SF[9] +
P[2][10]*SF[11] +
P[3][10]*SF[10] +
P[10][10]*SF[14] +
P[11][10]*SF[15] +
P[12][10]*SPP[10]))/2;
992 nextP[1][1] =
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] + daxVar*SQ[9] - (
P[10][1]*
q0)/2 + SF[8]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*
q0)/2) + SF[7]*(
P[1][2] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*
q0)/2) + SF[11]*(
P[1][3] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*
q0)/2) - SF[15]*(
P[1][12] +
P[0][12]*SF[8] +
P[2][12]*SF[7] +
P[3][12]*SF[11] -
P[12][12]*SF[15] +
P[11][12]*SPP[10] - (
P[10][12]*
q0)/2) + SPP[10]*(
P[1][11] +
P[0][11]*SF[8] +
P[2][11]*SF[7] +
P[3][11]*SF[11] -
P[12][11]*SF[15] +
P[11][11]*SPP[10] - (
P[10][11]*
q0)/2) + (dayVar*
sq(q3))/4 + (dazVar*
sq(q2))/4 - (
q0*(
P[1][10] +
P[0][10]*SF[8] +
P[2][10]*SF[7] +
P[3][10]*SF[11] -
P[12][10]*SF[15] +
P[11][10]*SPP[10] - (
P[10][10]*
q0)/2))/2;
993 nextP[0][2] =
P[0][2] + SQ[7] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10] + SF[6]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SF[10]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) + SF[8]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) + SF[14]*(
P[0][12] +
P[1][12]*SF[9] +
P[2][12]*SF[11] +
P[3][12]*SF[10] +
P[10][12]*SF[14] +
P[11][12]*SF[15] +
P[12][12]*SPP[10]) - SPP[10]*(
P[0][10] +
P[1][10]*SF[9] +
P[2][10]*SF[11] +
P[3][10]*SF[10] +
P[10][10]*SF[14] +
P[11][10]*SF[15] +
P[12][10]*SPP[10]) - (
q0*(
P[0][11] +
P[1][11]*SF[9] +
P[2][11]*SF[11] +
P[3][11]*SF[10] +
P[10][11]*SF[14] +
P[11][11]*SF[15] +
P[12][11]*SPP[10]))/2;
994 nextP[1][2] =
P[1][2] + SQ[5] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*
q0)/2 + SF[6]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*
q0)/2) + SF[10]*(
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] - (
P[10][1]*
q0)/2) + SF[8]*(
P[1][3] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*
q0)/2) + SF[14]*(
P[1][12] +
P[0][12]*SF[8] +
P[2][12]*SF[7] +
P[3][12]*SF[11] -
P[12][12]*SF[15] +
P[11][12]*SPP[10] - (
P[10][12]*
q0)/2) - SPP[10]*(
P[1][10] +
P[0][10]*SF[8] +
P[2][10]*SF[7] +
P[3][10]*SF[11] -
P[12][10]*SF[15] +
P[11][10]*SPP[10] - (
P[10][10]*
q0)/2) - (
q0*(
P[1][11] +
P[0][11]*SF[8] +
P[2][11]*SF[7] +
P[3][11]*SF[11] -
P[12][11]*SF[15] +
P[11][11]*SPP[10] - (
P[10][11]*
q0)/2))/2;
995 nextP[2][2] =
P[2][2] +
P[0][2]*SF[6] +
P[1][2]*SF[10] +
P[3][2]*SF[8] +
P[12][2]*SF[14] -
P[10][2]*SPP[10] + dayVar*SQ[9] + (dazVar*SQ[10])/4 - (
P[11][2]*
q0)/2 + SF[6]*(
P[2][0] +
P[0][0]*SF[6] +
P[1][0]*SF[10] +
P[3][0]*SF[8] +
P[12][0]*SF[14] -
P[10][0]*SPP[10] - (
P[11][0]*
q0)/2) + SF[10]*(
P[2][1] +
P[0][1]*SF[6] +
P[1][1]*SF[10] +
P[3][1]*SF[8] +
P[12][1]*SF[14] -
P[10][1]*SPP[10] - (
P[11][1]*
q0)/2) + SF[8]*(
P[2][3] +
P[0][3]*SF[6] +
P[1][3]*SF[10] +
P[3][3]*SF[8] +
P[12][3]*SF[14] -
P[10][3]*SPP[10] - (
P[11][3]*
q0)/2) + SF[14]*(
P[2][12] +
P[0][12]*SF[6] +
P[1][12]*SF[10] +
P[3][12]*SF[8] +
P[12][12]*SF[14] -
P[10][12]*SPP[10] - (
P[11][12]*
q0)/2) - SPP[10]*(
P[2][10] +
P[0][10]*SF[6] +
P[1][10]*SF[10] +
P[3][10]*SF[8] +
P[12][10]*SF[14] -
P[10][10]*SPP[10] - (
P[11][10]*
q0)/2) + (daxVar*
sq(q3))/4 - (
q0*(
P[2][11] +
P[0][11]*SF[6] +
P[1][11]*SF[10] +
P[3][11]*SF[8] +
P[12][11]*SF[14] -
P[10][11]*SPP[10] - (
P[11][11]*
q0)/2))/2;
996 nextP[0][3] =
P[0][3] + SQ[6] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10] + SF[7]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SF[6]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) + SF[9]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SF[15]*(
P[0][10] +
P[1][10]*SF[9] +
P[2][10]*SF[11] +
P[3][10]*SF[10] +
P[10][10]*SF[14] +
P[11][10]*SF[15] +
P[12][10]*SPP[10]) - SF[14]*(
P[0][11] +
P[1][11]*SF[9] +
P[2][11]*SF[11] +
P[3][11]*SF[10] +
P[10][11]*SF[14] +
P[11][11]*SF[15] +
P[12][11]*SPP[10]) - (q0*(
P[0][12] +
P[1][12]*SF[9] +
P[2][12]*SF[11] +
P[3][12]*SF[10] +
P[10][12]*SF[14] +
P[11][12]*SF[15] +
P[12][12]*SPP[10]))/2;
997 nextP[1][3] =
P[1][3] + SQ[4] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*
q0)/2 + SF[7]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*q0)/2) + SF[6]*(
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] - (
P[10][1]*q0)/2) + SF[9]*(
P[1][2] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*q0)/2) + SF[15]*(
P[1][10] +
P[0][10]*SF[8] +
P[2][10]*SF[7] +
P[3][10]*SF[11] -
P[12][10]*SF[15] +
P[11][10]*SPP[10] - (
P[10][10]*q0)/2) - SF[14]*(
P[1][11] +
P[0][11]*SF[8] +
P[2][11]*SF[7] +
P[3][11]*SF[11] -
P[12][11]*SF[15] +
P[11][11]*SPP[10] - (
P[10][11]*q0)/2) - (q0*(
P[1][12] +
P[0][12]*SF[8] +
P[2][12]*SF[7] +
P[3][12]*SF[11] -
P[12][12]*SF[15] +
P[11][12]*SPP[10] - (
P[10][12]*q0)/2))/2;
998 nextP[2][3] =
P[2][3] + SQ[3] +
P[0][3]*SF[6] +
P[1][3]*SF[10] +
P[3][3]*SF[8] +
P[12][3]*SF[14] -
P[10][3]*SPP[10] - (
P[11][3]*
q0)/2 + SF[7]*(
P[2][0] +
P[0][0]*SF[6] +
P[1][0]*SF[10] +
P[3][0]*SF[8] +
P[12][0]*SF[14] -
P[10][0]*SPP[10] - (
P[11][0]*q0)/2) + SF[6]*(
P[2][1] +
P[0][1]*SF[6] +
P[1][1]*SF[10] +
P[3][1]*SF[8] +
P[12][1]*SF[14] -
P[10][1]*SPP[10] - (
P[11][1]*q0)/2) + SF[9]*(
P[2][2] +
P[0][2]*SF[6] +
P[1][2]*SF[10] +
P[3][2]*SF[8] +
P[12][2]*SF[14] -
P[10][2]*SPP[10] - (
P[11][2]*q0)/2) + SF[15]*(
P[2][10] +
P[0][10]*SF[6] +
P[1][10]*SF[10] +
P[3][10]*SF[8] +
P[12][10]*SF[14] -
P[10][10]*SPP[10] - (
P[11][10]*q0)/2) - SF[14]*(
P[2][11] +
P[0][11]*SF[6] +
P[1][11]*SF[10] +
P[3][11]*SF[8] +
P[12][11]*SF[14] -
P[10][11]*SPP[10] - (
P[11][11]*q0)/2) - (q0*(
P[2][12] +
P[0][12]*SF[6] +
P[1][12]*SF[10] +
P[3][12]*SF[8] +
P[12][12]*SF[14] -
P[10][12]*SPP[10] - (
P[11][12]*q0)/2))/2;
999 nextP[3][3] =
P[3][3] +
P[0][3]*SF[7] +
P[1][3]*SF[6] +
P[2][3]*SF[9] +
P[10][3]*SF[15] -
P[11][3]*SF[14] + (dayVar*SQ[10])/4 + dazVar*SQ[9] - (
P[12][3]*q0)/2 + SF[7]*(
P[3][0] +
P[0][0]*SF[7] +
P[1][0]*SF[6] +
P[2][0]*SF[9] +
P[10][0]*SF[15] -
P[11][0]*SF[14] - (
P[12][0]*
q0)/2) + SF[6]*(
P[3][1] +
P[0][1]*SF[7] +
P[1][1]*SF[6] +
P[2][1]*SF[9] +
P[10][1]*SF[15] -
P[11][1]*SF[14] - (
P[12][1]*
q0)/2) + SF[9]*(
P[3][2] +
P[0][2]*SF[7] +
P[1][2]*SF[6] +
P[2][2]*SF[9] +
P[10][2]*SF[15] -
P[11][2]*SF[14] - (
P[12][2]*
q0)/2) + SF[15]*(
P[3][10] +
P[0][10]*SF[7] +
P[1][10]*SF[6] +
P[2][10]*SF[9] +
P[10][10]*SF[15] -
P[11][10]*SF[14] - (
P[12][10]*
q0)/2) - SF[14]*(
P[3][11] +
P[0][11]*SF[7] +
P[1][11]*SF[6] +
P[2][11]*SF[9] +
P[10][11]*SF[15] -
P[11][11]*SF[14] - (
P[12][11]*
q0)/2) + (daxVar*
sq(q2))/4 - (q0*(
P[3][12] +
P[0][12]*SF[7] +
P[1][12]*SF[6] +
P[2][12]*SF[9] +
P[10][12]*SF[15] -
P[11][12]*SF[14] - (
P[12][12]*q0)/2))/2;
1000 nextP[0][4] =
P[0][4] +
P[1][4]*SF[9] +
P[2][4]*SF[11] +
P[3][4]*SF[10] +
P[10][4]*SF[14] +
P[11][4]*SF[15] +
P[12][4]*SPP[10] + SF[5]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SF[3]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) - SF[4]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) + SPP[0]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SPP[3]*(
P[0][13] +
P[1][13]*SF[9] +
P[2][13]*SF[11] +
P[3][13]*SF[10] +
P[10][13]*SF[14] +
P[11][13]*SF[15] +
P[12][13]*SPP[10]) + SPP[6]*(
P[0][14] +
P[1][14]*SF[9] +
P[2][14]*SF[11] +
P[3][14]*SF[10] +
P[10][14]*SF[14] +
P[11][14]*SF[15] +
P[12][14]*SPP[10]) - SPP[9]*(
P[0][15] +
P[1][15]*SF[9] +
P[2][15]*SF[11] +
P[3][15]*SF[10] +
P[10][15]*SF[14] +
P[11][15]*SF[15] +
P[12][15]*SPP[10]);
1001 nextP[1][4] =
P[1][4] +
P[0][4]*SF[8] +
P[2][4]*SF[7] +
P[3][4]*SF[11] -
P[12][4]*SF[15] +
P[11][4]*SPP[10] - (
P[10][4]*
q0)/2 + SF[5]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*q0)/2) + SF[3]*(
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] - (
P[10][1]*q0)/2) - SF[4]*(
P[1][3] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*q0)/2) + SPP[0]*(
P[1][2] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*q0)/2) + SPP[3]*(
P[1][13] +
P[0][13]*SF[8] +
P[2][13]*SF[7] +
P[3][13]*SF[11] -
P[12][13]*SF[15] +
P[11][13]*SPP[10] - (
P[10][13]*q0)/2) + SPP[6]*(
P[1][14] +
P[0][14]*SF[8] +
P[2][14]*SF[7] +
P[3][14]*SF[11] -
P[12][14]*SF[15] +
P[11][14]*SPP[10] - (
P[10][14]*q0)/2) - SPP[9]*(
P[1][15] +
P[0][15]*SF[8] +
P[2][15]*SF[7] +
P[3][15]*SF[11] -
P[12][15]*SF[15] +
P[11][15]*SPP[10] - (
P[10][15]*q0)/2);
1002 nextP[2][4] =
P[2][4] +
P[0][4]*SF[6] +
P[1][4]*SF[10] +
P[3][4]*SF[8] +
P[12][4]*SF[14] -
P[10][4]*SPP[10] - (
P[11][4]*
q0)/2 + SF[5]*(
P[2][0] +
P[0][0]*SF[6] +
P[1][0]*SF[10] +
P[3][0]*SF[8] +
P[12][0]*SF[14] -
P[10][0]*SPP[10] - (
P[11][0]*q0)/2) + SF[3]*(
P[2][1] +
P[0][1]*SF[6] +
P[1][1]*SF[10] +
P[3][1]*SF[8] +
P[12][1]*SF[14] -
P[10][1]*SPP[10] - (
P[11][1]*q0)/2) - SF[4]*(
P[2][3] +
P[0][3]*SF[6] +
P[1][3]*SF[10] +
P[3][3]*SF[8] +
P[12][3]*SF[14] -
P[10][3]*SPP[10] - (
P[11][3]*q0)/2) + SPP[0]*(
P[2][2] +
P[0][2]*SF[6] +
P[1][2]*SF[10] +
P[3][2]*SF[8] +
P[12][2]*SF[14] -
P[10][2]*SPP[10] - (
P[11][2]*q0)/2) + SPP[3]*(
P[2][13] +
P[0][13]*SF[6] +
P[1][13]*SF[10] +
P[3][13]*SF[8] +
P[12][13]*SF[14] -
P[10][13]*SPP[10] - (
P[11][13]*q0)/2) + SPP[6]*(
P[2][14] +
P[0][14]*SF[6] +
P[1][14]*SF[10] +
P[3][14]*SF[8] +
P[12][14]*SF[14] -
P[10][14]*SPP[10] - (
P[11][14]*q0)/2) - SPP[9]*(
P[2][15] +
P[0][15]*SF[6] +
P[1][15]*SF[10] +
P[3][15]*SF[8] +
P[12][15]*SF[14] -
P[10][15]*SPP[10] - (
P[11][15]*q0)/2);
1003 nextP[3][4] =
P[3][4] +
P[0][4]*SF[7] +
P[1][4]*SF[6] +
P[2][4]*SF[9] +
P[10][4]*SF[15] -
P[11][4]*SF[14] - (
P[12][4]*
q0)/2 + SF[5]*(
P[3][0] +
P[0][0]*SF[7] +
P[1][0]*SF[6] +
P[2][0]*SF[9] +
P[10][0]*SF[15] -
P[11][0]*SF[14] - (
P[12][0]*q0)/2) + SF[3]*(
P[3][1] +
P[0][1]*SF[7] +
P[1][1]*SF[6] +
P[2][1]*SF[9] +
P[10][1]*SF[15] -
P[11][1]*SF[14] - (
P[12][1]*q0)/2) - SF[4]*(
P[3][3] +
P[0][3]*SF[7] +
P[1][3]*SF[6] +
P[2][3]*SF[9] +
P[10][3]*SF[15] -
P[11][3]*SF[14] - (
P[12][3]*q0)/2) + SPP[0]*(
P[3][2] +
P[0][2]*SF[7] +
P[1][2]*SF[6] +
P[2][2]*SF[9] +
P[10][2]*SF[15] -
P[11][2]*SF[14] - (
P[12][2]*q0)/2) + SPP[3]*(
P[3][13] +
P[0][13]*SF[7] +
P[1][13]*SF[6] +
P[2][13]*SF[9] +
P[10][13]*SF[15] -
P[11][13]*SF[14] - (
P[12][13]*q0)/2) + SPP[6]*(
P[3][14] +
P[0][14]*SF[7] +
P[1][14]*SF[6] +
P[2][14]*SF[9] +
P[10][14]*SF[15] -
P[11][14]*SF[14] - (
P[12][14]*q0)/2) - SPP[9]*(
P[3][15] +
P[0][15]*SF[7] +
P[1][15]*SF[6] +
P[2][15]*SF[9] +
P[10][15]*SF[15] -
P[11][15]*SF[14] - (
P[12][15]*q0)/2);
1004 nextP[4][4] =
P[4][4] +
P[0][4]*SF[5] +
P[1][4]*SF[3] -
P[3][4]*SF[4] +
P[2][4]*SPP[0] +
P[13][4]*SPP[3] +
P[14][4]*SPP[6] -
P[15][4]*SPP[9] + dvyVar*
sq(SG[7] - 2*q0*q3) + dvzVar*
sq(SG[6] + 2*q0*q2) + SF[5]*(
P[4][0] +
P[0][0]*SF[5] +
P[1][0]*SF[3] -
P[3][0]*SF[4] +
P[2][0]*SPP[0] +
P[13][0]*SPP[3] +
P[14][0]*SPP[6] -
P[15][0]*SPP[9]) + SF[3]*(
P[4][1] +
P[0][1]*SF[5] +
P[1][1]*SF[3] -
P[3][1]*SF[4] +
P[2][1]*SPP[0] +
P[13][1]*SPP[3] +
P[14][1]*SPP[6] -
P[15][1]*SPP[9]) - SF[4]*(
P[4][3] +
P[0][3]*SF[5] +
P[1][3]*SF[3] -
P[3][3]*SF[4] +
P[2][3]*SPP[0] +
P[13][3]*SPP[3] +
P[14][3]*SPP[6] -
P[15][3]*SPP[9]) + SPP[0]*(
P[4][2] +
P[0][2]*SF[5] +
P[1][2]*SF[3] -
P[3][2]*SF[4] +
P[2][2]*SPP[0] +
P[13][2]*SPP[3] +
P[14][2]*SPP[6] -
P[15][2]*SPP[9]) + SPP[3]*(
P[4][13] +
P[0][13]*SF[5] +
P[1][13]*SF[3] -
P[3][13]*SF[4] +
P[2][13]*SPP[0] +
P[13][13]*SPP[3] +
P[14][13]*SPP[6] -
P[15][13]*SPP[9]) + SPP[6]*(
P[4][14] +
P[0][14]*SF[5] +
P[1][14]*SF[3] -
P[3][14]*SF[4] +
P[2][14]*SPP[0] +
P[13][14]*SPP[3] +
P[14][14]*SPP[6] -
P[15][14]*SPP[9]) - SPP[9]*(
P[4][15] +
P[0][15]*SF[5] +
P[1][15]*SF[3] -
P[3][15]*SF[4] +
P[2][15]*SPP[0] +
P[13][15]*SPP[3] +
P[14][15]*SPP[6] -
P[15][15]*SPP[9]) + dvxVar*
sq(SG[1] + SG[2] - SG[3] - SG[4]);
1005 nextP[0][5] =
P[0][5] +
P[1][5]*SF[9] +
P[2][5]*SF[11] +
P[3][5]*SF[10] +
P[10][5]*SF[14] +
P[11][5]*SF[15] +
P[12][5]*SPP[10] + SF[4]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SF[3]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SF[5]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) - SPP[0]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) - SPP[8]*(
P[0][13] +
P[1][13]*SF[9] +
P[2][13]*SF[11] +
P[3][13]*SF[10] +
P[10][13]*SF[14] +
P[11][13]*SF[15] +
P[12][13]*SPP[10]) + SPP[2]*(
P[0][14] +
P[1][14]*SF[9] +
P[2][14]*SF[11] +
P[3][14]*SF[10] +
P[10][14]*SF[14] +
P[11][14]*SF[15] +
P[12][14]*SPP[10]) + SPP[5]*(
P[0][15] +
P[1][15]*SF[9] +
P[2][15]*SF[11] +
P[3][15]*SF[10] +
P[10][15]*SF[14] +
P[11][15]*SF[15] +
P[12][15]*SPP[10]);
1006 nextP[1][5] =
P[1][5] +
P[0][5]*SF[8] +
P[2][5]*SF[7] +
P[3][5]*SF[11] -
P[12][5]*SF[15] +
P[11][5]*SPP[10] - (
P[10][5]*
q0)/2 + SF[4]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*q0)/2) + SF[3]*(
P[1][2] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*q0)/2) + SF[5]*(
P[1][3] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*q0)/2) - SPP[0]*(
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] - (
P[10][1]*q0)/2) - SPP[8]*(
P[1][13] +
P[0][13]*SF[8] +
P[2][13]*SF[7] +
P[3][13]*SF[11] -
P[12][13]*SF[15] +
P[11][13]*SPP[10] - (
P[10][13]*q0)/2) + SPP[2]*(
P[1][14] +
P[0][14]*SF[8] +
P[2][14]*SF[7] +
P[3][14]*SF[11] -
P[12][14]*SF[15] +
P[11][14]*SPP[10] - (
P[10][14]*q0)/2) + SPP[5]*(
P[1][15] +
P[0][15]*SF[8] +
P[2][15]*SF[7] +
P[3][15]*SF[11] -
P[12][15]*SF[15] +
P[11][15]*SPP[10] - (
P[10][15]*q0)/2);
1007 nextP[2][5] =
P[2][5] +
P[0][5]*SF[6] +
P[1][5]*SF[10] +
P[3][5]*SF[8] +
P[12][5]*SF[14] -
P[10][5]*SPP[10] - (
P[11][5]*
q0)/2 + SF[4]*(
P[2][0] +
P[0][0]*SF[6] +
P[1][0]*SF[10] +
P[3][0]*SF[8] +
P[12][0]*SF[14] -
P[10][0]*SPP[10] - (
P[11][0]*q0)/2) + SF[3]*(
P[2][2] +
P[0][2]*SF[6] +
P[1][2]*SF[10] +
P[3][2]*SF[8] +
P[12][2]*SF[14] -
P[10][2]*SPP[10] - (
P[11][2]*q0)/2) + SF[5]*(
P[2][3] +
P[0][3]*SF[6] +
P[1][3]*SF[10] +
P[3][3]*SF[8] +
P[12][3]*SF[14] -
P[10][3]*SPP[10] - (
P[11][3]*q0)/2) - SPP[0]*(
P[2][1] +
P[0][1]*SF[6] +
P[1][1]*SF[10] +
P[3][1]*SF[8] +
P[12][1]*SF[14] -
P[10][1]*SPP[10] - (
P[11][1]*q0)/2) - SPP[8]*(
P[2][13] +
P[0][13]*SF[6] +
P[1][13]*SF[10] +
P[3][13]*SF[8] +
P[12][13]*SF[14] -
P[10][13]*SPP[10] - (
P[11][13]*q0)/2) + SPP[2]*(
P[2][14] +
P[0][14]*SF[6] +
P[1][14]*SF[10] +
P[3][14]*SF[8] +
P[12][14]*SF[14] -
P[10][14]*SPP[10] - (
P[11][14]*q0)/2) + SPP[5]*(
P[2][15] +
P[0][15]*SF[6] +
P[1][15]*SF[10] +
P[3][15]*SF[8] +
P[12][15]*SF[14] -
P[10][15]*SPP[10] - (
P[11][15]*q0)/2);
1008 nextP[3][5] =
P[3][5] +
P[0][5]*SF[7] +
P[1][5]*SF[6] +
P[2][5]*SF[9] +
P[10][5]*SF[15] -
P[11][5]*SF[14] - (
P[12][5]*
q0)/2 + SF[4]*(
P[3][0] +
P[0][0]*SF[7] +
P[1][0]*SF[6] +
P[2][0]*SF[9] +
P[10][0]*SF[15] -
P[11][0]*SF[14] - (
P[12][0]*q0)/2) + SF[3]*(
P[3][2] +
P[0][2]*SF[7] +
P[1][2]*SF[6] +
P[2][2]*SF[9] +
P[10][2]*SF[15] -
P[11][2]*SF[14] - (
P[12][2]*q0)/2) + SF[5]*(
P[3][3] +
P[0][3]*SF[7] +
P[1][3]*SF[6] +
P[2][3]*SF[9] +
P[10][3]*SF[15] -
P[11][3]*SF[14] - (
P[12][3]*q0)/2) - SPP[0]*(
P[3][1] +
P[0][1]*SF[7] +
P[1][1]*SF[6] +
P[2][1]*SF[9] +
P[10][1]*SF[15] -
P[11][1]*SF[14] - (
P[12][1]*q0)/2) - SPP[8]*(
P[3][13] +
P[0][13]*SF[7] +
P[1][13]*SF[6] +
P[2][13]*SF[9] +
P[10][13]*SF[15] -
P[11][13]*SF[14] - (
P[12][13]*q0)/2) + SPP[2]*(
P[3][14] +
P[0][14]*SF[7] +
P[1][14]*SF[6] +
P[2][14]*SF[9] +
P[10][14]*SF[15] -
P[11][14]*SF[14] - (
P[12][14]*q0)/2) + SPP[5]*(
P[3][15] +
P[0][15]*SF[7] +
P[1][15]*SF[6] +
P[2][15]*SF[9] +
P[10][15]*SF[15] -
P[11][15]*SF[14] - (
P[12][15]*q0)/2);
1009 nextP[4][5] =
P[4][5] + SQ[2] +
P[0][5]*SF[5] +
P[1][5]*SF[3] -
P[3][5]*SF[4] +
P[2][5]*SPP[0] +
P[13][5]*SPP[3] +
P[14][5]*SPP[6] -
P[15][5]*SPP[9] + SF[4]*(
P[4][0] +
P[0][0]*SF[5] +
P[1][0]*SF[3] -
P[3][0]*SF[4] +
P[2][0]*SPP[0] +
P[13][0]*SPP[3] +
P[14][0]*SPP[6] -
P[15][0]*SPP[9]) + SF[3]*(
P[4][2] +
P[0][2]*SF[5] +
P[1][2]*SF[3] -
P[3][2]*SF[4] +
P[2][2]*SPP[0] +
P[13][2]*SPP[3] +
P[14][2]*SPP[6] -
P[15][2]*SPP[9]) + SF[5]*(
P[4][3] +
P[0][3]*SF[5] +
P[1][3]*SF[3] -
P[3][3]*SF[4] +
P[2][3]*SPP[0] +
P[13][3]*SPP[3] +
P[14][3]*SPP[6] -
P[15][3]*SPP[9]) - SPP[0]*(
P[4][1] +
P[0][1]*SF[5] +
P[1][1]*SF[3] -
P[3][1]*SF[4] +
P[2][1]*SPP[0] +
P[13][1]*SPP[3] +
P[14][1]*SPP[6] -
P[15][1]*SPP[9]) - SPP[8]*(
P[4][13] +
P[0][13]*SF[5] +
P[1][13]*SF[3] -
P[3][13]*SF[4] +
P[2][13]*SPP[0] +
P[13][13]*SPP[3] +
P[14][13]*SPP[6] -
P[15][13]*SPP[9]) + SPP[2]*(
P[4][14] +
P[0][14]*SF[5] +
P[1][14]*SF[3] -
P[3][14]*SF[4] +
P[2][14]*SPP[0] +
P[13][14]*SPP[3] +
P[14][14]*SPP[6] -
P[15][14]*SPP[9]) + SPP[5]*(
P[4][15] +
P[0][15]*SF[5] +
P[1][15]*SF[3] -
P[3][15]*SF[4] +
P[2][15]*SPP[0] +
P[13][15]*SPP[3] +
P[14][15]*SPP[6] -
P[15][15]*SPP[9]);
1010 nextP[5][5] =
P[5][5] +
P[0][5]*SF[4] +
P[2][5]*SF[3] +
P[3][5]*SF[5] -
P[1][5]*SPP[0] -
P[13][5]*SPP[8] +
P[14][5]*SPP[2] +
P[15][5]*SPP[5] + dvxVar*
sq(SG[7] + 2*q0*q3) + dvzVar*
sq(SG[5] - 2*q0*
q1) + SF[4]*(
P[5][0] +
P[0][0]*SF[4] +
P[2][0]*SF[3] +
P[3][0]*SF[5] -
P[1][0]*SPP[0] -
P[13][0]*SPP[8] +
P[14][0]*SPP[2] +
P[15][0]*SPP[5]) + SF[3]*(
P[5][2] +
P[0][2]*SF[4] +
P[2][2]*SF[3] +
P[3][2]*SF[5] -
P[1][2]*SPP[0] -
P[13][2]*SPP[8] +
P[14][2]*SPP[2] +
P[15][2]*SPP[5]) + SF[5]*(
P[5][3] +
P[0][3]*SF[4] +
P[2][3]*SF[3] +
P[3][3]*SF[5] -
P[1][3]*SPP[0] -
P[13][3]*SPP[8] +
P[14][3]*SPP[2] +
P[15][3]*SPP[5]) - SPP[0]*(
P[5][1] +
P[0][1]*SF[4] +
P[2][1]*SF[3] +
P[3][1]*SF[5] -
P[1][1]*SPP[0] -
P[13][1]*SPP[8] +
P[14][1]*SPP[2] +
P[15][1]*SPP[5]) - SPP[8]*(
P[5][13] +
P[0][13]*SF[4] +
P[2][13]*SF[3] +
P[3][13]*SF[5] -
P[1][13]*SPP[0] -
P[13][13]*SPP[8] +
P[14][13]*SPP[2] +
P[15][13]*SPP[5]) + SPP[2]*(
P[5][14] +
P[0][14]*SF[4] +
P[2][14]*SF[3] +
P[3][14]*SF[5] -
P[1][14]*SPP[0] -
P[13][14]*SPP[8] +
P[14][14]*SPP[2] +
P[15][14]*SPP[5]) + SPP[5]*(
P[5][15] +
P[0][15]*SF[4] +
P[2][15]*SF[3] +
P[3][15]*SF[5] -
P[1][15]*SPP[0] -
P[13][15]*SPP[8] +
P[14][15]*SPP[2] +
P[15][15]*SPP[5]) + dvyVar*
sq(SG[1] - SG[2] + SG[3] - SG[4]);
1011 nextP[0][6] =
P[0][6] +
P[1][6]*SF[9] +
P[2][6]*SF[11] +
P[3][6]*SF[10] +
P[10][6]*SF[14] +
P[11][6]*SF[15] +
P[12][6]*SPP[10] + SF[4]*(
P[0][1] +
P[1][1]*SF[9] +
P[2][1]*SF[11] +
P[3][1]*SF[10] +
P[10][1]*SF[14] +
P[11][1]*SF[15] +
P[12][1]*SPP[10]) - SF[5]*(
P[0][2] +
P[1][2]*SF[9] +
P[2][2]*SF[11] +
P[3][2]*SF[10] +
P[10][2]*SF[14] +
P[11][2]*SF[15] +
P[12][2]*SPP[10]) + SF[3]*(
P[0][3] +
P[1][3]*SF[9] +
P[2][3]*SF[11] +
P[3][3]*SF[10] +
P[10][3]*SF[14] +
P[11][3]*SF[15] +
P[12][3]*SPP[10]) + SPP[0]*(
P[0][0] +
P[1][0]*SF[9] +
P[2][0]*SF[11] +
P[3][0]*SF[10] +
P[10][0]*SF[14] +
P[11][0]*SF[15] +
P[12][0]*SPP[10]) + SPP[4]*(
P[0][13] +
P[1][13]*SF[9] +
P[2][13]*SF[11] +
P[3][13]*SF[10] +
P[10][13]*SF[14] +
P[11][13]*SF[15] +
P[12][13]*SPP[10]) - SPP[7]*(
P[0][14] +
P[1][14]*SF[9] +
P[2][14]*SF[11] +
P[3][14]*SF[10] +
P[10][14]*SF[14] +
P[11][14]*SF[15] +
P[12][14]*SPP[10]) - SPP[1]*(
P[0][15] +
P[1][15]*SF[9] +
P[2][15]*SF[11] +
P[3][15]*SF[10] +
P[10][15]*SF[14] +
P[11][15]*SF[15] +
P[12][15]*SPP[10]);
1012 nextP[1][6] =
P[1][6] +
P[0][6]*SF[8] +
P[2][6]*SF[7] +
P[3][6]*SF[11] -
P[12][6]*SF[15] +
P[11][6]*SPP[10] - (
P[10][6]*
q0)/2 + SF[4]*(
P[1][1] +
P[0][1]*SF[8] +
P[2][1]*SF[7] +
P[3][1]*SF[11] -
P[12][1]*SF[15] +
P[11][1]*SPP[10] - (
P[10][1]*q0)/2) - SF[5]*(
P[1][2] +
P[0][2]*SF[8] +
P[2][2]*SF[7] +
P[3][2]*SF[11] -
P[12][2]*SF[15] +
P[11][2]*SPP[10] - (
P[10][2]*q0)/2) + SF[3]*(
P[1][3] +
P[0][3]*SF[8] +
P[2][3]*SF[7] +
P[3][3]*SF[11] -
P[12][3]*SF[15] +
P[11][3]*SPP[10] - (
P[10][3]*q0)/2) + SPP[0]*(
P[1][0] +
P[0][0]*SF[8] +
P[2][0]*SF[7] +
P[3][0]*SF[11] -
P[12][0]*SF[15] +
P[11][0]*SPP[10] - (
P[10][0]*q0)/2) + SPP[4]*(
P[1][13] +
P[0][13]*SF[8] +
P[2][13]*SF[7] +
P[3][13]*SF[11] -
P[12][13]*SF[15] +
P[11][13]*SPP[10] - (
P[10][13]*q0)/2) - SPP[7]*(
P[1][14] +
P[0][14]*SF[8] +
P[2][14]*SF[7] +
P[3][14]*SF[11] -
P[12][14]*SF[15] +
P[11][14]*SPP[10] - (
P[10][14]*q0)/2) - SPP[1]*(
P[1][15] +
P[0][15]*SF[8] +
P[2][15]*SF[7] +
P[3][15]*SF[11] -
P[12][15]*SF[15] +
P[11][15]*SPP[10] - (
P[10][15]*q0)/2);
1013 nextP[2][6] =
P[2][6] +
P[0][6]*SF[6] +
P[1][6]*SF[10] +
P[3][6]*SF[8] +
P[12][6]*SF[14] -
P[10][6]*SPP[10] - (
P[11][6]*
q0)/2 + SF[4]*(
P[2][1] +
P[0][1]*SF[6] +
P[1][1]*SF[10] +
P[3][1]*SF[8] +
P[12][1]*SF[14] -
P[10][1]*SPP[10] - (
P[11][1]*q0)/2) - SF[5]*(
P[2][2] +
P[0][2]*SF[6] +
P[1][2]*SF[10] +
P[3][2]*SF[8] +
P[12][2]*SF[14] -
P[10][2]*SPP[10] - (
P[11][2]*q0)/2) + SF[3]*(
P[2][3] +
P[0][3]*SF[6] +
P[1][3]*SF[10] +
P[3][3]*SF[8] +
P[12][3]*SF[14] -
P[10][3]*SPP[10] - (
P[11][3]*q0)/2) + SPP[0]*(
P[2][0] +
P[0][0]*SF[6] +
P[1][0]*SF[10] +
P[3][0]*SF[8] +
P[12][0]*SF[14] -
P[10][0]*SPP[10] - (
P[11][0]*q0)/2) + SPP[4]*(
P[2][13] +
P[0][13]*SF[6] +
P[1][13]*SF[10] +
P[3][13]*SF[8] +
P[12][13]*SF[14] -
P[10][13]*SPP[10] - (
P[11][13]*q0)/2) - SPP[7]*(
P[2][14] +
P[0][14]*SF[6] +
P[1][14]*SF[10] +
P[3][14]*SF[8] +
P[12][14]*SF[14] -
P[10][14]*SPP[10] - (
P[11][14]*q0)/2) - SPP[1]*(
P[2][15] +
P[0][15]*SF[6] +
P[1][15]*SF[10] +
P[3][15]*SF[8] +
P[12][15]*SF[14] -
P[10][15]*SPP[10] - (
P[11][15]*q0)/2);
1014 nextP[3][6] =
P[3][6] +
P[0][6]*SF[7] +
P[1][6]*SF[6] +
P[2][6]*SF[9] +
P[10][6]*SF[15] -
P[11][6]*SF[14] - (
P[12][6]*
q0)/2 + SF[4]*(
P[3][1] +
P[0][1]*SF[7] +
P[1][1]*SF[6] +
P[2][1]*SF[9] +
P[10][1]*SF[15] -
P[11][1]*SF[14] - (
P[12][1]*q0)/2) - SF[5]*(
P[3][2] +
P[0][2]*SF[7] +
P[1][2]*SF[6] +
P[2][2]*SF[9] +
P[10][2]*SF[15] -
P[11][2]*SF[14] - (
P[12][2]*q0)/2) + SF[3]*(
P[3][3] +
P[0][3]*SF[7] +
P[1][3]*SF[6] +
P[2][3]*SF[9] +
P[10][3]*SF[15] -
P[11][3]*SF[14] - (
P[12][3]*q0)/2) + SPP[0]*(
P[3][0] +
P[0][0]*SF[7] +
P[1][0]*SF[6] +
P[2][0]*SF[9] +
P[10][0]*SF[15] -
P[11][0]*SF[14] - (
P[12][0]*q0)/2) + SPP[4]*(
P[3][13] +
P[0][13]*SF[7] +
P[1][13]*SF[6] +
P[2][13]*SF[9] +
P[10][13]*SF[15] -
P[11][13]*SF[14] - (
P[12][13]*q0)/2) - SPP[7]*(
P[3][14] +
P[0][14]*SF[7] +
P[1][14]*SF[6] +
P[2][14]*SF[9] +
P[10][14]*SF[15] -
P[11][14]*SF[14] - (
P[12][14]*q0)/2) - SPP[1]*(
P[3][15] +
P[0][15]*SF[7] +
P[1][15]*SF[6] +
P[2][15]*SF[9] +
P[10][15]*SF[15] -
P[11][15]*SF[14] - (
P[12][15]*q0)/2);
1015 nextP[4][6] =
P[4][6] + SQ[1] +
P[0][6]*SF[5] +
P[1][6]*SF[3] -
P[3][6]*SF[4] +
P[2][6]*SPP[0] +
P[13][6]*SPP[3] +
P[14][6]*SPP[6] -
P[15][6]*SPP[9] + SF[4]*(
P[4][1] +
P[0][1]*SF[5] +
P[1][1]*SF[3] -
P[3][1]*SF[4] +
P[2][1]*SPP[0] +
P[13][1]*SPP[3] +
P[14][1]*SPP[6] -
P[15][1]*SPP[9]) - SF[5]*(
P[4][2] +
P[0][2]*SF[5] +
P[1][2]*SF[3] -
P[3][2]*SF[4] +
P[2][2]*SPP[0] +
P[13][2]*SPP[3] +
P[14][2]*SPP[6] -
P[15][2]*SPP[9]) + SF[3]*(
P[4][3] +
P[0][3]*SF[5] +
P[1][3]*SF[3] -
P[3][3]*SF[4] +
P[2][3]*SPP[0] +
P[13][3]*SPP[3] +
P[14][3]*SPP[6] -
P[15][3]*SPP[9]) + SPP[0]*(
P[4][0] +
P[0][0]*SF[5] +
P[1][0]*SF[3] -
P[3][0]*SF[4] +
P[2][0]*SPP[0] +
P[13][0]*SPP[3] +
P[14][0]*SPP[6] -
P[15][0]*SPP[9]) + SPP[4]*(
P[4][13] +
P[0][13]*SF[5] +
P[1][13]*SF[3] -
P[3][13]*SF[4] +
P[2][13]*SPP[0] +
P[13][13]*SPP[3] +
P[14][13]*SPP[6] -
P[15][13]*SPP[9]) - SPP[7]*(
P[4][14] +
P[0][14]*SF[5] +
P[1][14]*SF[3] -
P[3][14]*SF[4] +
P[2][14]*SPP[0] +
P[13][14]*SPP[3] +
P[14][14]*SPP[6] -
P[15][14]*SPP[9]) - SPP[1]*(
P[4][15] +
P[0][15]*SF[5] +
P[1][15]*SF[3] -
P[3][15]*SF[4] +
P[2][15]*SPP[0] +
P[13][15]*SPP[3] +
P[14][15]*SPP[6] -
P[15][15]*SPP[9]);
1016 nextP[5][6] =
P[5][6] + SQ[0] +
P[0][6]*SF[4] +
P[2][6]*SF[3] +
P[3][6]*SF[5] -
P[1][6]*SPP[0] -
P[13][6]*SPP[8] +
P[14][6]*SPP[2] +
P[15][6]*SPP[5] + SF[4]*(
P[5][1] +
P[0][1]*SF[4] +
P[2][1]*SF[3] +
P[3][1]*SF[5] -
P[1][1]*SPP[0] -
P[13][1]*SPP[8] +
P[14][1]*SPP[2] +
P[15][1]*SPP[5]) - SF[5]*(
P[5][2] +
P[0][2]*SF[4] +
P[2][2]*SF[3] +
P[3][2]*SF[5] -
P[1][2]*SPP[0] -
P[13][2]*SPP[8] +
P[14][2]*SPP[2] +
P[15][2]*SPP[5]) + SF[3]*(
P[5][3] +
P[0][3]*SF[4] +
P[2][3]*SF[3] +
P[3][3]*SF[5] -
P[1][3]*SPP[0] -
P[13][3]*SPP[8] +
P[14][3]*SPP[2] +
P[15][3]*SPP[5]) + SPP[0]*(
P[5][0] +
P[0][0]*SF[4] +
P[2][0]*SF[3] +
P[3][0]*SF[5] -
P[1][0]*SPP[0] -
P[13][0]*SPP[8] +
P[14][0]*SPP[2] +
P[15][0]*SPP[5]) + SPP[4]*(
P[5][13] +
P[0][13]*SF[4] +
P[2][13]*SF[3] +
P[3][13]*SF[5] -
P[1][13]*SPP[0] -
P[13][13]*SPP[8] +
P[14][13]*SPP[2] +
P[15][13]*SPP[5]) - SPP[7]*(
P[5][14] +
P[0][14]*SF[4] +
P[2][14]*SF[3] +
P[3][14]*SF[5] -
P[1][14]*SPP[0] -
P[13][14]*SPP[8] +
P[14][14]*SPP[2] +
P[15][14]*SPP[5]) - SPP[1]*(
P[5][15] +
P[0][15]*SF[4] +
P[2][15]*SF[3] +
P[3][15]*SF[5] -
P[1][15]*SPP[0] -
P[13][15]*SPP[8] +
P[14][15]*SPP[2] +
P[15][15]*SPP[5]);
1017 nextP[6][6] =
P[6][6] +
P[1][6]*SF[4] -
P[2][6]*SF[5] +
P[3][6]*SF[3] +
P[0][6]*SPP[0] +
P[13][6]*SPP[4] -
P[14][6]*SPP[7] -
P[15][6]*SPP[1] + dvxVar*
sq(SG[6] - 2*q0*q2) + dvyVar*
sq(SG[5] + 2*q0*
q1) + SF[4]*(
P[6][1] +
P[1][1]*SF[4] -
P[2][1]*SF[5] +
P[3][1]*SF[3] +
P[0][1]*SPP[0] +
P[13][1]*SPP[4] -
P[14][1]*SPP[7] -
P[15][1]*SPP[1]) - SF[5]*(
P[6][2] +
P[1][2]*SF[4] -
P[2][2]*SF[5] +
P[3][2]*SF[3] +
P[0][2]*SPP[0] +
P[13][2]*SPP[4] -
P[14][2]*SPP[7] -
P[15][2]*SPP[1]) + SF[3]*(
P[6][3] +
P[1][3]*SF[4] -
P[2][3]*SF[5] +
P[3][3]*SF[3] +
P[0][3]*SPP[0] +
P[13][3]*SPP[4] -
P[14][3]*SPP[7] -
P[15][3]*SPP[1]) + SPP[0]*(
P[6][0] +
P[1][0]*SF[4] -
P[2][0]*SF[5] +
P[3][0]*SF[3] +
P[0][0]*SPP[0] +
P[13][0]*SPP[4] -
P[14][0]*SPP[7] -
P[15][0]*SPP[1]) + SPP[4]*(
P[6][13] +
P[1][13]*SF[4] -
P[2][13]*SF[5] +
P[3][13]*SF[3] +
P[0][13]*SPP[0] +
P[13][13]*SPP[4] -
P[14][13]*SPP[7] -
P[15][13]*SPP[1]) - SPP[7]*(
P[6][14] +
P[1][14]*SF[4] -
P[2][14]*SF[5] +
P[3][14]*SF[3] +
P[0][14]*SPP[0] +
P[13][14]*SPP[4] -
P[14][14]*SPP[7] -
P[15][14]*SPP[1]) - SPP[1]*(
P[6][15] +
P[1][15]*SF[4] -
P[2][15]*SF[5] +
P[3][15]*SF[3] +
P[0][15]*SPP[0] +
P[13][15]*SPP[4] -
P[14][15]*SPP[7] -
P[15][15]*SPP[1]) + dvzVar*
sq(SG[1] - SG[2] - SG[3] + SG[4]);
1018 nextP[0][7] =
P[0][7] +
P[1][7]*SF[9] +
P[2][7]*SF[11] +
P[3][7]*SF[10] +
P[10][7]*SF[14] +
P[11][7]*SF[15] +
P[12][7]*SPP[10] +
dt*(
P[0][4] +
P[1][4]*SF[9] +
P[2][4]*SF[11] +
P[3][4]*SF[10] +
P[10][4]*SF[14] +
P[11][4]*SF[15] +
P[12][4]*SPP[10]);
1019 nextP[1][7] =
P[1][7] +
P[0][7]*SF[8] +
P[2][7]*SF[7] +
P[3][7]*SF[11] -
P[12][7]*SF[15] +
P[11][7]*SPP[10] - (
P[10][7]*
q0)/2 +
dt*(
P[1][4] +
P[0][4]*SF[8] +
P[2][4]*SF[7] +
P[3][4]*SF[11] -
P[12][4]*SF[15] +
P[11][4]*SPP[10] - (
P[10][4]*q0)/2);
1020 nextP[2][7] =
P[2][7] +
P[0][7]*SF[6] +
P[1][7]*SF[10] +
P[3][7]*SF[8] +
P[12][7]*SF[14] -
P[10][7]*SPP[10] - (
P[11][7]*
q0)/2 +
dt*(
P[2][4] +
P[0][4]*SF[6] +
P[1][4]*SF[10] +
P[3][4]*SF[8] +
P[12][4]*SF[14] -
P[10][4]*SPP[10] - (
P[11][4]*q0)/2);
1021 nextP[3][7] =
P[3][7] +
P[0][7]*SF[7] +
P[1][7]*SF[6] +
P[2][7]*SF[9] +
P[10][7]*SF[15] -
P[11][7]*SF[14] - (
P[12][7]*
q0)/2 +
dt*(
P[3][4] +
P[0][4]*SF[7] +
P[1][4]*SF[6] +
P[2][4]*SF[9] +
P[10][4]*SF[15] -
P[11][4]*SF[14] - (
P[12][4]*q0)/2);
1022 nextP[4][7] =
P[4][7] +
P[0][7]*SF[5] +
P[1][7]*SF[3] -
P[3][7]*SF[4] +
P[2][7]*SPP[0] +
P[13][7]*SPP[3] +
P[14][7]*SPP[6] -
P[15][7]*SPP[9] +
dt*(
P[4][4] +
P[0][4]*SF[5] +
P[1][4]*SF[3] -
P[3][4]*SF[4] +
P[2][4]*SPP[0] +
P[13][4]*SPP[3] +
P[14][4]*SPP[6] -
P[15][4]*SPP[9]);
1023 nextP[5][7] =
P[5][7] +
P[0][7]*SF[4] +
P[2][7]*SF[3] +
P[3][7]*SF[5] -
P[1][7]*SPP[0] -
P[13][7]*SPP[8] +
P[14][7]*SPP[2] +
P[15][7]*SPP[5] +
dt*(
P[5][4] +
P[0][4]*SF[4] +
P[2][4]*SF[3] +
P[3][4]*SF[5] -
P[1][4]*SPP[0] -
P[13][4]*SPP[8] +
P[14][4]*SPP[2] +
P[15][4]*SPP[5]);
1024 nextP[6][7] =
P[6][7] +
P[1][7]*SF[4] -
P[2][7]*SF[5] +
P[3][7]*SF[3] +
P[0][7]*SPP[0] +
P[13][7]*SPP[4] -
P[14][7]*SPP[7] -
P[15][7]*SPP[1] +
dt*(
P[6][4] +
P[1][4]*SF[4] -
P[2][4]*SF[5] +
P[3][4]*SF[3] +
P[0][4]*SPP[0] +
P[13][4]*SPP[4] -
P[14][4]*SPP[7] -
P[15][4]*SPP[1]);
1025 nextP[7][7] =
P[7][7] +
P[4][7]*
dt +
dt*(
P[7][4] +
P[4][4]*
dt);
1026 nextP[0][8] =
P[0][8] +
P[1][8]*SF[9] +
P[2][8]*SF[11] +
P[3][8]*SF[10] +
P[10][8]*SF[14] +
P[11][8]*SF[15] +
P[12][8]*SPP[10] +
dt*(
P[0][5] +
P[1][5]*SF[9] +
P[2][5]*SF[11] +
P[3][5]*SF[10] +
P[10][5]*SF[14] +
P[11][5]*SF[15] +
P[12][5]*SPP[10]);
1027 nextP[1][8] =
P[1][8] +
P[0][8]*SF[8] +
P[2][8]*SF[7] +
P[3][8]*SF[11] -
P[12][8]*SF[15] +
P[11][8]*SPP[10] - (
P[10][8]*
q0)/2 +
dt*(
P[1][5] +
P[0][5]*SF[8] +
P[2][5]*SF[7] +
P[3][5]*SF[11] -
P[12][5]*SF[15] +
P[11][5]*SPP[10] - (
P[10][5]*q0)/2);
1028 nextP[2][8] =
P[2][8] +
P[0][8]*SF[6] +
P[1][8]*SF[10] +
P[3][8]*SF[8] +
P[12][8]*SF[14] -
P[10][8]*SPP[10] - (
P[11][8]*
q0)/2 +
dt*(
P[2][5] +
P[0][5]*SF[6] +
P[1][5]*SF[10] +
P[3][5]*SF[8] +
P[12][5]*SF[14] -
P[10][5]*SPP[10] - (
P[11][5]*q0)/2);
1029 nextP[3][8] =
P[3][8] +
P[0][8]*SF[7] +
P[1][8]*SF[6] +
P[2][8]*SF[9] +
P[10][8]*SF[15] -
P[11][8]*SF[14] - (
P[12][8]*
q0)/2 +
dt*(
P[3][5] +
P[0][5]*SF[7] +
P[1][5]*SF[6] +
P[2][5]*SF[9] +
P[10][5]*SF[15] -
P[11][5]*SF[14] - (
P[12][5]*q0)/2);
1030 nextP[4][8] =
P[4][8] +
P[0][8]*SF[5] +
P[1][8]*SF[3] -
P[3][8]*SF[4] +
P[2][8]*SPP[0] +
P[13][8]*SPP[3] +
P[14][8]*SPP[6] -
P[15][8]*SPP[9] +
dt*(
P[4][5] +
P[0][5]*SF[5] +
P[1][5]*SF[3] -
P[3][5]*SF[4] +
P[2][5]*SPP[0] +
P[13][5]*SPP[3] +
P[14][5]*SPP[6] -
P[15][5]*SPP[9]);
1031 nextP[5][8] =
P[5][8] +
P[0][8]*SF[4] +
P[2][8]*SF[3] +
P[3][8]*SF[5] -
P[1][8]*SPP[0] -
P[13][8]*SPP[8] +
P[14][8]*SPP[2] +
P[15][8]*SPP[5] +
dt*(
P[5][5] +
P[0][5]*SF[4] +
P[2][5]*SF[3] +
P[3][5]*SF[5] -
P[1][5]*SPP[0] -
P[13][5]*SPP[8] +
P[14][5]*SPP[2] +
P[15][5]*SPP[5]);
1032 nextP[6][8] =
P[6][8] +
P[1][8]*SF[4] -
P[2][8]*SF[5] +
P[3][8]*SF[3] +
P[0][8]*SPP[0] +
P[13][8]*SPP[4] -
P[14][8]*SPP[7] -
P[15][8]*SPP[1] +
dt*(
P[6][5] +
P[1][5]*SF[4] -
P[2][5]*SF[5] +
P[3][5]*SF[3] +
P[0][5]*SPP[0] +
P[13][5]*SPP[4] -
P[14][5]*SPP[7] -
P[15][5]*SPP[1]);
1033 nextP[7][8] =
P[7][8] +
P[4][8]*
dt +
dt*(
P[7][5] +
P[4][5]*
dt);
1034 nextP[8][8] =
P[8][8] +
P[5][8]*
dt +
dt*(
P[8][5] +
P[5][5]*
dt);
1035 nextP[0][9] =
P[0][9] +
P[1][9]*SF[9] +
P[2][9]*SF[11] +
P[3][9]*SF[10] +
P[10][9]*SF[14] +
P[11][9]*SF[15] +
P[12][9]*SPP[10] +
dt*(
P[0][6] +
P[1][6]*SF[9] +
P[2][6]*SF[11] +
P[3][6]*SF[10] +
P[10][6]*SF[14] +
P[11][6]*SF[15] +
P[12][6]*SPP[10]);
1036 nextP[1][9] =
P[1][9] +
P[0][9]*SF[8] +
P[2][9]*SF[7] +
P[3][9]*SF[11] -
P[12][9]*SF[15] +
P[11][9]*SPP[10] - (
P[10][9]*
q0)/2 +
dt*(
P[1][6] +
P[0][6]*SF[8] +
P[2][6]*SF[7] +
P[3][6]*SF[11] -
P[12][6]*SF[15] +
P[11][6]*SPP[10] - (
P[10][6]*q0)/2);
1037 nextP[2][9] =
P[2][9] +
P[0][9]*SF[6] +
P[1][9]*SF[10] +
P[3][9]*SF[8] +
P[12][9]*SF[14] -
P[10][9]*SPP[10] - (
P[11][9]*
q0)/2 +
dt*(
P[2][6] +
P[0][6]*SF[6] +
P[1][6]*SF[10] +
P[3][6]*SF[8] +
P[12][6]*SF[14] -
P[10][6]*SPP[10] - (
P[11][6]*q0)/2);
1038 nextP[3][9] =
P[3][9] +
P[0][9]*SF[7] +
P[1][9]*SF[6] +
P[2][9]*SF[9] +
P[10][9]*SF[15] -
P[11][9]*SF[14] - (
P[12][9]*
q0)/2 +
dt*(
P[3][6] +
P[0][6]*SF[7] +
P[1][6]*SF[6] +
P[2][6]*SF[9] +
P[10][6]*SF[15] -
P[11][6]*SF[14] - (
P[12][6]*q0)/2);
1039 nextP[4][9] =
P[4][9] +
P[0][9]*SF[5] +
P[1][9]*SF[3] -
P[3][9]*SF[4] +
P[2][9]*SPP[0] +
P[13][9]*SPP[3] +
P[14][9]*SPP[6] -
P[15][9]*SPP[9] +
dt*(
P[4][6] +
P[0][6]*SF[5] +
P[1][6]*SF[3] -
P[3][6]*SF[4] +
P[2][6]*SPP[0] +
P[13][6]*SPP[3] +
P[14][6]*SPP[6] -
P[15][6]*SPP[9]);
1040 nextP[5][9] =
P[5][9] +
P[0][9]*SF[4] +
P[2][9]*SF[3] +
P[3][9]*SF[5] -
P[1][9]*SPP[0] -
P[13][9]*SPP[8] +
P[14][9]*SPP[2] +
P[15][9]*SPP[5] +
dt*(
P[5][6] +
P[0][6]*SF[4] +
P[2][6]*SF[3] +
P[3][6]*SF[5] -
P[1][6]*SPP[0] -
P[13][6]*SPP[8] +
P[14][6]*SPP[2] +
P[15][6]*SPP[5]);
1041 nextP[6][9] =
P[6][9] +
P[1][9]*SF[4] -
P[2][9]*SF[5] +
P[3][9]*SF[3] +
P[0][9]*SPP[0] +
P[13][9]*SPP[4] -
P[14][9]*SPP[7] -
P[15][9]*SPP[1] +
dt*(
P[6][6] +
P[1][6]*SF[4] -
P[2][6]*SF[5] +
P[3][6]*SF[3] +
P[0][6]*SPP[0] +
P[13][6]*SPP[4] -
P[14][6]*SPP[7] -
P[15][6]*SPP[1]);
1042 nextP[7][9] =
P[7][9] +
P[4][9]*
dt +
dt*(
P[7][6] +
P[4][6]*
dt);
1043 nextP[8][9] =
P[8][9] +
P[5][9]*
dt +
dt*(
P[8][6] +
P[5][6]*
dt);
1044 nextP[9][9] =
P[9][9] +
P[6][9]*
dt +
dt*(
P[9][6] +
P[6][6]*
dt);
1047 nextP[0][10] =
P[0][10] +
P[1][10]*SF[9] +
P[2][10]*SF[11] +
P[3][10]*SF[10] +
P[10][10]*SF[14] +
P[11][10]*SF[15] +
P[12][10]*SPP[10];
1048 nextP[1][10] =
P[1][10] +
P[0][10]*SF[8] +
P[2][10]*SF[7] +
P[3][10]*SF[11] -
P[12][10]*SF[15] +
P[11][10]*SPP[10] - (
P[10][10]*
q0)/2;
1049 nextP[2][10] =
P[2][10] +
P[0][10]*SF[6] +
P[1][10]*SF[10] +
P[3][10]*SF[8] +
P[12][10]*SF[14] -
P[10][10]*SPP[10] - (
P[11][10]*
q0)/2;
1050 nextP[3][10] =
P[3][10] +
P[0][10]*SF[7] +
P[1][10]*SF[6] +
P[2][10]*SF[9] +
P[10][10]*SF[15] -
P[11][10]*SF[14] - (
P[12][10]*
q0)/2;
1051 nextP[4][10] =
P[4][10] +
P[0][10]*SF[5] +
P[1][10]*SF[3] -
P[3][10]*SF[4] +
P[2][10]*SPP[0] +
P[13][10]*SPP[3] +
P[14][10]*SPP[6] -
P[15][10]*SPP[9];
1052 nextP[5][10] =
P[5][10] +
P[0][10]*SF[4] +
P[2][10]*SF[3] +
P[3][10]*SF[5] -
P[1][10]*SPP[0] -
P[13][10]*SPP[8] +
P[14][10]*SPP[2] +
P[15][10]*SPP[5];
1053 nextP[6][10] =
P[6][10] +
P[1][10]*SF[4] -
P[2][10]*SF[5] +
P[3][10]*SF[3] +
P[0][10]*SPP[0] +
P[13][10]*SPP[4] -
P[14][10]*SPP[7] -
P[15][10]*SPP[1];
1054 nextP[7][10] =
P[7][10] +
P[4][10]*
dt;
1055 nextP[8][10] =
P[8][10] +
P[5][10]*
dt;
1056 nextP[9][10] =
P[9][10] +
P[6][10]*
dt;
1057 nextP[10][10] =
P[10][10];
1058 nextP[0][11] =
P[0][11] +
P[1][11]*SF[9] +
P[2][11]*SF[11] +
P[3][11]*SF[10] +
P[10][11]*SF[14] +
P[11][11]*SF[15] +
P[12][11]*SPP[10];
1059 nextP[1][11] =
P[1][11] +
P[0][11]*SF[8] +
P[2][11]*SF[7] +
P[3][11]*SF[11] -
P[12][11]*SF[15] +
P[11][11]*SPP[10] - (
P[10][11]*
q0)/2;
1060 nextP[2][11] =
P[2][11] +
P[0][11]*SF[6] +
P[1][11]*SF[10] +
P[3][11]*SF[8] +
P[12][11]*SF[14] -
P[10][11]*SPP[10] - (
P[11][11]*
q0)/2;
1061 nextP[3][11] =
P[3][11] +
P[0][11]*SF[7] +
P[1][11]*SF[6] +
P[2][11]*SF[9] +
P[10][11]*SF[15] -
P[11][11]*SF[14] - (
P[12][11]*
q0)/2;
1062 nextP[4][11] =
P[4][11] +
P[0][11]*SF[5] +
P[1][11]*SF[3] -
P[3][11]*SF[4] +
P[2][11]*SPP[0] +
P[13][11]*SPP[3] +
P[14][11]*SPP[6] -
P[15][11]*SPP[9];
1063 nextP[5][11] =
P[5][11] +
P[0][11]*SF[4] +
P[2][11]*SF[3] +
P[3][11]*SF[5] -
P[1][11]*SPP[0] -
P[13][11]*SPP[8] +
P[14][11]*SPP[2] +
P[15][11]*SPP[5];
1064 nextP[6][11] =
P[6][11] +
P[1][11]*SF[4] -
P[2][11]*SF[5] +
P[3][11]*SF[3] +
P[0][11]*SPP[0] +
P[13][11]*SPP[4] -
P[14][11]*SPP[7] -
P[15][11]*SPP[1];
1065 nextP[7][11] =
P[7][11] +
P[4][11]*
dt;
1066 nextP[8][11] =
P[8][11] +
P[5][11]*
dt;
1067 nextP[9][11] =
P[9][11] +
P[6][11]*
dt;
1068 nextP[10][11] =
P[10][11];
1069 nextP[11][11] =
P[11][11];
1070 nextP[0][12] =
P[0][12] +
P[1][12]*SF[9] +
P[2][12]*SF[11] +
P[3][12]*SF[10] +
P[10][12]*SF[14] +
P[11][12]*SF[15] +
P[12][12]*SPP[10];
1071 nextP[1][12] =
P[1][12] +
P[0][12]*SF[8] +
P[2][12]*SF[7] +
P[3][12]*SF[11] -
P[12][12]*SF[15] +
P[11][12]*SPP[10] - (
P[10][12]*
q0)/2;
1072 nextP[2][12] =
P[2][12] +
P[0][12]*SF[6] +
P[1][12]*SF[10] +
P[3][12]*SF[8] +
P[12][12]*SF[14] -
P[10][12]*SPP[10] - (
P[11][12]*
q0)/2;
1073 nextP[3][12] =
P[3][12] +
P[0][12]*SF[7] +
P[1][12]*SF[6] +
P[2][12]*SF[9] +
P[10][12]*SF[15] -
P[11][12]*SF[14] - (
P[12][12]*
q0)/2;
1074 nextP[4][12] =
P[4][12] +
P[0][12]*SF[5] +
P[1][12]*SF[3] -
P[3][12]*SF[4] +
P[2][12]*SPP[0] +
P[13][12]*SPP[3] +
P[14][12]*SPP[6] -
P[15][12]*SPP[9];
1075 nextP[5][12] =
P[5][12] +
P[0][12]*SF[4] +
P[2][12]*SF[3] +
P[3][12]*SF[5] -
P[1][12]*SPP[0] -
P[13][12]*SPP[8] +
P[14][12]*SPP[2] +
P[15][12]*SPP[5];
1076 nextP[6][12] =
P[6][12] +
P[1][12]*SF[4] -
P[2][12]*SF[5] +
P[3][12]*SF[3] +
P[0][12]*SPP[0] +
P[13][12]*SPP[4] -
P[14][12]*SPP[7] -
P[15][12]*SPP[1];
1077 nextP[7][12] =
P[7][12] +
P[4][12]*
dt;
1078 nextP[8][12] =
P[8][12] +
P[5][12]*
dt;
1079 nextP[9][12] =
P[9][12] +
P[6][12]*
dt;
1080 nextP[10][12] =
P[10][12];
1081 nextP[11][12] =
P[11][12];
1082 nextP[12][12] =
P[12][12];
1085 nextP[0][13] =
P[0][13] +
P[1][13]*SF[9] +
P[2][13]*SF[11] +
P[3][13]*SF[10] +
P[10][13]*SF[14] +
P[11][13]*SF[15] +
P[12][13]*SPP[10];
1086 nextP[1][13] =
P[1][13] +
P[0][13]*SF[8] +
P[2][13]*SF[7] +
P[3][13]*SF[11] -
P[12][13]*SF[15] +
P[11][13]*SPP[10] - (
P[10][13]*
q0)/2;
1087 nextP[2][13] =
P[2][13] +
P[0][13]*SF[6] +
P[1][13]*SF[10] +
P[3][13]*SF[8] +
P[12][13]*SF[14] -
P[10][13]*SPP[10] - (
P[11][13]*
q0)/2;
1088 nextP[3][13] =
P[3][13] +
P[0][13]*SF[7] +
P[1][13]*SF[6] +
P[2][13]*SF[9] +
P[10][13]*SF[15] -
P[11][13]*SF[14] - (
P[12][13]*
q0)/2;
1089 nextP[4][13] =
P[4][13] +
P[0][13]*SF[5] +
P[1][13]*SF[3] -
P[3][13]*SF[4] +
P[2][13]*SPP[0] +
P[13][13]*SPP[3] +
P[14][13]*SPP[6] -
P[15][13]*SPP[9];
1090 nextP[5][13] =
P[5][13] +
P[0][13]*SF[4] +
P[2][13]*SF[3] +
P[3][13]*SF[5] -
P[1][13]*SPP[0] -
P[13][13]*SPP[8] +
P[14][13]*SPP[2] +
P[15][13]*SPP[5];
1091 nextP[6][13] =
P[6][13] +
P[1][13]*SF[4] -
P[2][13]*SF[5] +
P[3][13]*SF[3] +
P[0][13]*SPP[0] +
P[13][13]*SPP[4] -
P[14][13]*SPP[7] -
P[15][13]*SPP[1];
1092 nextP[7][13] =
P[7][13] +
P[4][13]*
dt;
1093 nextP[8][13] =
P[8][13] +
P[5][13]*
dt;
1094 nextP[9][13] =
P[9][13] +
P[6][13]*
dt;
1095 nextP[10][13] =
P[10][13];
1096 nextP[11][13] =
P[11][13];
1097 nextP[12][13] =
P[12][13];
1098 nextP[13][13] =
P[13][13];
1099 nextP[0][14] =
P[0][14] +
P[1][14]*SF[9] +
P[2][14]*SF[11] +
P[3][14]*SF[10] +
P[10][14]*SF[14] +
P[11][14]*SF[15] +
P[12][14]*SPP[10];
1100 nextP[1][14] =
P[1][14] +
P[0][14]*SF[8] +
P[2][14]*SF[7] +
P[3][14]*SF[11] -
P[12][14]*SF[15] +
P[11][14]*SPP[10] - (
P[10][14]*
q0)/2;
1101 nextP[2][14] =
P[2][14] +
P[0][14]*SF[6] +
P[1][14]*SF[10] +
P[3][14]*SF[8] +
P[12][14]*SF[14] -
P[10][14]*SPP[10] - (
P[11][14]*
q0)/2;
1102 nextP[3][14] =
P[3][14] +
P[0][14]*SF[7] +
P[1][14]*SF[6] +
P[2][14]*SF[9] +
P[10][14]*SF[15] -
P[11][14]*SF[14] - (
P[12][14]*
q0)/2;
1103 nextP[4][14] =
P[4][14] +
P[0][14]*SF[5] +
P[1][14]*SF[3] -
P[3][14]*SF[4] +
P[2][14]*SPP[0] +
P[13][14]*SPP[3] +
P[14][14]*SPP[6] -
P[15][14]*SPP[9];
1104 nextP[5][14] =
P[5][14] +
P[0][14]*SF[4] +
P[2][14]*SF[3] +
P[3][14]*SF[5] -
P[1][14]*SPP[0] -
P[13][14]*SPP[8] +
P[14][14]*SPP[2] +
P[15][14]*SPP[5];
1105 nextP[6][14] =
P[6][14] +
P[1][14]*SF[4] -
P[2][14]*SF[5] +
P[3][14]*SF[3] +
P[0][14]*SPP[0] +
P[13][14]*SPP[4] -
P[14][14]*SPP[7] -
P[15][14]*SPP[1];
1106 nextP[7][14] =
P[7][14] +
P[4][14]*
dt;
1107 nextP[8][14] =
P[8][14] +
P[5][14]*
dt;
1108 nextP[9][14] =
P[9][14] +
P[6][14]*
dt;
1109 nextP[10][14] =
P[10][14];
1110 nextP[11][14] =
P[11][14];
1111 nextP[12][14] =
P[12][14];
1112 nextP[13][14] =
P[13][14];
1113 nextP[14][14] =
P[14][14];
1114 nextP[0][15] =
P[0][15] +
P[1][15]*SF[9] +
P[2][15]*SF[11] +
P[3][15]*SF[10] +
P[10][15]*SF[14] +
P[11][15]*SF[15] +
P[12][15]*SPP[10];
1115 nextP[1][15] =
P[1][15] +
P[0][15]*SF[8] +
P[2][15]*SF[7] +
P[3][15]*SF[11] -
P[12][15]*SF[15] +
P[11][15]*SPP[10] - (
P[10][15]*
q0)/2;
1116 nextP[2][15] =
P[2][15] +
P[0][15]*SF[6] +
P[1][15]*SF[10] +
P[3][15]*SF[8] +
P[12][15]*SF[14] -
P[10][15]*SPP[10] - (
P[11][15]*
q0)/2;
1117 nextP[3][15] =
P[3][15] +
P[0][15]*SF[7] +
P[1][15]*SF[6] +
P[2][15]*SF[9] +
P[10][15]*SF[15] -
P[11][15]*SF[14] - (
P[12][15]*
q0)/2;
1118 nextP[4][15] =
P[4][15] +
P[0][15]*SF[5] +
P[1][15]*SF[3] -
P[3][15]*SF[4] +
P[2][15]*SPP[0] +
P[13][15]*SPP[3] +
P[14][15]*SPP[6] -
P[15][15]*SPP[9];
1119 nextP[5][15] =
P[5][15] +
P[0][15]*SF[4] +
P[2][15]*SF[3] +
P[3][15]*SF[5] -
P[1][15]*SPP[0] -
P[13][15]*SPP[8] +
P[14][15]*SPP[2] +
P[15][15]*SPP[5];
1120 nextP[6][15] =
P[6][15] +
P[1][15]*SF[4] -
P[2][15]*SF[5] +
P[3][15]*SF[3] +
P[0][15]*SPP[0] +
P[13][15]*SPP[4] -
P[14][15]*SPP[7] -
P[15][15]*SPP[1];
1121 nextP[7][15] =
P[7][15] +
P[4][15]*
dt;
1122 nextP[8][15] =
P[8][15] +
P[5][15]*
dt;
1123 nextP[9][15] =
P[9][15] +
P[6][15]*
dt;
1124 nextP[10][15] =
P[10][15];
1125 nextP[11][15] =
P[11][15];
1126 nextP[12][15] =
P[12][15];
1127 nextP[13][15] =
P[13][15];
1128 nextP[14][15] =
P[14][15];
1129 nextP[15][15] =
P[15][15];
1132 nextP[0][16] =
P[0][16] +
P[1][16]*SF[9] +
P[2][16]*SF[11] +
P[3][16]*SF[10] +
P[10][16]*SF[14] +
P[11][16]*SF[15] +
P[12][16]*SPP[10];
1133 nextP[1][16] =
P[1][16] +
P[0][16]*SF[8] +
P[2][16]*SF[7] +
P[3][16]*SF[11] -
P[12][16]*SF[15] +
P[11][16]*SPP[10] - (
P[10][16]*
q0)/2;
1134 nextP[2][16] =
P[2][16] +
P[0][16]*SF[6] +
P[1][16]*SF[10] +
P[3][16]*SF[8] +
P[12][16]*SF[14] -
P[10][16]*SPP[10] - (
P[11][16]*
q0)/2;
1135 nextP[3][16] =
P[3][16] +
P[0][16]*SF[7] +
P[1][16]*SF[6] +
P[2][16]*SF[9] +
P[10][16]*SF[15] -
P[11][16]*SF[14] - (
P[12][16]*
q0)/2;
1136 nextP[4][16] =
P[4][16] +
P[0][16]*SF[5] +
P[1][16]*SF[3] -
P[3][16]*SF[4] +
P[2][16]*SPP[0] +
P[13][16]*SPP[3] +
P[14][16]*SPP[6] -
P[15][16]*SPP[9];
1137 nextP[5][16] =
P[5][16] +
P[0][16]*SF[4] +
P[2][16]*SF[3] +
P[3][16]*SF[5] -
P[1][16]*SPP[0] -
P[13][16]*SPP[8] +
P[14][16]*SPP[2] +
P[15][16]*SPP[5];
1138 nextP[6][16] =
P[6][16] +
P[1][16]*SF[4] -
P[2][16]*SF[5] +
P[3][16]*SF[3] +
P[0][16]*SPP[0] +
P[13][16]*SPP[4] -
P[14][16]*SPP[7] -
P[15][16]*SPP[1];
1139 nextP[7][16] =
P[7][16] +
P[4][16]*
dt;
1140 nextP[8][16] =
P[8][16] +
P[5][16]*
dt;
1141 nextP[9][16] =
P[9][16] +
P[6][16]*
dt;
1142 nextP[10][16] =
P[10][16];
1143 nextP[11][16] =
P[11][16];
1144 nextP[12][16] =
P[12][16];
1145 nextP[13][16] =
P[13][16];
1146 nextP[14][16] =
P[14][16];
1147 nextP[15][16] =
P[15][16];
1148 nextP[16][16] =
P[16][16];
1149 nextP[0][17] =
P[0][17] +
P[1][17]*SF[9] +
P[2][17]*SF[11] +
P[3][17]*SF[10] +
P[10][17]*SF[14] +
P[11][17]*SF[15] +
P[12][17]*SPP[10];
1150 nextP[1][17] =
P[1][17] +
P[0][17]*SF[8] +
P[2][17]*SF[7] +
P[3][17]*SF[11] -
P[12][17]*SF[15] +
P[11][17]*SPP[10] - (
P[10][17]*
q0)/2;
1151 nextP[2][17] =
P[2][17] +
P[0][17]*SF[6] +
P[1][17]*SF[10] +
P[3][17]*SF[8] +
P[12][17]*SF[14] -
P[10][17]*SPP[10] - (
P[11][17]*
q0)/2;
1152 nextP[3][17] =
P[3][17] +
P[0][17]*SF[7] +
P[1][17]*SF[6] +
P[2][17]*SF[9] +
P[10][17]*SF[15] -
P[11][17]*SF[14] - (
P[12][17]*
q0)/2;
1153 nextP[4][17] =
P[4][17] +
P[0][17]*SF[5] +
P[1][17]*SF[3] -
P[3][17]*SF[4] +
P[2][17]*SPP[0] +
P[13][17]*SPP[3] +
P[14][17]*SPP[6] -
P[15][17]*SPP[9];
1154 nextP[5][17] =
P[5][17] +
P[0][17]*SF[4] +
P[2][17]*SF[3] +
P[3][17]*SF[5] -
P[1][17]*SPP[0] -
P[13][17]*SPP[8] +
P[14][17]*SPP[2] +
P[15][17]*SPP[5];
1155 nextP[6][17] =
P[6][17] +
P[1][17]*SF[4] -
P[2][17]*SF[5] +
P[3][17]*SF[3] +
P[0][17]*SPP[0] +
P[13][17]*SPP[4] -
P[14][17]*SPP[7] -
P[15][17]*SPP[1];
1156 nextP[7][17] =
P[7][17] +
P[4][17]*
dt;
1157 nextP[8][17] =
P[8][17] +
P[5][17]*
dt;
1158 nextP[9][17] =
P[9][17] +
P[6][17]*
dt;
1159 nextP[10][17] =
P[10][17];
1160 nextP[11][17] =
P[11][17];
1161 nextP[12][17] =
P[12][17];
1162 nextP[13][17] =
P[13][17];
1163 nextP[14][17] =
P[14][17];
1164 nextP[15][17] =
P[15][17];
1165 nextP[16][17] =
P[16][17];
1166 nextP[17][17] =
P[17][17];
1167 nextP[0][18] =
P[0][18] +
P[1][18]*SF[9] +
P[2][18]*SF[11] +
P[3][18]*SF[10] +
P[10][18]*SF[14] +
P[11][18]*SF[15] +
P[12][18]*SPP[10];
1168 nextP[1][18] =
P[1][18] +
P[0][18]*SF[8] +
P[2][18]*SF[7] +
P[3][18]*SF[11] -
P[12][18]*SF[15] +
P[11][18]*SPP[10] - (
P[10][18]*
q0)/2;
1169 nextP[2][18] =
P[2][18] +
P[0][18]*SF[6] +
P[1][18]*SF[10] +
P[3][18]*SF[8] +
P[12][18]*SF[14] -
P[10][18]*SPP[10] - (
P[11][18]*
q0)/2;
1170 nextP[3][18] =
P[3][18] +
P[0][18]*SF[7] +
P[1][18]*SF[6] +
P[2][18]*SF[9] +
P[10][18]*SF[15] -
P[11][18]*SF[14] - (
P[12][18]*
q0)/2;
1171 nextP[4][18] =
P[4][18] +
P[0][18]*SF[5] +
P[1][18]*SF[3] -
P[3][18]*SF[4] +
P[2][18]*SPP[0] +
P[13][18]*SPP[3] +
P[14][18]*SPP[6] -
P[15][18]*SPP[9];
1172 nextP[5][18] =
P[5][18] +
P[0][18]*SF[4] +
P[2][18]*SF[3] +
P[3][18]*SF[5] -
P[1][18]*SPP[0] -
P[13][18]*SPP[8] +
P[14][18]*SPP[2] +
P[15][18]*SPP[5];
1173 nextP[6][18] =
P[6][18] +
P[1][18]*SF[4] -
P[2][18]*SF[5] +
P[3][18]*SF[3] +
P[0][18]*SPP[0] +
P[13][18]*SPP[4] -
P[14][18]*SPP[7] -
P[15][18]*SPP[1];
1174 nextP[7][18] =
P[7][18] +
P[4][18]*
dt;
1175 nextP[8][18] =
P[8][18] +
P[5][18]*
dt;
1176 nextP[9][18] =
P[9][18] +
P[6][18]*
dt;
1177 nextP[10][18] =
P[10][18];
1178 nextP[11][18] =
P[11][18];
1179 nextP[12][18] =
P[12][18];
1180 nextP[13][18] =
P[13][18];
1181 nextP[14][18] =
P[14][18];
1182 nextP[15][18] =
P[15][18];
1183 nextP[16][18] =
P[16][18];
1184 nextP[17][18] =
P[17][18];
1185 nextP[18][18] =
P[18][18];
1186 nextP[0][19] =
P[0][19] +
P[1][19]*SF[9] +
P[2][19]*SF[11] +
P[3][19]*SF[10] +
P[10][19]*SF[14] +
P[11][19]*SF[15] +
P[12][19]*SPP[10];
1187 nextP[1][19] =
P[1][19] +
P[0][19]*SF[8] +
P[2][19]*SF[7] +
P[3][19]*SF[11] -
P[12][19]*SF[15] +
P[11][19]*SPP[10] - (
P[10][19]*
q0)/2;
1188 nextP[2][19] =
P[2][19] +
P[0][19]*SF[6] +
P[1][19]*SF[10] +
P[3][19]*SF[8] +
P[12][19]*SF[14] -
P[10][19]*SPP[10] - (
P[11][19]*
q0)/2;
1189 nextP[3][19] =
P[3][19] +
P[0][19]*SF[7] +
P[1][19]*SF[6] +
P[2][19]*SF[9] +
P[10][19]*SF[15] -
P[11][19]*SF[14] - (
P[12][19]*
q0)/2;
1190 nextP[4][19] =
P[4][19] +
P[0][19]*SF[5] +
P[1][19]*SF[3] -
P[3][19]*SF[4] +
P[2][19]*SPP[0] +
P[13][19]*SPP[3] +
P[14][19]*SPP[6] -
P[15][19]*SPP[9];
1191 nextP[5][19] =
P[5][19] +
P[0][19]*SF[4] +
P[2][19]*SF[3] +
P[3][19]*SF[5] -
P[1][19]*SPP[0] -
P[13][19]*SPP[8] +
P[14][19]*SPP[2] +
P[15][19]*SPP[5];
1192 nextP[6][19] =
P[6][19] +
P[1][19]*SF[4] -
P[2][19]*SF[5] +
P[3][19]*SF[3] +
P[0][19]*SPP[0] +
P[13][19]*SPP[4] -
P[14][19]*SPP[7] -
P[15][19]*SPP[1];
1193 nextP[7][19] =
P[7][19] +
P[4][19]*
dt;
1194 nextP[8][19] =
P[8][19] +
P[5][19]*
dt;
1195 nextP[9][19] =
P[9][19] +
P[6][19]*
dt;
1196 nextP[10][19] =
P[10][19];
1197 nextP[11][19] =
P[11][19];
1198 nextP[12][19] =
P[12][19];
1199 nextP[13][19] =
P[13][19];
1200 nextP[14][19] =
P[14][19];
1201 nextP[15][19] =
P[15][19];
1202 nextP[16][19] =
P[16][19];
1203 nextP[17][19] =
P[17][19];
1204 nextP[18][19] =
P[18][19];
1205 nextP[19][19] =
P[19][19];
1206 nextP[0][20] =
P[0][20] +
P[1][20]*SF[9] +
P[2][20]*SF[11] +
P[3][20]*SF[10] +
P[10][20]*SF[14] +
P[11][20]*SF[15] +
P[12][20]*SPP[10];
1207 nextP[1][20] =
P[1][20] +
P[0][20]*SF[8] +
P[2][20]*SF[7] +
P[3][20]*SF[11] -
P[12][20]*SF[15] +
P[11][20]*SPP[10] - (
P[10][20]*
q0)/2;
1208 nextP[2][20] =
P[2][20] +
P[0][20]*SF[6] +
P[1][20]*SF[10] +
P[3][20]*SF[8] +
P[12][20]*SF[14] -
P[10][20]*SPP[10] - (
P[11][20]*
q0)/2;
1209 nextP[3][20] =
P[3][20] +
P[0][20]*SF[7] +
P[1][20]*SF[6] +
P[2][20]*SF[9] +
P[10][20]*SF[15] -
P[11][20]*SF[14] - (
P[12][20]*
q0)/2;
1210 nextP[4][20] =
P[4][20] +
P[0][20]*SF[5] +
P[1][20]*SF[3] -
P[3][20]*SF[4] +
P[2][20]*SPP[0] +
P[13][20]*SPP[3] +
P[14][20]*SPP[6] -
P[15][20]*SPP[9];
1211 nextP[5][20] =
P[5][20] +
P[0][20]*SF[4] +
P[2][20]*SF[3] +
P[3][20]*SF[5] -
P[1][20]*SPP[0] -
P[13][20]*SPP[8] +
P[14][20]*SPP[2] +
P[15][20]*SPP[5];
1212 nextP[6][20] =
P[6][20] +
P[1][20]*SF[4] -
P[2][20]*SF[5] +
P[3][20]*SF[3] +
P[0][20]*SPP[0] +
P[13][20]*SPP[4] -
P[14][20]*SPP[7] -
P[15][20]*SPP[1];
1213 nextP[7][20] =
P[7][20] +
P[4][20]*
dt;
1214 nextP[8][20] =
P[8][20] +
P[5][20]*
dt;
1215 nextP[9][20] =
P[9][20] +
P[6][20]*
dt;
1216 nextP[10][20] =
P[10][20];
1217 nextP[11][20] =
P[11][20];
1218 nextP[12][20] =
P[12][20];
1219 nextP[13][20] =
P[13][20];
1220 nextP[14][20] =
P[14][20];
1221 nextP[15][20] =
P[15][20];
1222 nextP[16][20] =
P[16][20];
1223 nextP[17][20] =
P[17][20];
1224 nextP[18][20] =
P[18][20];
1225 nextP[19][20] =
P[19][20];
1226 nextP[20][20] =
P[20][20];
1227 nextP[0][21] =
P[0][21] +
P[1][21]*SF[9] +
P[2][21]*SF[11] +
P[3][21]*SF[10] +
P[10][21]*SF[14] +
P[11][21]*SF[15] +
P[12][21]*SPP[10];
1228 nextP[1][21] =
P[1][21] +
P[0][21]*SF[8] +
P[2][21]*SF[7] +
P[3][21]*SF[11] -
P[12][21]*SF[15] +
P[11][21]*SPP[10] - (
P[10][21]*
q0)/2;
1229 nextP[2][21] =
P[2][21] +
P[0][21]*SF[6] +
P[1][21]*SF[10] +
P[3][21]*SF[8] +
P[12][21]*SF[14] -
P[10][21]*SPP[10] - (
P[11][21]*
q0)/2;
1230 nextP[3][21] =
P[3][21] +
P[0][21]*SF[7] +
P[1][21]*SF[6] +
P[2][21]*SF[9] +
P[10][21]*SF[15] -
P[11][21]*SF[14] - (
P[12][21]*
q0)/2;
1231 nextP[4][21] =
P[4][21] +
P[0][21]*SF[5] +
P[1][21]*SF[3] -
P[3][21]*SF[4] +
P[2][21]*SPP[0] +
P[13][21]*SPP[3] +
P[14][21]*SPP[6] -
P[15][21]*SPP[9];
1232 nextP[5][21] =
P[5][21] +
P[0][21]*SF[4] +
P[2][21]*SF[3] +
P[3][21]*SF[5] -
P[1][21]*SPP[0] -
P[13][21]*SPP[8] +
P[14][21]*SPP[2] +
P[15][21]*SPP[5];
1233 nextP[6][21] =
P[6][21] +
P[1][21]*SF[4] -
P[2][21]*SF[5] +
P[3][21]*SF[3] +
P[0][21]*SPP[0] +
P[13][21]*SPP[4] -
P[14][21]*SPP[7] -
P[15][21]*SPP[1];
1234 nextP[7][21] =
P[7][21] +
P[4][21]*
dt;
1235 nextP[8][21] =
P[8][21] +
P[5][21]*
dt;
1236 nextP[9][21] =
P[9][21] +
P[6][21]*
dt;
1237 nextP[10][21] =
P[10][21];
1238 nextP[11][21] =
P[11][21];
1239 nextP[12][21] =
P[12][21];
1240 nextP[13][21] =
P[13][21];
1241 nextP[14][21] =
P[14][21];
1242 nextP[15][21] =
P[15][21];
1243 nextP[16][21] =
P[16][21];
1244 nextP[17][21] =
P[17][21];
1245 nextP[18][21] =
P[18][21];
1246 nextP[19][21] =
P[19][21];
1247 nextP[20][21] =
P[20][21];
1248 nextP[21][21] =
P[21][21];
1251 nextP[0][22] =
P[0][22] +
P[1][22]*SF[9] +
P[2][22]*SF[11] +
P[3][22]*SF[10] +
P[10][22]*SF[14] +
P[11][22]*SF[15] +
P[12][22]*SPP[10];
1252 nextP[1][22] =
P[1][22] +
P[0][22]*SF[8] +
P[2][22]*SF[7] +
P[3][22]*SF[11] -
P[12][22]*SF[15] +
P[11][22]*SPP[10] - (
P[10][22]*
q0)/2;
1253 nextP[2][22] =
P[2][22] +
P[0][22]*SF[6] +
P[1][22]*SF[10] +
P[3][22]*SF[8] +
P[12][22]*SF[14] -
P[10][22]*SPP[10] - (
P[11][22]*
q0)/2;
1254 nextP[3][22] =
P[3][22] +
P[0][22]*SF[7] +
P[1][22]*SF[6] +
P[2][22]*SF[9] +
P[10][22]*SF[15] -
P[11][22]*SF[14] - (
P[12][22]*
q0)/2;
1255 nextP[4][22] =
P[4][22] +
P[0][22]*SF[5] +
P[1][22]*SF[3] -
P[3][22]*SF[4] +
P[2][22]*SPP[0] +
P[13][22]*SPP[3] +
P[14][22]*SPP[6] -
P[15][22]*SPP[9];
1256 nextP[5][22] =
P[5][22] +
P[0][22]*SF[4] +
P[2][22]*SF[3] +
P[3][22]*SF[5] -
P[1][22]*SPP[0] -
P[13][22]*SPP[8] +
P[14][22]*SPP[2] +
P[15][22]*SPP[5];
1257 nextP[6][22] =
P[6][22] +
P[1][22]*SF[4] -
P[2][22]*SF[5] +
P[3][22]*SF[3] +
P[0][22]*SPP[0] +
P[13][22]*SPP[4] -
P[14][22]*SPP[7] -
P[15][22]*SPP[1];
1258 nextP[7][22] =
P[7][22] +
P[4][22]*
dt;
1259 nextP[8][22] =
P[8][22] +
P[5][22]*
dt;
1260 nextP[9][22] =
P[9][22] +
P[6][22]*
dt;
1261 nextP[10][22] =
P[10][22];
1262 nextP[11][22] =
P[11][22];
1263 nextP[12][22] =
P[12][22];
1264 nextP[13][22] =
P[13][22];
1265 nextP[14][22] =
P[14][22];
1266 nextP[15][22] =
P[15][22];
1267 nextP[16][22] =
P[16][22];
1268 nextP[17][22] =
P[17][22];
1269 nextP[18][22] =
P[18][22];
1270 nextP[19][22] =
P[19][22];
1271 nextP[20][22] =
P[20][22];
1272 nextP[21][22] =
P[21][22];
1273 nextP[22][22] =
P[22][22];
1274 nextP[0][23] =
P[0][23] +
P[1][23]*SF[9] +
P[2][23]*SF[11] +
P[3][23]*SF[10] +
P[10][23]*SF[14] +
P[11][23]*SF[15] +
P[12][23]*SPP[10];
1275 nextP[1][23] =
P[1][23] +
P[0][23]*SF[8] +
P[2][23]*SF[7] +
P[3][23]*SF[11] -
P[12][23]*SF[15] +
P[11][23]*SPP[10] - (
P[10][23]*
q0)/2;
1276 nextP[2][23] =
P[2][23] +
P[0][23]*SF[6] +
P[1][23]*SF[10] +
P[3][23]*SF[8] +
P[12][23]*SF[14] -
P[10][23]*SPP[10] - (
P[11][23]*
q0)/2;
1277 nextP[3][23] =
P[3][23] +
P[0][23]*SF[7] +
P[1][23]*SF[6] +
P[2][23]*SF[9] +
P[10][23]*SF[15] -
P[11][23]*SF[14] - (
P[12][23]*
q0)/2;
1278 nextP[4][23] =
P[4][23] +
P[0][23]*SF[5] +
P[1][23]*SF[3] -
P[3][23]*SF[4] +
P[2][23]*SPP[0] +
P[13][23]*SPP[3] +
P[14][23]*SPP[6] -
P[15][23]*SPP[9];
1279 nextP[5][23] =
P[5][23] +
P[0][23]*SF[4] +
P[2][23]*SF[3] +
P[3][23]*SF[5] -
P[1][23]*SPP[0] -
P[13][23]*SPP[8] +
P[14][23]*SPP[2] +
P[15][23]*SPP[5];
1280 nextP[6][23] =
P[6][23] +
P[1][23]*SF[4] -
P[2][23]*SF[5] +
P[3][23]*SF[3] +
P[0][23]*SPP[0] +
P[13][23]*SPP[4] -
P[14][23]*SPP[7] -
P[15][23]*SPP[1];
1281 nextP[7][23] =
P[7][23] +
P[4][23]*
dt;
1282 nextP[8][23] =
P[8][23] +
P[5][23]*
dt;
1283 nextP[9][23] =
P[9][23] +
P[6][23]*
dt;
1284 nextP[10][23] =
P[10][23];
1285 nextP[11][23] =
P[11][23];
1286 nextP[12][23] =
P[12][23];
1287 nextP[13][23] =
P[13][23];
1288 nextP[14][23] =
P[14][23];
1289 nextP[15][23] =
P[15][23];
1290 nextP[16][23] =
P[16][23];
1291 nextP[17][23] =
P[17][23];
1292 nextP[18][23] =
P[18][23];
1293 nextP[19][23] =
P[19][23];
1294 nextP[20][23] =
P[20][23];
1295 nextP[21][23] =
P[21][23];
1296 nextP[22][23] =
P[22][23];
1297 nextP[23][23] =
P[23][23];
1306 nextP[i][i] = nextP[i][i] + processNoiseVariance[i-10];
1314 if ((
P[7][7] +
P[8][8]) > 1e4f) {
1315 for (uint8_t i=7; i<=8; i++)
1319 nextP[i][j] =
P[i][j];
1320 nextP[j][i] =
P[j][i];
1329 P[row][row] = nextP[row][row];
1331 for (uint8_t column = 0 ; column < row; column++) {
1332 P[row][column] =
P[column][row] = nextP[column][row];
1346 for (row=first; row<=last; row++)
1348 memset(&covMat[row][0], 0,
sizeof(covMat[0][0])*24);
1356 for (row=0; row<=23; row++)
1358 memset(&covMat[row][first], 0,
sizeof(covMat[0][0])*(1+last-first));
1412 for (uint8_t j=0; j<=i-1; j++)
1414 float temp = 0.5f*(
P[i][j] +
P[j][i]);
1439 bool resetRequired =
false;
1440 for (uint8_t i=13; i<=15; i++) {
1441 if (
P[i][i] > 1E-9
f) {
1447 resetRequired =
true;
1452 if (resetRequired) {
1453 float delVelBiasVar[3];
1455 for (uint8_t i=0; i<=2; i++) {
1456 delVelBiasVar[i] =
P[i+13][i+13];
1461 for (uint8_t i=0; i<=2; i++) {
1462 P[i+13][i+13] = delVelBiasVar[i];
1517 float lat_rad =
radians(latitude*1.0e-7
f);
1544 float magHeading = atan2f(initMagNED.
y, initMagNED.
x);
1550 yaw = magDecAng - magHeading;
1582 P[19][19] =
P[18][18];
1583 P[20][20] =
P[18][18];
1584 P[21][21] =
P[18][18];
1608 for (uint8_t index=0; index<=3; index++) {
1609 varTemp[index] =
P[index][index];
1613 for (uint8_t index=0; index<=3; index++) {
1614 P[index][index] = varTemp[index];
1633 float t3 = acosf(q0);
1634 float t4 = -t2+1.0f;
1636 if ((t4 > 1e-9
f) && (t5 < -1e-9
f)) {
1638 float t7 = q1*t6*2.0f;
1639 float t8 = 1.0f/powf(t4,1.5
f);
1640 float t9 = q0*q1*t3*t8*2.0f;
1642 float t11 = 1.0f/sqrtf(t4);
1643 float t12 = q2*t6*2.0f;
1644 float t13 = q0*q2*t3*t8*2.0f;
1646 float t15 = q3*t6*2.0f;
1647 float t16 = q0*q3*t3*t8*2.0f;
1649 rotVarVec.
x = t10*(
P[0][0]*t10+
P[1][0]*t3*t11*2.0f)+t3*t11*(
P[0][1]*t10+
P[1][1]*t3*t11*2.0
f)*2.0f;
1650 rotVarVec.
y = t14*(
P[0][0]*t14+
P[2][0]*t3*t11*2.0f)+t3*t11*(
P[0][2]*t14+
P[2][2]*t3*t11*2.0f)*2.0f;
1651 rotVarVec.
z = t17*(
P[0][0]*t17+
P[3][0]*t3*t11*2.0f)+t3*t11*(
P[0][3]*t17+
P[3][3]*t3*t11*2.0f)*2.0f;
1653 rotVarVec.
x = 4.0f *
P[1][1];
1654 rotVarVec.
y = 4.0f *
P[2][2];
1655 rotVarVec.
z = 4.0f *
P[3][3];
1675 float delta = 2.0f*acosf(q0);
1677 if (fabsf(delta) > 1e-6
f) {
1678 scaler = (delta/sinf(delta*0.5
f));
1682 float rotX = scaler*
q1;
1683 float rotY = scaler*
q2;
1684 float rotZ = scaler*
q3;
1687 float t2 = rotX*rotX;
1688 float t4 = rotY*rotY;
1689 float t5 = rotZ*rotZ;
1690 float t6 = t2+t4+
t5;
1692 float t7 = sqrtf(t6);
1694 float t3 = sinf(t8);
1696 float t10 = 1.0f/
t6;
1697 float t11 = 1.0f/sqrtf(t6);
1698 float t12 = cosf(t8);
1699 float t13 = 1.0f/powf(t6,1.5
f);
1701 float t15 = rotX*rotY*t3*
t13;
1702 float t16 = rotX*rotZ*t3*
t13;
1703 float t17 = rotY*rotZ*t3*
t13;
1704 float t18 = t2*t10*t12*0.5f;
1707 float t23 = rotX*rotY*t10*t12*0.5f;
1709 float t20 = rotY*rotVarVec.
y*t3*t11*t28*0.5f;
1710 float t25 = rotX*rotZ*t10*t12*0.5f;
1712 float t21 = rotZ*rotVarVec.
z*t3*t11*t31*0.5f;
1713 float t22 = t20+t21-rotX*rotVarVec.
x*t3*t11*t19*0.5f;
1716 float t29 = t4*t10*t12*0.5f;
1719 float t32 = t5*t10*t12*0.5f;
1722 float t36 = rotY*rotZ*t10*t12*0.5f;
1724 float t35 = rotZ*rotVarVec.
z*t3*t11*t39*0.5f;
1727 float t41 = rotVarVec.
x*(t15-
t23)*(t16-t25);
1728 float t42 = t41-rotVarVec.
y*t30*t39-rotVarVec.
z*t33*
t39;
1737 P[0][0] = rotVarVec.
x*t2*t9*t10*0.25f+rotVarVec.
y*t4*t9*t10*0.25f+rotVarVec.
z*t5*t9*t10*0.25f;
1739 P[0][2] = t35+rotX*rotVarVec.
x*t3*t11*(t15-rotX*rotY*t10*t12*0.5f)*0.5
f-rotY*rotVarVec.
y*t3*t11*t30*0.5f;
1740 P[0][3] = rotX*rotVarVec.
x*t3*t11*(t16-rotX*rotZ*t10*t12*0.5f)*0.5f+rotY*rotVarVec.
y*t3*t11*(t17-rotY*rotZ*t10*t12*0.5f)*0.5
f-rotZ*rotVarVec.
z*t3*t11*t33*0.5f;
1742 P[1][1] = rotVarVec.
x*(t19*t19)+rotVarVec.
y*(t24*
t24)+rotVarVec.
z*(t26*t26);
1743 P[1][2] = rotVarVec.
z*(t16-
t25)*(t17-rotY*rotZ*t10*t12*0.5
f)-rotVarVec.
x*t19*t28-rotVarVec.
y*t28*
t30;
1744 P[1][3] = rotVarVec.
y*(t15-
t23)*(t17-rotY*rotZ*t10*t12*0.5f)-rotVarVec.
x*t19*t31-rotVarVec.
z*t31*
t33;
1745 P[2][0] = t35-rotY*rotVarVec.
y*t3*t11*t30*0.5f+rotX*rotVarVec.
x*t3*t11*(t15-
t23)*0.5f;
1746 P[2][1] = rotVarVec.
z*(t16-
t25)*(t17-t36)-rotVarVec.
x*t19*t28-rotVarVec.
y*t28*
t30;
1747 P[2][2] = rotVarVec.
y*(t30*
t30)+rotVarVec.
x*(t37*t37)+rotVarVec.
z*(t38*
t38);
1749 P[3][0] = rotZ*rotVarVec.
z*t3*t11*t33*(-0.5f)+rotX*rotVarVec.
x*t3*t11*(t16-t25)*0.5f+rotY*rotVarVec.
y*t3*t11*(t17-
t36)*0.5f;
1750 P[3][1] = rotVarVec.
y*(t15-
t23)*(t17-t36)-rotVarVec.
x*t19*t31-rotVarVec.
z*t31*
t33;
1752 P[3][3] = rotVarVec.
z*(t33*
t33)+rotVarVec.
x*(t43*t43)+rotVarVec.
y*(t44*
t44);
1761 P[1][1] = 0.25f*rotVarVec.
x;
1766 P[2][2] = 0.25f*rotVarVec.
y;
1771 P[3][3] = 0.25f*rotVarVec.
z;
1776 #endif // HAL_CPU_CLASS
float norm(const T first, const U second, const Params... parameters)
void to_euler(float &roll, float &pitch, float &yaw) const
Quaternion calcQuatAndFieldStates(float roll, float pitch)
void zeroCols(Matrix24 &covMat, uint8_t first, uint8_t last)
AP_Float _magEarthProcessNoise
AP_HAL::Util::perf_counter_t _perf_test[10]
void StoreOutputReset(void)
uint32_t lastPosPassTime_ms
uint32_t terrainHgtStableSet_ms
uint32_t gndHgtValidTime_ms
virtual perf_counter_t perf_alloc(perf_counter_type t, const char *name)
uint32_t prevFlowFuseTime_ms
float get_declination() const
uint32_t storedRngMeasTime_ms[2][3]
bool optFlowFusionDelayed
bool magStateInitComplete
uint32_t lastInnovPassTime_ms
Quaternion quatAtLastMagReset
obs_ring_buffer_t< vel_odm_elements > storedBodyOdm
bool setup_core(NavEKF3 *_frontend, uint8_t _imu_index, uint8_t _core_index)
void quat2Tbn(Matrix3f &Tbn, const Quaternion &quat) const
uint32_t secondLastGpsTime_ms
bool expectGndEffectTouchdown
float maxOffsetStateChangeFilt
imu_elements imuDataDelayed
float beaconVehiclePosErr
AP_Float _wndVarHgtRateScale
Interface definition for the various Ground Control System.
float storedRngMeas[2][3]
obs_ring_buffer_t< mag_elements > storedMag
void SelectBodyOdomFusion()
obs_ring_buffer_t< tas_elements > storedTAS
uint8_t lastRngBcnChecked
bool assume_zero_sideslip(void) const
const struct Location & get_home(void) const
vel_odm_elements bodyOdmDataDelayed
uint32_t wheelOdmMeasTime_ms
void correctDeltaAngle(Vector3f &delAng, float delAngDT)
imu_ring_buffer_t< output_elements > storedOutput
float InitialGyroBiasUncertainty(void) const
AP_Float _gpsHorizPosNoise
void StoreQuatReset(void)
void SelectVelPosFusion()
void from_euler(float roll, float pitch, float yaw)
const uint16_t tasDelay_ms
uint32_t timeTasReceived_ms
uint32_t lastVelPassTime_ms
void from_euler(float roll, float pitch, float yaw)
bool rngBcnAlignmentStarted
uint32_t lastTasPassTime_ms
uint32_t lastPosResetD_ms
uint32_t lastbodyVelPassTime_ms
bool sideSlipFusionDelayed
void UpdateStrapdownEquationsNED()
struct NavEKF3_core::@153 faultStatus
uint32_t lastRngBcnPassTime_ms
float posDownAtLastMagReset
uint32_t flowValidMeaTime_ms
obs_ring_buffer_t< rng_bcn_elements > storedRangeBeacon
uint32_t framesSincePredict
uint32_t timeAtLastAuxEKF_ms
int32_t lat
param 3 - Latitude * 10**7
static auto MAX(const A &one, const B &two) -> decltype(one > two ? one :two)
AP_HAL::Util::perf_counter_t _perf_UpdateFilter
struct NavEKF3_core::state_elements & stateStruct
bool inhibitDelAngBiasStates
void zeroRows(Matrix24 &covMat, uint8_t first, uint8_t last)
const uint8_t sensorIntervalMin_ms
uint8_t get_primary(void) const
const Compass * get_compass() const
static AP_InertialSensor ins
bool use_compass(void) const
uint8_t localFilterTimeStep_ms
const Vector3f & get_accel(uint8_t i) const
void controlFilterModes()
uint32_t lastDecayTime_ms
bool InitialiseFilterBootstrap(void)
Vector3f beaconVehiclePosNED
output_elements outputDataNew
uint32_t lastInitFailReport_ms
Vector3f calcRotVecVariances(void)
void StoreQuatRotate(Quaternion deltaQuat)
float bcnPosDownOffsetMax
AP_Float _windVelProcessNoise
float wrap_PI(const T radian)
float minOffsetStateChangeFilt
Vector2f lastKnownPositionNE
AidingMode PV_AidingModePrev
uint32_t lastHgtPassTime_ms
bool expectGndEffectTakeoff
Vector3f delAngCorrection
uint8_t obs_buffer_length
float receiverPosCov[3][3]
void InitialiseVariables()
AP_Float _magBodyProcessNoise
float yawInnovAtLastMagReset
Vector3f outputTrackError
uint32_t lastTimeGpsReceived_ms
uint32_t lastPreAlignGpsCheckTime_ms
void UpdateFilter(bool predict)
obs_ring_buffer_t< gps_elements > storedGPS
resetDataSource velResetSource
virtual void perf_end(perf_counter_t h)
uint32_t lastRngMeasTime_ms
obs_ring_buffer_t< range_elements > storedRange
uint8_t rngBcnFuseDataReportIndex
void updateFilterStatus(void)
#define ACCEL_BIAS_LIM_SCALER
AP_HAL::Util::perf_counter_t _perf_CovariancePrediction
bool magStateResetRequest
uint64_t imuSampleTime_us
void rotation_matrix(Matrix3f &m) const
resetDataSource posResetSource
struct Location gpsloc_prev
void send_text(MAV_SEVERITY severity, const char *fmt,...)
uint32_t magYawResetTimer_ms
void from_axis_angle(Vector3f v)
vel_odm_elements bodyOdmDataNew
struct NavEKF3_core::@152 rngBcnFusionReport[10]
uint16_t get_sample_rate(void) const
imu_ring_buffer_t< imu_elements > storedIMU
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
Vector3< T > mul_transpose(const Vector3< T > &v) const
bool inhibitDelVelBiasStates
output_elements outputDataDelayed
uint32_t lastGpsCheckTime_ms
struct nav_filter_status::@138 flags
rng_bcn_elements rngBcnDataNew
mag_elements magDataDelayed
obs_ring_buffer_t< of_elements > storedOF
struct NavEKF3_core::@154 gpsCheckStatus
float constrain_float(const float amt, const float low, const float high)
const uint16_t magDelay_ms
uint32_t lastMagUpdate_us
uint32_t touchdownExpectedSet_ms
virtual void perf_begin(perf_counter_t h)
static constexpr float radians(float deg)
void calcEarthRateNED(Vector3f &omega, int32_t latitude) const
void CovariancePrediction()
struct NavEKF3_core::@155 mag_state
obs_ring_buffer_t< wheel_odm_elements > storedWheelOdm
bool rngBcnAlignmentCompleted
uint32_t rngValidMeaTime_ms
uint32_t takeoffExpectedSet_ms
uint32_t rngBcnLast3DmeasTime_ms
uint32_t lastSynthYawTime_ms
void alignMagStateDeclination()
Quaternion inverse(void) const
float innovationIncrement
AP_InertialSensor & ins()
void rotate(const Vector3f &v)
void ConstrainVariances()
bool airspeed_sensor_enabled(void) const
imu_elements imuDataDownSampledNew
uint32_t firstInitTime_ms
AP_Float _accelBiasProcessNoise
Receiving valid messages and 3D lock.
AP_Float _gpsVertVelNoise
uint32_t lastGpsAidBadTime_ms
uint32_t lastBaroReceived_ms
bool finalInflightMagInit
bool bodyVelFusionDelayed
uint32_t bodyOdmMeasTime_ms
AP_Float _gyroBiasProcessNoise
float get_loop_delta_t(void) const
nav_filter_status filterStatus
void correctDeltaVelocity(Vector3f &delVel, float delVelDT)
obs_ring_buffer_t< baro_elements > storedBaro
rng_bcn_elements rngBcnDataDelayed
uint32_t imuSampleTime_ms
void SelectRngBcnFusion()
uint32_t prevBodyVelFuseTime_ms
bool finalInflightYawInit
uint32_t lastTimeRngBcn_ms[10]
uint32_t lastGpsVelFail_ms
uint32_t lastHealthyMagTime_ms
void initialiseQuatCovariances(Vector3f &rotVarVec)
uint8_t imu_buffer_length
AP_Float _gpsHorizVelNoise
uint32_t lastInnovFailTime_ms
float bcnPosDownOffsetMin