changeset 9676:88c84a0b0d2a octave-forge

control-devel: quicksave draft code (4)
author paramaniac
date Tue, 13 Mar 2012 14:37:06 +0000
parents 248af5ad631f
children 4caa50815a36
files extra/control-devel/src/slib01ad.cc
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/extra/control-devel/src/slib01ad.cc	Tue Mar 13 14:02:32 2012 +0000
+++ b/extra/control-devel/src/slib01ad.cc	Tue Mar 13 14:37:06 2012 +0000
@@ -187,6 +187,46 @@
 
         ldwork = 0;
 
+        if (alg == 'C' && (batch == 'F' || batch == 'I') && conct = 'C')
+            ldwork = (4*nobr-2)*(m+l);
+        else if (alg == 'C' && (batch == 'F' || batch == 'I') && conct = 'N')
+            ldwork = 1;
+        else if (meth == 'M' && alg == 'C' && batch == 'L' && conct == 'C')
+            ldwork = max ((4*nobr-2)*(m+l), 5*l*nobr);
+        else if ((meth == 'M' && jobd = 'M' && alg == 'C' && batch == 'O') || (batch == 'L' && conct == 'N'))
+            ldwork = max ((2*m-1)*nobr, (m+l)*nobr, 5*l*nobr);
+        else if ((meth == 'M' && jobd == 'N' && alg == 'C' && batch == 'O') || (batch == 'L' && conct == 'N'))
+            ldwork = 5*l*nobr;
+
+        // FIXME : two times  || (batch == 'L' && conct == 'N') doesn't make sense
+
+C             LDWORK >= 5*(M+L)*NOBR+1, if METH = 'N', ALG = 'C', and
+C                             BATCH = 'L' or 'O';
+C             LDWORK >= (M+L)*2*NOBR*(M+L+3), if ALG = 'F',
+C                             BATCH <> 'O' and CONCT = 'C';
+C             LDWORK >= (M+L)*2*NOBR*(M+L+1), if ALG = 'F',
+C                             BATCH = 'F', 'I' and CONCT = 'N';
+C             LDWORK >= (M+L)*4*NOBR*(M+L+1)+(M+L)*2*NOBR, if ALG = 'F',
+C                             BATCH = 'L' and CONCT = 'N', or
+C                             BATCH = 'O';
+C             LDWORK >= 4*(M+L)*NOBR, if ALG = 'Q', BATCH = 'F', and
+C                             LDR >= NS = NSMP - 2*NOBR + 1;
+C             LDWORK >= max(4*(M+L)*NOBR, 5*L*NOBR), if METH = 'M',
+C                             ALG = 'Q', BATCH = 'O', and LDR >= NS;
+C             LDWORK >= 5*(M+L)*NOBR+1, if METH = 'N', ALG = 'Q',
+C                             BATCH = 'O', and LDR >= NS;
+C             LDWORK >= 6*(M+L)*NOBR, if ALG = 'Q', (BATCH = 'F' or 'O',
+C                             and LDR < NS), or (BATCH = 'I' or
+C                             'L' and CONCT = 'N');
+C             LDWORK >= 4*(NOBR+1)*(M+L)*NOBR, if ALG = 'Q', BATCH = 'I'
+C                             or 'L' and CONCT = 'C'.
+C             The workspace used for ALG = 'Q' is
+C                       LDRWRK*2*(M+L)*NOBR + 4*(M+L)*NOBR,
+C             where LDRWRK = LDWORK/(2*(M+L)*NOBR) - 2; recommended
+C             value LDRWRK = NS, assuming a large enough cache size.
+C             For good performance,  LDWORK  should be larger.
+
+
 
         OCTAVE_LOCAL_BUFFER (int, iwork, liwork);
         OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);