126#define BTATYPE btScalar **
127#define BTAROW(i) (m_A[i])
134#define BTNUB_OPTIMIZATIONS
155 for (i=0; i < n; i+=2) {
163 for (
j=i-2;
j >= 0;
j -= 2) {
223 btScalar Z11,
m11,
Z12,
m12,
Z21,
m21,
Z22,
m22,
p1,
q1,
p2,
q2,*
ex;
227 for (i=0; i < n; i+=2) {
237 for (
j=i-2;
j >= 0;
j -= 2) {
307 btScalar sum,*ell,*
dee,
dd,
p1,
p2,
q1,
q2,
Z11,
m11,
Z21,
m21,
Z22,
m22;
310 for (i=0; i<=n-2; i += 2) {
320 for (
j=i-6;
j >= 0;
j -= 6) {
451 for (
j=i-6;
j >= 0;
j -= 6) {
536 for (i=0; i <= n-4; i+=4) {
546 for (
j=i-12;
j >= 0;
j -= 12) {
727 for (
j=i-12;
j >= 0;
j -= 12) {
822 btScalar Z11,
m11,
Z21,
m21,
Z31,
m31,
Z41,
m41,
p1,
q1,
p2,
p3,
p4,*
ex;
834 for (i=0; i <= n-4; i+=4) {
844 for (
j=i-4;
j >= 0;
j -= 4) {
958 for (
j=i-4;
j >= 0;
j -= 4) {
1013 for (
int i=0; i<n; i++) {
1045 for (
int i=
i1+1; i<
i2; ++i) {
1060 for (
int k = 0;
k <=
i2; ++
k) {
1067 for (
int j=
i2+1;
j<n; ++
j) {
1076 for (
int k = 0;
k <
i1; ++
k) {
1142 state[
i1] = state[
i2];
1231 m_n(
_n), m_nskip(
_nskip), m_nub(
_nub), m_nC(0), m_nN(0),
1258 for (
int k=0;
k<n; ++
k) p[
k]=
k;
1296 btSwapProblem (
m_A,
m_x,
m_b,
m_w,
lo,
hi,
m_p,
m_state,
findex,n,
m_nub,
k,
m_nskip,0);
1305 const int nub =
m_nub;
1317 for (
int k=0;
k<nub; ++
k) C[
k] =
k;
1324 const int nub =
m_nub;
1327 for (
int k=
m_n-1;
k >= nub;
k--) {
1329 btSwapProblem (
m_A,
m_x,
m_b,
m_w,
m_lo,
m_hi,
m_p,
m_state,
findex,
m_n,
k,
m_n-1-
num_at_end,
m_nskip,1);
1368 btSwapProblem (
m_A,
m_x,
m_b,
m_w,
m_lo,
m_hi,
m_p,
m_state,
m_findex,
m_n,
m_nC,i,
m_nskip,1);
1386# ifdef BTNUB_OPTIMIZATIONS
1388 const int nub =
m_nub;
1390 for ( ;
j<nub; ++
j) Dell[
j] =
aptr[
j];
1412 btSwapProblem (
m_A,
m_x,
m_b,
m_w,
m_lo,
m_hi,
m_p,
m_state,
m_findex,
m_n,
m_nC,i,
m_nskip,1);
1431 if (
r >= n-1)
return;
1444 for (
int i=
r; i<(n-1); ++i) {
1454 for (
int i=
r; i<(n-1); ++i) {
1477 for (
int j=1;
j<n; ++
j) {
1501 for (
int p=1; p<n;
ll+=
nskip, ++p) {
1529 for (
int p=
j+1; p<n; l+=
nskip, ++p) {
1543#define _BTGETA(i,j) (A[i][j])
1545#define BTGETA(i,j) ((i > j) ? _BTGETA(i,j) : _BTGETA(j,i))
1559 for (
int i=0; i<
n2; ++i)
1573 const int p_0 = p[0];
1574 for (
int i=0; i<
n2; ++i) {
1584 for (
int i=0; i<
r; ++
Lcurr, ++i) {
1618 for ( ;
j<
nC; ++
j) {
1626 for (
k=
j+1 ;
k<
nC; ++
k) {
1643 btSwapProblem (
m_A,
m_x,
m_b,
m_w,
m_lo,
m_hi,
m_p,
m_state,
m_findex,
m_n,i,
nC-1,
m_nskip,1);
1662 for (
int i=0; i<
nN; ++i) {
1686 for (
int i=0; i<
nC; ++i) {
1696 for (
int i=0; i<
nN; ++i) {
1714# ifdef BTNUB_OPTIMIZATIONS
1716 const int nub =
m_nub;
1718 for ( ;
j<nub; ++
j) Dell[
j] =
aptr[
j];
1730 for (
int j=0;
j<
nC; ++
j) ell[
j] = Dell[
j] * d[
j];
1764 for (
int j=0;
j<n; ++
j) x[p[
j]] =
tmp[
j];
1771 for (
int j=0;
j<n; ++
j) w[p[
j]] =
tmp[
j];
1787 btAssert (n>0 &&
A && x && b &&
lo &&
hi && nub >= 0 && nub <= n);
1793 for (
int k=0;
k<n; ++
k)
1813 const int nskip = (n);
1833 btLCP lcp(n,
nskip,nub,
A,x,b,w,
lo,
hi,&
scratchMem.L[0],&
scratchMem.d[0],&
scratchMem.Dell[0],&
scratchMem.ell[0],&
scratchMem.delta_w[0],&
scratchMem.state[0],
findex,&
scratchMem.p[0],&
scratchMem.C[0],&
scratchMem.Arows[0]);
1867 for (
int k=i;
k<n; ++
k) {
1883 w[i] =
lcp.AiC_times_qC (i,x) +
lcp.AiN_times_qN (i,x) - b[i];
1896 if (
lo[i]==0 && w[i] >= 0) {
1897 lcp.transfer_i_to_N (i);
1900 else if (
hi[i]==0 && w[i] <= 0) {
1901 lcp.transfer_i_to_N (i);
1912 lcp.transfer_i_to_C (i);
1967 const int numN =
lcp.numN();
1968 for (
int k=0;
k < numN; ++
k) {
1984 const int numC =
lcp.numC();
2037 lcp.transfer_i_to_C (i);
2042 lcp.transfer_i_to_N (i);
2047 lcp.transfer_i_to_N (i);
2051 lcp.transfer_i_from_N_to_C (
si);
2065 if (
cmd <= 3)
break;
void btLDLTAddTL(btScalar *L, btScalar *d, const btScalar *a, int n, int nskip, btAlignedObjectArray< btScalar > &scratch)
static void btSolveL1_1(const btScalar *L, btScalar *B, int n, int lskip1)
void btLDLTRemove(btScalar **A, const int *p, btScalar *L, btScalar *d, int n1, int n2, int r, int nskip, btAlignedObjectArray< btScalar > &scratch)
void btSolveL1(const btScalar *L, btScalar *B, int n, int lskip1)
void btSolveL1T(const btScalar *L, btScalar *B, int n, int lskip1)
static void btSwapRowsAndCols(BTATYPE A, int n, int i1, int i2, int nskip, int do_fast_row_swaps)
static void btSwapProblem(BTATYPE A, btScalar *x, btScalar *b, btScalar *w, btScalar *lo, btScalar *hi, int *p, bool *state, int *findex, int n, int i1, int i2, int nskip, int do_fast_row_swaps)
bool btSolveDantzigLCP(int n, btScalar *A, btScalar *x, btScalar *b, btScalar *outer_w, int nub, btScalar *lo, btScalar *hi, int *findex, btDantzigScratchMemory &scratchMem)
void btSolveLDLT(const btScalar *L, const btScalar *d, btScalar *b, int n, int nskip)
size_t btEstimateLDLTAddTLTmpbufSize(int nskip)
void btRemoveRowCol(btScalar *A, int n, int nskip, int r)
void btFactorLDLT(btScalar *A, btScalar *d, int n, int nskip1)
void btVectorScale(btScalar *a, const btScalar *d, int n)
static void btSolveL1_2(const btScalar *L, btScalar *B, int n, int lskip1)
const T & btMax(const T &a, const T &b)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void btSetZero(T *a, int n)
btScalar btFabs(btScalar x)
btScalar btLargeDot(const btScalar *a, const btScalar *b, int n)
static T sum(const btAlignedObjectArray< T > &items)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
btScalar Aii(int i) const
void pN_equals_ANC_times_qC(btScalar *p, btScalar *q)
btScalar *const *const *const *const m_lo
btScalar AiN_times_qN(int i, btScalar *q) const
btScalar *const *const m_ell
void transfer_i_to_N(int i)
int *const *const *const m_C
void pN_plusequals_s_times_qN(btScalar *p, btScalar s, btScalar *q)
btScalar *const *const m_d
void transfer_i_from_N_to_C(int i)
btScalar *const *const *const *const *const m_hi
void solve1(btScalar *a, int i, int dir=1, int only_transfer=0)
btScalar *const *const *const m_tmp
void pC_plusequals_s_times_qC(btScalar *p, btScalar s, btScalar *q)
void pN_plusequals_ANi(btScalar *p, int i, int sign=1)
void transfer_i_to_C(int i)
btScalar *const *const m_b
btScalar AiC_times_qC(int i, btScalar *q) const
btLCP(int _n, int _nskip, int _nub, btScalar *_Adata, btScalar *_x, btScalar *_b, btScalar *_w, btScalar *_lo, btScalar *_hi, btScalar *l, btScalar *_d, btScalar *_Dell, btScalar *_ell, btScalar *_tmp, bool *_state, int *_findex, int *p, int *c, btScalar **Arows)
btScalar *const *const *const m_w
void transfer_i_from_C_to_N(int i, btAlignedObjectArray< btScalar > &scratch)