Changes in cable v1.1.2 and v2.0 (1.1.2 was never fully/officially released) Big changes which have evolved over many months and thus are not described in any one itemized change below: o shooting method solutions are now the best initial guess for many problem types. Catenary initial guesses are still the default because they are available for all problems. Use static-initial-guess= to change to shooting. o Time integration in dynamic problems is now done using the generalized-alpha algorithm -- this algorithm provides significantly better stability compared to the box method. See Gobat's PhD thesis for all the gory details. o There is now an auto static solution available which should work well for many types of surface and subsurface single point mooring problems. It uses automatically controlled dynamic relaxation to produce reasonably fast, very reliable solutions under just about any current condition. Use the -auto flag to take advantage of it. For other changes read on. 42 added the symbolic constant pi to the parser (5-25-00) 41 added simple dynamic tension prediction for very fast estimates of dynamic tension in single point catenary moorings. This is an implementation of the simple model presented in Gobat's PhD thesis. You still need to get a static solution so that tau can be calculated. There is no checking to make sure that the model applies to the problem in question. Use -simple to activate it. (5-24-00) 40 added the capability to load a previous static solution as the initial guess for the static solver. The -initial parameter works just like the -load parameter, but rather than going straight to the dynamic solver the loaded static solution is used to initialize the static solution algorithm (instead of an on-the-fly generated catenary or shooting solution). (5-23-00) 39 re-ordered command line parameter parsing so that -debug will work when only -in is given. (5-23-00) 38 added 2D to 3D conversion capabilities in the static load function so now static solutions from the 2D solver can be used as the loaded static solution in a 3D problem. (5-23-00) 37 fixed what was either a very subtle bug (given the two years it took me to realize it was a mistake) or a glaring error (given the obviousness of the problem once I gave it just a little thought) in the movement of the solution vector Y from time step to time step. I was just swapping pointers between Y and Y_o so that the solution Y at i would be Y_o at i+1. What this means though is that the initial guess at i+1 (the initial value of Y) was Y_o from step i, which of course was really the solution at i-1. Turns out that this has no effect on the final solution because it only affects the initial guess at the i+1 solution in the relaxation procedure. The solution at i is a better initial guess than the solution at i-1. Thus, I am now copying the contents of Y into Y_o in moving from step i to i+1 (they now always start a time step with the same values). While this should not affect overall solutions it may speed things along because the solver may need fewer iterations in some time steps now that it has a slightly better initial guess at each time step. (5-21-00) 36 added Can and Cat for added mass coefficients. If Amn or Amt is not explicitly provided, Can and Cat will be used if provided. If Can and Cat are not provided Cmt and Cmn will be used if provided. If no added mass or added mass coefficient is specified, Can = 1, Cat = 0 will be used to calculate added mass. 35 the horizontal coordinates in 2D and 3D shooting solutions were not being properly set when terminal [1] -> {y,x} was not 0. 34 the anchor tree was set wrong in FillInObjectProperties() 33 added a check to make sure forcing period was non-zero if amplitude was non-zero 32 fixed a problem with the new results reading routines that was causing the doubling of the Euler angles for local -> global transformations if only the static solution was loaded (3-27-00) 31 added a new way to specify regularly spaced attachments attachments = glass : (10 20 30 40 50 60 70 80 90) can now be stated more compactly as attachments = glass : [10,10,90] 30 implemented a stall limit on the adaptive relaxation scheme. If no downward error progress is made within the limit, the relaxation goes back to the base level. Default limit is 100 iterations 29 re-worked the error and info message display a bit so that error flags get set in most cases and most solution failure type error messages go to the message window rather than a popup 28 added a 100 line circular buffer for the message window in the control dialog. Use the arrow keys to cycle through the buffer 27 modified the ramp time algorithm in InputVelocity (but nowhere else) so that the derivatives are of t/R*A*sin(wt) rather than simply ramping the cosinusoidal velocity. This should keep position correct regardless of the ramp length. (2-1-00) 26 added a -decimate flag to cable to spatially decimate results before writing them into an output file. I'm not sure that it will work in problems with branches. (1-31-00) 25 the output map from a loaded static solution was overriding the output map requested on the command line, causing the output that was written to not match the output called for in the header ... (1-28-00) 24 eliminated the magnify flag in animate -- it would have complicated the new results reading routines and didn't seem to get used much ... (1-00) 23 cleaned up the results reading routines in animate (isolated them a bit better) so that res2mat and res2asc could take advantage of the same code base. This also facilitated the totals and global flags in res2mat and res2asc and the global and totals toggle buttons that now allow you to change results without restarting animate. Finally, there is better consistency among the different kinds of results. When you says totals you get totals for everything (position, force, moment, euler). When you don't ask for totals, you get dynamic results for everything. Previously the flags only affected forces and moments - euler results were always given as static and dynamic and the treatment of the position results was inconsistent. Results are still stored the same way -- velocity, force, and moment as dynamic values and euler and coordinate results as totals. This remains the same for compatibility reasons. (1-00) 22 cleaned up some sign of the angle problems in both the 2D and 3D routines (10-19-99) 21 added time varying thrust to towed buoys (7-99) 20 used Cdt and Cdn on towed buoys - with the same sense of global direction as I used for the connectors (7-99) 19 fixed a problem with adaptive time stepping when shifting back up after stepping down on the final (10th) step. We weren't getting good returns back to the original sample grid in some obscure conditions. (7-14-1999) 18 used Cdt and Cdn on connectors. Previously, based on the assumption that all connectors are spheres (which assumption is still made for other things like area and wet weight if necessary) only Cdn was used. Now Cdt is used for the global vertical motion and Cdn is user for global horizontal motion (connector equations are written in global coordinates and therefore these should really be Cdz and Cdxy). (6-21-99) 17 added the concept of tangential added mass. Specifying am= on a material sets the normal added mass. Use amn= and amt= to directly specify normal and tangential separately. With no amt= spec the tangential added mass will be 0. You can also use Cmn and Cmt, in which case amn = (Cmn - 1)*A*rho and amt = (Cmt - 1)*A*rho, where A is the cross sectional area based on d. Specifying nothing (no am=, amt=, amn=, Cmt=, Cmn=) will get you an amn based on d, just like it used to. (5-13-99) 16 added multiple sinusoid capability to the input wave/velocity specification. The (amp, period, phase) can now be followed by up to 9 additional (amp, period, phase) definitions. The total wave/velocity for that specification is formed as the sum of all components. (3-28-99) 15 added an added mass coefficient (Cmn) to material props. The default is 2.0. (3-28-99) 14 added the capability to specify multiple input files to res2mat. If multiple inputs are given no output can be specified. Output names will be automatically constructed from the input names. Automatic output name construction will also work with single inputs of course. (3-23-99) 13 implemented an adaptive relaxation scheme that actually seems to work sometimes. There are two new constants in the analysis parameters relax-adapt-up and relax-adapt-down. They default to 1.02 and 1.1. The defaults seem to work well on lots of problems. To get no adaptation use 1.0 and 1.0. The relaxation factors given in the analysis parameters now represent baseline values. They should probably be increased for some older static problems. For problems with line on the bottom, a baseline static-relaxation = 0.1 seems like a good number. dynamic-relaxation = 1.0 is still always the best choice for the dynamic solution. (3-7-99) 12 re-fixed the catenary routines to allow for negative wet weights - who knows what I was thinking on that one. The really good news is that shooting solutions are looking better and better as the best choice for static initialization ... (3-6-99) 11 recast both static and dynamic 2D equations so that EI can be zero without causing singularities ... it's probably still best to set it very small for things that have no real bending stiffness. (2-24-99) 10 fixed what seems to be a rather troubling bug with the output sampling - what was getting written was the solution from the time step immediately prior to the most current time step (the one that you presumably want to sample). So if you had asked for snapshots at every 5 seconds and your timestep was 0.1 what you got was 0, 4.9, 9.9, etc. If your timestep was 0.01 and you asked for samples at 0.01 what you got was 0.0, 0.0, 0.01 at t = 0.0, 0.01, 0.02, etc. Obviously this wasn't a huge problem if no one had caught it before, but my apologies for not catching it before - it was pretty blatant once I started looking at that portion of the code in the context of something else. (2-3-99) 9 added the -quit flag to cable -- forces automatic termination of the program after the solution is complete. This means that the graphical control and info dialog box disappears and does not wait for the quite button to be pressed. The default is off. (2-2-99) 8 the catenary routine would produce really bogus answers when the equivalent wet weight of a system was negative - if this is the case we now set the weight to the air weight of the last segment in the string (1-29-99) 7 added an error check (in the parser) to make sure that segments have at least 2 nodes (1-28-99) 6 finished up a quicky implementation of the shooting method for 2D static problems - should work for surface, subsurface, and general problem types (1-13-99) 5 changed the color of anchors and buoys in animate to grey - now it's clear what the line is doing as it comes into these points (1-8-99) 4 protected against an FPE in the dispersion routine. For c large the exp terms were going to very small positive numbers and this was causing an FPE on the Alpha in some cases. For c > 20 now it simply uses the deepwater assumption rather than trying to get detailed. (1-4-99) 3 cleaned up some minor bugs in the Windows interface ... miminizing (iconifying) wasn't working, the double paste on Ctrl+V is finally fixed, and I added a horizontal scrollbar to the tabular output window. 2 added the dimensionality of connectors into the coordinate integration. A new parameter, length, is available to specify what dimensionality a connector has. If length is not given then the diameter will be used. All drag and added mass calcs are still based solely on d. 1 resolved the final problems with zlib compression (I'd had the hooks in for some time now, but actually compiling with libz would cause serious problems with animate). What this means is that output files are transparently compressed by cable and then transparently decompressed on reading by animate, res2mat, and res2asc. I think all future binary distributions will have this option compiled in, but it is possible via compiler flags and Makefile edits to generate non-compressing executable programs. If for any reason you need an uncompressed results file just run the results through gunzip. All of the post-processors can read both compressed and uncompressed input so this change should be backwards compatible with any old results that you have laying around. I'm typically seeing 2:1 compression ratios in the preliminary testing that I've done. (9-15-98) Changes in cable v1.1.1 (released 9-14-98) 9 fixed a file naming bug in the Matlab conversion option of the Windows interface. 9-14-98 8 More changes in towing, cable pay-out and the problems that new nodes on the mainline were causing with the node mapping routines for branches, etc. This should also help with lowering problems. 08-31-98 to 09-04-98 7 changed the static solution algorithm such that current-steps is used only on the first outer iteration. In subsequent iterations, the full current will be applied in a single step. 6 patched up what turned out to be some glaring errors in problems with cable pay-in/out. The position integration is now always bottom up. The pay-out rate is now incorporated in the boundary condition at the top in the Jacobians (as it should have been all along of course). What was happening was that things looked fine because the integration is basically decoupled from the full solver. If you went to look at things like velocities/forces, however, it became clear that the solver wasn't actually reflecting the dynamics of the pay-out process. The final solution to the whole problem is still under construction. 5 re-wrote the control/info dialog GUI using the Win32 API -- I'm still having problems with the display of error messages, but I figure that's small price to pay to not need an X-server for everything but post-processing. 4 added a bunch of parameters to facilitate riser problems - still need to add Morison forcing to cable elements to really finish risers off 3 fixed some problems with anchor drawing in 3D problems - the anchor figures didn't move with the rest of the figure when rotating and scaling - also fixed a floating exception by preventing z-scale from going to zero. (6-15-98) 2 problems with models using pay-rate expressions due to some residual errors in node mapping, etc. Essentially the on-winch nodes weren't being indexed into the node number mapping arrays and the catenary routines were blindly using the number of mainline nodes rather than the number of actually active nodes 1 a bug in res2asc was causing problems on some architectures (SGIs at least) when the "s" variable was requested Changes in cable v1.1 (released 19 May 1998) 44 for drifter and surface problems with wave-follower forcing the horizontal drag is now varied with time ... i.e., the wave-following provides vertical velocity and the wind and current terms provide drag. What this means is that you shouldn't expect the horizontal velocity of the top node to always be identically zero. If you do want it to be identically zero then use velocity forcing with z-input for the vertical. 43 added a flush of the output buffer after writing snapshots ... I think this was leading to some of animate's strange behavior when working with an only partially complete output file (5-15-98) 42 adaptive time stepping wasn't working for 3D problems because a mix of global and local (passed) dt values was being used (5-13-98) 41 changed the display message for horizontal problems such that the anchor coordinate labels were user not program coordinates 40 protected against FPE's resulting from a vertical coordinate below the bottom (x < 0) in the wave particle routines (5-12-98) 39 cleaned-up the variable expression handling stuff in the parser so that now expressions really can only be expressed as functions of the lexical token that makes sense (before any of the tokens really just stood in for an arbitrary placeholder - perfectly functional but it did allow someone to write something that would have been difficult to read and yet still worked). This also helps a bit with the multi-variate stuff which is now used for bottom-elevation = f(x,y). (5-12-98) 38 added analyis parameter dynamic-integration to control whether x,y,z position in the dynamic algorithm are integrated from u,v or from strain. The options are "spatial" (strain integral -- default) or "temporal" (velocity integral, may be a better choice from some branching problems - particularly those with loops). 5-12-98 37 generalized branches so that numerous branches can leave from one segment -- there is a practical limit of 8 right now simply because I have a hard-coded array size. 5-11-98 36 changed the conditions under which Morison forcing is applied to subsurface components in dynamic problems -- previously the forcing method had to be Morison to get those forces onto connectors or a tow body, etc. Now they are applied any time there are waves defined (so for WaveFollower and FroudeKrylov cases now). (5-9-98) 35 got rid of x,y terms in the static solutions - more trouble than they were worth I think. Also nullified #30 by partially reverting back to the way I was doing it -- extra equations at a junction rather than a set of equations for BranchStart. By writing eq's at BranchStart I couldn't explicity include terms in the Jacobian for the compatible node on the main line, it was just a constant and that was causing serious convergence problems in the dynamic solution. So now the compatibility expressions (the matching of the first branch node velocities with the velocities of the node on the mainline) are in the junction equation, but pure BC type equations (moment releases primarily) are in the BranchStart equations. This means that the number of BC eq's at a BranchTerminal can vary, depending on whether or not 2 (2D) or 3 (3D) of them have already been expressed as part of Junction equations. Without x and y terms, there are no geometric compatibility relationships at any junctions in static solutions. For those cases there are loop specific equations as a sub-case of BranchTerminal. Looped branches actually seem to be working much better now ... 34 fixed what would have seemed to be a major problem in the static cable eq Jacobians - on a phi term only the k column was being set ... one of these days I'm going to find some silly little bug that solves all sorts of problems, but this one isn't it as it doesn't seem to make much difference. (5-8-98) 33 re-vamped the drag terms in the 2D static Jacobians (5-8-98) 32 added bottom friction (5-8-98) 31 added bottom-elevation = f(x,y) to describe bottom topography or bottom grade. Re-worked the bottom interaction modules to allow for the possibility of a non-flat bottom - basically this means using a normal force instead of just assuming that Fb will be in the same direction as w0. (5-8-98) 30 changed the way BC are handled for branches - this is a purely internal change only and shouldn't affect any results. The number of eq's at a junction or connection is now always the same. The branch node specific equations that were in the junction eq's are now in the BranchStart equations (which used to be empty). The loop terminal equations are now a subset of BranchTerminal equations though they still don't really work. (5-8-98) 29 changed the way current-steps are interpreted. It now refers directly to the number of intermediate steps to take before applying the full current profile. 1 step means that the problem will get solved twice: once at 1/2 current and once at full current. 4 steps means 5 solutions, at 0.2x, 0.4x, 0.6x, 0.8x, and 1.0x the current. (5-8-98) 28 bottom interaction wasn't working for 3D problems because of an error with the updating of interim variables (5-4-98) 27 protected against trying to load a static solution from a 2D algorithm into a problem being solved with the 3D algorithm or the other way around 26 protected against -in and -out (and -out and -load) having the same filename in cable (4-15-98) 25 added expressions for x-wind and y-wind to the environment description. They can be functions of time. If you actually wanted to have wind drag on a surface buoy then be sure to specify Cdw (Cd_wind) for the buoy and maybe Sw (projected area exposed to wind) ... if Sw is not given the program can calculate based on geometry and draft, but this may not be quite right for many buoys with things like masts and antennae. The fact that they are functions of time is pretty useless right now because there really isn't anything in the surface buoy dynamics that would actually evaluate wind drag forces over time 24 broke the spatial plots of variables along a branch onto separate curves within animate (4-15-98) 23 fixed another longstanding zooming bug in animate ... the one that caused extra lines to be drawn on some zoomed graphs. Also fixed a floating point exception that occurred when zooming on negative values (4-15-98) 22 added -terminals switch to cable to automatically include terminal nodes (both branch and mainline) in the sampled nodes list. In a simply-connected problem (no branches) -terminals is equivalent to spec'ing both -first and -last. (4-15-98) 21 added x-current-modulation and y-current-modulation ... these are functions of time that do just what they say - modulate the current magnitude in time. This gives us the ability to do long-time tidal simulations or internal waves. I have not yet modified the equations of motion so if the current changes really fast then there are going to be problems in terms of negelected inertial and added mass effects. They also don't really work on surface moorings because the solver never really looks at the drag on those buoys in the dynamic solution. 20 added preventive checks to make sure that res2mat and res2asc wouldn't try to write their output over their input ... guess who lost a 6 hour simulation to that one (4-9-98) 19 added display and basic modify capability for dynamic dt, duration, and ramp-time in the standard control and info display box. The dt and ramp-time can be modified. Modifying dt (time-step) can cause LOTS OF TROUBLE. There is no checking to make sure that you are staying on the sampling grid so your output file can get real screwed up real fast. The sampling information is stored in the dynamic header section of the output and does not get re-written on a change to dt. The post-processing applications will expect a certain number of results at a certain spacing - bad things will happen if the output file ends up not looking like that because the time step got modified in a weird way. caveat emptor ... (4-9-98) 18 fixed a longstanding zooming bug in animate's graphs (zero width or height zoom windows caused core dumps). (4-7-98) 17 added expressions for T(e), T'(e), T''(e) to material properties. The only valid material types are now linear (the default) for which EA must be defined and nonlinear for which T =, Te =, and Tee = must all be specified as valid variable expressions of the symbolic variable e. An equivalent EA can be specified for use in things like the catenary solution. If none is specified a value of Te at 0.01 will be used. (4-7-98) 16 added a deployment problem type to simulate buoy first, anchor last deployment scenarios. This required quite a bit of mucking about with connectors and segments that may be floating on the surface. (4-6-98) 15 added controls for results tabulation (using res2asc) to WHOI Cable for Windows. (3-31-98) 14 added the tangential drag terms to the Jacobian for regular cable equations, also cleaned up the normal drag terms in the Jacobians for equation 2. 2D dynamic code. (26 March 1998) 13 revamped res2asc such that it is now a useful tool. It can tabulate static, dynamic time series and dynamic snapshot results into three separate ASCII text files. (10 March 1998) 12 fixed a sign error in the Jacobian terms for regular cable equations - it was on a shear*curvature term so it actually doesn't change much. (2-27-98) 11 changed the relationship of branch and mainline node numbering to greatly improve speed when working on problem with _many_ branches. The numbering along the mainline is now no longer contiguous and thus there has to be some redirection through re-ordering (permutation) vectors in many routines. 10 re-worked the main solver to use a true map of the non-zero entries of the Jacobian matrix. Previously the non-zero map was based on the the presumption that individual Jacobian matrices were full, now I actually make a pass through the Jacobians to count non-zeros and build the non-zero map. This cuts the number of non-zero entries that are actually treated by nspiv by about 40% in static solutions and 20% in dynamic solutions. The resulting speed-up is probably between 10% - 30%. 9 added loop capability to the branch stuff. As part of this I also completely re-worked the initial guess catenary stuff to make it more general and compartmentalized. This also required adding diff eq for x and y directly into the static problem. With x and y now there directly I added Jacobian terms for the bottom stiffness contribution. _Both_ the simple presence of x and y terms in the global Jacobian and the addition of these specific Jacobian terms seems to improve slightly the overall handling of bottom interaction problems. The clean-ups to the catenary code included adding attachment effects to the equivalent weight calculations; this effect was overlooked in the original calculation. 8 fixed a bug in layouts without connectors between segments - I was simply equating all variables across the junction, but really we need to equate tension (and not strain) across the junction ... (2-24-98) 7 fixed a bug in the wave particle velocity and acceleration calculations: when k*x is very large sinh and cosh return Inf ... sinh(kx)/cosh(kH) would thus return Inf or Nan. It should be zero in cases where the wave numbers are so high as to cause this problem (Inf / bigger Inf) 6 changed the forward/reverse buttons in animate into toggles 5 added branch / multi-leg capability. This required new Jacobian equations at the junctions of more than 2 nodes and modifying the solution engine to account for Jacobian blocks that need not be associated with adjacent nodes. Also required what are basically BC blocks internal to the global matrix (at branch terminals for instance). Information regarding the starting node of each branch is now stored in the output file so that res2mat and animate can act appropriately in these problems. 4 fixed a bug with the outer relaxation factor in the control and information dialog - it couldn't be greater than 1 after an update 3 added envelope capability to spatial plots in animate (2-2-98) 2 added structural damping to 2D code (1-15-98) 1 the mud damping terms in the internal cable equations were not accounted for in the Jacobian terms of u and v in the 2d code (1-15-98) Changes in cable v1.0 that may not be in various implementations of cable v0.0: 1 the horizontal force on a top buoy was not being modified from iteration to iteration in subsurface problems - causing inaccurate results for problems with depth varying current 2 improved the "outer loop" algorithm for finding the draft of a surface buoy - this also got rid of a bug in the initialization of the static forces for problems with a net negative weight 3 the convergence of the outer loop for both surface and horizontal problems is now governed by analysis.tolerance 4 problem type (surface, subsurface, horizontal, general) is now set by the user rather than by program supplied heuristics. This means that there must generally be a "type = " statement in the problem description section. 5 the equiv drag coefficient on connectors in 3D static problems was actually getting squared (1/2 rho S Cd) * (1/2 rho S Cd) 6 wasn't dividing attachment weight and drag by ds (segment length) 7 changed magic comparison strcmp for cabres output files to strncmp to fix a problem on SGIs 8 attachments were not being uniformly handled across 2D and 3D problems 9 segment mass in 3D dynamics was always based on node [i-1] rather than both node [i] and node [i-1] 10 commented out the initial zeroing of the solution vector in nspiv 11 added finer tolerance control (static- static-outer-, dynamic-) just like the iteration control 12 uniformized the way Morison is implemented at all points in the system - in global coordinates. There were definite errors in the previous implementation that lead to an overestimation of the forcing of some connectors, etc. 13 made some seriously backwards incompatible changes in regards to coordinate systems. We now have the notion of a both an internal and a user coordinate system. All inputs are given in the user coordinates (z up, x right, y into page) and immediately transformed into internal coordinates (x up, y right, z into page). The output file is written in internal coordinates. res2mat and animate then perform the reverse transformation to get back to user coordinates. Syntax wise the changes are as follows: + random-xyz, regular-wave, etc are gone, input-type is now just random or regular + new statements: x-wave=, y-wave= for right traveling and into page travelling waves (in user coordinates remember). x-input, etc. are still available for use with forcing-method=velocity. New forcing method, wave-follower, added for use with x-wave and y-wave for consistency with morison, froude, etc. Old files should generate syntax errors (syntax errors in input-type) to alert users to the need to update. 14 re-worked the input-type and forcing-method determination schemes. forcing-method is now one of: morison, wave-follower, froude-krylov, velocity. input-type is simply random or regular. 15 the nodal coordinates were not being set by the 2D static catenary solution - caused a fair amount of problems under Linux Alpha, kind of surprised I hadn't noticed it before on Linux i386 as it should have made some initial solutions harder to get. 16 added problem type and depth information to the output file format. This means that old versions of animate or res2mat may choke on output files from the new version of cable. 17 made current inputs surface referenced, i.e., they are now expressions of depth rather than of z coordinate. The symbolic variable to use now is H (rather than z). For problems with no explicit depth specification, z=0.0 is at first node and the surface is defined as the static position of the top node. The only problems for which there is no obviously meaningful depth spec are probably towing problems. 18 added outer iterations to calculate drift speed of drifters 19 added property checking for buoys to make sure diameters and heights get defined when they are needed 20 added -catenary option so we can easily see what the initial catenary guess for a problem was Changes from original Fortran code to cable v0.0 (a superficial list because I can't remember them all): 0 merged 2D and 3D codes, ported everything to C, merged different versions for different BC into single code - BC selection is now specified through parameters specified in the input file, moved everything to double precision to fix obvious error build-up in quantities like time ... 1 designed a lex/yacc based parser and lexer along with a single input syntax for problem definition and description files. The new syntax allows for a single input format for both 2D and 3D problems and for problems of differing boundary conditions and forcing types. 2 designed a single output binary file format to contain all solution information for both 2D and 3D problems - unified the output routines, added capabilities to detail requested output information on the command line 3 renamed all the y array references in the difeq functions to named variables assigned at each iteration for speed and readability 4 added multi-segment capability to 3D codes 5 initial catenary solution is now based on a single equivalent cable with fudged weight and stiffness reducing the craziness of some of the initial starting guesses 6 added "outer loop" iterative schemes for problems with initially unknown imposed static forces (problems with both ends anchored, problems with a surface buoy of unknown draft) 7 added capability for massive connectors between segments (moments are released at these connections) 8 added capability for massive attachments at specific nodes along a cable (these simply add mass, weight and drag to that node) 9 due to a typo, the drag coefficients in the Jacobians for 3D dynamics were essentially Cd*Cd rather than just Cd 10 modified the boundary condition in 3D problems to set Beta_0 to zero at one end and torsion = 0 at one end rather than torsion = 0 at both ends. The original BC was actually leading to a nearly singular matrix and negative array index references in the Numerical Recipes code that didn't seem to bother the Fortran implementation but crashed (as one would expect that it should) the C implementation 11 added random excitations based on Bretschneider spectra 12 took the full derivatives of the current drag expressions in the 3D static code (sign(U) * U^2 --> sign(U)*2*U rather than (|U|*U --> |U|). Also corrected a typo that had one of the derivative cross terms as vack*wlck rather than vlck*wlck (cfn2k) ... both only affected the Jacobian and not the RHS. 13 removed the NR solvde code and replaced it with a generalized sparse Gaussian elimination algorithm. At a slight cost in speed this buys us two things - easier debugging and ultimately the capability to handle problems with arbitrary connectivity (i.e., multi-leg systems, systems with strings hanging off them). 14 unified the solvers (2D & 3D, static and dynamic, 4 routines in all) into a single routine. The only things left in each of the type specific files is the type driver, Jacobian builder and (for static problems) the Catenary solution. 15 added adaptive time stepping to the dynamic routines 16 added the initial cut at bottom interaction (elastic foundation with linear stiffness and damping) 17 added the idea of surface speed (as a function of time) for drifter and towing problems. 18 added the capability to release a BC after a specified amount of simulation to model breaking cables. 19 changed the position integration in dynamic problems to integrate from strain (the stretched length along the current orientation) starting at the first node rather than from the velocities at each time step starting at each node separately. This seems to do a better job of minimizing some of the long-term drift problems that we see in the coordinate positions of the nodes during long time simulations. 20 rewrote boundary conditions in static and (Morison) dynamic problems such that they are cast in terms of global coordinates 21 added pay-in and pay-out of cable in towing problems