From: <hi...@us...> - 2009-03-02 14:34:41
|
Revision: 5572 http://octave.svn.sourceforge.net/octave/?rev=5572&view=rev Author: highegg Date: 2009-03-02 14:34:31 +0000 (Mon, 02 Mar 2009) Log Message: ----------- allow optional suppressing of output Modified Paths: -------------- trunk/octave-forge/extra/nlwing2/DESCRIPTION trunk/octave-forge/extra/nlwing2/inst/calcwing.m trunk/octave-forge/extra/nlwing2/inst/corrector.m Modified: trunk/octave-forge/extra/nlwing2/DESCRIPTION =================================================================== --- trunk/octave-forge/extra/nlwing2/DESCRIPTION 2009-02-27 12:19:46 UTC (rev 5571) +++ trunk/octave-forge/extra/nlwing2/DESCRIPTION 2009-03-02 14:34:31 UTC (rev 5572) @@ -1,6 +1,6 @@ Name: NLWing2 -Version: 1.1.0 -Date: 2008-01-28 +Version: 1.1.1 +Date: 2009-03-02 Author: Jaroslav Hajek <hi...@gm...> Title: Nonlinear Lifting Line for Wings Maintainer: Jaroslav Hajek <hi...@gm...> Modified: trunk/octave-forge/extra/nlwing2/inst/calcwing.m =================================================================== --- trunk/octave-forge/extra/nlwing2/inst/calcwing.m 2009-02-27 12:19:46 UTC (rev 5571) +++ trunk/octave-forge/extra/nlwing2/inst/calcwing.m 2009-03-02 14:34:31 UTC (rev 5572) @@ -34,13 +34,12 @@ % @item "maxit" Maximum number of corrector iterations (250) % @item "minit" Minimum number of corrector iterations (4) % @item "tol" Minimum tolerance to achieve in corrector. +% @item "silent" Suppress verbose output (false) % @item "use_fsolve" Use fsolve as a corrector (false) (experimental). % @end itemize % @end deftypefn function clq = calcwing (wing, varargin) - page_screen_output (0); - % set default options opts.start = 0; opts.limit = 22; @@ -50,6 +49,7 @@ opts.maxit = 250; opts.minit = 4; opts.tol = []; + opts.silent = false; opts.use_fsolve = false; wassep = false; @@ -68,6 +68,11 @@ endif endif + if (opts.silent) + % supply a dummy output function + printf_flush = @() []; + endif + flw.wing = wing; step = opts.sstep; @@ -177,7 +182,7 @@ endfunction function printf_flush (varargin) - printf (varargin{:}); - fflush (stdout); + fprintf (stderr, varargin{:}); + fflush (stderr); endfunction Modified: trunk/octave-forge/extra/nlwing2/inst/corrector.m =================================================================== --- trunk/octave-forge/extra/nlwing2/inst/corrector.m 2009-02-27 12:19:46 UTC (rev 5571) +++ trunk/octave-forge/extra/nlwing2/inst/corrector.m 2009-03-02 14:34:31 UTC (rev 5572) @@ -20,20 +20,21 @@ % % -*- texinfo -*- -% @deftypefn{Function File} {flow =} corrector (flow, tol, nitmin, nitmax) +% @deftypefn{Function File} {flow =} corrector (flow, opts, init) % applies a newton/levenberg-marquardt corrector to a flow state, in order -% to reach local lift/circulation balance. @var{tol} specifies the tolerance, -% @var{nitmin} and @var{nitmax} are the minimum and maximum numbers of -% iterations, respectively. Returns empty matrix if not successful. +% to reach local lift/circulation balance. Reads the options tol, nitmin, +% nitmax, use_fsolve and silent from opts. +% Returns empty matrix if not successful. % @end deftypefn -function flow = corrector (flow, tol, nitmin, nitmax, use_fsolve) - if (use_fsolve) +function flow = corrector (flow, opts, init) + verbose = ! opts.silent; + if (opts.use_fsolve) global current_corrector_flow; current_corrector_flow = flow; - if (use_fsolve == 2) + if (init) ## turn off Broyden updates in the first iteration. This wouldn't be ## necessary if fsolve was more intelligent about them. updating = "off"; @@ -41,13 +42,17 @@ updating = "on"; endif np = length (flow.g); - [g, eq, info, out, eqj] = fsolve (@corrector_fcn, flow.g, ... - optimset ("MaxIter", nitmax, - "TolFun", tol, - "Jacobian", "on", - "Updating", updating, - "OutputFcn", @corrector_output_fcn)); - printf ("i: %d ", info); + opts = optimset ("MaxIter", nitmax, + "TolFun", tol, + "Jacobian", "on", + "Updating", updating); + if (verbose) + opts = optimset (opts, "OutputFcn", @corrector_output_fcn)); + endif + [g, eq, info, out, eqj] = fsolve (@corrector_fcn, flow.g, opts); + if (verbose) + printf ("i: %d ", info); + endif if (info > 0) res = norm (eq) / sqrt(np); flow.g = g; @@ -63,7 +68,9 @@ eq = flow.eq; g = flow.g; res = norm (eq) / sqrt(np); - printf ("%5.2e ", res); + if (verbose) + printf ("%5.2e ", res); + endif lam0 = sqrt (1e-1*eps) * norm (eqj, 1); lambda = lam0; @@ -86,10 +93,14 @@ eq = eq1; res = res1; eqj = floweqj (g, flow); - printf ("%5.2e ", res); + if (verbose) + printf ("%5.2e ", res); + endif else lambda *= 2; - printf ("+ "); + if (verbose) + printf ("+ "); + endif endif until ((res < tol && it >= nitmin) || it++ == nitmax ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |