Hex Artifact Content

Not logged in

Artifact 6ae39edc239a4e533ec880d14fd3392051fb079b50a3b0eb4ff5bc6812ac19ac:


0000: 23 69 66 6e 64 65 66 20 48 45 41 44 45 52 5f 4c  #ifndef HEADER_L
0010: 55 53 4f 4c 0a 23 64 65 66 69 6e 65 20 48 45 41  USOL.#define HEA
0020: 44 45 52 5f 4c 55 53 4f 4c 0a 0a 2f 2a 20 49 6e  DER_LUSOL../* In
0030: 63 6c 75 64 65 20 6e 65 63 65 73 73 61 72 79 20  clude necessary 
0040: 6c 69 62 72 61 72 69 65 73 20 20 20 20 20 20 20  libraries       
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0070: 20 20 20 20 20 20 20 20 2a 2f 0a 2f 2a 20 2d 2d          */./* --
0080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00c0: 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a 23 69 6e 63 6c  ------- */.#incl
00d0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
00e0: 6e 63 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e 6c 69  nclude "commonli
00f0: 62 2e 68 22 0a 0a 2f 2a 20 56 65 72 73 69 6f 6e  b.h"../* Version
0100: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 20 20 20   information    
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 20 20 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d     */./* -------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0190: 2d 2d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55  -- */.#define LU
01a0: 53 4f 4c 5f 56 45 52 4d 41 4a 4f 52 20 20 20 32  SOL_VERMAJOR   2
01b0: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 56  .#define LUSOL_V
01c0: 45 52 4d 49 4e 4f 52 20 20 20 32 0a 23 64 65 66  ERMINOR   2.#def
01d0: 69 6e 65 20 4c 55 53 4f 4c 5f 52 45 4c 45 41 53  ine LUSOL_RELEAS
01e0: 45 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 4c  E    2.#define L
01f0: 55 53 4f 4c 5f 42 55 49 4c 44 20 20 20 20 20 20  USOL_BUILD      
0200: 30 0a 0a 2f 2a 20 44 79 6e 61 6d 69 63 20 6d 65  0../* Dynamic me
0210: 6d 6f 72 79 20 6d 61 6e 61 67 65 6d 65 6e 74 20  mory management 
0220: 6d 61 63 72 6f 73 20 20 20 20 20 20 20 20 20 20  macros          
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0250: 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  */./* ----------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
02a0: 2a 2f 0a 23 69 66 64 65 66 20 4d 41 54 4c 41 42  */.#ifdef MATLAB
02b0: 0a 20 20 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  .  #define LUSOL
02c0: 5f 4d 41 4c 4c 4f 43 28 62 79 74 65 73 69 7a 65  _MALLOC(bytesize
02d0: 29 20 20 20 20 20 20 20 20 6d 78 4d 61 6c 6c 6f  )        mxMallo
02e0: 63 28 62 79 74 65 73 69 7a 65 29 0a 20 20 23 64  c(bytesize).  #d
02f0: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 43 41 4c 4c  efine LUSOL_CALL
0300: 4f 43 28 63 6f 75 6e 74 2c 20 72 65 63 73 69 7a  OC(count, recsiz
0310: 65 29 20 20 6d 78 43 61 6c 6c 6f 63 28 63 6f 75  e)  mxCalloc(cou
0320: 6e 74 2c 20 72 65 63 73 69 7a 65 29 0a 20 20 23  nt, recsize).  #
0330: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 45 41  define LUSOL_REA
0340: 4c 4c 4f 43 28 70 74 72 2c 20 62 79 74 65 73 69  LLOC(ptr, bytesi
0350: 7a 65 29 20 20 6d 78 52 65 61 6c 6c 6f 63 28 28  ze)  mxRealloc((
0360: 76 6f 69 64 20 2a 29 20 70 74 72 2c 20 62 79 74  void *) ptr, byt
0370: 65 73 69 7a 65 29 0a 20 20 23 64 65 66 69 6e 65  esize).  #define
0380: 20 4c 55 53 4f 4c 5f 46 52 45 45 28 70 74 72 29   LUSOL_FREE(ptr)
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
03a0: 6d 78 46 72 65 65 28 70 74 72 29 3b 20 70 74 72  mxFree(ptr); ptr
03b0: 3d 4e 55 4c 4c 3b 7d 0a 23 65 6c 73 65 0a 20 20  =NULL;}.#else.  
03c0: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 4d 41  #define LUSOL_MA
03d0: 4c 4c 4f 43 28 62 79 74 65 73 69 7a 65 29 20 20  LLOC(bytesize)  
03e0: 20 20 20 20 20 20 6d 61 6c 6c 6f 63 28 62 79 74        malloc(byt
03f0: 65 73 69 7a 65 29 0a 20 20 23 64 65 66 69 6e 65  esize).  #define
0400: 20 4c 55 53 4f 4c 5f 43 41 4c 4c 4f 43 28 63 6f   LUSOL_CALLOC(co
0410: 75 6e 74 2c 20 72 65 63 73 69 7a 65 29 20 20 63  unt, recsize)  c
0420: 61 6c 6c 6f 63 28 63 6f 75 6e 74 2c 20 72 65 63  alloc(count, rec
0430: 73 69 7a 65 29 0a 20 20 23 64 65 66 69 6e 65 20  size).  #define 
0440: 4c 55 53 4f 4c 5f 52 45 41 4c 4c 4f 43 28 70 74  LUSOL_REALLOC(pt
0450: 72 2c 20 62 79 74 65 73 69 7a 65 29 20 20 72 65  r, bytesize)  re
0460: 61 6c 6c 6f 63 28 28 76 6f 69 64 20 2a 29 20 70  alloc((void *) p
0470: 74 72 2c 20 62 79 74 65 73 69 7a 65 29 0a 20 20  tr, bytesize).  
0480: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 46 52  #define LUSOL_FR
0490: 45 45 28 70 74 72 29 20 20 20 20 20 20 20 20 20  EE(ptr)         
04a0: 20 20 20 20 20 20 7b 66 72 65 65 28 70 74 72 29        {free(ptr)
04b0: 3b 20 70 74 72 3d 4e 55 4c 4c 3b 7d 0a 23 65 6e  ; ptr=NULL;}.#en
04c0: 64 69 66 0a 0a 2f 2a 20 50 65 72 66 6f 72 6d 61  dif../* Performa
04d0: 6e 63 65 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74  nce compiler opt
04e0: 69 6f 6e 73 20 20 20 20 20 20 20 20 20 20 20 20  ions            
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d    */./* --------
0520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0560: 2d 20 2a 2f 0a 23 69 66 20 31 0a 20 20 23 64 65  - */.#if 1.  #de
0570: 66 69 6e 65 20 46 6f 72 63 65 49 6e 69 74 69 61  fine ForceInitia
0580: 6c 69 7a 61 74 69 6f 6e 20 20 20 20 20 20 2f 2a  lization      /*
0590: 20 53 61 74 69 73 66 79 20 63 6f 6d 70 69 6c 65   Satisfy compile
05a0: 72 73 2c 20 63 68 65 63 6b 20 64 75 72 69 6e 67  rs, check during
05b0: 20 64 65 62 75 67 67 69 6e 67 21 20 2a 2f 0a 20   debugging! */. 
05c0: 20 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 46 61   #define LUSOLFa
05d0: 73 74 44 65 6e 73 65 49 6e 64 65 78 20 20 20 20  stDenseIndex    
05e0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
05f0: 65 6e 74 20 74 68 65 20 6c 69 6e 65 61 72 69 7a  ent the lineariz
0600: 65 64 20 64 65 6e 73 65 20 61 64 64 72 65 73 73  ed dense address
0610: 20 2a 2f 0a 20 20 23 64 65 66 69 6e 65 20 4c 55   */.  #define LU
0620: 53 4f 4c 46 61 73 74 43 6c 65 61 72 20 20 20 20  SOLFastClear    
0630: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 69 6e         /* Use in
0640: 74 72 69 6e 73 69 63 20 66 75 6e 63 74 69 6f 6e  trinsic function
0650: 73 20 66 6f 72 20 6d 65 6d 6f 72 79 20 7a 65 72  s for memory zer
0660: 6f 69 6e 67 20 2a 2f 0a 20 20 23 64 65 66 69 6e  oing */.  #defin
0670: 65 20 4c 55 53 4f 4c 46 61 73 74 4d 6f 76 65 20  e LUSOLFastMove 
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0690: 55 73 65 20 69 6e 74 72 69 6e 73 69 63 20 66 75  Use intrinsic fu
06a0: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6d 65 6d 6f  nctions for memo
06b0: 72 79 20 6d 6f 76 65 73 20 2a 2f 0a 20 20 23 64  ry moves */.  #d
06c0: 65 66 69 6e 65 20 4c 55 53 4f 4c 46 61 73 74 43  efine LUSOLFastC
06d0: 6f 70 79 20 20 20 20 20 20 20 20 20 20 20 20 20  opy             
06e0: 20 20 2f 2a 20 55 73 65 20 69 6e 74 72 69 6e 73    /* Use intrins
06f0: 69 63 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72  ic functions for
0700: 20 6d 65 6d 6f 72 79 20 63 6f 70 79 20 2a 2f 0a   memory copy */.
0710: 20 20 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 46    #define LUSOLF
0720: 61 73 74 53 6f 6c 76 65 20 20 20 20 20 20 20 20  astSolve        
0730: 20 20 20 2f 2a 20 55 73 65 20 70 6f 69 6e 74 65     /* Use pointe
0740: 72 20 6f 70 65 72 61 74 69 6f 6e 73 20 69 6e 20  r operations in 
0750: 65 71 75 61 74 69 6f 6e 20 73 6f 6c 76 69 6e 67  equation solving
0760: 20 2a 2f 0a 20 20 23 64 65 66 69 6e 65 20 4c 55   */.  #define LU
0770: 53 4f 4c 53 61 66 65 46 61 73 74 55 70 64 61 74  SOLSafeFastUpdat
0780: 65 20 20 20 20 20 20 2f 2a 20 55 73 65 20 73 65  e      /* Use se
0790: 70 61 72 61 74 65 20 61 72 72 61 79 20 66 6f 72  parate array for
07a0: 20 4c 55 36 4c 20 72 65 73 75 6c 74 20 73 74 6f   LU6L result sto
07b0: 72 61 67 65 20 2a 2f 0a 2f 2a 23 64 65 66 69 6e  rage */./*#defin
07c0: 65 20 55 73 65 4f 6c 64 5f 4c 55 36 43 48 4b 5f  e UseOld_LU6CHK_
07d0: 32 30 30 34 30 35 31 30 20 2a 2f 0a 2f 2a 23 64  20040510 */./*#d
07e0: 65 66 69 6e 65 20 41 6c 77 61 79 73 53 65 70 61  efine AlwaysSepa
07f0: 72 61 74 65 48 61 6d 61 78 52 20 2a 2f 20 20 20  rateHamaxR */   
0800: 20 20 20 20 2f 2a 20 45 6e 61 62 6c 65 64 20 77      /* Enabled w
0810: 68 65 6e 20 74 68 65 20 70 69 76 6f 74 20 6d 6f  hen the pivot mo
0820: 64 65 6c 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  del is fixed */.
0830: 20 20 23 69 66 20 30 0a 20 20 20 20 23 64 65 66    #if 0.    #def
0840: 69 6e 65 20 46 6f 72 63 65 52 6f 77 42 61 73 65  ine ForceRowBase
0850: 64 4c 30 20 20 20 20 20 20 20 20 20 20 20 20 20  dL0             
0860: 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
0870: 20 72 6f 77 2d 73 6f 72 74 65 64 20 76 65 72 73   row-sorted vers
0880: 69 6f 6e 20 6f 66 20 4c 30 20 2a 2f 0a 20 20 23  ion of L0 */.  #
0890: 65 6e 64 69 66 0a 2f 2a 20 20 23 64 65 66 69 6e  endif./*  #defin
08a0: 65 20 53 65 74 53 6d 61 6c 6c 54 6f 5a 65 72 6f  e SetSmallToZero
08b0: 2a 2f 0a 2f 2a 20 20 23 64 65 66 69 6e 65 20 44  */./*  #define D
08c0: 6f 54 72 61 63 65 4c 30 20 2a 2f 0a 23 65 6e 64  oTraceL0 */.#end
08d0: 69 66 0a 2f 2a 23 64 65 66 69 6e 65 20 55 73 65  if./*#define Use
08e0: 54 69 6d 65 72 20 2a 2f 0a 0a 0a 2f 2a 20 4c 65  Timer */.../* Le
08f0: 67 61 63 79 20 63 6f 6d 70 61 74 69 62 69 6c 69  gacy compatibili
0900: 74 79 20 61 6e 64 20 74 65 73 74 69 6e 67 20 6f  ty and testing o
0910: 70 74 69 6f 6e 73 20 28 46 6f 72 74 72 61 6e 2d  ptions (Fortran-
0920: 4c 55 53 4f 4c 29 20 20 20 20 20 20 20 20 20 20  LUSOL)          
0930: 20 20 20 20 20 20 20 20 2a 2f 0a 2f 2a 20 2d 2d          */./* --
0940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0980: 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a 23 69 66 20 30  ------- */.#if 0
0990: 0a 20 20 23 64 65 66 69 6e 65 20 4c 65 67 61 63  .  #define Legac
09a0: 79 54 65 73 74 69 6e 67 0a 20 20 23 64 65 66 69  yTesting.  #defi
09b0: 6e 65 20 53 74 61 74 69 63 4d 65 6d 41 6c 6c 6f  ne StaticMemAllo
09c0: 63 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  c           /* P
09d0: 72 65 61 6c 6c 6f 63 61 74 65 64 20 76 73 2e 20  reallocated vs. 
09e0: 64 79 6e 61 6d 69 63 20 6d 65 6d 6f 72 79 20 61  dynamic memory a
09f0: 6c 6c 6f 63 61 74 69 6f 6e 20 2a 2f 0a 20 20 23  llocation */.  #
0a00: 64 65 66 69 6e 65 20 43 6c 61 73 73 69 63 64 69  define Classicdi
0a10: 61 67 55 20 20 20 20 20 20 20 20 20 20 20 20 20  agU             
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a30: 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 64 69       /* Store di
0a40: 61 67 55 20 61 74 20 65 6e 64 20 6f 66 20 61 20  agU at end of a 
0a50: 2a 2f 0a 20 20 23 64 65 66 69 6e 65 20 43 6c 61  */.  #define Cla
0a60: 73 73 69 63 48 61 6d 61 78 52 20 20 20 20 20 20  ssicHamaxR      
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0a80: 20 53 74 6f 72 65 20 48 2b 41 6d 61 78 52 20 61   Store H+AmaxR a
0a90: 74 20 65 6e 64 20 6f 66 20 61 2f 69 6e 64 63 2f  t end of a/indc/
0aa0: 69 6e 64 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  indr */.#endif..
0ab0: 0a 2f 2a 20 47 65 6e 65 72 61 6c 20 63 6f 6e 73  ./* General cons
0ac0: 74 61 6e 74 73 20 61 6e 64 20 64 61 74 61 20 74  tants and data t
0ad0: 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  ype definitions 
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
0b00: 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./* ------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2a 2f  ------------- */
0b50: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 41  .#define LUSOL_A
0b60: 52 52 41 59 4f 46 46 53 45 54 20 20 20 20 20 20  RRAYOFFSET      
0b70: 20 20 20 20 20 20 31 0a 23 69 66 6e 64 65 66 20        1.#ifndef 
0b80: 5a 45 52 4f 0a 20 20 23 64 65 66 69 6e 65 20 5a  ZERO.  #define Z
0b90: 45 52 4f 20 20 20 20 20 20 20 20 20 20 20 20 20  ERO             
0ba0: 20 20 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64            0.#end
0bb0: 69 66 0a 23 69 66 6e 64 65 66 20 4f 4e 45 0a 20  if.#ifndef ONE. 
0bc0: 20 23 64 65 66 69 6e 65 20 4f 4e 45 20 20 20 20   #define ONE    
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 69 66      1.#endif.#if
0bf0: 6e 64 65 66 20 46 41 4c 53 45 0a 20 20 23 64 65  ndef FALSE.  #de
0c00: 66 69 6e 65 20 46 41 4c 53 45 20 20 20 20 20 20  fine FALSE      
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
0c30: 20 54 52 55 45 0a 20 20 23 64 65 66 69 6e 65 20   TRUE.  #define 
0c40: 54 52 55 45 20 20 20 20 20 20 20 20 20 20 20 20  TRUE            
0c50: 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 65 6e             1.#en
0c60: 64 69 66 0a 23 69 66 6e 64 65 66 20 4e 55 4c 4c  dif.#ifndef NULL
0c70: 0a 20 20 23 64 65 66 69 6e 65 20 4e 55 4c 4c 20  .  #define NULL 
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23        0.#endif.#
0ca0: 69 66 6e 64 65 66 20 52 45 41 4c 0a 20 20 23 64  ifndef REAL.  #d
0cb0: 65 66 69 6e 65 20 52 45 41 4c 20 64 6f 75 62 6c  efine REAL doubl
0cc0: 65 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  e.#endif.#ifndef
0cd0: 20 52 45 41 4c 58 50 0a 20 20 23 64 65 66 69 6e   REALXP.  #defin
0ce0: 65 20 52 45 41 4c 58 50 20 6c 6f 6e 67 20 64 6f  e REALXP long do
0cf0: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 23 69 66 6e  uble.#endif.#ifn
0d00: 64 65 66 20 4d 59 42 4f 4f 4c 0a 20 20 23 64 65  def MYBOOL.  #de
0d10: 66 69 6e 65 20 4d 59 42 4f 4f 4c 20 75 6e 73 69  fine MYBOOL unsi
0d20: 67 6e 65 64 20 63 68 61 72 0a 23 65 6e 64 69 66  gned char.#endif
0d30: 0a 0a 0a 2f 2a 20 55 73 65 72 2d 73 65 74 74 61  .../* User-setta
0d40: 62 6c 65 20 64 65 66 61 75 6c 74 20 70 61 72 61  ble default para
0d50: 6d 65 74 65 72 20 76 61 6c 75 65 73 20 20 20 20  meter values    
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d80: 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  */./* ----------
0d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
0dd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  */.#define LUSOL
0de0: 5f 44 45 46 41 55 4c 54 5f 47 41 4d 4d 41 20 20  _DEFAULT_GAMMA  
0df0: 20 20 20 20 20 20 32 2e 30 0a 23 64 65 66 69 6e        2.0.#defin
0e00: 65 20 4c 55 53 4f 4c 5f 53 4d 41 4c 4c 4e 55 4d  e LUSOL_SMALLNUM
0e10: 20 20 20 20 20 20 20 20 20 31 2e 30 65 2d 32 30           1.0e-20
0e20: 20 20 2f 2a 20 49 41 45 45 20 64 6f 75 62 6c 65    /* IAEE double
0e30: 73 20 68 61 76 65 20 70 72 65 63 69 73 69 6f 6e  s have precision
0e40: 20 32 2e 32 32 65 2d 31 36 20 2a 2f 0a 23 64 65   2.22e-16 */.#de
0e50: 66 69 6e 65 20 4c 55 53 4f 4c 5f 42 49 47 4e 55  fine LUSOL_BIGNU
0e60: 4d 20 20 20 20 20 20 20 20 20 20 20 31 2e 30 65  M           1.0e
0e70: 2b 32 30 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f  +20.#define LUSO
0e80: 4c 5f 4d 49 4e 44 45 4c 54 41 5f 46 41 43 54 4f  L_MINDELTA_FACTO
0e90: 52 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69  R        4.#defi
0ea0: 6e 65 20 4c 55 53 4f 4c 5f 4d 49 4e 44 45 4c 54  ne LUSOL_MINDELT
0eb0: 41 5f 61 20 20 20 20 20 20 20 20 20 31 30 30 30  A_a         1000
0ec0: 30 0a 23 69 66 20 31 0a 20 20 23 64 65 66 69 6e  0.#if 1.  #defin
0ed0: 65 20 4c 55 53 4f 4c 5f 4d 55 4c 54 5f 6e 7a 5f  e LUSOL_MULT_nz_
0ee0: 61 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20  a            2  
0ef0: 2f 2a 20 53 75 67 67 65 73 74 65 64 20 62 79 20  /* Suggested by 
0f00: 59 69 6e 20 5a 68 61 6e 67 20 2a 2f 0a 23 65 6c  Yin Zhang */.#el
0f10: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 4c 55 53  se.  #define LUS
0f20: 4f 4c 5f 4d 55 4c 54 5f 6e 7a 5f 61 20 20 20 20  OL_MULT_nz_a    
0f30: 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 43 6f          5  /* Co
0f40: 75 6c 64 20 63 6f 6e 73 69 64 65 72 20 36 20 6f  uld consider 6 o
0f50: 72 20 37 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64  r 7 */.#endif.#d
0f60: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 4d 49 4e 44  efine LUSOL_MIND
0f70: 45 4c 54 41 5f 72 63 20 20 20 20 20 20 20 20 20  ELTA_rc         
0f80: 31 30 30 30 0a 23 64 65 66 69 6e 65 20 4c 55 53  1000.#define LUS
0f90: 4f 4c 5f 44 45 46 41 55 4c 54 5f 53 4d 41 52 54  OL_DEFAULT_SMART
0fa0: 52 41 54 49 4f 20 30 2e 36 36 37 0a 0a 2f 2a 20  RATIO 0.667../* 
0fb0: 46 69 78 65 64 20 73 79 73 74 65 6d 20 70 61 72  Fixed system par
0fc0: 61 6d 65 74 65 72 73 20 28 63 68 61 6e 67 65 61  ameters (changea
0fd0: 62 6c 65 20 6f 6e 6c 79 20 62 79 20 64 65 76 65  ble only by deve
0fe0: 6c 6f 70 65 72 73 29 20 20 20 20 20 20 20 20 20  lopers)         
0ff0: 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 2f 2a 20            */./* 
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a 0a 2f 2a  --------- */../*
1050: 20 70 61 72 6d 6c 75 20 49 4e 50 55 54 20 70 61   parmlu INPUT pa
1060: 72 61 6d 65 74 65 72 73 3a 20 2a 2f 0a 23 64 65  rameters: */.#de
1070: 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 53 4d  fine LUSOL_RP_SM
1080: 41 52 54 52 41 54 49 4f 20 20 20 20 20 20 20 20  ARTRATIO        
1090: 20 20 30 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f    0.#define LUSO
10a0: 4c 5f 52 50 5f 46 41 43 54 4f 52 4d 41 58 5f 4c  L_RP_FACTORMAX_L
10b0: 69 6a 20 20 20 20 20 20 20 31 0a 23 64 65 66 69  ij       1.#defi
10c0: 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 55 50 44 41  ne LUSOL_RP_UPDA
10d0: 54 45 4d 41 58 5f 4c 69 6a 20 20 20 20 20 20 20  TEMAX_Lij       
10e0: 32 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  2.#define LUSOL_
10f0: 52 50 5f 5a 45 52 4f 54 4f 4c 45 52 41 4e 43 45  RP_ZEROTOLERANCE
1100: 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65         3.#define
1110: 20 4c 55 53 4f 4c 5f 52 50 5f 53 4d 41 4c 4c 44   LUSOL_RP_SMALLD
1120: 49 41 47 5f 55 20 20 20 20 20 20 20 20 20 34 0a  IAG_U         4.
1130: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50  #define LUSOL_RP
1140: 5f 45 50 53 44 49 41 47 5f 55 20 20 20 20 20 20  _EPSDIAG_U      
1150: 20 20 20 20 20 35 0a 23 64 65 66 69 6e 65 20 4c       5.#define L
1160: 55 53 4f 4c 5f 52 50 5f 43 4f 4d 50 53 50 41 43  USOL_RP_COMPSPAC
1170: 45 5f 55 20 20 20 20 20 20 20 20 20 36 0a 23 64  E_U         6.#d
1180: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 4d  efine LUSOL_RP_M
1190: 41 52 4b 4f 57 49 54 5a 5f 43 4f 4e 4c 59 20 20  ARKOWITZ_CONLY  
11a0: 20 20 20 37 0a 23 64 65 66 69 6e 65 20 4c 55 53     7.#define LUS
11b0: 4f 4c 5f 52 50 5f 4d 41 52 4b 4f 57 49 54 5a 5f  OL_RP_MARKOWITZ_
11c0: 44 45 4e 53 45 20 20 20 20 20 38 0a 23 64 65 66  DENSE     8.#def
11d0: 69 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 47 41 4d  ine LUSOL_RP_GAM
11e0: 4d 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20  MA              
11f0: 20 39 0a 0a 2f 2a 20 70 61 72 6d 6c 75 20 4f 55   9../* parmlu OU
1200: 50 55 54 20 70 61 72 61 6d 65 74 65 72 73 3a 20  PUT parameters: 
1210: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  */.#define LUSOL
1220: 5f 52 50 5f 4d 41 58 45 4c 45 4d 5f 41 20 20 20  _RP_MAXELEM_A   
1230: 20 20 20 20 20 20 20 31 30 0a 23 64 65 66 69 6e         10.#defin
1240: 65 20 4c 55 53 4f 4c 5f 52 50 5f 4d 41 58 4d 55  e LUSOL_RP_MAXMU
1250: 4c 54 5f 4c 20 20 20 20 20 20 20 20 20 20 31 31  LT_L          11
1260: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52  .#define LUSOL_R
1270: 50 5f 4d 41 58 45 4c 45 4d 5f 55 20 20 20 20 20  P_MAXELEM_U     
1280: 20 20 20 20 20 31 32 0a 23 64 65 66 69 6e 65 20       12.#define 
1290: 4c 55 53 4f 4c 5f 52 50 5f 4d 41 58 45 4c 45 4d  LUSOL_RP_MAXELEM
12a0: 5f 44 49 41 47 55 20 20 20 20 20 20 31 33 0a 23  _DIAGU      13.#
12b0: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f  define LUSOL_RP_
12c0: 4d 49 4e 45 4c 45 4d 5f 44 49 41 47 55 20 20 20  MINELEM_DIAGU   
12d0: 20 20 20 31 34 0a 23 64 65 66 69 6e 65 20 4c 55     14.#define LU
12e0: 53 4f 4c 5f 52 50 5f 4d 41 58 45 4c 45 4d 5f 54  SOL_RP_MAXELEM_T
12f0: 43 50 20 20 20 20 20 20 20 20 31 35 0a 23 64 65  CP        15.#de
1300: 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 47 52  fine LUSOL_RP_GR
1310: 4f 57 54 48 52 41 54 45 20 20 20 20 20 20 20 20  OWTHRATE        
1320: 20 31 36 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f   16.#define LUSO
1330: 4c 5f 52 50 5f 55 53 45 52 44 41 54 41 5f 31 20  L_RP_USERDATA_1 
1340: 20 20 20 20 20 20 20 20 31 37 0a 23 64 65 66 69          17.#defi
1350: 6e 65 20 4c 55 53 4f 4c 5f 52 50 5f 55 53 45 52  ne LUSOL_RP_USER
1360: 44 41 54 41 5f 32 20 20 20 20 20 20 20 20 20 31  DATA_2         1
1370: 38 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  8.#define LUSOL_
1380: 52 50 5f 55 53 45 52 44 41 54 41 5f 33 20 20 20  RP_USERDATA_3   
1390: 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e 65        19.#define
13a0: 20 4c 55 53 4f 4c 5f 52 50 5f 52 45 53 49 44 55   LUSOL_RP_RESIDU
13b0: 41 4c 5f 55 20 20 20 20 20 20 20 20 20 32 30 0a  AL_U         20.
13c0: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 52 50  #define LUSOL_RP
13d0: 5f 4c 41 53 54 49 54 45 4d 20 20 20 20 20 20 20  _LASTITEM       
13e0: 20 20 20 20 20 4c 55 53 4f 4c 5f 52 50 5f 52 45       LUSOL_RP_RE
13f0: 53 49 44 55 41 4c 5f 55 0a 0a 2f 2a 20 6c 75 70  SIDUAL_U../* lup
1400: 61 72 6d 20 49 4e 50 55 54 20 70 61 72 61 6d 65  arm INPUT parame
1410: 74 65 72 73 3a 20 2a 2f 0a 23 64 65 66 69 6e 65  ters: */.#define
1420: 20 4c 55 53 4f 4c 5f 49 50 5f 55 53 45 52 44 41   LUSOL_IP_USERDA
1430: 54 41 5f 30 20 20 20 20 20 20 20 20 20 20 30 0a  TA_0          0.
1440: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50  #define LUSOL_IP
1450: 5f 50 52 49 4e 54 55 4e 49 54 20 20 20 20 20 20  _PRINTUNIT      
1460: 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 4c       1.#define L
1470: 55 53 4f 4c 5f 49 50 5f 50 52 49 4e 54 4c 45 56  USOL_IP_PRINTLEV
1480: 45 4c 20 20 20 20 20 20 20 20 20 20 32 0a 23 64  EL          2.#d
1490: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 4d  efine LUSOL_IP_M
14a0: 41 52 4b 4f 57 49 54 5a 5f 4d 41 58 43 4f 4c 20  ARKOWITZ_MAXCOL 
14b0: 20 20 20 33 0a 23 64 65 66 69 6e 65 20 4c 55 53     3.#define LUS
14c0: 4f 4c 5f 49 50 5f 53 43 41 4c 41 52 5f 4e 5a 41  OL_IP_SCALAR_NZA
14d0: 20 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66            4.#def
14e0: 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 55 50 44  ine LUSOL_IP_UPD
14f0: 41 54 45 4c 49 4d 49 54 20 20 20 20 20 20 20 20  ATELIMIT        
1500: 20 35 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c   5.#define LUSOL
1510: 5f 49 50 5f 50 49 56 4f 54 54 59 50 45 20 20 20  _IP_PIVOTTYPE   
1520: 20 20 20 20 20 20 20 20 36 0a 23 64 65 66 69 6e          6.#defin
1530: 65 20 4c 55 53 4f 4c 5f 49 50 5f 41 43 43 45 4c  e LUSOL_IP_ACCEL
1540: 45 52 41 54 49 4f 4e 20 20 20 20 20 20 20 20 37  ERATION        7
1550: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
1560: 50 5f 4b 45 45 50 4c 55 20 20 20 20 20 20 20 20  P_KEEPLU        
1570: 20 20 20 20 20 20 38 0a 23 64 65 66 69 6e 65 20        8.#define 
1580: 4c 55 53 4f 4c 5f 49 50 5f 53 49 4e 47 55 4c 41  LUSOL_IP_SINGULA
1590: 52 4c 49 53 54 53 49 5a 45 20 20 20 20 39 0a 0a  RLISTSIZE    9..
15a0: 2f 2a 20 6c 75 70 61 72 6d 20 4f 55 54 50 55 54  /* luparm OUTPUT
15b0: 20 70 61 72 61 6d 65 74 65 72 73 3a 20 2a 2f 0a   parameters: */.
15c0: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50  #define LUSOL_IP
15d0: 5f 49 4e 46 4f 52 4d 20 20 20 20 20 20 20 20 20  _INFORM         
15e0: 20 20 20 20 31 30 0a 23 64 65 66 69 6e 65 20 4c      10.#define L
15f0: 55 53 4f 4c 5f 49 50 5f 53 49 4e 47 55 4c 41 52  USOL_IP_SINGULAR
1600: 49 54 49 45 53 20 20 20 20 20 20 31 31 0a 23 64  ITIES      11.#d
1610: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 53  efine LUSOL_IP_S
1620: 49 4e 47 55 4c 41 52 49 4e 44 45 58 20 20 20 20  INGULARINDEX    
1630: 20 20 31 32 0a 23 64 65 66 69 6e 65 20 4c 55 53    12.#define LUS
1640: 4f 4c 5f 49 50 5f 4d 49 4e 49 4d 55 4d 4c 45 4e  OL_IP_MINIMUMLEN
1650: 41 20 20 20 20 20 20 20 20 31 33 0a 23 64 65 66  A        13.#def
1660: 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 4d 41 58  ine LUSOL_IP_MAX
1670: 4c 45 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  LEN             
1680: 31 34 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  14.#define LUSOL
1690: 5f 49 50 5f 55 50 44 41 54 45 43 4f 55 4e 54 20  _IP_UPDATECOUNT 
16a0: 20 20 20 20 20 20 20 31 35 0a 23 64 65 66 69 6e         15.#defin
16b0: 65 20 4c 55 53 4f 4c 5f 49 50 5f 52 41 4e 4b 5f  e LUSOL_IP_RANK_
16c0: 55 20 20 20 20 20 20 20 20 20 20 20 20 20 31 36  U             16
16d0: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
16e0: 50 5f 43 4f 4c 43 4f 55 4e 54 5f 44 45 4e 53 45  P_COLCOUNT_DENSE
16f0: 31 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20  1    17.#define 
1700: 4c 55 53 4f 4c 5f 49 50 5f 43 4f 4c 43 4f 55 4e  LUSOL_IP_COLCOUN
1710: 54 5f 44 45 4e 53 45 32 20 20 20 20 31 38 0a 23  T_DENSE2    18.#
1720: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f  define LUSOL_IP_
1730: 43 4f 4c 49 4e 44 45 58 5f 44 55 4d 49 4e 20 20  COLINDEX_DUMIN  
1740: 20 20 20 31 39 0a 23 64 65 66 69 6e 65 20 4c 55     19.#define LU
1750: 53 4f 4c 5f 49 50 5f 43 4f 4c 43 4f 55 4e 54 5f  SOL_IP_COLCOUNT_
1760: 4c 30 20 20 20 20 20 20 20 20 32 30 0a 23 64 65  L0        20.#de
1770: 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 4e 4f  fine LUSOL_IP_NO
1780: 4e 5a 45 52 4f 53 5f 4c 30 20 20 20 20 20 20 20  NZEROS_L0       
1790: 20 32 31 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f   21.#define LUSO
17a0: 4c 5f 49 50 5f 4e 4f 4e 5a 45 52 4f 53 5f 55 30  L_IP_NONZEROS_U0
17b0: 20 20 20 20 20 20 20 20 32 32 0a 23 64 65 66 69          22.#defi
17c0: 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 4e 4f 4e 5a  ne LUSOL_IP_NONZ
17d0: 45 52 4f 53 5f 4c 20 20 20 20 20 20 20 20 20 32  EROS_L         2
17e0: 33 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  3.#define LUSOL_
17f0: 49 50 5f 4e 4f 4e 5a 45 52 4f 53 5f 55 20 20 20  IP_NONZEROS_U   
1800: 20 20 20 20 20 20 32 34 0a 23 64 65 66 69 6e 65        24.#define
1810: 20 4c 55 53 4f 4c 5f 49 50 5f 4e 4f 4e 5a 45 52   LUSOL_IP_NONZER
1820: 4f 53 5f 52 4f 57 20 20 20 20 20 20 20 32 35 0a  OS_ROW       25.
1830: 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50  #define LUSOL_IP
1840: 5f 43 4f 4d 50 52 45 53 53 49 4f 4e 53 5f 4c 55  _COMPRESSIONS_LU
1850: 20 20 20 20 32 36 0a 23 64 65 66 69 6e 65 20 4c      26.#define L
1860: 55 53 4f 4c 5f 49 50 5f 4d 41 52 4b 4f 57 49 54  USOL_IP_MARKOWIT
1870: 5a 5f 4d 45 52 49 54 20 20 20 20 32 37 0a 23 64  Z_MERIT    27.#d
1880: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 54  efine LUSOL_IP_T
1890: 52 49 41 4e 47 52 4f 57 53 5f 55 20 20 20 20 20  RIANGROWS_U     
18a0: 20 20 32 38 0a 23 64 65 66 69 6e 65 20 4c 55 53    28.#define LUS
18b0: 4f 4c 5f 49 50 5f 54 52 49 41 4e 47 52 4f 57 53  OL_IP_TRIANGROWS
18c0: 5f 4c 20 20 20 20 20 20 20 32 39 0a 23 64 65 66  _L       29.#def
18d0: 69 6e 65 20 4c 55 53 4f 4c 5f 49 50 5f 46 54 52  ine LUSOL_IP_FTR
18e0: 41 4e 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20  ANCOUNT         
18f0: 33 30 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  30.#define LUSOL
1900: 5f 49 50 5f 42 54 52 41 4e 43 4f 55 4e 54 20 20  _IP_BTRANCOUNT  
1910: 20 20 20 20 20 20 20 33 31 0a 23 64 65 66 69 6e         31.#defin
1920: 65 20 4c 55 53 4f 4c 5f 49 50 5f 52 4f 57 43 4f  e LUSOL_IP_ROWCO
1930: 55 4e 54 5f 4c 30 20 20 20 20 20 20 20 20 33 32  UNT_L0        32
1940: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
1950: 50 5f 4c 41 53 54 49 54 45 4d 20 20 20 20 20 20  P_LASTITEM      
1960: 20 20 20 20 20 20 4c 55 53 4f 4c 5f 49 50 5f 52        LUSOL_IP_R
1970: 4f 57 43 4f 55 4e 54 5f 4c 30 0a 0a 0a 2f 2a 20  OWCOUNT_L0.../* 
1980: 4d 61 63 72 6f 73 20 66 6f 72 20 6d 61 74 72 69  Macros for matri
1990: 78 2d 62 61 73 65 64 20 61 63 63 65 73 73 20 66  x-based access f
19a0: 6f 72 20 64 65 6e 73 65 20 70 61 72 74 20 6f 66  or dense part of
19b0: 20 41 20 61 6e 64 20 74 69 6d 65 72 20 6d 61 70   A and timer map
19c0: 70 69 6e 67 20 20 20 20 20 20 2a 2f 0a 2f 2a 20  ping      */./* 
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a 23 64 65  --------- */.#de
1a20: 66 69 6e 65 20 44 41 50 4f 53 28 72 6f 77 2c 20  fine DAPOS(row, 
1a30: 63 6f 6c 29 20 20 20 28 72 6f 77 20 2b 20 28 63  col)   (row + (c
1a40: 6f 6c 2d 31 29 2a 4c 44 41 29 0a 23 64 65 66 69  ol-1)*LDA).#defi
1a50: 6e 65 20 74 69 6d 65 72 28 74 65 78 74 2c 20 69  ne timer(text, i
1a60: 64 29 20 20 20 4c 55 53 4f 4c 5f 74 69 6d 65 72  d)   LUSOL_timer
1a70: 28 4c 55 53 4f 4c 2c 20 69 64 2c 20 74 65 78 74  (LUSOL, id, text
1a80: 29 0a 0a 0a 2f 2a 20 50 61 72 61 6d 65 74 65 72  ).../* Parameter
1a90: 2f 6f 70 74 69 6f 6e 20 64 65 66 69 6e 65 73 20  /option defines 
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 20 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   */./* ---------
1ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f   */.#define LUSO
1b30: 4c 5f 4d 53 47 5f 4e 4f 4e 45 20 20 20 20 20 20  L_MSG_NONE      
1b40: 20 20 20 20 20 20 20 20 2d 31 0a 23 64 65 66 69          -1.#defi
1b50: 6e 65 20 4c 55 53 4f 4c 5f 4d 53 47 5f 53 49 4e  ne LUSOL_MSG_SIN
1b60: 47 55 4c 41 52 49 54 59 20 20 20 20 20 20 20 20  GULARITY        
1b70: 30 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  0.#define LUSOL_
1b80: 4d 53 47 5f 53 54 41 54 49 53 54 49 43 53 20 20  MSG_STATISTICS  
1b90: 20 20 20 20 20 20 31 30 0a 23 64 65 66 69 6e 65        10.#define
1ba0: 20 4c 55 53 4f 4c 5f 4d 53 47 5f 50 49 56 4f 54   LUSOL_MSG_PIVOT
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 35 30 0a               50.
1bc0: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 42  .#define LUSOL_B
1bd0: 41 53 45 4f 52 44 45 52 20 20 20 20 20 20 20 20  ASEORDER        
1be0: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
1bf0: 4c 55 53 4f 4c 5f 4f 54 48 45 52 4f 52 44 45 52  LUSOL_OTHERORDER
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 23               1.#
1c10: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 41 55 54  define LUSOL_AUT
1c20: 4f 4f 52 44 45 52 20 20 20 20 20 20 20 20 20 20  OORDER          
1c30: 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 4c 55      2.#define LU
1c40: 53 4f 4c 5f 41 43 43 45 4c 45 52 41 54 45 5f 4c  SOL_ACCELERATE_L
1c50: 30 20 20 20 20 20 20 20 20 20 20 34 0a 23 64 65  0          4.#de
1c60: 66 69 6e 65 20 4c 55 53 4f 4c 5f 41 43 43 45 4c  fine LUSOL_ACCEL
1c70: 45 52 41 54 45 5f 55 20 20 20 20 20 20 20 20 20  ERATE_U         
1c80: 20 20 38 0a 0a 23 64 65 66 69 6e 65 20 4c 55 53    8..#define LUS
1c90: 4f 4c 5f 50 49 56 4d 4f 44 5f 4e 4f 43 48 41 4e  OL_PIVMOD_NOCHAN
1ca0: 47 45 20 20 20 20 20 20 20 2d 32 20 20 2f 2a 20  GE       -2  /* 
1cb0: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 61 63 74  Don't change act
1cc0: 69 76 65 20 70 69 76 6f 74 69 6e 67 20 6d 6f 64  ive pivoting mod
1cd0: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55  el */.#define LU
1ce0: 53 4f 4c 5f 50 49 56 4d 4f 44 5f 44 45 46 41 55  SOL_PIVMOD_DEFAU
1cf0: 4c 54 20 20 20 20 20 20 20 20 2d 31 20 20 2f 2a  LT        -1  /*
1d00: 20 53 65 74 20 70 69 76 6f 74 69 6e 67 20 6d 6f   Set pivoting mo
1d10: 64 65 6c 20 74 6f 20 64 65 66 61 75 6c 74 20 2a  del to default *
1d20: 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  /.#define LUSOL_
1d30: 50 49 56 4d 4f 44 5f 54 50 50 20 20 20 20 20 20  PIVMOD_TPP      
1d40: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 54 68 72         0  /* Thr
1d50: 65 73 68 6f 6c 64 20 50 61 72 74 69 61 6c 20 20  eshold Partial  
1d60: 20 70 69 76 6f 74 69 6e 67 20 28 6e 6f 72 6d 61   pivoting (norma
1d70: 6c 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55  l) */.#define LU
1d80: 53 4f 4c 5f 50 49 56 4d 4f 44 5f 54 52 50 20 20  SOL_PIVMOD_TRP  
1d90: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 2f 2a             1  /*
1da0: 20 54 68 72 65 73 68 6f 6c 64 20 52 6f 6f 6b 20   Threshold Rook 
1db0: 20 20 20 20 20 70 69 76 6f 74 69 6e 67 20 2a 2f       pivoting */
1dc0: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 50  .#define LUSOL_P
1dd0: 49 56 4d 4f 44 5f 54 43 50 20 20 20 20 20 20 20  IVMOD_TCP       
1de0: 20 20 20 20 20 20 32 20 20 2f 2a 20 54 68 72 65        2  /* Thre
1df0: 73 68 6f 6c 64 20 43 6f 6d 70 6c 65 74 65 20 20  shold Complete  
1e00: 70 69 76 6f 74 69 6e 67 20 2a 2f 0a 23 64 65 66  pivoting */.#def
1e10: 69 6e 65 20 4c 55 53 4f 4c 5f 50 49 56 4d 4f 44  ine LUSOL_PIVMOD
1e20: 5f 54 53 50 20 20 20 20 20 20 20 20 20 20 20 20  _TSP            
1e30: 20 33 20 20 2f 2a 20 54 68 72 65 73 68 6f 6c 64   3  /* Threshold
1e40: 20 53 79 6d 6d 65 74 72 69 63 20 70 69 76 6f 74   Symmetric pivot
1e50: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c  ing */.#define L
1e60: 55 53 4f 4c 5f 50 49 56 4d 4f 44 5f 4d 41 58 20  USOL_PIVMOD_MAX 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 4c 55 53 4f              LUSO
1e80: 4c 5f 50 49 56 4d 4f 44 5f 54 53 50 0a 0a 23 64  L_PIVMOD_TSP..#d
1e90: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 50 49 56 54  efine LUSOL_PIVT
1ea0: 4f 4c 5f 4e 4f 43 48 41 4e 47 45 20 20 20 20 20  OL_NOCHANGE     
1eb0: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 4c 55 53     0.#define LUS
1ec0: 4f 4c 5f 50 49 56 54 4f 4c 5f 42 41 47 47 59 20  OL_PIVTOL_BAGGY 
1ed0: 20 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66            1.#def
1ee0: 69 6e 65 20 4c 55 53 4f 4c 5f 50 49 56 54 4f 4c  ine LUSOL_PIVTOL
1ef0: 5f 4c 4f 4f 53 45 20 20 20 20 20 20 20 20 20 20  _LOOSE          
1f00: 20 32 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c   2.#define LUSOL
1f10: 5f 50 49 56 54 4f 4c 5f 4e 4f 52 4d 41 4c 20 20  _PIVTOL_NORMAL  
1f20: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
1f30: 65 20 4c 55 53 4f 4c 5f 50 49 56 54 4f 4c 5f 53  e LUSOL_PIVTOL_S
1f40: 4c 49 4d 20 20 20 20 20 20 20 20 20 20 20 20 34  LIM            4
1f50: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 50  .#define LUSOL_P
1f60: 49 56 54 4f 4c 5f 54 49 47 48 54 20 20 20 20 20  IVTOL_TIGHT     
1f70: 20 20 20 20 20 20 35 0a 23 64 65 66 69 6e 65 20        5.#define 
1f80: 4c 55 53 4f 4c 5f 50 49 56 54 4f 4c 5f 53 55 50  LUSOL_PIVTOL_SUP
1f90: 45 52 20 20 20 20 20 20 20 20 20 20 20 36 0a 23  ER           6.#
1fa0: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 50 49 56  define LUSOL_PIV
1fb0: 54 4f 4c 5f 43 4f 52 53 45 54 20 20 20 20 20 20  TOL_CORSET      
1fc0: 20 20 20 20 37 0a 23 64 65 66 69 6e 65 20 4c 55      7.#define LU
1fd0: 53 4f 4c 5f 50 49 56 54 4f 4c 5f 44 45 46 41 55  SOL_PIVTOL_DEFAU
1fe0: 4c 54 20 20 20 20 20 20 20 20 20 4c 55 53 4f 4c  LT         LUSOL
1ff0: 5f 50 49 56 54 4f 4c 5f 53 4c 49 4d 0a 23 64 65  _PIVTOL_SLIM.#de
2000: 66 69 6e 65 20 4c 55 53 4f 4c 5f 50 49 56 54 4f  fine LUSOL_PIVTO
2010: 4c 5f 4d 41 58 20 20 20 20 20 20 20 20 20 20 20  L_MAX           
2020: 20 20 4c 55 53 4f 4c 5f 50 49 56 54 4f 4c 5f 43    LUSOL_PIVTOL_C
2030: 4f 52 53 45 54 0a 0a 23 64 65 66 69 6e 65 20 4c  ORSET..#define L
2040: 55 53 4f 4c 5f 55 50 44 41 54 45 5f 4f 4c 44 45  USOL_UPDATE_OLDE
2050: 4d 50 54 59 20 20 20 20 20 20 20 20 30 20 20 2f  MPTY        0  /
2060: 2a 20 4e 6f 2f 65 6d 70 74 79 20 63 75 72 72 65  * No/empty curre
2070: 6e 74 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 23 64  nt column. */.#d
2080: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 55 50 44 41  efine LUSOL_UPDA
2090: 54 45 5f 4f 4c 44 4e 4f 4e 45 4d 50 54 59 20 20  TE_OLDNONEMPTY  
20a0: 20 20 20 31 20 20 2f 2a 20 43 75 72 72 65 6e 74     1  /* Current
20b0: 20 63 6f 6c 75 6d 6e 20 6e 65 65 64 20 6e 6f 74   column need not
20c0: 20 68 61 76 65 20 62 65 65 6e 20 65 6d 70 74 79   have been empty
20d0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53  . */.#define LUS
20e0: 4f 4c 5f 55 50 44 41 54 45 5f 4e 45 57 45 4d 50  OL_UPDATE_NEWEMP
20f0: 54 59 20 20 20 20 20 20 20 20 30 20 20 2f 2a 20  TY        0  /* 
2100: 4e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 74 61  New column is ta
2110: 6b 65 6e 20 74 6f 20 62 65 20 7a 65 72 6f 2e 20  ken to be zero. 
2120: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  */.#define LUSOL
2130: 5f 55 50 44 41 54 45 5f 4e 45 57 4e 4f 4e 45 4d  _UPDATE_NEWNONEM
2140: 50 54 59 20 20 20 20 20 31 20 20 2f 2a 20 76 28  PTY     1  /* v(
2150: 2a 29 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  *) contains the 
2160: 6e 65 77 20 63 6f 6c 75 6d 6e 3b 0a 20 20 20 20  new column;.    
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 20 20 20 6f 6e 20 65 78 69 74 2c 20         on exit, 
21a0: 20 76 28 2a 29 20 20 73 61 74 69 73 66 69 65 73   v(*)  satisfies
21b0: 20 20 4c 2a 76 20 3d 20 61 28 6e 65 77 29 2e 20    L*v = a(new). 
21c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c  */.#define LUSOL
21d0: 5f 55 50 44 41 54 45 5f 55 53 45 50 52 45 50 41  _UPDATE_USEPREPA
21e0: 52 45 44 20 20 20 20 20 32 20 20 2f 2a 20 76 28  RED     2  /* v(
21f0: 2a 29 20 20 6d 75 73 74 20 73 61 74 69 73 66 79  *)  must satisfy
2200: 20 20 4c 2a 76 20 3d 20 61 28 6e 65 77 29 2e 20    L*v = a(new). 
2210: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f  */..#define LUSO
2220: 4c 5f 53 4f 4c 56 45 5f 4c 76 5f 76 20 20 20 20  L_SOLVE_Lv_v    
2230: 20 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 76           1  /* v
2240: 20 20 73 6f 6c 76 65 73 20 20 20 4c 20 76 20 3d    solves   L v =
2250: 20 76 28 69 6e 70 75 74 29 2e 20 77 20 20 69 73   v(input). w  is
2260: 20 6e 6f 74 20 74 6f 75 63 68 65 64 2e 20 2a 2f   not touched. */
2270: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 53  .#define LUSOL_S
2280: 4f 4c 56 45 5f 4c 74 76 5f 76 20 20 20 20 20 20  OLVE_Ltv_v      
2290: 20 20 20 20 20 20 32 20 20 2f 2a 20 76 20 20 73        2  /* v  s
22a0: 6f 6c 76 65 73 20 20 20 4c 27 76 20 3d 20 76 28  olves   L'v = v(
22b0: 69 6e 70 75 74 29 2e 20 77 20 20 69 73 20 6e 6f  input). w  is no
22c0: 74 20 74 6f 75 63 68 65 64 2e 20 2a 2f 0a 23 64  t touched. */.#d
22d0: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 53 4f 4c 56  efine LUSOL_SOLV
22e0: 45 5f 55 77 5f 76 20 20 20 20 20 20 20 20 20 20  E_Uw_v          
22f0: 20 20 20 33 20 20 2f 2a 20 77 20 20 73 6f 6c 76     3  /* w  solv
2300: 65 73 20 20 20 55 20 77 20 3d 20 76 2e 20 20 20  es   U w = v.   
2310: 20 20 20 20 20 76 20 20 69 73 20 6e 6f 74 20 61       v  is not a
2320: 6c 74 65 72 65 64 2e 20 2a 2f 0a 23 64 65 66 69  ltered. */.#defi
2330: 6e 65 20 4c 55 53 4f 4c 5f 53 4f 4c 56 45 5f 55  ne LUSOL_SOLVE_U
2340: 74 76 5f 77 20 20 20 20 20 20 20 20 20 20 20 20  tv_w            
2350: 34 20 20 2f 2a 20 76 20 20 73 6f 6c 76 65 73 20  4  /* v  solves 
2360: 20 20 55 27 76 20 3d 20 77 2e 20 20 20 20 20 20    U'v = w.      
2370: 20 20 77 20 20 69 73 20 64 65 73 74 72 6f 79 65    w  is destroye
2380: 64 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 55  d. */.#define LU
2390: 53 4f 4c 5f 53 4f 4c 56 45 5f 41 77 5f 76 20 20  SOL_SOLVE_Aw_v  
23a0: 20 20 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a             5  /*
23b0: 20 77 20 20 73 6f 6c 76 65 73 20 20 20 41 20 77   w  solves   A w
23c0: 20 3d 20 76 2e 20 20 20 20 20 20 20 20 76 20 20   = v.        v  
23d0: 69 73 20 61 6c 74 65 72 65 64 20 61 73 20 69 6e  is altered as in
23e0: 20 31 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c   1. */.#define L
23f0: 55 53 4f 4c 5f 46 54 52 41 4e 20 20 20 4c 55 53  USOL_FTRAN   LUS
2400: 4f 4c 5f 53 4f 4c 56 45 5f 41 77 5f 76 0a 23 64  OL_SOLVE_Aw_v.#d
2410: 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 53 4f 4c 56  efine LUSOL_SOLV
2420: 45 5f 41 74 76 5f 77 20 20 20 20 20 20 20 20 20  E_Atv_w         
2430: 20 20 20 36 20 20 2f 2a 20 76 20 20 73 6f 6c 76     6  /* v  solv
2440: 65 73 20 20 20 41 27 76 20 3d 20 77 2e 20 20 20  es   A'v = w.   
2450: 20 20 20 20 20 77 20 20 69 73 20 64 65 73 74 72       w  is destr
2460: 6f 79 65 64 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  oyed. */.#define
2470: 20 4c 55 53 4f 4c 5f 42 54 52 41 4e 20 20 4c 55   LUSOL_BTRAN  LU
2480: 53 4f 4c 5f 53 4f 4c 56 45 5f 41 74 76 5f 77 0a  SOL_SOLVE_Atv_w.
2490: 0a 2f 2a 20 49 66 20 6d 6f 64 65 20 3d 20 33 2c  ./* If mode = 3,
24a0: 34 2c 35 2c 36 2c 20 76 20 61 6e 64 20 77 20 6d  4,5,6, v and w m
24b0: 75 73 74 20 6e 6f 74 20 62 65 20 74 68 65 20 73  ust not be the s
24c0: 61 6d 65 20 61 72 72 61 79 73 2e 0a 20 20 20 49  ame arrays..   I
24d0: 66 20 6c 75 31 66 61 63 20 68 61 73 20 6a 75 73  f lu1fac has jus
24e0: 74 20 62 65 65 6e 20 75 73 65 64 20 74 6f 20 66  t been used to f
24f0: 61 63 74 6f 72 69 7a 65 20 61 20 73 79 6d 6d 65  actorize a symme
2500: 74 72 69 63 20 6d 61 74 72 69 78 20 41 0a 20 20  tric matrix A.  
2510: 20 28 77 68 69 63 68 20 6d 75 73 74 20 62 65 20   (which must be 
2520: 64 65 66 69 6e 69 74 65 20 6f 72 20 71 75 61 73  definite or quas
2530: 69 2d 64 65 66 69 6e 69 74 65 29 2c 20 74 68 65  i-definite), the
2540: 20 66 61 63 74 6f 72 73 20 41 20 3d 20 4c 20 55   factors A = L U
2550: 0a 20 20 20 6d 61 79 20 62 65 20 72 65 67 61 72  .   may be regar
2560: 64 65 64 20 61 73 20 41 20 3d 20 4c 44 4c 27 2c  ded as A = LDL',
2570: 20 77 68 65 72 65 20 44 20 3d 20 64 69 61 67 28   where D = diag(
2580: 55 29 2e 20 20 49 6e 20 73 75 63 68 20 63 61 73  U).  In such cas
2590: 65 73 2c 0a 20 20 20 74 68 65 20 66 6f 6c 6c 6f  es,.   the follo
25a0: 77 69 6e 67 20 28 66 61 73 74 65 72 29 20 73 6f  wing (faster) so
25b0: 6c 76 65 20 63 6f 64 65 73 20 6d 61 79 20 62 65  lve codes may be
25c0: 20 75 73 65 64 3a 20 20 20 20 20 20 20 20 20 20   used:          
25d0: 20 20 20 20 20 20 20 20 2a 2f 0a 23 64 65 66 69          */.#defi
25e0: 6e 65 20 4c 55 53 4f 4c 5f 53 4f 4c 56 45 5f 41  ne LUSOL_SOLVE_A
25f0: 76 5f 76 20 20 20 20 20 20 20 20 20 20 20 20 20  v_v             
2600: 37 20 20 2f 2a 20 76 20 20 73 6f 6c 76 65 73 20  7  /* v  solves 
2610: 20 20 41 20 76 20 3d 20 4c 20 44 20 4c 27 76 20    A v = L D L'v 
2620: 3d 20 76 28 69 6e 70 75 74 29 2e 20 77 20 20 69  = v(input). w  i
2630: 73 20 6e 6f 74 20 74 6f 75 63 68 65 64 2e 20 2a  s not touched. *
2640: 2f 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  /.#define LUSOL_
2650: 53 4f 4c 56 45 5f 4c 44 4c 74 76 5f 76 20 20 20  SOLVE_LDLtv_v   
2660: 20 20 20 20 20 20 20 38 20 20 2f 2a 20 76 20 20         8  /* v  
2670: 73 6f 6c 76 65 73 20 20 20 20 20 20 20 4c 20 7c  solves       L |
2680: 44 7c 20 4c 27 76 20 3d 20 76 28 69 6e 70 75 74  D| L'v = v(input
2690: 29 2e 20 77 20 20 69 73 20 6e 6f 74 20 74 6f 75  ). w  is not tou
26a0: 63 68 65 64 2e 20 2a 2f 0a 0a 23 64 65 66 69 6e  ched. */..#defin
26b0: 65 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 52  e LUSOL_INFORM_R
26c0: 41 4e 4b 4c 4f 53 53 20 20 20 20 20 20 20 2d 31  ANKLOSS       -1
26d0: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
26e0: 4e 46 4f 52 4d 5f 4c 55 53 55 43 43 45 53 53 20  NFORM_LUSUCCESS 
26f0: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
2700: 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 4c 55 53  LUSOL_INFORM_LUS
2710: 49 4e 47 55 4c 41 52 20 20 20 20 20 20 31 0a 23  INGULAR      1.#
2720: 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 4e 46  define LUSOL_INF
2730: 4f 52 4d 5f 4c 55 55 4e 53 54 41 42 4c 45 20 20  ORM_LUUNSTABLE  
2740: 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 4c 55      2.#define LU
2750: 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 41 44 49 4d 45  SOL_INFORM_ADIME
2760: 52 52 20 20 20 20 20 20 20 20 20 33 0a 23 64 65  RR         3.#de
2770: 66 69 6e 65 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52  fine LUSOL_INFOR
2780: 4d 5f 41 44 55 50 4c 49 43 41 54 45 20 20 20 20  M_ADUPLICATE    
2790: 20 20 34 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f    4.#define LUSO
27a0: 4c 5f 49 4e 46 4f 52 4d 5f 41 4e 45 45 44 4d 45  L_INFORM_ANEEDME
27b0: 4d 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  M        7  /* S
27c0: 65 74 20 6c 65 6e 61 20 3e 3d 20 6c 75 70 61 72  et lena >= lupar
27d0: 6d 5b 4c 55 53 4f 4c 5f 49 50 5f 4d 49 4e 49 4d  m[LUSOL_IP_MINIM
27e0: 55 4d 4c 45 4e 41 5d 20 2a 2f 0a 23 64 65 66 69  UMLENA] */.#defi
27f0: 6e 65 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f  ne LUSOL_INFORM_
2800: 46 41 54 41 4c 45 52 52 20 20 20 20 20 20 20 20  FATALERR        
2810: 38 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f  8.#define LUSOL_
2820: 49 4e 46 4f 52 4d 5f 4e 4f 50 49 56 4f 54 20 20  INFORM_NOPIVOT  
2830: 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4e 6f 20         9  /* No 
2840: 64 69 61 67 6f 6e 61 6c 20 70 69 76 6f 74 20 66  diagonal pivot f
2850: 6f 75 6e 64 20 77 69 74 68 20 54 53 50 20 6f 72  ound with TSP or
2860: 20 54 44 50 2e 20 2a 2f 0a 23 64 65 66 69 6e 65   TDP. */.#define
2870: 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 4e 4f   LUSOL_INFORM_NO
2880: 4d 45 4d 4c 45 46 54 20 20 20 20 20 20 31 30 0a  MEMLEFT      10.
2890: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
28a0: 4e 46 4f 52 4d 5f 4d 49 4e 20 20 20 20 20 20 20  NFORM_MIN       
28b0: 20 20 20 20 20 20 4c 55 53 4f 4c 5f 49 4e 46 4f        LUSOL_INFO
28c0: 52 4d 5f 52 41 4e 4b 4c 4f 53 53 0a 23 64 65 66  RM_RANKLOSS.#def
28d0: 69 6e 65 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d  ine LUSOL_INFORM
28e0: 5f 4d 41 58 20 20 20 20 20 20 20 20 20 20 20 20  _MAX            
28f0: 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 4e 4f   LUSOL_INFORM_NO
2900: 4d 45 4d 4c 45 46 54 0a 0a 23 64 65 66 69 6e 65  MEMLEFT..#define
2910: 20 4c 55 53 4f 4c 5f 49 4e 46 4f 52 4d 5f 47 45   LUSOL_INFORM_GE
2920: 54 4c 41 53 54 20 20 20 20 20 20 20 20 31 30 20  TLAST        10 
2930: 20 2f 2a 20 43 6f 64 65 20 66 6f 72 20 4c 55 53   /* Code for LUS
2940: 4f 4c 5f 69 6e 66 6f 72 6d 73 74 72 2e 20 2a 2f  OL_informstr. */
2950: 0a 23 64 65 66 69 6e 65 20 4c 55 53 4f 4c 5f 49  .#define LUSOL_I
2960: 4e 46 4f 52 4d 5f 53 45 52 49 4f 55 53 20 20 20  NFORM_SERIOUS   
2970: 20 20 20 20 20 20 4c 55 53 4f 4c 5f 49 4e 46 4f        LUSOL_INFO
2980: 52 4d 5f 4c 55 55 4e 53 54 41 42 4c 45 0a 0a 0a  RM_LUUNSTABLE...
2990: 2f 2a 20 50 72 6f 74 6f 74 79 70 65 73 20 66 6f  /* Prototypes fo
29a0: 72 20 63 61 6c 6c 2d 62 61 63 6b 20 66 75 6e 63  r call-back func
29b0: 74 69 6f 6e 73 20 20 20 20 20 20 20 20 20 20 20  tions           
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
29e0: 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /* -------------
29f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a  ------------ */.
2a30: 74 79 70 65 64 65 66 20 76 6f 69 64 20 4c 55 53  typedef void LUS
2a40: 4f 4c 6c 6f 67 66 75 6e 63 28 76 6f 69 64 20 2a  OLlogfunc(void *
2a50: 6c 70 2c 20 76 6f 69 64 20 2a 75 73 65 72 68 61  lp, void *userha
2a60: 6e 64 6c 65 2c 20 63 68 61 72 20 2a 62 75 66 29  ndle, char *buf)
2a70: 3b 0a 0a 0a 2f 2a 20 53 70 61 72 73 65 20 6d 61  ;.../* Sparse ma
2a80: 74 72 69 78 20 64 61 74 61 20 2a 2f 0a 74 79 70  trix data */.typ
2a90: 65 64 65 66 20 73 74 72 75 63 74 20 5f 4c 55 53  edef struct _LUS
2aa0: 4f 4c 6d 61 74 20 7b 0a 20 20 52 45 41 4c 20 2a  OLmat {.  REAL *
2ab0: 61 3b 0a 20 20 69 6e 74 20 20 2a 6c 65 6e 78 2c  a;.  int  *lenx,
2ac0: 20 2a 69 6e 64 72 2c 20 2a 69 6e 64 63 2c 20 2a   *indr, *indc, *
2ad0: 69 6e 64 78 3b 0a 7d 20 4c 55 53 4f 4c 6d 61 74  indx;.} LUSOLmat
2ae0: 3b 0a 0a 0a 2f 2a 20 54 68 65 20 6d 61 69 6e 20  ;.../* The main 
2af0: 4c 55 53 4f 4c 20 64 61 74 61 20 72 65 63 6f 72  LUSOL data recor
2b00: 64 20 2a 2f 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  d */./* --------
2b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b50: 2d 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  - */.typedef str
2b60: 75 63 74 20 5f 4c 55 53 4f 4c 72 65 63 20 7b 0a  uct _LUSOLrec {.
2b70: 0a 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 64 61  .  /* General da
2b80: 74 61 20 2a 2f 0a 20 20 46 49 4c 45 20 20 20 20  ta */.  FILE    
2b90: 20 20 20 20 20 2a 6f 75 74 73 74 72 65 61 6d 3b       *outstream;
2ba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
2bb0: 74 70 75 74 20 73 74 72 65 61 6d 2c 20 69 6e 69  tput stream, ini
2bc0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 53 54 44 4f  tialized to STDO
2bd0: 55 54 20 2a 2f 0a 20 20 4c 55 53 4f 4c 6c 6f 67  UT */.  LUSOLlog
2be0: 66 75 6e 63 20 2a 77 72 69 74 65 6c 6f 67 3b 0a  func *writelog;.
2bf0: 20 20 20 20 76 6f 69 64 20 20 20 20 20 20 20 2a      void       *
2c00: 6c 6f 67 68 61 6e 64 6c 65 3b 0a 20 20 4c 55 53  loghandle;.  LUS
2c10: 4f 4c 6c 6f 67 66 75 6e 63 20 2a 64 65 62 75 67  OLlogfunc *debug
2c20: 69 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 50 61 72 61  info;..  /* Para
2c30: 6d 65 74 65 72 20 73 74 6f 72 61 67 65 20 61 72  meter storage ar
2c40: 72 61 79 73 20 2a 2f 0a 20 20 69 6e 74 20 20 20  rays */.  int   
2c50: 20 6c 75 70 61 72 6d 5b 4c 55 53 4f 4c 5f 49 50   luparm[LUSOL_IP
2c60: 5f 4c 41 53 54 49 54 45 4d 20 2b 20 31 5d 3b 0a  _LASTITEM + 1];.
2c70: 20 20 52 45 41 4c 20 20 20 70 61 72 6d 6c 75 5b    REAL   parmlu[
2c80: 4c 55 53 4f 4c 5f 52 50 5f 4c 41 53 54 49 54 45  LUSOL_RP_LASTITE
2c90: 4d 20 2b 20 31 5d 3b 0a 0a 20 20 2f 2a 20 41 72  M + 1];..  /* Ar
2ca0: 72 61 79 73 20 6f 66 20 6c 65 6e 67 74 68 20 6c  rays of length l
2cb0: 65 6e 61 2b 31 20 2a 2f 0a 20 20 69 6e 74 20 20  ena+1 */.  int  
2cc0: 20 20 6c 65 6e 61 2c 20 6e 65 6c 65 6d 3b 0a 20    lena, nelem;. 
2cd0: 20 69 6e 74 20 20 20 20 2a 69 6e 64 63 2c 20 2a   int    *indc, *
2ce0: 69 6e 64 72 3b 0a 20 20 52 45 41 4c 20 20 20 2a  indr;.  REAL   *
2cf0: 61 3b 0a 0a 20 20 2f 2a 20 41 72 72 61 79 73 20  a;..  /* Arrays 
2d00: 6f 66 20 6c 65 6e 67 74 68 20 6d 61 78 6d 2b 31  of length maxm+1
2d10: 20 28 72 6f 77 20 73 74 6f 72 61 67 65 29 20 2a   (row storage) *
2d20: 2f 0a 20 20 69 6e 74 20 20 20 20 6d 61 78 6d 2c  /.  int    maxm,
2d30: 20 6d 3b 0a 20 20 69 6e 74 20 20 20 20 2a 6c 65   m;.  int    *le
2d40: 6e 72 2c 20 2a 69 70 2c 20 2a 69 71 6c 6f 63 2c  nr, *ip, *iqloc,
2d50: 20 2a 69 70 69 6e 76 2c 20 2a 6c 6f 63 72 3b 0a   *ipinv, *locr;.
2d60: 0a 20 20 2f 2a 20 41 72 72 61 79 73 20 6f 66 20  .  /* Arrays of 
2d70: 6c 65 6e 67 74 68 20 6d 61 78 6e 2b 31 20 28 63  length maxn+1 (c
2d80: 6f 6c 75 6d 6e 20 73 74 6f 72 61 67 65 29 20 2a  olumn storage) *
2d90: 2f 0a 20 20 69 6e 74 20 20 20 20 6d 61 78 6e 2c  /.  int    maxn,
2da0: 20 6e 3b 0a 20 20 69 6e 74 20 20 20 20 2a 6c 65   n;.  int    *le
2db0: 6e 63 2c 20 2a 69 71 2c 20 2a 69 70 6c 6f 63 2c  nc, *iq, *iploc,
2dc0: 20 2a 69 71 69 6e 76 2c 20 2a 6c 6f 63 63 3b 0a   *iqinv, *locc;.
2dd0: 20 20 52 45 41 4c 20 20 20 2a 77 2c 20 2a 76 4c    REAL   *w, *vL
2de0: 55 36 4c 3b 0a 0a 20 20 2f 2a 20 4c 69 73 74 20  U6L;..  /* List 
2df0: 6f 66 20 73 69 6e 67 75 6c 61 72 20 63 6f 6c 75  of singular colu
2e00: 6d 6e 73 2c 20 77 69 74 68 20 64 79 6e 61 6d 69  mns, with dynami
2e10: 63 20 73 69 7a 65 20 61 6c 6c 6f 63 61 74 69 6f  c size allocatio
2e20: 6e 20 2a 2f 0a 20 20 69 6e 74 20 20 20 20 2a 69  n */.  int    *i
2e30: 73 69 6e 67 75 6c 61 72 3b 0a 0a 20 20 2f 2a 20  singular;..  /* 
2e40: 45 78 74 72 61 20 61 72 72 61 79 73 20 6f 66 20  Extra arrays of 
2e50: 6c 65 6e 67 74 68 20 6e 20 66 6f 72 20 54 43 50  length n for TCP
2e60: 20 61 6e 64 20 6b 65 65 70 4c 55 20 3d 3d 20 46   and keepLU == F
2e70: 41 4c 53 45 20 2a 2f 0a 20 20 52 45 41 4c 20 20  ALSE */.  REAL  
2e80: 20 2a 48 61 2c 20 2a 64 69 61 67 55 3b 0a 20 20   *Ha, *diagU;.  
2e90: 69 6e 74 20 20 20 20 2a 48 6a 2c 20 2a 48 6b 3b  int    *Hj, *Hk;
2ea0: 0a 0a 20 20 2f 2a 20 45 78 74 72 61 20 61 72 72  ..  /* Extra arr
2eb0: 61 79 73 20 6f 66 20 6c 65 6e 67 74 68 20 6d 20  ays of length m 
2ec0: 66 6f 72 20 54 52 50 2a 2f 0a 20 20 52 45 41 4c  for TRP*/.  REAL
2ed0: 20 20 20 2a 61 6d 61 78 72 3b 0a 0a 20 20 2f 2a     *amaxr;..  /*
2ee0: 20 45 78 74 72 61 20 61 72 72 61 79 20 66 6f 72   Extra array for
2ef0: 20 4c 30 20 61 6e 64 20 55 20 73 74 6f 72 65 64   L0 and U stored
2f00: 20 62 79 20 72 6f 77 2f 63 6f 6c 75 6d 6e 20 66   by row/column f
2f10: 6f 72 20 66 61 73 74 65 72 20 62 74 72 61 6e 2f  or faster btran/
2f20: 66 74 72 61 6e 20 2a 2f 0a 20 20 4c 55 53 4f 4c  ftran */.  LUSOL
2f30: 6d 61 74 20 2a 4c 30 3b 0a 20 20 4c 55 53 4f 4c  mat *L0;.  LUSOL
2f40: 6d 61 74 20 2a 55 3b 0a 0a 20 20 2f 2a 20 4d 69  mat *U;..  /* Mi
2f50: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 64 61 74 61  scellaneous data
2f60: 20 2a 2f 0a 20 20 69 6e 74 20 20 20 20 65 78 70   */.  int    exp
2f70: 61 6e 64 65 64 5f 61 3b 0a 20 20 69 6e 74 20 20  anded_a;.  int  
2f80: 20 20 72 65 70 6c 61 63 65 64 5f 63 3b 0a 20 20    replaced_c;.  
2f90: 69 6e 74 20 20 20 20 72 65 70 6c 61 63 65 64 5f  int    replaced_
2fa0: 72 3b 0a 0a 7d 20 4c 55 53 4f 4c 72 65 63 3b 0a  r;..} LUSOLrec;.
2fb0: 0a 0a 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f  ..LUSOLrec *LUSO
2fc0: 4c 5f 63 72 65 61 74 65 28 46 49 4c 45 20 2a 6f  L_create(FILE *o
2fd0: 75 74 73 74 72 65 61 6d 2c 20 69 6e 74 20 6d 73  utstream, int ms
2fe0: 67 66 69 6c 2c 20 69 6e 74 20 70 69 76 6f 74 6d  gfil, int pivotm
2ff0: 6f 64 65 6c 2c 20 69 6e 74 20 75 70 64 61 74 65  odel, int update
3000: 6c 69 6d 69 74 29 3b 0a 4d 59 42 4f 4f 4c 20 4c  limit);.MYBOOL L
3010: 55 53 4f 4c 5f 73 69 7a 65 74 6f 28 4c 55 53 4f  USOL_sizeto(LUSO
3020: 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20 69 6e 74  Lrec *LUSOL, int
3030: 20 69 6e 69 74 5f 72 2c 20 69 6e 74 20 69 6e 69   init_r, int ini
3040: 74 5f 63 2c 20 69 6e 74 20 69 6e 69 74 5f 61 29  t_c, int init_a)
3050: 3b 0a 4d 59 42 4f 4f 4c 20 4c 55 53 4f 4c 5f 61  ;.MYBOOL LUSOL_a
3060: 73 73 69 67 6e 28 4c 55 53 4f 4c 72 65 63 20 2a  ssign(LUSOLrec *
3070: 4c 55 53 4f 4c 2c 20 69 6e 74 20 69 41 5b 5d 2c  LUSOL, int iA[],
3080: 20 69 6e 74 20 6a 41 5b 5d 2c 20 52 45 41 4c 20   int jA[], REAL 
3090: 41 69 6a 5b 5d 2c 0a 20 20 20 20 20 20 20 20 20  Aij[],.         
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
30c0: 6e 7a 63 6f 75 6e 74 2c 20 4d 59 42 4f 4f 4c 20  nzcount, MYBOOL 
30d0: 69 73 74 72 69 70 6c 65 74 29 3b 0a 76 6f 69 64  istriplet);.void
30e0: 20 4c 55 53 4f 4c 5f 63 6c 65 61 72 28 4c 55 53   LUSOL_clear(LUS
30f0: 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20 4d 59  OLrec *LUSOL, MY
3100: 42 4f 4f 4c 20 6e 7a 6f 6e 6c 79 29 3b 0a 76 6f  BOOL nzonly);.vo
3110: 69 64 20 4c 55 53 4f 4c 5f 66 72 65 65 28 4c 55  id LUSOL_free(LU
3120: 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 29 3b 0a  SOLrec *LUSOL);.
3130: 0a 4c 55 53 4f 4c 6d 61 74 20 2a 4c 55 53 4f 4c  .LUSOLmat *LUSOL
3140: 5f 6d 61 74 63 72 65 61 74 65 28 69 6e 74 20 64  _matcreate(int d
3150: 69 6d 2c 20 69 6e 74 20 6e 7a 29 3b 0a 76 6f 69  im, int nz);.voi
3160: 64 20 4c 55 53 4f 4c 5f 6d 61 74 66 72 65 65 28  d LUSOL_matfree(
3170: 4c 55 53 4f 4c 6d 61 74 20 2a 2a 6d 61 74 29 3b  LUSOLmat **mat);
3180: 0a 0a 69 6e 74 20 4c 55 53 4f 4c 5f 6c 6f 61 64  ..int LUSOL_load
3190: 43 6f 6c 75 6d 6e 28 4c 55 53 4f 4c 72 65 63 20  Column(LUSOLrec 
31a0: 2a 4c 55 53 4f 4c 2c 20 69 6e 74 20 69 41 5b 5d  *LUSOL, int iA[]
31b0: 2c 20 69 6e 74 20 6a 41 2c 20 52 45 41 4c 20 41  , int jA, REAL A
31c0: 69 6a 5b 5d 2c 20 69 6e 74 20 6e 7a 63 6f 75 6e  ij[], int nzcoun
31d0: 74 2c 20 69 6e 74 20 6f 66 66 73 65 74 31 29 3b  t, int offset1);
31e0: 0a 76 6f 69 64 20 4c 55 53 4f 4c 5f 73 65 74 70  .void LUSOL_setp
31f0: 69 76 6f 74 6d 6f 64 65 6c 28 4c 55 53 4f 4c 72  ivotmodel(LUSOLr
3200: 65 63 20 2a 4c 55 53 4f 4c 2c 20 69 6e 74 20 70  ec *LUSOL, int p
3210: 69 76 6f 74 6d 6f 64 65 6c 2c 20 69 6e 74 20 69  ivotmodel, int i
3220: 6e 69 74 6c 65 76 65 6c 29 3b 0a 69 6e 74 20 4c  nitlevel);.int L
3230: 55 53 4f 4c 5f 66 61 63 74 6f 72 69 7a 65 28 4c  USOL_factorize(L
3240: 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 29 3b  USOLrec *LUSOL);
3250: 0a 69 6e 74 20 4c 55 53 4f 4c 5f 72 65 70 6c 61  .int LUSOL_repla
3260: 63 65 43 6f 6c 75 6d 6e 28 4c 55 53 4f 4c 72 65  ceColumn(LUSOLre
3270: 63 20 2a 4c 55 53 4f 4c 2c 20 69 6e 74 20 6a 63  c *LUSOL, int jc
3280: 6f 6c 2c 20 52 45 41 4c 20 76 5b 5d 29 3b 0a 0a  ol, REAL v[]);..
3290: 4d 59 42 4f 4f 4c 20 4c 55 53 4f 4c 5f 74 69 67  MYBOOL LUSOL_tig
32a0: 68 74 65 6e 70 69 76 6f 74 28 4c 55 53 4f 4c 72  htenpivot(LUSOLr
32b0: 65 63 20 2a 4c 55 53 4f 4c 29 3b 0a 4d 59 42 4f  ec *LUSOL);.MYBO
32c0: 4f 4c 20 4c 55 53 4f 4c 5f 61 64 64 53 69 6e 67  OL LUSOL_addSing
32d0: 75 6c 61 72 69 74 79 28 4c 55 53 4f 4c 72 65 63  ularity(LUSOLrec
32e0: 20 2a 4c 55 53 4f 4c 2c 20 69 6e 74 20 73 69 6e   *LUSOL, int sin
32f0: 67 63 6f 6c 2c 20 69 6e 74 20 2a 69 6e 66 6f 72  gcol, int *infor
3300: 6d 29 3b 0a 69 6e 74 20 4c 55 53 4f 4c 5f 67 65  m);.int LUSOL_ge
3310: 74 53 69 6e 67 75 6c 61 72 69 74 79 28 4c 55 53  tSingularity(LUS
3320: 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20 69 6e  OLrec *LUSOL, in
3330: 74 20 73 69 6e 67 69 74 65 6d 29 3b 0a 69 6e 74  t singitem);.int
3340: 20 4c 55 53 4f 4c 5f 66 69 6e 64 53 69 6e 67 75   LUSOL_findSingu
3350: 6c 61 72 69 74 79 50 6f 73 69 74 69 6f 6e 28 4c  larityPosition(L
3360: 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20  USOLrec *LUSOL, 
3370: 69 6e 74 20 73 69 6e 67 63 6f 6c 29 3b 0a 0a 63  int singcol);..c
3380: 68 61 72 20 2a 4c 55 53 4f 4c 5f 70 69 76 6f 74  har *LUSOL_pivot
3390: 4c 61 62 65 6c 28 4c 55 53 4f 4c 72 65 63 20 2a  Label(LUSOLrec *
33a0: 4c 55 53 4f 4c 29 3b 0a 63 68 61 72 20 2a 4c 55  LUSOL);.char *LU
33b0: 53 4f 4c 5f 69 6e 66 6f 72 6d 73 74 72 28 4c 55  SOL_informstr(LU
33c0: 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20 69  SOLrec *LUSOL, i
33d0: 6e 74 20 69 6e 66 6f 72 6d 29 3b 0a 52 45 41 4c  nt inform);.REAL
33e0: 20 4c 55 53 4f 4c 5f 76 65 63 64 65 6e 73 69 74   LUSOL_vecdensit
33f0: 79 28 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f  y(LUSOLrec *LUSO
3400: 4c 2c 20 52 45 41 4c 20 56 5b 5d 29 3b 0a 76 6f  L, REAL V[]);.vo
3410: 69 64 20 4c 55 53 4f 4c 5f 72 65 70 6f 72 74 28  id LUSOL_report(
3420: 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c  LUSOLrec *LUSOL,
3430: 20 69 6e 74 20 6d 73 67 6c 65 76 65 6c 2c 20 63   int msglevel, c
3440: 68 61 72 20 2a 66 6f 72 6d 61 74 2c 20 2e 2e 2e  har *format, ...
3450: 29 3b 0a 76 6f 69 64 20 4c 55 53 4f 4c 5f 74 69  );.void LUSOL_ti
3460: 6d 65 72 28 4c 55 53 4f 4c 72 65 63 20 2a 4c 55  mer(LUSOLrec *LU
3470: 53 4f 4c 2c 20 69 6e 74 20 74 69 6d 65 72 69 64  SOL, int timerid
3480: 2c 20 63 68 61 72 20 2a 74 65 78 74 29 3b 0a 0a  , char *text);..
3490: 69 6e 74 20 4c 55 53 4f 4c 5f 66 74 72 61 6e 28  int LUSOL_ftran(
34a0: 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c  LUSOLrec *LUSOL,
34b0: 20 52 45 41 4c 20 62 5b 5d 2c 20 69 6e 74 20 4e   REAL b[], int N
34c0: 5a 69 64 78 5b 5d 2c 20 4d 59 42 4f 4f 4c 20 70  Zidx[], MYBOOL p
34d0: 72 65 70 61 72 65 75 70 64 61 74 65 29 3b 0a 69  repareupdate);.i
34e0: 6e 74 20 4c 55 53 4f 4c 5f 62 74 72 61 6e 28 4c  nt LUSOL_btran(L
34f0: 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20  USOLrec *LUSOL, 
3500: 52 45 41 4c 20 62 5b 5d 2c 20 69 6e 74 20 4e 5a  REAL b[], int NZ
3510: 69 64 78 5b 5d 29 3b 0a 0a 76 6f 69 64 20 4c 55  idx[]);..void LU
3520: 31 46 41 43 28 4c 55 53 4f 4c 72 65 63 20 2a 4c  1FAC(LUSOLrec *L
3530: 55 53 4f 4c 2c 20 69 6e 74 20 2a 49 4e 46 4f 52  USOL, int *INFOR
3540: 4d 29 3b 0a 4d 59 42 4f 4f 4c 20 4c 55 31 4c 30  M);.MYBOOL LU1L0
3550: 28 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f 4c  (LUSOLrec *LUSOL
3560: 2c 20 4c 55 53 4f 4c 6d 61 74 20 2a 2a 6d 61 74  , LUSOLmat **mat
3570: 2c 20 69 6e 74 20 2a 69 6e 66 6f 72 6d 29 3b 0a  , int *inform);.
3580: 76 6f 69 64 20 4c 55 36 53 4f 4c 28 4c 55 53 4f  void LU6SOL(LUSO
3590: 4c 72 65 63 20 2a 4c 55 53 4f 4c 2c 20 69 6e 74  Lrec *LUSOL, int
35a0: 20 4d 4f 44 45 2c 20 52 45 41 4c 20 56 5b 5d 2c   MODE, REAL V[],
35b0: 20 52 45 41 4c 20 57 5b 5d 2c 20 69 6e 74 20 4e   REAL W[], int N
35c0: 5a 69 64 78 5b 5d 2c 20 69 6e 74 20 2a 49 4e 46  Zidx[], int *INF
35d0: 4f 52 4d 29 3b 0a 76 6f 69 64 20 4c 55 38 52 50  ORM);.void LU8RP
35e0: 43 28 4c 55 53 4f 4c 72 65 63 20 2a 4c 55 53 4f  C(LUSOLrec *LUSO
35f0: 4c 2c 20 69 6e 74 20 4d 4f 44 45 31 2c 20 69 6e  L, int MODE1, in
3600: 74 20 4d 4f 44 45 32 2c 0a 20 20 20 20 20 20 20  t MODE2,.       
3610: 20 20 20 20 20 69 6e 74 20 4a 52 45 50 2c 20 52       int JREP, R
3620: 45 41 4c 20 56 5b 5d 2c 20 52 45 41 4c 20 57 5b  EAL V[], REAL W[
3630: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ],.            i
3640: 6e 74 20 2a 49 4e 46 4f 52 4d 2c 20 52 45 41 4c  nt *INFORM, REAL
3650: 20 2a 44 49 41 47 2c 20 52 45 41 4c 20 2a 56 4e   *DIAG, REAL *VN
3660: 4f 52 4d 29 3b 0a 0a 76 6f 69 64 20 4c 55 53 4f  ORM);..void LUSO
3670: 4c 5f 64 75 6d 70 28 46 49 4c 45 20 2a 6f 75 74  L_dump(FILE *out
3680: 70 75 74 2c 20 4c 55 53 4f 4c 72 65 63 20 2a 4c  put, LUSOLrec *L
3690: 55 53 4f 4c 29 3b 0a 0a 0a 76 6f 69 64 20 70 72  USOL);...void pr
36a0: 69 6e 74 5f 4c 30 28 4c 55 53 4f 4c 72 65 63 20  int_L0(LUSOLrec 
36b0: 2a 4c 55 53 4f 4c 29 3b 0a 0a 0a 23 65 6e 64 69  *LUSOL);...#endi
36c0: 66 20 2f 2a 20 48 45 41 44 45 52 5f 4c 55 53 4f  f /* HEADER_LUSO
36d0: 4c 20 2a 2f 0a                                   L */.