Date 2016/11/03 By B. Lucier * describe.scm: Update for new version of Meroon. Date 2016/08/08 By B. Lucier * sparse-matrix-solver.scm (Sparse-matrix-Cholesky-factor, Sparse-matrix-solve-Ux=b, Sparse-matrix-solve-Y^Tx=b): New functions, used in * multigrid.scm: Use direct Cholesky solvers to solve multigrid method at coarsest level. * final-tests.scm: Remove dirichlet-tests, add timing for some functions. * all.scm: Include sparse-matrix-solver.scm. * descibe.scm: Remark that our new code follows Brenner and Scott. Add sparse-matrix-solver.scm as an input file. Remove mmoc.scm and test-mmoc.scm (they didn't work). * make-tar: add sparse-matrix-solver.scm; remove mmoc.scm and test-mmoc.scm. Date 2016/05/01 By B. Lucier * utilities.scm (vector-every?): New function, use it ... * dirichlet.scm (Dirichlet-linear-finite-element-vector?): Here. * parabolic.scm (parabolic-equation-solution): Interpolate u0 to get initial data. * multigrid.scm (MG-step): Update comment to reflect more complete understanding of code. * describe.scm: Add link to letter to Brenner and Scott. Date 2016/04/18 By B. Lucier * test-parabolic.scm (test-solution): Interpolate true u(T) on fine grid; simplify notation. Date 2016/03/21 By B. Lucier * mg-results3: New file. * describe.scm: Introduce mg-results3. * linear-elements.scm (Vector-dimension (x Finite-element-vector)): Call Vector-dimension, not f64vector-length, on the data to make it a bit more general. * html-lib.scm: Update html-display for newer with-output-to-string; have ending tag of blockquote start a new line; change attribute of script from source to src. Date 2016/02/26 By B. Lucier * sparse-linear-algebra.scm: Use define-meroon-macro to define make-Entry, Entry-coefficient, Entry-index, and add-to-entry-list so that user code can use them. Date 2014/05/06 By B. Lucier * final-tests.scm: Add dirichlet-tests, which use Robin boundary conditions to simulate Dirichlet boundary conditions. Date 2014/05/01 By B. Lucier * conjugate-gradient.scm: Move CG-add-Dirichlet-operator-and-rhs-information! from here to * dirichlet.scm: here. * make-tar: add dirichlet.scm and test-dirichlet.scm to PUFS dirrectory. Date 2014/04/30 By B. Lucier * all.scm: Don't include polygon.scm, include dirichlet.scm * conjugate-gradient.scm: Add CG-add-Dirichlet-operator-and-rhs-information!. Add comment to Gauss-Seidel preconditioner. Add Sparse-matrix-operator-gauss-seidel-smoother!. Define generic gauss-seidel-smoother!; add method for Linear-finite-element-operator. * dirichlet.scm: New. * multigrid.scm: Have MG-solver take vector of right-hand-sides as argument. * final-tests.scm: Calculate right-hand-sides in run-multigrid-tests and pass to MG-solver. * linear-algebra.scm: In the Operator class, make slots mutable so we can change them to convert a (regular-, Neumann-)Linear-finite-element-operator to a Dirichlet-linear-finite-element-operator. * linear-elements-code.scm: When initializing a Linear-finite-element-operator, don't assume the mapping field is not defined. * test-dirichlet.scm: New. * tex.scm: Remove declarations. * describe.scm: Describe dirichlet.scm and test-dirichlet.scm. Don't describe final-tests-obstacle.scm, test.scm, and test-matrix-and-rhs.scm. Build new PUFS. Date 2014/04/23 By B. Lucier * geometry-code.scm: Remove explicit definition of coarse-square-triangulation. Use lists->Triangulation to define coarse-square-triangulation and coarse-L-triangulation. * symbolic.scm: New. * describe.scm: Change the base to 2014. Build new PUFS. Date 2012/03/31 By B. Lucier * describe.scm: Change the base to 2012. Date 2012/03/31 By B. Lucier * points.scm: make operations in Point-*axpy float. * multigrid.scm: make operations in Triangulation->refined-triangulations and triangulations->linear-finite-element-spaces fixnum. * all.scm: don't include mmoc.scm. Date 2012/03/31 By B. Lucier * test-parabolic.scm: basically rewrite. * linear-element-code.scm: Correct the numerical integration rules used in Triangle-mass, Edge-boundary-term, and Triangle-interior-integral. Remove unused boundary-vertex-gammas from add-boundary-terms! * geometry.scm: Move index field the first field in Edge and Triangle classes to aid debugging using "unveil". * final-tests.scm: Add three tests with expected error of 0. Correct format-for-display in run-test to handle error that prints as zero correctly. * describe.scm: Update to year 2012, new version of Meroon, add mention of test-parabolic.scm, new file name for PUFS. Have it describe symbolic.scm and test-matrix-and-rhs.scm. Date 2010/05/20 By B. Lucier * multigrid.scm: remove right-hand-sides as a component of Multigrid-data. Pass right-hand-side as argument to MG-solver, calculate multigrid right-hand-sides in MG-solver. * final-tests.scm: Do not calculate right-hand-sides component of MG-data, pass rhs as argument to MG-solver. Date 2010/01/13 By B. Lucier * mmoc.scm: reorganize code a bit, change variable name c to capacity, no functional change. * multigrid.scm: Make smoothers a component of Multigrid-data. Add Triangulation->refined-triangulations, triangulations->linear-finite-element-spaces, linear-finite-element-spaces->projectors, projectors->injectors, most-refined-operator->all-refined-operators, most-refined-rhs->all-refined-rhs, build-operator, build-rhs, make-smoothers. Remove smoothers! as an argument to MG-step. Document level 0 "solver" in MG-step. In MG-add-solver-information! remove smoother-maker as an argument; don't define smoothers!. * final-test.scm: define triangulations, spaces, projectors, and injectors by calling Triangulation->refined-triangulations, triangulations->linear-finite-element-spaces, linear-finite-element-spaces->projectors, projectors->injectors. Define fes and t as elements of spaces and triangulations. In run-multigrid-tests, calculate operator, rhs, operators, and right-hand-sides by calling build-operator, build-rhs, most-refined-operator->all-refined-operators, most-refined-rhs->all-refined-rhs. For each smoother-maker, calculate smoothers! and instantiate Multigrid-data. Use MG-add-solver-information only to create the solver-description and to build the solvers vector, not the smoothers. For two tests interpolate the coefficients to Linear-finite-element-vector to test the barycentric code. * linear-elements-code.scm. Add functions make-barycentric, barycentric-coordinate, barycentric-dimension. Add points barycentric-1/2-1/2-0, barycentric-1/2-0-1/2, and barycentric-0-1/2-1/2. Add generic evaluate-barycentric on simplicies. Define methods for triangles and edges. Define generic evaluate-barycentric-triangle for numbers and procedures; add method for Linear-finite-element-vector. Define generic Evaluate-barycentric-edge for numbers and procedures; add method for Linear-finite-element-vector. In Triangle-stiffness change second argument from a vector of values to a coefficient; use evaluate-barycentric. In add-stiffness-terms!, do not precompute vector of coefficients at midpoints of edges. Similarly for Triangle-transport and add-transport-terms! Similarly for Triangle-mass and add-mass-terms! Similarly for Triangle-interior-integral and add-interior-integral-terms!. Date 2008/04/21 By B. Lucier * test-parabolic.scm: Change fx+ to fl+ to fix a bug. * test-mmoc.scm: Change the number of time steps from 10000 to 1000 * parabolic.scm: If a predictor is given in solve, calculate the increment by calling solve again on the residual without a predictor. * describe.scm: Change the base of the software page; add a doctype; reduce font size of title; fix URL for gambit; call build-index at end. Date 2008/04/20 By B. Lucier * utilities.scm: replace vector-for-each-1 and vector-for-each-with-index-1 by vector-for-each and vector-for-each-with-index, which take any number of arguments. * geometry.scm, geometry-code.scm: use them. * describe.scm: Change the destination directory to "updated-software". Date 2008/04/11 By B. Lucier * points.scm: Define Point-*axpy. * linear-elements.scm: Define interpolate-procedure->Linear-finite-element-vector. * final-tests.scm: Use it. Date 2008/03/31 By B. Lucier * geometry-code.scm: Define lists->Triangulation. * matlab-to-pufs-triangulation.scm: remove * make-tar: remove matlab-to-pufs-triangulation.scm and omalley-data.scm from list of files to add to PUFS.tgz Date 2008/03/31 By B. Lucier * utilities.scm: Remove vector-map-1 and vector-map-2; define vector-map. Define c#absent-object, unique, and unique-with-count. * points.scm: Add Point-cross-product and Point-counter-clockwise? * linear-algebra.scm: use vector-map in place of vector-map-1 and vector-map-2. * final-tests.scm: specialize all floating-point operations to be either fixnum or flonum * matlab-to-pufs-triangulation.scm: New file; define coordinates->vertices, elements->edges!, elements->triangles, and matlab->Triangulation * make-tar: Add matlab-to-pufs-triangulation.scm and omalley-data.scm to the list of files to add to the tar-file; remove random.scm from the list. Date 2008/03/05 By B. Lucier * all.scm: remove include of random.scm * obstacle.scm: change three - to fx-. Date: 2008/02/29 By B. Lucier * parabolic.scm: replace + by fx+, min by fxmin * html-lib.scm: replace min by fxmin * geometry.scm: wrap generic arithmetic in (not inline-primitives), change + to fl+ * describe.scm: remove random.scm from list of files to process Date: 2008/02/29 By B. Lucier * test.scm: replace all numerical declarations with specialized operations * test-parabolic.scm: ditto * test-mmoc.scm: ditto * sort.scm: ditto * parabolic.scm: ditto * obstacle.scm: ditto * mmoc.scm: ditto * final-tests.scm: ditto * final-tests-obstacle: ditto * all.scm: ditto Date: 2008/02/29 By B. Lucier * polygon.scm: replace all numerical declarations with specialized operations * html-lib.scm: ditto * linear-elements-code.scm: ditto * multigrid.scm: ditto * random.scm: remove, use built-in SRFI 27 random numbers. Date: 2008/02/29 By B. Lucier * geometry.scm: replace all arithmetic declarations with explicit fixnum and flonum operations. Date: 2008/02/28 By B. Lucier * geometry.scm, geometry-code.scm, intergrid.scm, linear-elements-code.scm, polygon.scm, sparse-linear-algebra.scm, utilities.scm: replace all uses of map1 and map2 with map. * utilities.scm: Remove map1 and map2 (map of one list is now inlined) Date: 2008/02/28 By B. Lucier * intergrid.scm: remove all fixnum and flonum declarations, replace with specialized fixnum and flonum operators Date: 2008/02/28 By B. Lucier * sparse-linear-algebra.scm: remove all fixnum and flonum declarations, replace with specialized fixnum and flonum operators Date: 2008/02/28 By B. Lucier * conjugate-gradient.scm: remove all fixnum and flonum declarations, replace with specialized fixnum and flonum operators * all.scm: Reformat declarations to make it easier to remove not safe. Date: 2008/02/28 By B. Lucier * parabolic.scm: Change ##flonum.<-fixnum to fixnum->flonum * test-parabolic.scm: Ditto * random.scm: Change ##flonum.<-fixnum to fixnum->flonum and ##fixnum? to fixnum? * sparse-linear-algebra.scm: Change ##fixnum? to fixnum? Dage: 2008/02/28 By B. Lucier * linear-algebra.scm: Remove fixnum and flonum declarations and use of FLOAT and FIX; use fixnum- and flonum-specific operations. * points.scm: Ditto. * html-lib.scm: replace ##write-substring with write-substring and ##define-macro with define-macro Date: 2008/02/27 By B. Lucier * linear-algebra.scm (Vector-add, Vector-subtract, Vector-scale, Vector-*axpy, Vector-copy, Lattice-max, Lattice-min, Vector-dot-product): Remove all declarations disabling interrupts. * conjugate-gradient.scm (jacobi-smoother!, gauss-seidel-smoother!, richardson-smoother!, diagonal-preconditioner): ditto. * sparse-linear-algebra.scm (initialize! (Sparse-matrix-operator)): ditto. * test-mmoc.scm: ditto. * sort.scm (merge): Remove declaration enabling interrupts. Date: 2008/01/10 By B. Lucier * geometry.scm, linear-algebra.scm: change inf. to inf.0. * html-lib.scm: update to latest version from SAGE. * describe.scm: update to reflect current software. * mg-results, mg-results2, cg-results: rerun on current hardware. Date: 2003/02/27 By B. Lucier * parabolic.scm: Correct initial comment to make equation truly parabolic. * mmoc.scm: Ditto. * test.scm: fix global declarations * obstacle.scm: rather than try to use MG-step for the obstacle problem with extra optional arguments, just define Obstacle-MG-step. * multigrid.scm: don't bastardize to use it to solve the obstacle problem. * html-lib.scm: don't automatically indent
 contents.
	* all.scm: add "obstacle.scm" to list of included files
	* describe.scm: add "obstacle.scm", final-tests-obstacle.scm
	to input file list.
	* final-tests-obstacle.scm: Use more iterations at fine level to
	calculate "true" solution.  Test methods with more iterations.
	* make-tar: add obstacle.scm, final-tests-obstacle.scm

Date: 2003/02/17
By B. Lucier
	* final-tests.scm (run-cg-tests): add definition and use of
	reference solution.

Date: 2002/03/09
By B. Lucier
	* html.scm: Remove.
	* html-lib.scm: Add.

Date: 2001/09/07
By B. Lucier
	* conjugate-gradient.scm: (diagonal-preconditioner)Use inverse of
	 L_\infty operator norm of A for the smoothing parameter, instead
	of 5/8 times the L_\infty norm of A.  (The other probably converges
	more quickly for plain multigrid, but the latter has some nice
	properties for the obstacle problem, I hope!)
	* final-tests-obstacle.scm.  New file.
	* linear-algebra.scm: Add (call-next-method) to initialize!
	method for Matrix-operator.  (Remember, the initialize! method
	must return the object it is initializing; the easiest way to
	do this is to always (call-next-method) at the end of each
	initialize! method.)
	* obstacle.scm: clean up.

Date: 2001/08/30
By B. Lucier
	* multigrid.scm: Declare fixnum in diagonal-preconditioner (ugh).
	* conjugate-gradient.scm: Declare not interrupts-enabled in loops
	of smoothers.

Date: 2001/08/30
By B. Lucier
	* linear-elements.scm: Have the initialize! method for Elements
	ensure that an element is the last items in its neighbors.
	* conjugate-gradient.scm: Remove functions diagonal-preconditioner
	and gauss-seidel-preconditioner.  Add generics diagonal-preconditioner
	gauss-seidel-preconditioner, gauss-seidel-smoother!,
	richardson-smoother!, jacobi-smoother!.  Add methods for
	Sparse-matrix-operator (taking into account new ordering of
	elements) and Linear-finite-element-operator.  The smoothers can
	(and gauss-seidel-smoother! does) modify their second arguments,
	hence the bangs in the names.
	* final-tests.scm: Add bangs to the smoother names.
	* multigrid.scm: Add bangs to the smoother names, remove
	definitions of gauss-seidel-smoother, jacobi smoother, and
	richardson smoother.
	* sparse-linear-algebra.scm: Simplify code for
	Sparse-matrix-operator-mapping. In ->Sparse-matrix method
	for Sparse-matrix-operator, ensure that resulting rows are
	sorted; in ->Sparse-matrix-operator method for Sparse-matrix,
	ensure that diagonal element is at the end.

Date: 2001/08/29By B. Lucier
	* final-tests.scm: (run-multigrid-tests) Run tests for various
	smoothers.
	* linear-elements-code.scm: Add Vector-Linf-norm method for
	Operator-with-matrix-implementation.
	* multigrid.scm: Add . rest arguments to MG-step-rest-arguments.
	(MG-step): Do coarse correction only when not at the
	coarsest level.  Use regular smoothers at coarsest level.
	(MG-add-solver-information!): add smoother-maker and smoother-name
	arguments to generic.  Use them in method for Multigrid-data.
	richardson-smoother, jacobi-smoother, gauss-seidel-smoother: Add.

Date: 2001/08/23
By B. Lucier
	* linear-algebra.scm: Add an initialize! method for Matrix-class
	that adds domain? and range? fields.  Add a with-access form
	to Operator-apply for a bit more error checking.
	* sparse-linear-algebra: Remove definitions of domain? and range?
	from initialize! method for Sparse-matrix-operator.

Date: 2001/08/22
By B. Lucier
	* linear-algebra.scm: Remove the Vector class, it isn't needed
	(see comments for explanation); make Operator be a subclass of Object.
	Define generics Lattice-max and Lattice-min to work for
	f64vectors.  Operator-apply had no methods defined for it, so
	I made it a reglar function.
	* linear-elements.scm: Define Lattice-max and Lattice-min methods for
	Linear-finite-element-vectors, but not for general
	Finite-element-vectors.  Make Finite-element-vector a subclass of
	Object, not Vector.

Date: 2001/08/22
By B. Lucier
	* multigrid.scm: Rename multigrid-arguments to
	multigrid-solver-arguments.  Update method definitions and
	callers.  Define MG-step-rest-arguments as generic; add method
	for Multigrid-data.  Reorder arguments of MG-step, add a rest
	argument, update callers.  Add rest argument to smoothers, update
	callers.  Reverse g and z arguments of smoothers, update callers.
	All this is in preparation for using multigrid for obstacle problems.

Date: 2001/08/09
By B. Lucier
	* all.scm: Remove (not interrupts-enabled) declaration (important
	for Gambit-C 4.0).
	* linear-algebra.scm: Add (not interrupts-enabled) to inner loops
	of vector operations on f64vectors.
	* multigrid.scm: (Multigrid-data) Allow triangulations, spaces,
	projectors and injectors to be uninitialized. (multigrid-arguments)
	add new generic, define method for Multigrid-data. (MG-solver) Make
	generic, define method for Multigrid-data; use multigrid-arguments.
	(MG-build-data) Make generic, define method for Multigrid-data,
	add argument for empty instance of Multigrid-data.
	(MG-add-operator-and-rhs-information!) Make generic, add method for
	Multigrid-data.
	(MG-propagate-level-information!) Same.
	(MG-add-solver-information!) Same.
	* sparse-linear-algebra.scm: Add (not interrupts-enabled)
	declaration to sparse matrix/vector multiplication loop.
	* final-tests.scm: Remove (not interrupts-enabled) declaration.
	Call MG-build-data with empty Multigrid-data object.  Add more
	tests with more parameters to the multigrid-tests.
	* mg-results: Added more extensive tests.
	
Date: 2001/04/16
By B. Lucier
	* Use updated Meroon with instantiate-from form.
	* conjugate-gradient.scm: Use instantiate-from instead of
	instance-clone + field-value-set!.
	* intergrid.scm: Tweak the mappint for the intergrid operators
	so that they pull the result word into cache earlier.
	* linear-elements.scm: Remove which-neighbor.  Make
	Finite-element-vector-data immutable.  In initialize! (x 
	Finite-element-vector) use initialize-field-value! rather
	than field-value-set!. In various Vector-* methods for
	Finite-element-vectors, use instantiate-from rather than
	clone+field-value-set!.
	* sparse-linear-algebra.scm: In (initialize! (x 
	Sparse-matrix-operator)), use initialize-field-value! rather
	than field-value-set!.  In mapping field, load result word
	so it will be in cache earlier.

Date: 2001/01/14
By B. Lucier
	* test-parabolic.scm: Use ->Linear-finite-element-operator; remove
	commented debugging print message.
	* test-mmoc.scm: Use ->Linear-finite-element-operator.
	* parabolic.scm: Ditto.
	* mmoc.scm: Ditto.  Print every tenth timestep index to track
	progress.  (We really need to use multigrid instead of 
	conjugate-gradient as the solver in these time-dependent problems.)

Date: 2001/01/14
By B. Lucier
	* sparse-linear-algebra.scm: Extensive rewrite to structure of
	Sparse-matrix-operator.  Coefficients and indices are now
	single vectors (of various types) of nonzero coefficients and
	column locations (within a row) of the coefficients.  offsets
	is a vector of offsets into coefficients and indices, itself
	indexed by rows.
	Define indices-{ref,set!,->list,length}, make-indices, list->indices
	as u32vector ops or vector ops depending on whether 32bit or 64bit
	fixnums (determined at compile time).
	Redefine sparse matrix multiply to use new structure.
	(Sparse-matrix-operator-increment-entry): New function.
	(->Sparse-matrix and ->Sparse-matrix-operator): Use new structure.
	(Sparse-matrix-operator-compress-coefficients): Remove.
	(Operator-adjoint): Don't use
	Sparse-matrix-operator-compress-coefficients
	(Vector-Linf-norm): Use new structure.
	(Operator->identity): Use new structure.
	* linear-elements-code.scm: Add offsets to Finite-element-operator.
	(initialize! Finite-element-operator): Use new structure.
	(->Linear-finite-element-operator): New, define for 
	Linear-finite-element-space.
	(wrap-matrix-implementation-in-linear-finite-element-operator): New.
	(Vector-{add,subtract,scale,*axpy} for Linear-finite-element-operator):
	Use it.
	(Operator-compose, Operator->identity): Use it.
	(Operator-adjoint for Linear-finite-element-operator): Move from
	intergrid.scm.
	(Triangle-{stiffness,transport,mass}): Take matrix-implementation
	as argument instead of indices and coefficients.  Use
	Sparse-matrix-operator-increment-entry. Change callers.
	(Edge-booundary-term): Ditto.
	* conjugate-gradient.scm: Rewrite to use new sparse matrix operator
	structure and ->Linear-finite-element-operator
	* multigrid.scm: Use projector->injector instead of Operator-adjoint.
	Use ->Linear-finite-element-operator. Change conjugate gradient
	max iterations at coarsest level to 20 from 200.
	* test.scm: Use ->Linear-finite-element-operator; change max
	conjugate-gradient iterations from 2000 to 200.
	* intergrid.scm: Define projector->injector, with a special
	matrix multiply routine for the injector.
	(coarse<-fine): Don't attempt to compress coefficients.
	* final-tests.scm: Use ->Linear-finite-element-operator.
	* describe.scm: Use get-output-string rather than close-output-port.

Date: 2000/11/10
By B. Lucier
	* polygon.scm: 1 -> 1.0 in region declared flonum.
	* conjugate-gradient.scm: Try to speed Gauss-Seidel preconditioner.
	* mg-results: New results with Gambit-4.0a1.
	* cg-results: ditto.

Date: 2000/08/28
By B. Lucier
	* parabolic.scm: New file; contains a parabolic solver for
	symmetric problems. Based on work by Mr. X. Yu.
	* test-parabolic.scm: New file, tests routine in parabolic.scm.
	* mmoc.scm: New file; contains routines to use the modified
	method of characteristics to solve transport-dominated diffusion
	problems.
	* test-mmoc.scm: New file; tests procedures in mmoc.scm.
	* final-tests.scm: Use Operator-adjoint instead of transpose.

Date: 2000/08/21
By B. Lucier
	* utilities.scm: Define map1 and map2, rename mappend to mappend1,
	use map1 in mappend1.
	* sparse-linear-algebra.scm: Use map1, map2, and mappend1.
	* linear-elements-code.scm: Ditto.
	* intergrid.scm: Ditto.
	* polygon.scm: Ditto.
	* utilities.scm: Ditto.
	* geometry-code.scm: Ditto.
	* geometry.scm: Ditto.

Date: 2000/08/21
By B. Lucier
	* linear-algebra.scm: Added class Matrix-operator, generics
	Operator-adjoint, Operator->indentity.
	* sparse-linear-algebra: Rename Sparse-matrix-vector to Sparse-matrix,
	make it a subclass of Matrix-operator, not Vector.  Define 
	Operator-adjoint and Operator-compose methods for Sparse-matrices.
	Make Sparse-matrix-operator a subclass of Matrix-operator. Define
	various methods for Sparse-matrix-operator and Sparse-matrix.  Define
	Sparse-matrix-operator-compress-coefficients that removes copies
	of coefficient rows if they are the same. (Important for 
	intergrid.scm.)
	* intergrid.scm: Define Operator-adjoint for 
	Linear-finite-element-operator.
	* linear-elements-code.scm: Define the usual Vector methods for
	Linear-finite-element-operators.
	* multigrid.scm: Use Operator-adjoint instead of transpose; redo
	smoother operator to remove one vector subtraction.

Date: 2000/06/21
By B. Lucier
	* html.scm: Completely revised, now a complete implementation of
	HTML 4.0 (without Netscape or Microsoft extensions) in Scheme.
	* describe.scm: Use new html.scm.

Date: 2000/06/13
By B. Lucier
	* utilities.scm: Fix comment.
	* points.scm: New file that contains the Point routines.
	* linear-elements.scm: Define initialize! method for 
	Finite-element-vector that builds a zero data vector if one
	is not given.  No longer require to be initialized.
	* test.scm: Include points.scm declared (not core); have all
	coefficient functions take a Point as argument instead of two
	reals; do not initialize Linear-finite-element-data to zero.
	* sparse-linear-algebra.scm: in sparse-matrix-operator-mapping,
	remove a lot of the special cases for row lengths, start the
	general case with a non-zero value.
	* problem-descriptions.scm: in Problem-data, field description
	no longer needs to be initialized.
	* polygon.scm: Remove commented line.
	* multigrid.scm: No longer initialize Finite-element-vector-data
	to zero vector.
	* linear-elements-code.scm: Remove generic Edge-eval-at-midpoint;
	add generic Edge-midpoint. Define Edge-midpoint for Edges. Use
	it instead of Edge-eval-at-midpoint.
	* geometry.scm: Remove Point routines.  Add triangle field to
	Boundary-edge.  Initialize all Boundary-edge-triangle's in
	the initialize! method for Triangulation.  Remove special
	triangle method for Curved-boundary-edge's.
	* final-tests.  Include points.scm declared (not core).  Rewrite
	all coefficients to take a Point as argument, not two reals.
	No longer use Triangulation-lexicographical-sort! of geometric
	objects.
	* curved-linear-elements-code.scm: Remove Edge-eval-at-midpoint
	method and add Edge-midpoint method for Curved-edge's.
	* conjugate-gradient.scm: Do not initialize Finite-element-vector-data
	to zero vector.
	* all.scm: Include points.scm.
	* describe.scm: Add "points.scm" to input-files.

Date: 2000/06/02
By B. Lucier
	* sparse-linear-algebra.scm: Add more special cases to the
	sparse matrix operator mapping.
	* multigrid.scm: Generate an error in 
	MG-add-operator-and-rhs-information! if b is defined (so the
	system is nonsymmetric).  Break out operator and smoother in MG-step.
	* final-tests.scm: Add nonsymmetric-tests (without solvers), rename
	tests to symmetric-tests, fix format-for-display for errors > 1.0.
	* geometry.scm: Add several vertex orderings (from Jason Gower).

Date: 2000/05/17
By B. Lucier
	* geometry.scm: Add an initializer to Vertex-edges; change the
	initializer of Boundary-vertex-boundary-edges to be '().
	* geometry-code.scm: Rewrite the refine methods to use instantiate
	rather than with-co-instantiation and to explicitly initialize
	all fields.  This avoids calling fill-other-fields! and doubles
	the speed of (refine triangulation), even with the space-filling-curve
	ordering of the geometric entities.
	* final-results.scm: Expand the multigrid tests to include up
	to four pre- and post-smoothings per multigrid step, and to use
	up to 6 iterations of the multigrid step per level.

Date: 2000/05/12
By B. Lucier
	* geometry.scm: Rewrite Triangulation-space-filling-curve-sort!
	to sort only on vertex-1 of Edges and Triangles; computes the
	curve-index of each vertex only once, reuses it for Edges and
	Triangles; use some temporary storage in cons's to avoid continual
	Meroon object accesses.
	* geometry-code.scm: Turn methods into handy-methods.
	
Date: 2000/05/11
By B. Lucier
	* hierarchical.scm: Remove.
	* problem-description.scm: New file.  Includes the Problem-data
	class for describing the elliptic PDE we want to solve.
	* all.scm. Don't include hierarchical.scm, include
	problem-description.scm.
	* utilities.scm: Make check-same-class a generic, dispatch
	on the first argument, which must be an Object.
	* linear-elements.scm: Make the initialize! method for Element
	a handy-method.  Change fes->space throughout.  Remove
	Finite-element-vector-check-same-class, replace with
	(check-same-class (x Finite-element-vector) y).
	* linear-algebra.scm: In Vector-inner-product, don't require
	x to be a Vector (but still dispatch on x).  Give easy but
	stupid definitions to new generics Vector-Linf-norm and
	Vector-L1-norm.  Define identity-operator.
	* multigrid.scm: Define class Multigrid-data to encapsulate
	everything needed to solve a multigrid problem.  Define MG-solver
	using this class.  Define 
	(MG-build-data coarse-triangulation number-of-refinements), and
	MG-add-operator-and-rhs-information! and 
	MG-propagate-level-information! to add the information at the
	finest level and propagate it to coarser levels.  Introduce
	MG-add-solver-information! (currently uses the basic smoother).
	Define L-inf-norm for a Linear-finite-element-operator.
	* sparse-linear-algebra.scm: Define Sparse-matrix-vector class
	of objects that are not Operators (so they can't be applied) but
	which can be manipulated more easily because the rows are
	Sparse-vectors.  Define conversion to and from Sparse-matrix-operator,
	define Sparse-matrix-operator operations in terms of
	Sparse-matrix-vector operations.  Introduce 
	Operator-with-matrix-implementation class.  Use this machinery
	in Operator-compose for Linear-finite-element-operators.
	* intergrid.scm: Change fes->space throughout.  Use the machinery
	introduced in sparse-linear-algebra.scm for Sparse-matrix-vectors.
	* random.scm: Make definition of random safe for 32-bit machines.
	* geometry.scm: Add functions Triangulation-space-filling-curve-sort!
	and Triangulation-lexicographical-sort! Define Triangulation-sort!
	and set it to Triangulation-space-filling-curve-sort! by default.
	Use it in the initialize! method for Triangulations.  Work of Mr.
	Gower.
	* conjugate-gradient.scm: Add the code for diagonal and Gauss-Seidel
	preconditioners.  Define a Conjugate-gradient-data class to
	encapsulate the information needed to run the conjugate gradient
	routine.  Define CG-build-data, CG-add-operator-and-rhs-information!,
	and CG-add-solver-information! to build and manipulate this objects
	in this class.  (conjugate-gradient): Change testfunc to
	stop-iterations?.  Make preconditioner an Operator.  Pass A and
	preconditioner to stop-iterations?.  Have preconditioners return
	Operators, not functions.
	* curved-linear-elements-code.scm: Changes from Ms. Joo, which
	I don't really understand.
	* linear-elements-code.scm: Make Linear-finite-element-operator
	a subclass of Operator-with-matrix-implementation.  Change fes to
	space throughout.  Make indices and coefficients immutable, so
	the matrix implementation can rely on them.  Add flonum declarations.
	* curved-geometry-code.scm: Move flonum declaration in
	quadratic-transformation.
	* final-tests.scm: Use Multigrid-data and Conjugate-gradient-data
	classes to build methods for solutions.  Rewrite to conform to
	changes listed above.
	* test.scm: Changes fes to space; add A and preconditioner to the
	stop-iterations? lambda.
	* geometry-code.scm: (Triangulation-consistent?): Use with-access.
	* describe.scm: reorder input-files; add final-tests.scm and test.scm.
	

Date: 2000/05/01
By B. Lucier
	* hierarchical.scm: New function propagate-level-information!
	broken out of add-operator-and-rhs-information!, which now
	adds only the finest level matrix and right-hand-side information.
	* final-tests.scm: run-test now takes an object in the class
	Problem-data and a thunk (a zero-argument procedure) that solves
	the linear problem. Rewrite run-cg-tests so it uses classical
	conjugate gradient.

Date: 2000/04/27
By B. Lucier
	* hierarchical.scm: New framework for hierarchical (level by level)
	linear solvers.  Define Hierarchical-data class, Problem-data class,
	and Hierarchical-solver.
	* preconditioners.scm: Remove.  Add the routines to ...
	* conjugate-gradient.scm: preconditioners code, plus routine
	to add solver information to Hierarchical-data.
	* multigrid.scm: Remove full-multigrid (use Hierarchical-solver
	instead).  Define routine to add multigrid data to Hierarchical-data.
	* final-tests.scm: Use Hierarchical-data structure.  Add new tests
	from Mr. Martynov.  Define run-test to run a particular problem
	with a particular solver.  Define run-multigrid-tests and
	run-cg-tests.
	* all.scm: Don't include preconditioners.scm.  Do include
	hierarchical.scm.
	* describe.scm: Update input-files appropriately.
	* mg-results and cg-results: New results files.

Date: 2000/04/27
By B. Lucier
	* multigrid.scm (MG-step): Fix a bug in counting the presmoothing
	steps.
	* linear-elements-code.scm: Remove no-longer-needed references to
	the boundary-index of boundary-nodes. (Ms. Joo)

Date: 2000/04/26
By B. Lucier
	* linear-elements-code.scm: Add back Operator-compose method for
	Linear-finite-element-operators that was removed by mistake.
	* multigrid.scm: New file.  Defines an MG-data class, and routines
	MG-step and full-multigrid.  (Work of Ms. Park and Mr. Martynov.)
	* mg-test-complex.scm: Test code for multigrid.  (Work of Ms. Park
	and Mr. Martynov.)
	* all.scm: Include multigrid.scm.
	* describe.scm: Add multigrid.scm and mg-test-complex.scm to
	input-files.
	
Date: 2000/04/26
By B. Lucier
	* linear-elements-code.scm: Use two-point Gauss rule for all
	boundary integrals.  Define left-gauss-point and right-gauss-point.
	* curved-linear-elements-code.scm: Tweak enough so that it loads
	and compiles, but *it does not work*.

Date: 2000/04/25
By. B. Lucier
	* linear-elements-code-2.scm: Removed.
	* linear-elements-code.scm: New file, code based on generic functions
	to replace old linear-elements-code-2.scm.  (Work of Ms. Joo.)
	* curved-linear-elements-code.scm: New file, methods for Curved-edges
	and Triangles-with-curved-sides for generics defined in
	linear-elements-code.scm.  (Work of Ms. Joo.)
	* geometry.scm: Add triangle field to Curved-edge. (Work of Ms. Joo.)
	* curved-geometry.scm: Initialize and use triangle field in
	Curved edge. (Work of Ms. Joo.)
	* all.scm: include curved-geometry.scm, linear-elements-code.scm and
	curved-linear-elements-code.scm, not linear-elements-code-2.scm.
	* intergrid.scm (transpose): You can reverse-append! the new entries
	rather than sorting them because they're in reverse order.
	* describe.scm: modify input-files appropriately.

Date: 2000/04/25
By B. Lucier
	* linear-elements-code-2.scm (add-boundary-integral-terms!):
	corrected bug (work of Ms. Joo).
	* preconditioners.scm: New file; contains routines
	diagonal-preconditioner and gauss-seidel-preconditioner.
	(Currently being tested by Mr. Sun; if his code is better, it
	will replace this code.)
	* all.scm: Include preconditioners.scm.
	* sort.scm (sorted?): Fix bug for vector case.
	* test-complex.scm: Changed upper bound on c to 8^{-k} in
	testfunc.  Define identity-preconditioner; use identity-preconditioner,
	diagonal-preconditioner, and gauss-seidel-preconditioner in all
	tests.  Define one complex-test.
	* conjugate-gradient.scm: Move fixnum declaration.
	* describe.scm: Add preconditioners.scm to input-files.
	
Date: 2000/04/21
By B. Lucier
	* sparse-linear-algebra.scm: Reimplement Sparse-vector as a list
	of entries; do not use a Meroon class.  Change the Vector-*
	methods for Sparse-vectors to Sparse-vector-* specific functions.
	make-Entry, Entry-index, and Entry-coefficient are now internal
	macros, so they need to be wrapped in a lambda for map, etc.

Date: 2000/04/20
By B. Lucier
	* linear-element-code-2.scm : New Operator-compose method for
	Linear-finite-element-operators.
	* sparse-linear-algebra.scm: Add initialize! method for Sparse-vectors
	that removes zero components from the vectors.  Fix bug in
	Operator-compose method for Sparse-matrix-operators.
	* test-operator.scm: New file to test operator methods.
	* describe.scm: Add test-operator.scm to input-files.

Date: 2000/04/20
By B. Lucier
	* linear-elements.scm (Finite-element-vector-check-same-class): Check
	that x is an Object, too.
	* intergrid.scm: Wrap sort! comparison in FIX.
	* geometry.scm: Add fixnum declarations to loops that extract
	boundary-vertices and boundary-edges in the initialize! method for
	Triangulation.
	* curved-geometry.scm (quadratic-transformation): Move the flonum
	declaration to cover the whole function.
	* polygon.scm (convex-angle?): Declare flonum.
	* test-complex.scm: Define fine-t as refinement of t; define fine-fes.
	Define L2-inner-product-operator and H1-inner-product-operator on
	fine-fes.  Define coarse->fine-operator that maps something from
	fes to fine-fes.  Use it in run-tests.
	

Date: 2000/04/19
By B. Lucier
	* linear-elements.scm: New Finite-element-vector-check-same-class.
	Use it in Vector-* methods for Finite-element-vectors instead of
	check-same-class.

Date: 2000/04/19
By B. Lucier
	* geometry.scm (initialize! (t Triangulation)): Change the
	calculation of digits to Mr. Gower's original form.
	* linear-elements.scm: New Vector-copy for Finite-element-vectors.

Date: 2000/04/17
By B. Lucier
	* intergrid.scm: Fix stupid bug.
	* test.scm: Make it work with new all.scm.

Date: 2000/04/17
By B. Lucier
	* utilities.scm: Add (keep p l).
	* linear-elements.scm: Add Finite-element-space-neighbors-length.
	* linear-algebra.scm: Add check that Operator-mapping is defined
	before applying it in Operator-apply.
	* sparse-linear-algebra.scm: New file.  Implements Sparse-vector.
	Defines Entry as a data type.
	* intergrid.scm: New file.  Define coarse<-fine and transpose.
	* linear-elements-code-2.scm: remove 
	Linear-finite-element-operator-information and
	Linear-finite-element-vector-information.  Force indices to be
	initialized in a Linear-finite-element-operator. Add a
	matrix-implementation field to Linear-finite-element-operator.
	Have add-stiffness-terms!, add-mass-terms!, add-transport-terms!
	take a Linear-finite-element-operator as an argument.  Have
	add-interior-integral-terms! and add-boundary-integral-terms!
	take a Linear-finite-element-vector as an argument.  Change the
	boundary functions to add their result directly to the vector data
	or operator coefficients instead of to a separate place.
	* all.scm: Include sparse-linear-algebra.scm and intergrid.scm.
	* describe.scm: Add sparse-linear-algebra.scm and intergrid.scm to
	input-files.
	* test-complex.scm: Change to remove *-information.

Date: 2000/04/16
By B. Lucier
	* linear-elements.scm: Sort (Element-neighbors e) in the initialize!
	method for Elements.

Date: 2000/04/16
By B. Lucier
	* utilities.scm: Add reverse-append!.
	* linear-algebra.scm: Add generic function Operator-compose.
	* linear-elements-code-2.scm: Change the single fes field in
	Linear-finite-element-operator to two fields, domain-fes and
	rangle-fes and work out the consequences of that change.
	* test-complex.scm: change single fes entry to domain-fes and
	range-fes.

Date: 2000/04/15
By B. Lucier
	* utilities.scm: removed map-and-sum; renamed reduce to
	reduce-from-left and added reduce-from-right; rewrote mappend
	using reduce-from-right.
	* quicksort.scm: remove
	* sort.scm: Add, implements merge-sort.
	* geometry.scm: Use merge-sort instead of quicksort in the
	initialize! method for Triangulation.  (Mr. Gower
	had used merge-sort first, but I changed it to quicksort.  Big
	mistake---merge-sort is about 3 times as fast.)  Remove definitions
	of Triangulation-vertex-ref, Triangulation-edge-ref, and
	Triangulation-triangle-ref.
	* linear-elements.scm: remove Linear-finite-element-space-vertex-ref.
	* all.scm: Include sort.scm, not quicksort.scm.
	* describe.scm: Index sort.scm, not quicksort.scm.

Date: 2000/04/15
By B. Lucier
	* test-complex.scm: Add an obligatory description field to the
	Test-data class.  Use 
	(cond (test => function-using-nonfalse-test-value))
	instead of let's and if's.

Date: 2000/04/15
By B. Lucier
	* linear-elements-code.scm: Add ! to end of routines that modify
	m-info or v-info to match Scheme naming convention.
	* test-complex.scm: Change the structure test-data to the class
	Test-data.  Include number-of-refinements as a parameter; use it
	to determine bound for c in conjugate-gradient testfunc argument.
	Use new names of functions in linear-elements-code.scm.

Date: 2000/04/13
By B. Lucier
	* all.scm: Make FLOAT and FIX meroon-macros (i.e, they are useable
	in all files loaded after all).
	* describe.scm: Distinguish between pervasive and local macro
	definitions.
	* test-complex.scm: Remove the definitions of FLOAT and FIX.

Date: 2000/04/13
By B. Lucier
	* linear-elements-code-2.scm (add-boundary-integral-terms): Since
	the normal derivative can be discontinuous at a vertex whose
	two boundary edges are not colinear, we can't use Simpson's rule
	(which uses the value at the vertex) for the approximate integration.
	Use the two-point Gauss rule instead.
	* test-complex.scm: Clean, add new test, use real L2 and H1 norms
	to measure the difference between the interpolant and the FEM result.
	* linear-algebra.scm (Vector-inner-product): Redefine to use
	naive implementation (which generates an unneeded temporary vector)
	by default.  Also, rearrange arguments so the operator is between
	the two vectors.

Date: 2000/04/13
By B. Lucier
	* linear-elements-code-2.scm (add-boundary-integral-terms): We
	don't use Linear-finite-element-vector-information-data, so
	don't access it; explicitly initialize boundary-data to 0.0's.
	test.scm: simplify a bit.
	test-complex.scm: A testing framework for the entire system.
	describe.scm: Add test-complex.scm to input files.

Date: 2000/04/12
By B. Lucier
	* linear-algebra.scm: Define generic Vector-*axpy to compute a*x+y
	for two vectors x and y.  (The name comes from the Basic Linear
	Algebra Subroutines (BLAS), which defined saxpy for Single
	precision AX Plus Y and daxpy for Double precision AX Plus Y).
	Use it ...
	conjugate-gradient.scm: ... here.
	* linear-elements.scm: Define a method for Vector-*axpy for
	Finite-element-vectors.
	* geometry-code.scm: Set (Edge-fine e) just to the new mid vertex.
	Set (Triangle-fine t) to the empty list.

Date: 2000/04/11
By B. Lucier
	* linear-algebra.scm: Fix bug in Vector-dot-product.
	* geometry.scm: Change Vertex-edges to a vector from a list. Remove
	all vestiges (spelling?) of Vertex-triangles. Change 
	Boundary-vertex-boundary-edges to a vector.  Remove coarse field from
	Vertices, Edges, and Triangles.  Remove triangles field from
	Edges.
	* geometry-code.scm: Do not set up triangles field in either vertices
	or edges.  Set Vertex-edges and Boundary-vertex-boundary-edges to
	an empty list in refine methods for vertex.  Remove code that refers
	to Vertex-triangles and Edge-triangles.
	* curved-geometry-code.scm: Remove all code that refers to 
	Vertex-triangles and Edge-triangles.
	* utilities.scm: Move partition from here to ...
	* linear-elements.scm: ... the initialize! method for Element.
	* polygon.scm: Remove all references to Vertex-triangles and
	Edge-triangles.
	
Date: 2000/04/10
By B. Lucier
	* geometry.scm: Added a required has-polygonal-boundary? field
	to Triangulations; initialize limits to #f by default rather than
	saying it may be uninitialized.
	* geometry-code.scm: Set has-polygonal-boundary? field in
	coarse-square-triangulation.  Use this field in the refine method
	for triangulations to determine whether to inherit the limits from
	the coarse triangulation or set it to #f.
	* curved-geometry-code.scm: Set has-polygonal-boundary? to #f for
	coarse-disk-triangulation.
	* polygon.scm: Set has-polygonal-boundary? to #t for 
	triangulations returned by Triangulation<-points.

Date: 2000/04/10
By B. Lucier
	* geometry.scm: Removed the (unused) definition of Point as a
	Meroon class.  Added boundary-index as a field to Boundary-edge.
	Added limits as a field to Triangulation; is meant to hold the
	minimum and maximum values of the x and y coordinates of the
	points in the vertices of the triangulation.  Added functions
	make-limits, x-min, x-max, y-min, y-max, and the associated -set!
	procedures for limits. Added Mr. Gower's space-filling curve
	numbering code for the vertices, edges, and triangles to the
	initialize! method for Triangulations.  (Mr. Gower, check what I
	did and tell me if it's OK.)  Removed Triangulation-add-indices.
	* geometry-code.scm: Have new triangulation inherit limits
	from old triangulation in refine.
	* random.scm: New file.
	* quicksort.scm: New file.
	* all.scm: include random.scm and quicksort.scm
	
Date: 2000/04/09
By: B. Lucier
	* geometry.scm: Don't initialize vertex-indices twice; do initialize
	Edge-indices.
	* test.scm: various changes.
	* linear-elements-code-2.scm: Added routines add-transport-terms for
	adding b \cdot \grad\phi_j \times \phi_i terms to matrix info.
	Added add-interior-integral-terms and add-boundary-integral-terms
	to vector info.  Also Linear-finite-element-vector-information->vector.
	I doubt that any of this stuff works, but it compiles.

Date: 2000/04/04
By: B. Lucier
	* linear-algebra.scm: Allow fields of Operator to be uninitialized.
	New generic function Vector-copy.
	* geometry.scm: Removed boundary-edges from Vertex.  Added
	Boundary-vertex as a subclass of Vertex.  Defined functions
	Boundary-vertex-for-each-boundary-edge, 
	Boundary-vertex-contains-boundary-edge?,
	Boundary-vertex-boundary-edges->list,
	Boundary-vertex-boundary-edges<-list.  Removed Vertex-common-triangles
	and Vertex-common-edge.  Defined Boundary-edge as subclass of Edge.
	Removed on-boundary? from Vertex and Edge.  Added boundary-vertices
	and boundary-edges as fields to Triangulation.  Added initialize!
	method for triangulation that initializes boundary-vertices,
	boundary-edges, the indices in vertices, and the boundary-indices
	in boundary-edges. Added functions to find the lengths of the fields
	in a Triangulation, and conversion functions between lists and
	boundary-edges and boundary-vertices.  Made Curved-edge a subclass
	of Boundary-edge rather than Edge.  (Whew!)
	* geometry-code.scm: Removed all references to on-boundary?; used
	Boundary-vertex and Boundary-edge instead.  Added refine methods
	for Boundary-vertex and Boundary-edge.  Made sure boundary-edges
	were updated in Boundary-edge, and boundary-vertices and boundary-edges
	were updated in Triangulation.  Added checks for boundary-edges
	to Triangulation-consistent?.
	* curved-geometry-code.scm: Used Boundary-vertex/Boundary-edge rather
	than setting on-boundary?. Used with-access macros more.
	* linear-elements.scm: Add initialize! method for Elements to
	ensure neighbors are in correct (partitioned) order.  Remove
	definitions of Finite-element-operator, apply-nonzero-coefficients,
	Linear-finite-element-operator, and Neumann-linear-problem-operator.
	* linear-elements-code.scm: Remove.
	* linear-elements-code-2.scm: Remove call to Triangulation-add-indices
	from Triangulation->Linear-finite-element-space (now numbered in
	initialize! method for Triangulation).  Define classes
	Linear-finite-element-operator, 
	Linear-finite-element-operator-information.  Add initialize!
	method for Linear-finite-element-operator-information that fills
	fields based on fes field.  Same for Linear-finite-element-operator.
	Define mapping field here based on old apply-nonzero-coefficients.
	Define functions which-neighbor, add-stiffness-terms, add-mass-terms,
	add-boundary-terms (all for Linear-finite-element-operator-information)
	and 
	Linear-finite-element-operator-information->operator.
	Define class Linear-finite-element-vector-information in analogy to
	Linear-finite-element-operator-information, and its initialize!
	method.
	* polygon.scm: Make Polygon-vertex a subclass of Boundary-vertex.
	Use Boundary-edge instead of on-boundary? field.
	* test.scm: tests the new matrix construction and application
	machinery.
	* describe.scm: Takes out some of the bragging.  The performance
	varies with every change to the code; now it's no longer faster
	than C.  Remove linear-elements-code.scm from input-files.
	* utilities.scm: Add partition function.

Dage: 2000/03/31
By B. Lucier
	* geometry.scm: Added Point-{add,subtract,scale,dot-product,L2-norm,
	zero} to speed things up.
	* other files: use them instead of Vector-* functions on Points.
	* linear-elements-code.scm: increase inlining in gradient calculation.

Date: 2000/03/30
By B. Lucier
	* all files: Changed LinearSpace to Vector and LinearOperator to
	Operator.  Changed LinearSpace: prefix to Vector-; similarly for
	LinearOperator:
	* linear-elements.scm: Added an extra case to 
	apply-nonzero-coefficients to deal efficiently with refined
	boundary nodes.  Now it is as fast as the equivalent C code.

Date: 2000/03/27
By B. Lucier
	* linearalgebra.scm: Turned off inlining in LinearSpace:dot-product.
	* geomtry.scm: Took the definition of the Point functions out
	of the begin so describe.scm would recognize them.
	* linear-elements.scm: Made Neighbors an abstract data type; used it
	in apply-nonzero-coefficients.
	* linear-element-code.scm: Used Neighbors as an ADT.

Date: 2000/03/24
By B. Lucier
	* linearalgebra.scm: After profiling, I unrolled the loop in the
	LinearSpace:dot-product generic function to reduce the number of
	boxed temporary flonums.
	* geometry.scm: Added two new classes, Triangle-with-curved-edge
	and Curved-edge (work of Ms. Joo).
	* curved-geometry-code.scm: New file.  Adds code to manipulate
	new classes in geometry.scm.  Defines coarse-disk-triangulation;
	defines "refine" methods for new classes in geometry.scm 
	(work of Ms. Joo).  Needs documentation.
	* curved-test.scm: New file.  Beginning of test file for
	isoperimetric elements (work of Ms. Joo).
	* tex.scm: Adds a method to ->texdraw for Curved-edge.  Something
	seems to be buggy; removed the labeling commands in
	Triangulation-edges->texdraw.

Date: 2000/03/04
By B. Lucier
	* conjugate-gradient.scm: Added optional preconditioner to
	argument list of conjugate-gradient; exposes all variables to
	testfunc to use in decision about whether to stop the iteration;
	change conjugate-gradient from generic function to function.
	* geometry-code.scm:  Add a new generic method refine; break out
	code from refine-triangulation to add methods to refine for vertices,
	edges, and triangles; change refine-triangulation to be a method
	of refine (work of Ms. Joo).
	* test.scm: use refine instead of refine-triangulation.

Date: 2000/02/27
By B. Lucier
	* linearalgebra.scm: Added new generic LinearSpace:zero.
	* linear-elements.scm: Added methods for LinearSpace:dot-product
	and LinearSpace:zero for Finite-element-vector (suggested by Mr.
	Sun).
	* conjugate-gradient.scm: New file, contains generic
	conjugate-gradient (work of Mr. Sun).
	* all.scm: revert inlining-limit to the default 300 to save space
	and compile time during development.
	* random.scm: New file, contains functions random, seed-set!, and
	seed-ref.  Based on a generator of L'Ecuyer at Montreal.

Date: 2000/02/22
By B. Lucier
	* linear-elements-code.scm: As suggested by Ms. Joo, replace
	(norm u) by (dot-product u u) in the definition of grad-phi;
	also, do not use
	Linear-finite-element-space-integrate-phi_i-phi_j-on-boundary when
	building operator with Neumann boundary conditions.
	* geometry.scm: Use check-same-class as a predicate, not as an
	assertion, in LinearSpace:{add,subtract} methods on Points.  Use
	instance-clone (a regular function) rather than clone (a generic
	function) is a (probably misguided) attempt to gain some efficiency
	in LinearSpace:{add,subtract,scale}.
	In LinearSpace:dot-product just require that both arguments be Points,
	not that they be the same specialized subclass of Point.
	* linear-elements.scm: Use instance-clone rather than clone in
	LinearSpace:{add,subtract,scale}.
	* utilities.scm: Make check-same-class a predicate, not an assertion
	(so get rid of the error call) and turn it back to a function (since
	it's now so short that it's almost always inlined).

Date: 2000/02/16
By B. Lucier
	* all.scm: Enable inlining-limit of 1000.
	* geometry-code.scm: Change set-*! to *-set!. Use with-access
	macro to reduce type checks.
	* geometry.scm: Add and enable alternate representation of Point
	as a two-dimensional f64vector.  Define make-Point, Point-x,
	Point-y, Point-x-set!, Point-y-set!, Point?.  (Note: only these
	functions and LinearSpace functions defined for f64vectors should
	be used on Points.) Add a specialized initialize! method to the
	meroon class version of Point to check that both arguments are indeed
	flonums.  Change set-*! to *-set!. Use with-access
	macro to reduce type checks.
	* linear-elements-code.scm: Use with-access macro to reduce type
	checks. Use map-and-sum in place of reduce and map.
	* linear-elements.scm: Change set-*! to *-set!.
	* linearalgebra.scm: Use nested let's instead of let*.
	* polygon.scm: Change set-*! to *-set!.
	* tex.scm: Change the generic definition of ->texdraw to handle
	Points, so that either definition of Point will work.
	* utilities.scm: Define map-and-sum. Change check-same-class to
	a macro.