Merge branch 'hotfix-3.07.3'
[felt.git] / CHANGELOG
blob4f495b3de6235b158fed7d9f1db7b4c49c91786e
1 ** Changes to FElt from 3.05 to 3.06 (released 3/24/00)
3 The following bugs/things were fixed/changed:
4    1. the details stream was getting set all the time on the regular
5       writing of structural results, producing extraneous output
6       if the details flag hadn't actually been set
7    2. the text output for static thermal analysis was going to 
8       stdout rather than the output window in velvet
9    3. as part of the rearrangement of the isoparametric elements and
10       element stresses/nodally averaged stresses, the components of the
11       stress vectors for cst, iso_2d, iso_quad, and axisymm elements
12       have changed.  All of them (plus bricks) now have 10 components:
13       sigma_x, sigma_y, sigma_z, tau_xy, tau_xz, tau_yz, sigma_1, sigma_2,
14       sigma_3, and the von Mises stress.  (sigma_r, sigma_z, sigma_theta,
15       tau_rz, 0, 0, sigma_1. sigma_2, 0, sigma_VM for axisymm elements).
16    
17 The following features were added:
18    1. all of velvet's post-processing graphics except animation and mode 
19       shapes have been ported over to OpenGL.  The big reason for this is to
20       provide 3D color plots of stress and displacement for problems
21       using brick elements, but it also makes the post-processing code
22       quite a bit cleaner and provides nice rotation control.  Try
23       loading the new examples brick_cap.flt and brick_ring.flt into
24       velvet (ignore the no nodes in the z=0 plane message), solve,
25       and plot stresses or displacements.  As mentioned above, all of
26       the plottable stresses are now nodally averaged results.  The
27       component can vary from 1 to 10.  Displacements are treated the
28       same as before.   Saves don't really work yet.  If you need a
29       dump you can always xwd the window on your own and crop it and
30       convert it as necessary.
32 ** Changes to FElt from 3.02 to 3.05 (first version released on SourceForge)
34 The following changes were made to the FElt syntax:
35    1. changed the sense of coordinates for axisymmetric elements to
36       make them easier to use with mesh generation.  x is still radial
37       but now y is vertical/axial.  Previously z was vertical.  
39 The following bugs/things were fixed/changed:
40    1. some small bugs in axisymmetric, ctg, htk, and iso_2d elements
41       that I haven't been really good about keeping tack of.  Try
42       the new version and see if your answers look better -- if they
43       look worse then let me know ...
44    2. you can now use the -details switch to get the coordinates of
45       the points where stresses are calculated in the text display of
46       results.
47    3. added radial and axial directions to the load dialog in velvet
48       and to the file writing routines.  They'd gotten left out when
49       axisymmetric elements were originally implemented.
50    4. finally resolved the colormap issue in velvet so you can 
51       use color stress and displacement plots on > 8-bit displays.
52       Take a look at src/Velvet/XCC.README to see how you too can
53       accomplish this if you're X11 colormap impaired like us.
54    5. dropped Geompk in favor of Triangle by J.R. Shewchuk.  Several
55       reasons for the change: Geompk was always a little finicky,
56       mostly because of our interface probably, but it was sometimes
57       difficult to coax a mesh out of Geompk.  The interface to
58       Triangle is very simple, it is coded in C which makes compilation
59       and configuration on other architectures simple, and it seems
60       to be pretty easy to get a decent mesh out of it.  Accordingly,
61       the main input parameters have changed to target and alpha.
62       target is the approximate number of desired elements in the mesh.
63       alpha is used to generate a maximum bound on the area of a generated
64       element: Amax of an elt = alpha*Atotal/target.  Triangle appears to
65       have a lot of other options for mesh refinement, angle constraints
66       etc., but none of these are made use of at this point.  Most of the
67       hooks for Geompk are still available if someone really wants to
68       switch back.  The call to GenerateTriMesh did not change for 
69       applications, but the applications did change to account for
70       the loss of Geompk parameters (min, max, angspc, angtol, etc.)
71       and the addition of target and alpha.
72      
73 ** Changes to FElt from 3.00 or 3.01 to 3.02 
75 The following changes were made to the FElt syntax:
76    1. hooks for a gravity vector in the analysis section.  Doesn't
77       do anything yet, but the syntax is there ...
78    2. "static-substitution" and "static-incremental" are now valid 
79       analysis types
80    3. a "load cases" section and accompanying syntax for named
81       load cases
82    4. syntax for new analysis parameters, "tolerance", "iterations",
83       "relaxation", "load-steps".
84    5. input-node= and input-dof= parameters in the analysis 
85       parameters to allow for parametric studies in which you
86       get a table (or plot) of output that explores displacements
87       as a function of force level at a single input point
88    6. axial and radial are now valid directions for distributed loads
90 The following bugs/things were fixed/changed:
91    1. the transform matrix for beam3d elements was incorrect if elements
92       had nodes which were out of the x-y plane.
93    2. several problems with the new Makefile scheme were corrected.
94    3. velvet was probably getting the aspect ratios wrong in drawing 
95       3d structures due to an error in the min/max checking.
96    4. the spectrum components of force structures were not being
97       initialized to either zero or NULL
98    5. save's in velvet were actually doing dumps (save all's), minor, 
99       but potentially annoying.
100    6. there was still a problem with the lumped mass matrices for 
101       htk elements.
102    7. the new PrintGlobalMatrices routine took a file pointer but
103       didn't actually use it; things were just going to stdout.
104    8. internal error in burlap's interface wit the matrix lib
105       was causing some problems with inversion and overwriting.
106    9. there were problems with iso_2d elements (or any element with
107       optional nodes) as the renumbering routines were just blindly
108       looping through element -> definition -> numnodes rather than
109       checking to make sure that all of the nodes were in fact valid.
110   10. on a similar note, the checks in velvet for out-of-plane nodes
111       were going over element -> definition -> numnodes rather than
112       element -> definition -> shapenodes (which all have to be valid
113       in the first place).
114   11. there was some sort of problem with the pre-processor and
115       corduroy (don't ask me how these things happen).  I think it's
116       fixed now, but then again, I don't really know what was wrong.
117   12. renamed AssembleStiffness and AssembleDynamic to ConstructStiffness
118       and ConstructDynamic to reflect that they both create and assemble
119       the matrices (this then parallels ConstructForceVector).  Renamed
120       ConstructTransientForce to AssembleTransientForce to reflect 
121       the fact it only fills the thing rather than creating it then
122       filling it.
123   13. the cpp command line wasn't being built properly so you couldn't
124       actually use -I, -D and -U on the felt (and corduroy) command line
125   14. memory initialization problem in Drawing.c
126   15. 2d and 3d Athena widget specific defaults were moved into
127       velvet.c and are now applied automatically at runtime as
128       appropriate.
129   16. the filename printing and scrolling in velvet's file dialog
130       was improved.
131   17. changed the analysis.nodes array into an array of actual node
132       pointers rather than node numbers.  In some ways this adds
133       a layer of complexity because whenever we input analysis nodes
134       we have to resolve their numbers by doing tree lookups in the
135       node tree; on the other hand, it is much more consistent with
136       the way we try to do things everywhere else and allows for the 
137       elimination of a clumsy mapping scheme in the FE routines themselves.  
138       With the elimination of the need for building that scheme in each FE
139       routine we can also stop passing around "old_numbers" for the
140       most part. There is probably a very slight performance hit
141       because now just about every analysis type should restore original
142       node numbers in renumbered problems before they output any
143       results (otherwise their references to analysis.nodes [i] -> number
144       will refer to a node's renumbered number ...).  I got rid
145       of MakeNodeNumberingMap() in renumber.c.
146   18. added a NodeDOF data structure for use in the re-done FindForcedDOF
147       and the accompanying spectral analysis routines ... this parallels
148       what I did to the analysis nodes - removed references to node or
149       DOF number and replaced them with pointers.
150   19. I implemented the concept of "sub-analysis types" so that I
151       could do load cases, parametric input ranges, etc.  What this
152       means is that the user can still only say analysis=static, but
153       depending on if any load cases are defined or if input-node and
154       input-dof are given, the actual analysis type used will be
155       StaticLoadCases or StaticLoadRange.  This means that driver
156       routines should call mode = SetAnalysisMode ( ) and then switch
157       on the local variable mode rather than problem.mode.  It's
158       really a sort of behind the scenes output control ...
159   20. cleaned up the printing of some of the analysis parameters on
160       FElt file writing
161   21. the new material properties for thermal analysis were not 
162       being initialized
163   22. fixed up some problems with incorrect numbers of arguments in 
164       a couple of places in velvet
165   23. the Cholesky factorization was actually returing a matrix 
166       Q such that Q^T * Q = M, rather than Q*Q^T = M which is what
167       the modal analysis routines were actually set-up to handle.
168       This was producing incorrect results for problems with
169       consistent mass matrices.  Thanks to Alvino Cossimo for pointing
170       this out and for providing the appropriate fix.
171   24. The geompack routines are flaking out for some reason that
172       I still haven't really pinned down.  I think I have it at a
173       point where they will work for problems with no holes all
174       the time and for all problems when I turn off the optimization 
175       in gcc.  Given that kind of behavior I wouldn't be surprised
176       to hear about other machine specific strangeness ... if you 
177       discover any let me know.  For now I'll just turn off the 
178       optimization on any machines that it is causing a problem on.
180 The following features were added:
181    1. the ability to plot force-time histories from the force
182       dialog in velvet.  This means that for any given force
183       you can see what your forces (moments) look like over 
184       the course of your simulation.  It's really just intended
185       to give you a visual check that you have defined it
186       the way you actually wanted it.
187    2. added a magnification parameter to WriteGraphicsFile( )
188       which allows the routine to apply magnified displacements
189       to the nodal coordinates if you want it to spit out
190       a displaced shape plot.  Use 0.0 for backward compatibility.
191    3. an axisymmetric element
192    4. large deformation, incremental, nonlinear static analysis - sort of
193    5. load cases - it feels kind of awkward right now but I couldn't
194       think of any cleaner ways to do it.  Right now, you can define
195       a series of named load cases.  For each load case you get
196       displacement info at each of the analysis nodes and DOF.
197       The load case definition itself consists of a series of
198       (node number, force name) and (element number, distributed name)
199       assignments (the element loads are ignored right now).
200    6. logarithmic, sinusoidal, cosinusoidal, parabolic, reverse-logarithmic
201       and reverse-parabolic spacing for mesh
202       generation in corduroy.  The syntax for logarithmic had
203       always been there but had never actually been implemented.
204       The grid generation functionality was moved into a new
205       dialog to be consistent with triangle generation and
206       to allow for the selection of a given spacing.
208       Here's how they work: along a line of length L along which we are 
209       placing the sides of ne elements (ne+1 nodes), the i_th node is 
210       placed at a distance x_i, according to the following rules
212       linear:              L * (i - 1)/ne
213       cosinusoidal:        L - L*cos(pi/2 * (i - 1)/ne) 
214       sinusoidal:          L*sin(pi/2 * (i - 1)/ne) 
215       logarithmic:         L*log10(1 + 9*(i - 1)/ne)
216       parabolic:           L*((i-1)/ne)^2
217       reverse-logarithmic: L - L*log10(10 - 9*(i - 1)/ne)
218       reverse-parabolic:   L*sqrt((i - 1)/ne)
220       I'm not sure how useful some of them are, but they generate
221       some cool looking meshes.
222      
223    7. the ability to write out global matrices in matlab
224       format from felt
225    8. load ranges - because load cases were awkward :).  It came
226       down to the fact that I could not see one all-encompassing,
227       yet elegant, way to do everything I wanted to do with
228       load cases.  To use load ranges all you need to do is define
229       a single input DOF (with input-node= and input-dof=) 
230       and then a force range (with start=, stop=, step=) and you
231       will get displacement info at your analysis DOF (nodes=[], dofs=[])
232       at each given load level.
233    9. detailed solution information in many places.  A driver application
234       can now turn on detail printing with a single call.  Analysis
235       routines simply make calls to the new function detail() and
236       if the printing flag has been toggled all sorts of ancillary 
237       solution information can be spit out (renumbering info, iteration
238       counts, matrix sizes, etc., etc.).  Of course not all routines
239       have anything important to say.
240   10. FElt -> OOGL translation in patchwork - thanks due to Stefan Majer.
242 The following things were changed for no apparent reason:
243    1. the velvet color scheme.  I think the new subdued colors
244       give us a more serious look.  The old scheme was really
245       starting to get on our nerves.  I think we're also planning
246       on linking statically against the Xaw3d widgets for as many
247       platforms as possible.  Again, a more serious look.
248    2. moved the etc/Tests directory to examples/
251 ** Changes to FElt from 2.30 to 3.00 (released 8/6/95) -
253 The following changes were made to the FElt syntax:
254    1. constraints can now have ITx= ITy= ... IRz= statements to define
255       a set of initial displacements.  This means that we should now be
256       able to completely and independently define both the initial and
257       boundary conditions for a problem.  Tx= ... Rz= are the boundary
258       conditions and ITx= ... IRx=, Vx= ... Vz=, Ax= ... Az= are the
259       initial conditions.  I really should have done it this way from the 
260       start and technically this fixes a bug that could well have cropped
261       up in transient analysis problems with fixed (non-zero)
262       displacement BCs.  Also note that the Tx=...Rz= statements can now be
263       functions of time (i.e., expressions with t in them) just like forces
264       can be.  This allows for time varying boundary conditions.  
266       Is this backwards compatible?  Yes and no.  It allows for clarification 
267       of an ambiguity between boundary and initial conditions (see #3 in
268       bug fixes).  If you currently have problems with non-zero initial
269       conditions then you WILL need to change those files and move the
270       initial condition specification to ITx= ... IRz=.  If you had a
271       problem where the Tx= ... Rz= were supposed to be boundary (as
272       opposed to initial) conditions then chances are that you were not
273       getting the right answer before, but you can leave the file as is
274       and should get the right answer now.  I realize that this may
275       cause some confusion (it did for me as I was trying to work it out)
276       so just drop us a note and we'll try to clarify if you still have
277       questions.
278    2. nodes can now have a lumped mass assigned to them with mass=.  This will
279       simply add this amount of mass directly to the translational DOFs
280       for this node in the global mass matrix.  Completely backwards
281       compatible.
282    3. new analysis types are supported in the analysis= statement in the
283       problem description section.  They are: spectral, static-thermal,
284       and transient-thermal.
285    4. changed the trig functions to take arguments in radians instead of
286       degrees.  Yes, we thought that making them take degrees was a nice
287       little feature when we only thought about them as an aid to defining
288       the geometry of problems with funny angles ... but now it occurs to
289       me that more people are probably using them for harmonic forcing
290       in transient problems and for that, radians is the way to go. 
291       Besides, everybody else does it that way so we probably should 
292       have too right from the start.  This is _not_ backwards compatible
293       obviously and I apologize if it causes anyone major headaches.
294    5. added Kx, Ky, Kz (thermal conductivities) and c (heat capacitance)
295       to the list of available material properties.
296    6. added start=, stop=, step= to the analysis parameters.  stop and step
297       are essentially aliases for duration and dt in a transient analysis
298       problem; the new forms are preferred because they are more 
299       general.  Things were generalized to make room for spectral
300       analysis.
301    7. added an Rk= and Rm= to the analysis parameters.  This allows for
302       a global level of Rayleigh damping as opposed to an element by
303       element (dependent on material property) definition.  If either 
304       of these "global" parameters is given, then the global damping matrix
305       will be based on them and any element by element results will be 
306       thrown out.
308 The following bugs/things were fixed/changed:
309    1. added a tabbing mechanism and keyboard translations to the line graph
310       drawing shell (time displacement plots).  Honest, I think that's 
311       the last pop-up shell that didn't have them :-))
312    2. put AllocationError() back into misc.c ... don't ask me how it got
313       removed in the first place.
314    3. fixed the fact that fixed displacements were not being handled in
315       transient analysis problems.  In previous versions I was treating
316       the constraint specification (Tx= ... Rz=) as the both initial
317       and boundary condition.  This could cause some real ambiguity issues
318       if you wanted to specify both obviously.  With the current fix,
319       Tx= ... Rz= are now interpreted as time varying boundary conditions 
320       (i.e., they can have t in them) and the initial displacements are 
321       explicitly specified using ITx= ...  IRz =.  See the note on syntax 
322       changes to know if you need to update any of your input files.  
323       If you had problems with non-zero IC then you probably do need to make 
324       some changes (the IC specification should be moved off of of Tx=
325       and onto ITx=).  Sorry for any confusion that this may cause, but
326       really, I think it should be much clearer now.  Note that because
327       I am now treating displacement BC properly, I had to modify the
328       hyperbolic time integration implementation so that d(i+1) is solved
329       for implicitly (as opposed to a(i+1)).
330    4. renamed several functions and moved things around so that all of the
331       ASCII output routines are now in lib/Felt/results.c instead of being
332       spread over fe.c, modal.c and dynamic.c.  Renamed dynamic.c to 
333       transient.c.  The functions which changed names are:
335       WriteOutput               ->      WriteStructuralResults
336       ResolveConstraints        ->      ZeroConstrainedDOF
337       ResolveModalConstraints   ->      RemoveConstrainedDOF
338       NewmarkIterate            ->      IntegrateHyperbolicDE
339       BuildInitialConditions    ->      BuildHyperbolicIC
340       ResolveInitialConstraints ->      ResolveBC
341       EltStresses               ->      ElementStresses
342       EltSetup                  ->      ElementSetup
344       Note that ZeroConstrainedDOF can now take NULL for the two
345       force vectors if you only want to zero out the rows and columns
346       in the stiffness (or any other) matrix.  Also ResolveBC does not do any 
347       zeroing out of the stiffness matrix.  All it does is make appropriate 
348       adjustments to the force vector for displacement boundary conditions.
349       I also got rid of CheckModalAnalysisParameters and changed
350       CheckAnalysisParameters to take an AnalysisType argument and
351       check the parameters based on the given analysis type.
352       The upshot of all this is improved clarity I think (plus it forced me
353       to clean-up/organize the prototypes in fe.h).
354    4. in yet another case of fiddling with graph.c I cleaned it up some
355       to make it more robust in terms of plotting both transient structural
356       and transient thermal results (i.e., made labels a parameter instead
357       of hard-coding them, etc.).
358    5. for Burlap's sake we got rid of ElementArray and changed the way   
359       that applications know about the list of available elements.  The
360       element definition structure changed such that the element name,
361       and pointers to the setup and stress functions are included right
362       in the definition structure.  See the updated chapter on adding 
363       new elements for details on how this affects any elements that you
364       have written.  For clarity, src/Velvet/definitions.h was renamed
365       src/Velvet/interface.h so as to not conflict with the new 
366       inc/definition.h file.  inc/element.h is gone completely.  When
367       you add new elements just add the file name to the list of objects
368       in lib/Elements/Makefile and update the initialization procedure in
369       lib/Felt/initialize.c.  There is no separate element configure
370       script that needs to be run and no elements.db file.
371    6. corduroy's debugging option wasn't handling the fairly recent addition
372       of quadrilateral grid generation.  It also wasn't printing out
373       the element type names for each different generation section.
374    7. added a dosdist target to the Makefile to create a zip file of
375       the source needed for the command line applications.  I also
376       patched up several different bits of source to check if the
377       pre-processor symbol DOS is defined to make building DOS binaries
378       less painful and easier for someone else to try.  
379    8. in a final(?) fit of messing with graph.c, I made things lots more
380       robust to make room for plotting power spectra (i.e., the x axis can
381       now be something arbitrary not just nicely spaced time points, all
382       the routines now take the graph structure/shell/drawing widget as a
383       parameter so we can have both power spectra and time domain answers
384       on screen at the same time).
385    9. another round of major cleaning - this time in the form of abandoning
386       the paradigm of passing around node, numnodes, dofs, count, etc.
387       everywhere.  There are now two dofs arrays in the problem structure:
388       problem.dofs_pos is the same as the old dofs array, problem.num_dofs
389       is the same as the variable count that used to get passed around,
390       the new array is problem.dofs_num and it gives the local DOF
391       number (1 through 6) of an active DOF in the problem, i.e., for
392       a mixed beam truss problem the two arrays will be
394       problem.dofs_num = [1, 2, 3, 6, 0, 0]
395       problem.dofs_pos = [1, 2, 3, 0, 0, 4] 
396       
397       The new one also allowed me to rewrite the way that various routines
398       search through the active DOFs on a given object for a given node
399       to fill in global arrays. There are also two new routines 
400       GlobalDOF and LocalDOF which map between node number, local DOF and
401       a global DOF number.  Routines that need to access the node and element
402       arrays can simply get to them through the problem structure.
403   10. InvertMatrix was broken (sort of).  It's fixed now but the calling
404       sequence of some things may have to change because it can't trash
405       it's input anymore.
406   11. added ZeroConstrainedMatrixDOF and RemoveConstrainedMatrixDOF for
407       burlap's sake.  Both are much like their more specialized counterparts
408       but are meant to be more generalized.  They only work on one matrix
409       at a time and the input can either be a full, compact or column
410       matrix.  They'll just do the right thing depending on the input.
411   12. modal results now print the frequency in Hz in addition to the radial
412       frequency.
413   13. for consistency's sake you can now draw a polyline tool object
414       with keyboard input (i.e., by inputting a series of coordinates).
415       Also, esc/quit button and ctrl-c/abort button should now work during  
416       polygon draw operations either during keyboard or mouse controlled
417       draws.
418   14. in order to keep things clear and to be consistent
419       with the change to the syntax, the analysis structure members
420       duration and dt were renamed to stop and step.
421   15. renamed WriteModalResults to WriteEigenResults.  WriteModalResults
422       is now a function to print out modal mass, stiffness and damping
423       matrices (and modal damping ratios).  
424   16. eliminated the -printk and -printm options from felt (and the
425       output control in velvet) in favor of -matrices which simply
426       prints out whatever matrices are appropriate to the problem.
427       Also, I wrote PrintGlobalMatrices to keep the solution drivers
428       from getting cluttered up - it will check for matrices of all
429       zeros as well; each analysis type in a switch now just needs to
430       check for the matrices flag and call this new function as
431       appropriate.
432   17. lots of minor cleaning to get gcc -Wall to shutup and some
433       rearranging of various bits and pieces - nothing really at the
434       user level though.  The Makefile scheme also got reworked.
435       Oh yeah, we completely removed xfelt from the distribution.
436       If you really, really want it and you don't already have it 
437       from one of the previous distributions (it hasn't change since
438       about v1.3 I think) then drop us a note and we'll get it to
439       you somehow.
440   18. looks like the velvet distributed load dialog was doing some
441       funny things with a few malloc's so things may have been getting
442       garbled.
444 The following features were added:
445    1. burlap - yes, it's finally here.  Our very own attempt at a
446       powerful, flexible, easy-to-use interactive environment for doing
447       FEA, burlap lets you script new analyses and new elements; it lets
448       you use the results from current analyses in ways that we didn't
449       think to provide in one of the other applications; it's sort of a
450       FE-aware Matlab-like application.  There are two brand new chapters in 
451       the manual that describe it - yes, it's that big and that powerful.
452    2. thermal (heat transfer) analysis, both steady state and linear time
453       dependent forms.  Two new elements are available for these analyses:
454       a constant temperature gradient triangle (analogous to a CST), and a
455       one-dimensional rod (sort of like a truss, only simpler in that rod 
456       elements can only really exist along a single line because there is no 
457       transformation matrix applied).
458    3. added user contributed elements to the standard distribution. This
459       currently adds a triangular plate bending element (PLTGZ4) to the 
460       element library if you answer yes to the new question in the configure 
461       process (the one about building user contributed elements).  
462    4. corduroy can now generate a grid of brick elements.  This isn't really 
463       anything special but it does allow for a simplistic meshing of a 
464       rectangular solid of some kind.  Chapter 8 of the manual has been 
465       updated to reflect the changes.  Note that because velvet does not have
466       a mechanism for specifying coordinates in 3d, velvet cannot generate
467       these kinds of grids.
468    5. spectral analysis.  Just take what used to be an analysis=transient
469       statement and make it an analysis=spectral statement and watch the
470       fun (of course you really should change the duration and dt into 
471       start, stop and step frequencies and change forces to their frequency
472       domain analogs if you want output power spectra as opposed to just
473       transfer functions).  The output will be the frequency domain analog of 
474       the results that you normally see for transient analysis problems.  As 
475       usual regular old ASCII results are the default but both felt and velvet
476       can plot the power spectra or transfer functions if you want graphical 
477       results.  If you give felt the -transfer option then it will only
478       calculate transfer functions; if not then it will want frequency
479       domain forces to be applied and it will calculate output spectra instead.
480       The transfer only option is also a new toggle in the output/results
481       dialog under the solutions control menu in velvet.
482    6. now clicking on the third mouse button (right button) on a node
483       or element raises both the node (or element) dialog plus the
484       appropriate object dialogs with the objects assigned to that
485       node (or element) already highlighted, i.e., this is an easy
486       way to change the actual definition of a force that is assigned
487       to a node (keep in mind however that objects can be assigned to 
488       more than one node or element so any changes you make could affect
489       other nodes and elements).
490    7. added modal analysis to modal analysis ... what this really means is
491       that I went ahead and added some capabilities beyond just finding
492       the eigenvalues and eigenvectors.  You can now calculate the 
493       modal mass, stiffness, and damping matrices.  You can also just stop
494       at the eigenvalues and eigenvectors if you want to using the
495       -eigen switch in felt.  felt also has a new switch (-ortho) to control
496       the use of orthonormal mode shapes.  Both switches are also available
497       in the revamped output/results dialog available from the solutions
498       menu in velvet.
499    8. added a -preview option to felt.  It tries to draw an ASCII rendering
500       of the structure described by the input file.  It's far from 
501       perfect but for a lot of structures it may be enough for a quick
502       check of the validity of the problem geometry.
503    9. a very simple, one-dimensional spring element was added.  It's 
504       basically the truss without a transformation from local to global
505       coordinates; they should only ever be defined along the global
506       x axis.
507   10. added "ctrl-t ?" keyboard shortcuts for the drawing tools (ctrl-t c
508       for a circle for instance; ?=l for line, ?=t for text, ?=p for polygon,
509       ?=r for rectangle, ?=a for arc).
510       
511 ** Changes to FElt from 2.23 to 2.30 (released January 18, 1995) -
513 The following bugs/things were fixed/changed:
514    1. planar elements were drawn all wrong during animation
515    2. changes to a parameter for a material property after already having 
516       solved the problem once were not properly reflected in subsequent solves.
517       The bug was in something the element library was doing but only really
518       showed up in velvet.
519    3. The original shape for 3d wireframe plots was still being drawn in
520       yellow rather than with a dashed line like it should have been based
521       on the changes from 2.0 to 2.1.
522    4. The initial implementation of the lumped mass matrix for beams did
523       not calculate an inertia for rotational DOF.  In playing around
524       with modal analysis I noticed that we should probably put something
525       in there for consistency with the kinds of answers that most people
526       expect to get.  Changed for beam3d and timoshenko elements as well.
527    5. stiffness matrices and material statistics were only printed in
528       static analysis problems.  Mass matrices can now be printed for
529       both transient and modal analysis problems as well.  Note that the
530       stiffness and mass matrices for modal analysis problems are completely
531       condensed (i.e., constrained DOFs are completely removed from the 
532       problem, not simply zero'd out).  This is one way to look at the 
533       same kind of stiffness and mass matrices for a problem that you are
534       also doing by hand (in assembling by hand of course, few if any of of us
535       actually bother to assemble the constrained DOFs in the first place).
536    6. the contour field drawing routines wasn't cleaning up properly if an
537       error occurred in the middle of the interpolation process.
538    7. moved the velvet routines in misc.c into text_entry.c and group.c 
539       to better reflect exactly what they did.  misc.h is now text_entry.h
540       because it only had prototypes for the text stuff.
541    8. I changed the matrix printing routines to make the output look more
542       like some other programs that pretty print matrices ... I think it's
543       more readable this way.
544    9. fixed scaling problems in structure/animate plots when the structure
545       only existed in one dimension (i.e., a line).  Also fixed the  
546       problem of the animation widget resizing itself too small on 
547       tall, slender structures (in essence it was not trult consistent with
548       the new plotting method of resizing/clicking/drawing ...).
549   10. added a tabbing mechanism and keyboard translations to the animation
550       pop-up shell.
551   11. I actually wrote a new README for this release.  I've also moved all the
552       old README (alpha, 1.3, 2.0) into a single file: README.old
553   12. slight fix-up to the configure script so it looks for /usr/X11R5 and
554       /usr/X11R6 for X includes and libraries.
556 The following features were added:
557    1. a three-dimensional solid, 8-noded brick element was added to the
558       element library.  See chapter 3 of the updated manual for details on
559       how to use it.  There is a very simple example in etc/Tests/brick.flt.
560       For the most part, brick elements will be hard to use in velvet 
561       because of velvet's problems with drawing and defining a problem in
562       3d.  However, the wireframe structure plots (under post processing ...)
563       have been modified and should be able to handle basic rendering 
564       of problems with bricks in them (no hidden line removal though ...).
565       Animation and mode shape plots still don't work for these.
566    2. a basic form of modal analysis has been added.  Change the analysis=
567       to modal in the problem description section and FElt will calculate
568       the eigenvalues and eigenvectors for the problem.  See modal.flt
569       in etc/Tests and the new section at the end of chapter 2 in the manual.
570       Some velvet specific notes have been added in Chapter 7 (there were
571       changes to the problem/analysis and output control dialogs).  I also
572       added a section in chapter 9 to describe the numerical procedure FElt
573       uses to actually solve the generalized eigenvalue problem.
574    3. a version flag to felt.  I also added inc/version.h to help keep this
575       updated here and anywhere else it might be needed.
576    4. examples that illustrate multiple distributed loads on an element
577       (etc/Tests/dist_mult.flt) and a simple simply supported beam
578       (etc/Tests/beam_ss.flt).  
579    5. replaced GIF support with PPM support for saving images of contour
580       plots.  Though PPM is perhaps not as widespread, it is fairly well
581       supported between pbmplus and xv.  If nothing else, pbmplus gives you 
582       the power to translate to just about any other format you could think of.  
583       Note that PPM images can get pretty big, pretty quickly; you'll
584       probably want to convert to a compressing format or simply compress
585       the actual PPM file with something like gzip.  The reason for the change
586       should be obvious with all the current hoopla about CompuServe and
587       their attempted restrictions on the use of GIF - we simply figured
588       why bother with it.  We figured that EPS (see next note) and PPM
589       would be good enough for now and we'll think about changing it again
590       once some sort of simple 8-bit standard image file format begins to
591       emerge.  
592    6. encapsulated postscript support for saving contour plots.  I also
593       hacked up the file dialog yet again to make it more robust in terms
594       of having arbitrary labels on the toggles (i.e., XWD/PostScript vs.
595       PPM/EPS). 
597 ** Changes to FElt from 2.22 to 2.23 (released September 7, 1994) -
599 The following bugs were fixed:
600    1. the problem title was not being set properly in the problem/analysis
601       dialog box.
602    2. a transient analysis problem with no nodes or DOFs defined didn't
603       save right from velvet (and therefore did not load back in either).
604    3. changed the animation and drawing popup shells to topLevel class from
605       transient because some window managers actually do some things right
606       and don't allow you to resize transients ...
607    4. invalid node numbers in a distributed load on a CST could produce core 
608       dumps because the error checks were being done in the wrong order.
609    5. the heuristic for deciding how to orient the wedge on a stress or a 
610       displacement plot was not self-consistent throughout the plotting
611       routines and in some cases this caused the scale to draw on top of
612       the actual plot.
613    6. corduroy did not put the problem description section on top of the
614       output so the resulting file could not be used directly in velvet.
615       There may have been some reason for this initially, but I can't think
616       of what it was now and it struck me as kind of annoying when I came
617       across it.
618    7. the mass matrices for HTK plate bending elements were wrong (I think).
620 The following features were added:
621    1. corduroy and velvet can now generate a grid of quadrilateral elements.
622       This isn't really anything special but it does allow for a simplistic
623       meshing of a rectangular plate of some kind.  Chapter 8 of the manual
624       has been updated to reflect the changes.
626 ** Changes to FElt from 2.21 to 2.22 -
628 The move to 2.22 involved purely structural changes and minor fix-ups to
629 allow for cleaner compiles on different platforms using a couple of 
630 different compilers.  The most visible change is the renaming of bin
631 to src for consistency with current trends in other software packages.
633 ** Changes to FElt from 2.20 to 2.21 -
635 The following change was made to the FElt syntax:
636    1. materials, constraints, loads and forces can all now have a color=
637       parameter to control the new multi-color rendering in velvet.  In
638       general the parameter would only get set by velvet during a save so
639       that colors would be maintained when the file is read back into 
640       velvet.  Other FElt applications will effectively ignore the color=
641       entirely.  The change is completely backward compatible of course.
643 The following bugs were fixed:
644    1. The wrong menu was left sensitive during edit operations.  You should
645       have access to the canvas menu not the post-processing menu during
646       an edit.  Also made the four object pop-up menu controls sensitive
647       during edits to make it easier to change the active constraint, etc.
648       in the middle of an add operation and cleaned up the stuff that
649       should always be sensitive in the Canvas menu.  
650    2. Reading in a material database didn't automatically update the material
651       list in the element dialogs.
652    3. Changing canvas parameters in the middle of adding nodes / elements 
653       was not immediately reflected in the additions after the change was
654       made. 
655    4. Moving the first node of a line element caused that element to be
656       drawn improperly (such that it looked like it wasn't drawn at all).
657    5. renamed the actual executable filename of patchwork to patchwork
658       (instead of pw).  This means that if you ever actually installed
659       FElt-2.20 you should be sure to clobber the pw executable because the
660       new one will not overwrite the old one.  Sorry about that.
661    6. mass of truss elements not entirely in the z-plane was not properly
662       calculated.
663    7. saving a problem with no nodes or elements caused a core dump.
664    8. saving more than one GIF plot during a single session tended to be
665       unreliable ... If anyone ran into a problem where the _first_ GIF saved
666       was somehow corrupted then we'd like to hear about it because that may
667       be a separate bug.
669 The following features were added:
670    1. A unique color can be assigned to each material, load, constraint, force.
671       This means that in velvet, elements (nodes) with different material 
672       properties (constraints) can be rendered in different colors.  If
673       an element (node) has a load (force) assigned to it then the load
674       (force) coloring will override the material (constraint) color.
675       The coloring for all objects is controlled from a single dialog 
676       accessible via the canvas menu.  
677    2. The way that post-processing windows get sized was changed to allow for
678       more user control.  Now when you plot something the first thing that 
679       happens is the window comes up blank.  You can resize this window 
680       as appropriate.  The plotting won't start until you click in the 
681       drawing area (the big blank white space); once it does start it will
682       use whatever size you had the drawing area when you clicked.
683    3. Unified the code for the post-processing drawing shells and added
684       tabbing mechanisms and keyboard translations to them.  The layout
685       widget is also now responsible for their geometry management. 
686    4. A unit conversion and problem scaling application called 
687       yardstick.  See the new subsection on units in chapter 2 and the
688       new manual page for details.
690 ** Changes to FElt from 2.16 to 2.20 -
692 No changes to the FElt syntax.
694 The following bugs were fixed:
695    1. the install target didn't install anything from bin/Corduroy ... oops
696    2. a couple of tweaks were made to allow for easier compiles on certain
697       machines.  see new special instructions at the end of the INSTALL file.
698       Some of these tweaks/instructions should allow for compilation of
699       FElt on systems with X11R4.
700    3. resolved the problem of circular dependencies between libelt and libfelt.
701       All of the basic matrix routines are now in lib/Matrix ... we did
702       a new library for a new application that's in the works so we might
703       as well use it for everything else.  A couple of utility routines
704       also got moved ... ElementArea ( ) is now in lib/Elements/misc.c, 
705       ZeroRowCol ( ) is now in lib/Elements/misc.c.  The new matrix library
706       has more transparent sort for compact column matrices so some of 
707       the details of routines in fe.c and dynamic.c changed.  We probably
708       introduced a few bugs by changing a major component of the mathematical
709       routines, but oh well, it's all in the name of progress, we promise.
710    4. the configuration process was changed - building xfelt is now an option
711       and the default is no.  With velvet available and xfelt not having
712       changed in several releases, we see little point in building it over
713       and over again.
715 The following features were added:
716    1. a new application, patchwork, was added to the system.  patchwork 
717       allows you to convert files from other packages to the FElt syntax (and
718       vice versa).  Right now it can read FElt, AutoCAD-like DXF files, and
719       gnuplot data files and it can write FElt, DXF, gnuplot data, and files 
720       formatted for the software in Logan's book.  There's a new section at 
721       the end of chapter two of the manual with some more details.
722    2. The bulky solution/output dialog box was broken up into three new
723       dialogs: one to toggle solution output and one each for contour plotting
724       and structure plotting.  The latter two allow more control than was 
725       previously available for the post-processing options.  The new output
726       toggling mechanisms also now mirrors all of the command line options
727       available in felt (i.e., printk and debug are now implemented).
728       The postprocessing options and controls were moved from the solutions 
729       menu to a new menu called, appropriately enough, postprocessing.
730       The problem title and analysis mode were moved to the analysis 
731       parameters dialog box - this one dialog now is exactly analogous to
732       the problem description and analysis parameters section of the
733       FElt syntax.  The renumber toggle button (for temporary renumbering
734       during solutions only) was moved to a menu based switch on the nodes
735       menu.
737 ** Changes to FElt from 2.15 to 2.16 -
739 No changes to the FElt syntax.
741 The following bugs were fixed:
742    1. hitting quit with no boundary markers during element generation in
743       velvet caused some really stupid errors - even core dumps.  
744    2. plotting stress contours for a problem with all zero stresses 
745       caused floating exceptions (surprise, surprise).
746    3. plotting structure plots by doing a plot structure on solution from
747       the output dialog box either didn't work right or core dumped
748    4. plotting anything for iso2d elements was generally pretty screwed up
749    
750 The following features were added:
751    1. the ability to move tool figures around the drawing area in velvet -
752       simply select move from the tools menu, click on the figure to relocate,
753       move it around, and click again to drop it in the new position.
754    2. feature or bug-fix?  iso_quad elements actually define a mass matrix
755       now during transient analysis (always lumped)
756    3. a bindist target was added to the main Makefile to simplify making
757       binary distributions
759 ** Changes to FElt from 2.1 to 2.15 -
761 No changes to the FElt syntax.
763 The following bugs were fixed:
764    1. Trying to plot stresses for an invalid stress component probably 
765       produced unpredictable results as we weren't checking for this.  Now
766       velvet should (rightly) report an error when you give a stress 
767       component that is out of range.
768    2. There is better colormap handling - if it can't get 128 colors it will
769       use (and most importantly make maximum use of) what it can get.  It
770       also warns when it only get 64 colors or less (half of what it
771       wanted to get).  The results could get kind of screwy previously.
772    3. The first time you type make it should check to see if you have done
773       a make config or not - if not it will force you to do one.  We also
774       removed the etc/config.in file so the make config should now do a 
775       better job of guessing what local defaults should be.
777 The following features were added:
778    1. A new plate bending element was added, with symbolic type name
779       "htk".  It has four nodes (where the fourth can be the third repeated
780       for degeneration to a triangle), and 3 DOFs (Tz, Rx, Ry).  The 
781       internal forces calculated are M11, M12, M21, Q1, and Q2. Distributed
782       loads on these still aren't operational. There is an example in 
783       etc/Tests/htk.flt.
784    2. The ability to do color shaded contour plots of nodal displacement
785       components for planar elements.  (Just like stress plots).  This is
786       one good way to visualize the Tz DOF of a problem with the new htk 
787       elements.  The solution control dialog was modified to handle the
788       controls of these plots.
789    3. Dumping any of the color contour plots now produces a GIF file instead
790       of an XWD.  The theory here is that GIFs are easier for most people
791       to work with - plus you don't have to worry about whether or not the
792       window is obscured when you click on OK in the file dialog.
794 ** Changes to FElt from 2.0 to 2.1 -
796 The following changes were made to the FElt syntax:
797    All changes are completely backward compatible in this release - all
798    original v2.0 (or v1.3 even) problems will not need any modifications.
800    1. addition of canvas configuration and display list sections to 
801       standard FElt syntax to replace the .vlv files.  Now all of the
802       customization for problem appearance and tool figures is stored
803       directly in a plain-text format right within the standard FElt
804       file.  If these sections are present and felt is used on the problem
805       they are simply ignored.  If velvet is used to read the file then
806       this info will be used to restore the canvas to its previous
807       appearance and to reconstruct all of the tool figures.
809 The following bugs were fixed:
810    
811    1. cpp_args was not initialized in problem.c (ParseCppOptions) which
812       broke the file handling on a DEC Alpha (thanks to Sanjay Gavindjee)
813    2. some very early editions of v2.0 that may have gone out did
814       not properly read from standard input.
816 The following features were added:
817    
818    1. PostScript output in canvas dumps, structure plots, etc.
819       A mod to the file dialog to allow for optional toggle buttons
820       which control whether the user wants XWD or PS output.
821    2. line styles went into the drawing widget.  In structure plots
822       this means that the original undisplaced structure is drawn
823       with a dashed rather than a yellow line.
824    3. renamed the Problem ... menu to Solutions ..., renamed Define ...
825       under this menu to Output ... in an attempt to be more explicit
826       about what those options actually do.  Dump ... under Canvas ...
827       was renamed to Save canvas ...
828    4. graphical time-displacement plots in place of the regular felt
829       output ascii versions ... much nicer and they save as PostScript 
830       plots that print really well.
831    5. elimination of those damn .vlv files in favor of additions to the
832       FElt syntax to describe all of the canvas and tool stuff in plain
833       text.  (see above) 
834    6. the cursor in the main drawing area changes to a watch during
835       computational waits now (ooh, ahhh).
836    7. corduroy ... no really now, it's actually a complete program
837       that actually works. (see the new chapter in the manual)
838    8. in that same vein, a routine to coalesce nodes was incorporated
839       into all the generation stuff.  What this means is that you 
840       should now be able to get away with generating elements in
841       adjacent regions at two different times, etc.  Nodes that are
842       very near to each other, but are not connected (i.e., because
843       you generated a bunch of elements and nodes and then went back
844       and did the same thing right near or next to the first bunch)
845       will be merged together.
847 ** Changes to FElt from 1.3 to 2.0 (released February 12, 1994) -
849 The following changes were made to the FElt syntax:
850    All changes are completely backward copmpatible in this release - all
851    original static problems will not need any modifications.
853    1. t is now a valid token in expressions.  In a transient analysis problem
854       it will stand for time in a force and be dynamically evaluated throughout
855       the course of the simulation.  In static problems it will simply
856       be evaluated at t=0 at startup and treated as a constant expression.
857    2. valid expressions can now use the intrinsic functions hypot, log, 
858       log10, ceil, floor, fmod, fabs, exp and pow.  They can also make use of
859       the C style ternary if-then-else operator (t < 10 ? 15*t : exp(-0.03*t))
860    3. a mechanism for time-magnitude pairs for discretized dynamic forces
861       was added.
862    4. an analysis= parameter in the problem description section to control what
863       type of analysis is performed (static or transient) for that problem.
864       The default is static if nothing is specified.
865    5. an "analysis parameters" section to control the variables in 
866       transient analysis problems - beta, gamma, and alpha are parameters
867       in the HHT integration scheme.  duration and dt control the length
868       and the time-step of the integration.  nodes= and dofs= control
869       what node (and which DOFs at each node) are included in the output.
870       mass-mode= controls what type of element mass matrices should be formed, 
871       either consistent or lumped.
872    
873 The following bugs were fixed:
874    1. a couple problems with trying to solve problems (or do anything for that
875       matter) after you'd deleted elements in velvet.
876    2. the variable 'time' in lib/Widgets/post.c was renamed 'when' to avoid
877       conflicts with some installations of gcc
878    3. a local implementation of strdup was provided for systems that insist
879       on being totally and solely ANSI and POSIX compliant.
880    4. delete window hooks were added to the post-processing popups so you
881       can now close them with the window manager and the entire program
882       won't crash.
883    5. a bug? ... well, the Fortran compiler was taken out as an option in
884       the configuration - it's just too confusing for people as most people
885       do not know what the extra libraries are that they need to link in.
887 The following features were added:
888    1. transient analysis using Hilbert-Hughes-Taylor alpha variant of
889       Newmark integration.  The C and M matrices are also assembled directly
890       into a compact column representation.  Dynamic forces can be specified
891       as continuous functions of t (see syntax changes above).
892       -plot and -table options were added to felt to control the output.
893    2. direct assembly into compact columns for the K, M and C matrices - this
894       can represent a major savings in memory.
895    3. automatic node renumbering for bandwidth/profile reduction of the
896       matrices - in felt it is activated by a command line switch;
897       in velvet you can do it once and for all and the way your problem
898       is shown and saved will reflect the new numbering or you can implement
899       it with a toggle as in felt that just does it to solve the problem
900       and then reverts back to the old numbers to show you your solution
901    4. renumber and summary toggles were added to the solution dialog in
902       velvet to mirror felt command line options.  plot and table toggles
903       in that same dialog reflect new command line options in felt that control
904       the output for a transient analysis problem.
905    5. static and transient mode analysis toggles in the solution dialog
906       to control the problem mode (equivalent to analysis= in the problem
907       description section of a FElt file).
908    6. an analysis parameters dialog box to account for the new section
909       in the FElt syntax.
910    7. animation of transient analysis simulations as a special case solution
911       mode for these types of problems.  The animation popup includes controls
912       for speed, play forward/backward, stop and a time counter. 
913    8. the ability to evaluate an expression wherever velvet is expecting a
914       floating point number in a dialog box (i.e., forces, material properties,
915       nodal coordinates) just like you can use an expression in the regular
916       FElt syntax, including the variable t in dynamic forces.
917    9. element mass matrix (consistent and lumped) definitions for truss, 
918       beam and timoshenko elements.  Only lumped mass formulations are done
919       for beam3d and cst elements.  Nothing is done for isoparametric 
920       elements.
922 ** Changes to FElt from 1.0a to 1.3 (released November 7, 1993) -
924 The following changes were made to the FElt syntax:
925    1. addition of 'hinge' or 'h' as a keyword after the R[xyz]=
926       token in a constraint to indicate a hinged DOF
927    2. addition of a valid expression after the T[xyz]= or R[xyz]=
928       token in a constraint to indicate a displacement boundary  
929       condition.  Tx=c for examples is now equivalent to Tx=0.0.
930    3. directions 'x','y', and 'z' are no longer valid.  This is
931       the only backward incompatible change to the syntax.  Valid
932       directions now include LocalX, LocalY, LocalZ, GlobalX,
933       GlobalY and GlobalZ.  Check the element definitions in the
934       user's manual to see what these things mean.
935    4. you can now use sqrt() in expressions (just like you   
936       you could use sin, cos and tan before).
938 The following bugs were fixed:
939    1. a bug in xfelt which caused a core dump when you tried to
940       draw a problem in 3d when it was only a 2d problem.
941    2. a bug in the internal forces calculated for beams which always
942       caused the second end moment to be printed as zero.
943    3. several bugs in 3d beam elements including an error in the
944       global <-> local transform matrix and a typo in the resolution
945       of distributed loads.  I think they actually work now :-).
946    4. not really a bug, but the directions of loads on beam elements'
947       got straightened out and is probably a bit more consistent now.
948    5. consistency amongst text commands, menu options and keyboard
949       shortcuts was substantially improved.
950    6. does the original user's manual count as a bug?  Well the new one
951       should actually print on any old postscript printer, plus it
952       contains a wealth of new information and is organized a whole lot
953       better.
955 The following features were added:
956    1. hinged DOFs, displacement boundary conditions.
957    2. a simple, illustrative Timoshenko beam element.
958    3. plotting of 2d planar stress fields with color imaging in velvet.
959    4. plotting of the displaced structure in velvet.
960    5. loads directed along the global coordinate axes on beams and beam3ds 
961    6. a real file selection mechanism for velvet
962    7. much improved, consistent, self-contained force, material, 
963       load and constraint dialogs in velvet
964    8. unified node and element edit/info dialogs
965    9. a problem solution control dialog in velvet
966   10. unified interface mechanism for all the dialogs, including tab groups
967       and the ability to leave dialogs up throughout a work session
968   11. translation include files and a built-in include path for cpp
969       in felt and velvet.
970   12. element numbering