changeset 20779:b6af3f77d1bd

sparseimages.m: Rewrite to follow model of other doc-image-generating functions. * sparseimages.m: Rewrite to follow model of other doc-image-generating functions. * geometryimages.m (sombreroimage): Remove unnecessary hide_output() call.
author Rik <rik@octave.org>
date Mon, 30 Nov 2015 14:01:19 -0800
parents 8513c84a13cb
children 92958b1ee100
files doc/interpreter/geometryimages.m doc/interpreter/sparseimages.m
diffstat 2 files changed, 128 insertions(+), 174 deletions(-) [+]
line wrap: on
line diff
--- a/doc/interpreter/geometryimages.m	Mon Nov 30 08:20:08 2015 -0800
+++ b/doc/interpreter/geometryimages.m	Mon Nov 30 14:01:19 2015 -0800
@@ -123,7 +123,6 @@
     fclose (fid);
     return;
   else
-    hide_output ();
     [x, y, z] = sombrero ();
     unwind_protect
       mesh (x, y, z);
--- a/doc/interpreter/sparseimages.m	Mon Nov 30 08:20:08 2015 -0800
+++ b/doc/interpreter/sparseimages.m	Mon Nov 30 14:01:19 2015 -0800
@@ -19,53 +19,68 @@
 function sparseimages (d, nm, typ)
   set_graphics_toolkit ();
   set_print_size ();
+  hide_output ();
+  outfile = fullfile (d, [nm "." typ]);
   if (strcmp (typ, "png"))
     set (0, "defaulttextfontname", "*");
   endif
-
-  if (__have_feature__ ("COLAMD")
-      && __have_feature__ ("CHOLMOD")
-      && __have_feature__ ("UMFPACK"))
-    if (strcmp (typ,"txt"))
-      txtimages (d, nm, 15, typ);
-    else
-      if (strcmp (nm, "gplot"))
-        gplotimages (d, "gplot", typ);
-      elseif (strcmp (nm, "grid"))
-        femimages (d, "grid", typ);
-      else
-        otherimages (d, nm, 200, typ);
-      endif
-    endif
-  else ## There is no sparse matrix implementation available because
-       ## of missing libraries, plot sombreros instead
-    sombreroimage (d, nm, typ);
-  endif
-endfunction
-
-function gplotimages (d, nm, typ)
-  hide_output ();
-  outfile = fullfile (d, strcat (nm, ".", typ));
   if (strcmp (typ, "eps"))
     d_typ = "-depsc2";
   else
     d_typ = ["-d" typ];
   endif
 
-  A = sparse ([2,6,1,3,2,4,3,5,4,6,1,5],
-              [1,1,2,2,3,3,4,4,5,5,6,6], 1, 6, 6);
-  xy = [0,4,8,6,4,2;5,0,5,7,5,7]';
-  gplot (A, xy);
-  print (outfile, d_typ);
+  if (! (__have_feature__ ("COLAMD")
+         && __have_feature__ ("CHOLMOD")
+         && __have_feature__ ("UMFPACK")))
+    ## There is no sparse matrix implementation available because
+    ## of missing libraries, plot sombreros instead.
+    sombreroimage (d, nm, typ);
+  elseif (strcmp (typ, "txt"))
+    txtimages (d, nm, 15, typ);
+  elseif (strcmp (nm, "gplot"))
+    A = sparse ([2,6,1,3,2,4,3,5,4,6,1,5],
+                [1,1,2,2,3,3,4,4,5,5,6,6], 1, 6, 6);
+    xy = [0,4,8,6,4,2;5,0,5,7,5,7]';
+    gplot (A, xy);
+    print (outfile, d_typ);
+  elseif (strcmp (nm, "grid"))
+    femimages (outfile, d_typ);
+  elseif (strcmp (nm, "spmatrix"))
+    n = 200;
+    a = 10*speye (n) + sparse (1:n,ceil ([1:n]/2),1,n,n) + ...
+        sparse (ceil ([1:n]/2),1:n,1,n,n);
+    spy (a);
+    axis ("ij");
+    print (outfile, d_typ);
+  elseif (strcmp (nm, "spchol"))
+    n = 200;
+    a = 10*speye (n) + sparse (1:n,ceil ([1:n]/2),1,n,n) + ...
+        sparse (ceil ([1:n]/2),1:n,1,n,n);
+    r1 = chol (a);
+    spy (r1);
+    axis ("ij");
+    print (outfile, d_typ);
+  elseif (strcmp (nm, "spcholperm"))
+    n = 200;
+    a = 10*speye (n) + sparse (1:n,ceil ([1:n]/2),1,n,n) + ...
+        sparse (ceil ([1:n]/2),1:n,1,n,n);
+    [r2,p2,q2] = chol (a);
+    spy (r2);
+    axis ("ij");
+    print (outfile, d_typ);
+  else
+    error ("unrecognized plot requested");
+  endif
   hide_output ();
 endfunction
 
 function txtimages (d, nm, n, typ)
-  outfile = fullfile (d, strcat (nm, ".", typ));
+  outfile = fullfile (d, [nm "." typ]);
   a = 10*speye (n) + sparse (1:n,ceil([1:n]/2),1,n,n) + ...
       sparse (ceil ([1:n]/2),1:n,1,n,n);
   if (strcmp (nm, "gplot") || strcmp (nm, "grid"))
-    fid = fopen (fullfile (d, strcat (nm, ".txt")), "wt");
+    fid = fopen (outfile, "wt");
     fputs (fid, "\n");
     fputs (fid, "+---------------------------------+\n");
     fputs (fid, "| Image unavailable in text mode. |\n");
@@ -73,188 +88,136 @@
     fclose (fid);
   elseif (strcmp (nm, "spmatrix"))
     printsparse (a, outfile);
-  else
-    if (__have_feature__ ("COLAMD") && __have_feature__ ("CHOLMOD"))
-      if (strcmp (nm, "spchol"))
-        r1 = chol (a);
-        printsparse (r1, outfile);
-      elseif (strcmp (nm, "spcholperm"))
-        [r2,p2,q2] = chol (a);
-        printsparse (r2, outfile);
-      endif
-      ## printf("Text NNZ: Matrix %d, Chol %d, PermChol %d\n",nnz(a),nnz(r1),nnz(r2));
-    endif
-  endif
-endfunction
-
-function otherimages (d, nm, n, typ)
-  hide_output ();
-  outfile = fullfile (d, strcat (nm, ".", typ));
-  if (strcmp (typ, "eps"))
-    d_typ = "-depsc2";
+  elseif (strcmp (nm, "spchol"))
+    r1 = chol (a);
+    printsparse (r1, outfile);
+  elseif (strcmp (nm, "spcholperm"))
+    [r2,p2,q2] = chol (a);
+    printsparse (r2, outfile);
   else
-    d_typ = ["-d" typ];
-  endif
-
-  a = 10*speye (n) + sparse (1:n,ceil ([1:n]/2),1,n,n) + ...
-      sparse (ceil ([1:n]/2),1:n,1,n,n);
-  if (strcmp (nm, "spmatrix"))
-    spy (a);
-    axis ("ij");
-    print (outfile, d_typ);
-    hide_output ();
-  else
-    if (__have_feature__ ("COLAMD") && __have_feature__ ("CHOLMOD"))
-      if (strcmp (nm, "spchol"))
-        r1 = chol (a);
-        spy (r1);
-        axis ("ij");
-        print (outfile, d_typ);
-        hide_output ();
-      elseif (strcmp (nm, "spcholperm"))
-        [r2,p2,q2] = chol (a);
-        spy (r2);
-        axis ("ij");
-        print (outfile, d_typ);
-        hide_output ();
-      endif
-      ## printf("Image NNZ: Matrix %d, Chol %d, PermChol %d\n",nnz(a),nnz(r1),nnz(r2));
-    endif
+    error ("unrecognized plot requested");
   endif
 endfunction
 
 function printsparse (a, nm)
-  fid = fopen (nm,"wt");
+  fid = fopen (nm, "wt");
   fputs (fid, "\n");
   for i = 1:rows (a)
     if (rem (i,5) == 0)
-      fprintf (fid,"         %2d - ", i);
+      fprintf (fid, "         %2d - ", i);
     else
-      fprintf (fid,"            | ");
+      fprintf (fid, "            | ");
     endif
     for j = 1:columns (a)
       if (a(i,j) == 0)
-        fprintf (fid,"  ");
+        fprintf (fid, "  ");
       else
-        fprintf (fid," *");
+        fprintf (fid, " *");
       endif
     endfor
-    fprintf (fid,"\n");
+    fprintf (fid, "\n");
   endfor
-  fprintf (fid,"            |-");
+  fprintf (fid, "            |-");
   for j = 1:columns (a)
     if (rem (j,5) == 0)
-      fprintf (fid,"-|");
+      fprintf (fid, "-|");
     else
-      fprintf (fid,"--");
+      fprintf (fid, "--");
     endif
   endfor
-  fprintf (fid,"\n");
-  fprintf (fid,"              ");
+  fprintf (fid, "\n");
+  fprintf (fid, "              ");
   for j = 1:columns (a)
     if (rem (j,5) == 0)
-      fprintf (fid,"%2d",j);
+      fprintf (fid, "%2d", j);
     else
-      fprintf (fid,"  ");
+      fprintf (fid, "  ");
     endif
   endfor
   fclose (fid);
 endfunction
 
-function femimages (d, nm, typ)
-  hide_output ();
-  outfile = fullfile (d, strcat (nm, ".", typ));
-  if (strcmp (typ, "eps"))
-    d_typ = "-depsc2";
-  else
-    d_typ = ["-d" typ];
-  endif
+function femimages (outfile, d_typ)
+
+  ## build a rectangle
+  node_y = [1;1.2;1.5;1.8;2] * ones (1,11);
+  node_x = ones (5,1) * [1,1.05,1.1,1.2,1.3,1.5,1.7,1.8,1.9,1.95,2];
+  nodes = [node_x(:), node_y(:)];
 
-  if (__have_feature__ ("COLAMD")
-      && __have_feature__ ("CHOLMOD")
-      && __have_feature__ ("UMFPACK"))
-    ## build a rectangle
-    node_y = [1;1.2;1.5;1.8;2] * ones (1,11);
-    node_x = ones (5,1) * [1,1.05,1.1,1.2,1.3,1.5,1.7,1.8,1.9,1.95,2];
-    nodes = [node_x(:), node_y(:)];
+  [h,w] = size (node_x);
+  elems = [];
+  for idx = 1 : w-1
+    widx = (idx-1)*h;
+    elems = [elems; widx+[(1:h-1);(2:h);h+(1:h-1)]'];
+    elems = [elems; widx+[(2:h);h+(2:h);h+(1:h-1)]'];
+  endfor
 
-    [h,w] = size (node_x);
-    elems = [];
-    for idx = 1 : w-1
-      widx = (idx-1)*h;
-      elems = [elems; widx+[(1:h-1);(2:h);h+(1:h-1)]'];
-      elems = [elems; widx+[(2:h);h+(2:h);h+(1:h-1)]'];
-    endfor
+  E = size (elems,1);  # No. of elements
+  N = size (nodes,1);  # No. of elements
+  D = size (elems,2);  # dimensions+1
 
-    E = size (elems,1);  # No. of elements
-    N = size (nodes,1);  # No. of elements
-    D = size (elems,2);  # dimensions+1
+  ## Plot FEM Geometry
+  elemx = elems(:,[1,2,3,1])';
+  xelems = reshape (nodes(elemx, 1), 4, E);
+  yelems = reshape (nodes(elemx, 2), 4, E);
 
-    ## Plot FEM Geometry
-    elemx = elems(:,[1,2,3,1])';
-    xelems = reshape (nodes(elemx, 1), 4, E);
-    yelems = reshape (nodes(elemx, 2), 4, E);
+  ## Set element conductivity
+  conductivity = [1*ones(1,16), 2*ones(1,48), 1*ones(1,16)];
 
-    ## Set element conductivity
-    conductivity = [1*ones(1,16), 2*ones(1,48), 1*ones(1,16)];
+  ## Dirichlet boundary conditions
+  D_nodes = [1:5, 51:55];
+  D_value = [10*ones(1,5), 20*ones(1,5)];
 
-    ## Dirichlet boundary conditions
-    D_nodes = [1:5, 51:55];
-    D_value = [10*ones(1,5), 20*ones(1,5)];
+  ## Neumann boundary conditions
+  ## Note that N_value must be normalized by the boundary
+  ##   length and element conductivity
+  N_nodes = [];
+  N_value = [];
 
-    ## Neumann boundary conditions
-    ## Note that N_value must be normalized by the boundary
-    ##   length and element conductivity
-    N_nodes = [];
-    N_value = [];
-
-    ## Calculate connectivity matrix
-    C = sparse ((1:D*E), reshape (elems',D*E,1),1, D*E, N);
+  ## Calculate connectivity matrix
+  C = sparse ((1:D*E), reshape (elems',D*E,1),1, D*E, N);
 
-    ## Calculate stiffness matrix
-    Siidx = floor ([0:D*E-1]'/D)*D*ones(1,D) + ones(D*E,1)*(1:D);
-    Sjidx = [1:D*E]'*ones (1,D);
-    Sdata = zeros (D*E,D);
-    dfact = prod (2:(D-1));
-    for j = 1:E
-      a = inv ([ ones(D,1), nodes( elems(j,:), : ) ]);
-      const = conductivity(j)*2/dfact/abs (det (a));
-      Sdata(D*(j-1)+(1:D),:) = const * a(2:D,:)'*a(2:D,:);
-    endfor
+  ## Calculate stiffness matrix
+  Siidx = floor ([0:D*E-1]'/D)*D*ones(1,D) + ones(D*E,1)*(1:D);
+  Sjidx = [1:D*E]'*ones (1,D);
+  Sdata = zeros (D*E,D);
+  dfact = prod (2:(D-1));
+  for j = 1:E
+    a = inv ([ ones(D,1), nodes( elems(j,:), : ) ]);
+    const = conductivity(j)*2/dfact/abs (det (a));
+    Sdata(D*(j-1)+(1:D),:) = const * a(2:D,:)'*a(2:D,:);
+  endfor
 
-    ## Element-wise system matrix
-    SE = sparse (Siidx,Sjidx,Sdata);
-    ## Global system matrix
-    S = C'* SE *C;
+  ## Element-wise system matrix
+  SE = sparse (Siidx,Sjidx,Sdata);
+  ## Global system matrix
+  S = C'* SE *C;
 
-    ## Set Dirichlet boundary
-    V = zeros (N,1);
-    V(D_nodes) = D_value;
-    idx = 1:N;
-    idx(D_nodes) = [];
+  ## Set Dirichlet boundary
+  V = zeros (N,1);
+  V(D_nodes) = D_value;
+  idx = 1:N;
+  idx(D_nodes) = [];
 
-    ## Set Neumann boundary
-    Q = zeros (N,1);
-    Q(N_nodes) = N_value; # FIXME
+  ## Set Neumann boundary
+  Q = zeros (N,1);
+  Q(N_nodes) = N_value; # FIXME
 
-    V(idx) = S(idx,idx) \ ( Q(idx) - S(idx,D_nodes)*V(D_nodes) );
+  V(idx) = S(idx,idx) \ ( Q(idx) - S(idx,D_nodes)*V(D_nodes) );
 
-    velems = reshape (V(elemx), 4, E);
+  velems = reshape (V(elemx), 4, E);
 
-    plot3 (xelems, yelems, velems);
-    view (80, 10);
-    print (outfile, d_typ);
-    hide_output ();
-  endif
+  plot3 (xelems, yelems, velems);
+  view (80, 10);
+  print (outfile, d_typ);
 endfunction
 
 ## There is no sparse matrix implementation available because of missing
-## libraries, plot sombreros instead. Also plot a nice title that we are
+## libraries, plot sombreros instead.  Also plot a nice title that we are
 ## sorry about that.
-function sombreroimage (d, nm, typ)
+function sombreroimage (outfile, typ, d_typ)
   if (strcmp (typ, "txt"))
-    fid = fopen (fullfile (d, [nm ".txt"]), "wt");
-    fputs (fid, "\n");
+    fid = fopen (outfile, "wt");
     fputs (fid, "+---------------------------------------+\n");
     fputs (fid, "| Image unavailable because of a        |\n");
     fputs (fid, "| missing sparse matrix implementation. |\n");
@@ -262,14 +225,6 @@
     fclose (fid);
     return;
   else
-    outfile = fullfile (d, strcat (nm, ".", typ));
-    hide_output ();
-    if (strcmp (typ, "eps"))
-      d_typ = "-depsc2";
-    else
-      d_typ = ["-d" typ];
-    endif
-
     [x, y, z] = sombrero ();
     unwind_protect
       mesh (x, y, z);