Mercurial > forge
changeset 9695:3ca1031fdf0d octave-forge
control-devel: quicksave draft code (3)
author | paramaniac |
---|---|
date | Wed, 14 Mar 2012 17:34:55 +0000 |
parents | 394860504360 |
children | cf19573414db |
files | extra/control-devel/src/slib01ad.cc |
diffstat | 1 files changed, 35 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/control-devel/src/slib01ad.cc Wed Mar 14 11:02:38 2012 +0000 +++ b/extra/control-devel/src/slib01ad.cc Wed Mar 14 17:34:55 2012 +0000 @@ -222,14 +222,20 @@ C BATCH = 'L' and CONCT = 'N', or C BATCH = 'O'; + +IB01AD.f Lines 499-500: + ONEBCH = LSAME( BATCH, 'O' ) + FIRST = LSAME( BATCH, 'F' ) .OR. ONEBCH + + IB01AD.f Lines 583-591: ELSE IF ( FQRALG ) THEN IF ( .NOT.ONEBCH .AND. CONNEC ) THEN MINWRK = NR*( M + L + 3 ) ELSE IF ( FIRST .OR. INTERM ) THEN // (batch = F || O) || batch = I - MINWRK = NR*( M + L + 1 ) - ELSE - MINWRK = 2*NR*( M + L + 1 ) + NR + MINWRK = NR*( M + L + 1 ) ^ + ELSE | + MINWRK = 2*NR*( M + L + 1 ) + NR ??? END IF ELSE */ @@ -242,27 +248,40 @@ } else // (alg == 'Q') { - + int ns = nsmp - 2*nobr + 1; + + if (ldr >= ns && batch == 'F') + { + ldwork = 4*(m+l)*nobr; + } + else if (ldr >= ns && batch == 'O') + { + if (meth == 'M') + ldwork = max (4*(m+l)*nobr, 5*l*nobr); + else // (meth == 'N') + ldwork = 5*(m+l)*nobr + 1; + } + else if (conct == 'C' && (batch == 'I' || batch == 'L')) + { + ldwork = 4*(nobr+1)*(m+l)*nobr; + } + else // if ALG = 'Q', (BATCH = 'F' or 'O', and LDR < NS), or (BATCH = 'I' or 'L' and CONCT = 'N') + { + ldwork = 6*(m+l)*nobr; + } } - -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'. +/* +IB01AD.f Lines 291-195: 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. +somehow ldrwrk and ldwork must have been mixed up here + +*/ OCTAVE_LOCAL_BUFFER (int, iwork, liwork);