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