1# Libctl Release Notes
2
3## libctl 4.5.0
4
52/19/20
6
7* New `make_slanted_prism` functions to make a prism with
8  a given sidewall angle (#53).
9
10* Defined `LIBCTL_MAJOR_VERSION` etc. in `ctlgeom.h` header file when
11  using stand-alone libctlgeom.
12
13* Bugfix in point-in-prism test (#49).
14
15## libctl 4.4.0
16
1711/12/19
18
19* `geom_object_volume` function to get the volume of a 3d object
20  (accelerates `box_overlap_with_object` for objects completely within a box) (#45).
21
22* Bugfix to geometry tree search for empty dimensions.
23
24## libctl 4.3.0
25
264/17/19
27
28* `ctl_printf_callback` so that callers can capture stdout (#39).
29
30## libctl 4.2.0
31
321/7/19
33
34* Better handling of `center` parameter of prisms, allowing this
35  to be optionally specified (#35).  Deprecates old `geom_fix_object`
36  and `geom_fix_objects0` functions in favor of `geom_fix_object_ptr`
37  and `geom_fix_object_list`.  (In particular, the old `geom_fix_object` routine will not work properly for prisms in
38  which the center was not computed.)
39
40## libctl 4.1.4
41
4211/16/18
43
44 * Work around gcc bug (closes #32).
45
46 * Allow subclass properties to override defaults (or lack thereof) in parent class.
47
48## libctl 4.1.3
49
509/7/2018
51
52* Improved prism handling of points on prism faces (#23) and various cosmetic improvements (#22, #24, #25).
53
54## libctl 4.1.2
55
567/27/2018
57
58* Bug fix in prism subpixel averaging (#19 and #20), thanks to
59  @DerekK88 for the bug report.
60
61## libctl 4.1.1
62
636/29/2018
64
65* Bug fix in prism bounding boxes (#17).
66
67* Build fix for systems with an old `ctlgeom.h` file installed (#16).
68
69## libctl 4.1
70
716/7/2018
72
73* New "prism" geometric-object type for polygonal prisms (#13).
74
75## libctl 4.0.1
76
774/18/2018
78
79* Changed header file to use `const char *` rather than `char *`
80  for constant string arguments, since C++ deprecated passing
81  literal strings to `char *` arguments.
82
83* Various minor build and compilation improvements.
84
85## libctl 4.0
86
871/18/2018
88
89* Building `--without-guile` is now possible to build only `libctlgeom`,
90  which no longer depends on Guile.
91
92* In libctlgeom, material is no represented by a `void*` rather than
93  by a `struct` wrapping a `void*`.
94
95* Migrate docs to github/markdown/readthedocs.
96
97## libctl 3.2.2
98
993/28/2014.
100
101  * Bug fix to interpolate-uniform for guile 1.8+.
102
103## libctl 3.2.1
104
1058/8/2012.
106
107  * Fix incorrect gh_symbol2newstr macro replacement.
108
109## libctl 3.2
110
1117/20/2012.
112
113  * Now works with Guile version 2.x (older versions are still supported).
114
115  * Add `libctl_quiet` variable to main.c so that libctl-using programs
116    can suppress all output if desired (e.g. to avoid duplicate outputs
117    on parallel machines).
118
119  * Added `wedge` object type for circular/cylindrical wedges, as a subclass
120    of cylinder: `(make wedge (center ...) (axis ...) (radius ...) ...)` with
121    two new properties: `(wedge-angle ...)` for the angle in radians, and
122    `(wedge-start v)` for a vector v such that the wedge angles start at
123    zero in the (v, axis) plane.  (Caveat: subpixel averaging is
124    currently inaccurate for the flat wedge edges.)
125
126  * list-type constructors now accept either `(name ...elements...)` or
127    `(name (list ...elements...))`.
128
129  * Add `vector3->exact` function for to-integer rounding.  Otherwise, ensure
130    that interpolation results are floating-point to prevent type-conversion
131    errors.
132
133  * Added `ctl-set-prompt!` to set interactive prompt in both old and new
134    Guile versions.
135
136  * Rename `string` to `char*` in ctl-io.h for C++ compatibility.
137
138  * Bug fix in `normal-to-object` near corners of blocks.
139
140## libctl 3.1
141
1426/5/2009.
143
144  * Support specifying the location of the guile and guile-config
145    programs with GUILE and GUILE_CONFIG environment variables in
146    the configure script.
147
148  * Support for calling NLopt optimization library (also requires
149    the program using libctl to be changed to link nlopt).
150
151  * New ellipsoid_overlap_with_object function, analogous to
152    box_overlap_with_object function.
153
154  * Bug fix in `include` function for recent versions of Guile,
155    to properly keep track of the current include directory.
156
157  * Bug fix in `numerical-derivative` routine, which didn't converge
158    when the error was exactly zero.
159
160## libctl 3.0.3
161
1622/27/2008.
163
164  * Added `begin-timed` function, which is similar to `begin-time` except
165    that it returns the value of the last statement (like `begin`) rather
166    than the time.
167
168  * Bug fix: allow classes to have boolean properties.
169
170  * Bug fixes for compilation under C++, thanks to David Foster:
171    include missing string.h header and fixed gh_new_procedure prototype.
172
173## libctl 3.0.2
174
1758/22/2006.
176
177  * Fix minor Guile incompatibility on some systems.
178
179## libctl 3.0.1
180
1815/1/2006.
182
183  * Change shared-library version to 3:0:0 instead of 0:0:0.  This
184    avoids conflicts with shared library version numbers that has
185    been assigned to earlier versions of libctl for Debian; thanks to
186    Josselin Mouette for the suggestion.
187
188## libctl 3.0
189
1904/1/2006.
191
192  * Switch to use automake and libtool.  Can now install shared libraries
193    with `--enable-shared`.
194
195  * License is now GNU GPL (v2 or later) rather than the GNU LGPL, due
196    to use of third-party GPL code for multi-dimensional integration (below).
197
198  * `gen-ctl-io` now supports separate generation of code and header files
199    via `--code` and `--header` arguments.  (Better for parallel make.)
200    Also support a -o option to give a different output file name.
201
202  * gen-ctl-io can now export C++ code by using the `--cxx` flag.
203
204  * `gen-ctl-io` can now export SWIG `.i` files for automatic type conversion
205    in SWIG wrapper generation, using the --swig flag.
206
207  * Backwards incompatible change: users must include their own ctl-io.h
208    *before* ctlgeom.h, or you get ctlgeom-types.h instead (this is
209    for use with the `stand-alone` libctlgeom.a library below.
210
211  * New multi-dimensional integration routines using adaptive cubature.
212    (Much more efficient than nested 1d integrations.)  Adapted in part
213    from the HIntlib Library by Rudolf Schuerer and from the GNU Scientific
214    Library (GSL) by Brian Gough.
215
216  * New `interpolate-uniform` function that tries to maintain a uniform
217    distance between points (i.e. variable number of interpolated points
218    between different list elements, as needed).
219
220  * Now install a `stand-alone` libctlgeom.a library to make it easier
221    to call geometry routines from non-Scheme code.
222
223  * New routines to compute overlap fraction of box with object,
224    compute analytical normal vectors, etcetera.  (For upcoming
225    version of MPB.)  Also new routines to get the object of
226    a point, not just the material.  Also new routines to operate
227    on a supplied geometry list parameter instead of using the global;
228    unlike the old `material_of_point_in_tree` functions, these
229    functions do not shift the argument to the unit cell, but you
230    can use the new function shift_to_unit_cell to get this behavior.
231
232  * `gen-ctl-io` now generates object equal/copy functions.
233
234  * In `unit-vector3`, only return 0 when norm==0, not merely if it is small.
235
236  * Added one-sided numerical derivative routine.
237
238  * Define `verbose?` variable corresponding to main.c variable.
239
240  * `(print)` calls `(flush-all-ports)` to keep C and Scheme I/O in sync.
241
242  * Fix in `find-root-deriv` to prevent infinite loop in some cases where
243    the root does not exist; thanks to XiuLun Yang for the bug report.
244
245  * Bug fix in `make_hermitian_cmatrix3x3`; thanks to Mischa Megens.
246
247## libctl 2.2
248
2499/12/2002.
250
251  * Added simple trapezoidal-rule adaptive numeric integration routine.
252
253  * Numerical derivative routines now allow numerical differentation
254    of vector-valued function.  Added deriv2 convenience routine.
255
256  * Added `find-root-deriv` functions for faster root-finding of
257    functions for which the derivative is also available.
258
259  * Added missing `(cvector3 ...)` constructor, and fixed corresponding
260    constructor for `cvector3` object properties; thanks to Doug Allan for
261    the bug report.
262
263  * Added generic `memoize` function.
264
265  * libctl programs now print out command-line parameters when they run.
266
267  * Fixed incomplete support for generic SCM type.
268
269  * Fixed to work with Guile 1.5+ (thanks to Mike Watts for the bug report).
270
271## libctl 2.1
272
2733/21/2002.
274
275  * Bug fix: complex-number input variables were read as garbage
276    if they had imaginary parts; does not affect complex-number outputs.
277
278  * Added generic SCM type for i/o variables and parameters, as a
279    catch-all for other Scheme objects.
280
281  * main.c now has `ctl_export_hook` (enabled by defining
282    CTL_HAVE_EXPORT_HOOK) with which to define additional Guile symbols.
283
284  * gen-ctl-io: converts `!` in symbols to `B` in C identifiers.
285
286## libctl 2.0
287
2883/10/2002.
289
290  * New `set-param!` function, analogous to define-param, that allows
291    you to change the value of a parameter in a way that can still be
292    overridden from the command line.
293
294  * In libgeom, allow user to specify the `resolution` instead of the
295    `grid-size`.  New `no-size` support in lattice class to reduce
296    dimensionality, and new `(get-grid-size)` function.
297
298  * Support for Scheme complex numbers, along with a few new associated
299    functions: `conj`, `vector3-cdot`, `matrix3x3-adjoint`.
300
301  * New functions to compute numerical derivatives using Ridder's
302    method of polynomial extrapolation.
303
304  * Documented `object-property-value`; thanks to Theis Peter Hansen for
305    the suggestion.
306
307  * Get rid of unneeded `make-default`, and use consistent syntax for
308    `define-property` and `define-post-processed-property`, compared to
309    `define-input-var`.  NOT BACKWARD COMPATIBLE (for developers; users
310    are not affected).  Thanks to Theis Peter Hansen for the suggestion.
311
312  * Call ctl_stop_hook even with `--help`, `--version`, etcetera; this
313    makes the behavior nicer e.g. with MPI.
314
315## libctl 1.5
316
31711/15/2001.
318
319  * geometry-lattice now has a separate basis-size property, so that you
320    can specify the basis vectors as being something other than unit vectors.
321
322  * More functions are tail-recursive, helping to prevent stack overflows;
323    thanks to Robert Sheldon for the bug report.
324
325  * New fold-left and fold-right functions, documented in the manual.
326
327  * The configure script now checks that guile is in the $PATH.  Thanks to
328    Bing Li and Giridhar Malalahalli for their bug reports.
329
330## libctl 1.4.1
331
3327/4/2001.
333
334  * Support function lists.
335
336## libctl 1.4
337
3382/23/2001.
339
340  * Renamed `display-many` function to more felicitous `print`
341    and added `print-ok?` global variable that allows you
342    to disable program output.
343
344  * Added support for passing `'function` types back and forth
345    (just a SCM object pointing to a Scheme function).
346
347  * Cosmetic fixes to yes/no? and menu-choice interaction functions.
348
349  * Support start/exit hooks for use e.g. with MPI.
350
351## libctl 1.3
352
3531/7/2001.
354
355  * Added improved `subplex` multidimensional optimization algorithm
356    (for maximize-multiple and minimize-multiple).
357
358  * Documented vector3-x, vector3-y, vector3-z functions for extracting
359    vector3 components.
360
361## libctl 1.2
362
3637/9/2000.
364
365  * Added new `cone` geometric object type.
366
367  * Added reciprocal->cartesian, cartesian->lattice, lattice->reciprocal,
368    etcetera functions to libgeom for converting vectors between bases.
369
370  * Added routines rotate-vector3 and rotation-matrix3x3 for rotating vectors.
371
372  * Added support for returning lists from external functions.
373
374  * Fixed bug in matrix3x3-inverse function.
375
376  * Fixed bug in find-root for converging to negative roots.
377
378  * Use Nelder-Mead simplex algorithm for multi-dimensional minimization
379    (it seems to be more robust than the old routine).
380
381## libctl 1.1.1
382
3831/28/2000.
384
385  * Use CPPFLAGS environment variable instead of the less-standard
386    INCLUDES to pass -I flags to the configure script (for header files
387    in non-standard locations).
388
389  * Compilation fixes.  We need to set SHELL in the Makefile for make on
390    some systems.  Also added rule to insure ctl-io.h is created before
391    main.c is compiled.  Thanks to Christoph Becher for the bug reports.
392
393## libctl 1.1
394
3951/2/2000.
396
397  * geom: radius and height of objects is now permitted to be zero.
398
399  * geom: `material_of_point_*` routines now report whether the point
400    is in any object; necessary for use with MPB 0.9.
401
402  * Added man page for `gen-ctl-io`, based on a contribution by
403    James R. Van Zandt.
404
405## libctl 1.0.1
406
40711/22/1999.
408
409  * geom: handle case where `ensure-periodicity` is `false`.
410
411  * geom: bug fix in `geometric-objects-lattice-duplicates` for
412    non-orthogonal lattices; thanks to Karl Koch for the bug report.
413
414## libctl 1.0
415
41611/19/1999.
417
418  * Initial public release.
419