forked from mctools/ncrystal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
580 lines (542 loc) · 35 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
v2.6.1 2020-05-03
* Workaround for numerical artifacts in inelastic cross sections arising
from low-granularity beta-grids. In practice this affected materials
which either used hard-coded low-granularity scattering kernel, or those
with phonon VDOS curves that had large empty regions (often the case for
hydrogen VDOS curves in materials with C-H bounds). The workaround for
external low-granularity kernels consists of a simple "thickening" of
the beta-grid, while the workaround for VDOS-based kernels consists in
modifying the beta-grid generation code to ensure points are inserted
into any large gaps in the single-phonon region.
v2.6.0 2020-04-05
* Introduce NCMAT v4 which introduces a few new features, as described in
detail in the ncmat_doc.md file. The most important new feature relies
on the fact that it is possible to estimate atomic
mean-squared-displacements directly from a phonon density of state
distribution (VDOS), meaning that it is now allowed (and actually
recommended) to skip @DEBYETEMPERATURE's for crystalline materials where
atoms have VDOS curves available). This is not only useful, but improves
low-temperature reliability of the Debye-Waller factors used in the
elastic scattering components. This development was helped by Kemal
Ramic and Jose Ignacio Marquez Damian from the ESS Spallation Physics
group, and more details are available in the ncrystal GitHub issue
#58. The other new feature in NCMAT v4 is a new optional syntax for the
@CELL section, which allows more compact specification for certain
crystal systems (in particular cubic systems).
* The vast majority of crystalline materials in the NCrystal data library
were updated to take advantage of the new features, and in addition the
number of VDOS curves was increased dramatically, meaning that the
dynamics in almost all crystalline materials are now described using
actual VDOS curves rather than just Debye temperatures.
* Missing VDOS curves for all elements in beryllium-fluoride (BeF2),
aragonite (CaCO3), cuprite (Cu2O), periclase (MgO), and quartz (SiO2)
were provided by Kemal Ramic from the ESS Spallation Physics group,
based on modelling with Phonopy, VASP and OCLIMAX software.
* Missing VDOS curves for 14 mono-atomic materials were added (fixing
github issue #39): Au, Ba, Cr, Mg, Mo, Na, Nb, Pd, Pt, Rb, Sc, Sn, Y,
and Zn. Refer to comments in the individual NCMAT files for references
concerning the origin of these curves.
* Missing VDOS curves were added to uranium oxide (UO2), taken from
DOI:10.1103/PhysRevB.102.134312. Note that UO2 NCMAT files with VDOS
tuned for specific temperatures are available (refer to comments in the
UO2 NCMAT file for details).
* All existing files with VDOS have been update to NCMAT v4, and had
@DEBYETEMPERATURE sections removed in order to benefit from the better
performance of getting the atomic displacements from the VDOS.
* Added new material: gamma-Iron (Fe_sg225_Iron-gamma.ncmat) with VDOS
curve. At the same time, the not particularly useful beta-Iron file was
removed, so the NCrystal data library now contains both alpha- and
gamma-iron, both with VDOS curves.
* Expose debyeIsotropicMSD and debyeTempFromIsotropicMSD functions from
NCDebyeMSD.hh header to C and Python, allowing conversions between
atomic mean-squared-displacement and Debye temperature.
* Improve robustness of the function debyeTempFromIsotropicMSD. Previously
the internally deployed root-finding algorithm could fail under some
scenarios (e.g. non-ultra cold rubidium).
* Various improvements for ncrystal_vdos2ncmat.
* Compilation fix for pre-Catalina OSX where the aligned_alloc function is
apparently missing.
* Fix bug where early calls to removeAllDataSources could get reverted by
subsequent plugin loading.
* Before defining macros in public headers, check if present already and
if so undefine.
v2.5.81 2020-04-01
* RC2 for incoming release v2.6.0.
v2.5.80 2020-03-25
* RC1 for incoming release v2.6.0.
v2.5.0 2020-03-21
* The NCrystal v2.5.0 release brings major technical improvements to
NCrystal "under the hood", with around 15.000 lines of code changed in
more than 200 files! Although massive, the changes are mostly technical
in nature and mainly affects the C++ API, so people using NCrystal in
another way (e.g. through Python, C, Geant4, McStas, ANTS2, ...), should
still find that everything keeps working as before - although perhaps
with slightly improved performance and with a few new useful function
having been added to the Python/C API's.
* The list of specific changes is too long to document here, but we
have tried to provide a high-level overview of the developments
in the wiki, so please find additional information at:
https://github.com/mctools/ncrystal/wiki/Announcement-Release2.5.0
v2.4.81 2020-03-16
* RC2 for incoming release v2.5.0.
v2.4.80 2020-03-15
* RC1 for incoming release v2.5.0.
v2.4.0 2020-12-17
* Properly support delivery of NCMAT data files from plugins. For clarity,
and to avoid name clashes, such data files must follow a clear naming
scheme "ncplugin-<PLUGINNAME>_*.ncmat". The mechanism for making the
data files available will depend on how the plugin is used, and is of
course automatic. For a static plugin, built into a given NCrystal
installation, the data file will be installed along with all of
NCrystal's own data files (either as physical files or compiled into the
NCrystal library, depending on the NCrystal configuration). For a
dynamic plugin, built separately and later loaded by adding the plugin's
shared library to NCRYSTAL_PLUGIN_LIST, the data file will be compiled
into the plugin library. Finally, for plugin developers, the data files
will be made available via a symlink, ensuring that it is possible to
directly edit the data file during development.
* Support (on unix) relative paths in NCRYSTAL_PLUGIN_LIST.
* Add option to ncrystal_ncmat2cpp for injecting include statements in
generated code.
* Plugin developers can now also see their test .ncmat files in the list
provided by ncrystal_inspectfile --browse.
* Export more information to client cmake projects.
v2.3.1 2020-12-17
* Small bugfix fixing the loading of dynamic plugins.
* Ensure plugins are loaded before file searching is carried out. This
allows plugins to register in-memory files.
v2.3.0 2020-12-11
* Replace span class with a fully home-grown solution. This means that all
core NCrystal code is once more fully available under the primary
license (the Apache 2.0 license).
* Cfg parameters scatfactory and absnfactory now supports exclusion of
specific named factories. This is used to (by default) exclude current
factory from consideration when globalCreateScatter/Absorption is
invoked from a factory (github issue #51).
* Replace the '$(ncrystal-config --setup)' idiom with one which works also
when entries in PATH contains spaces: 'eval $(ncrystal-config --setup)'
(github isse #52).
* Rename internal radius variable in McStas sample, to avoid clashes with
component parameter (apparently this gave issues for McStas 3.0).
v2.2.2 2020-12-11
* Bugfix for system-wide installations. Input files were
accidentally opened in RW mode rather than just readonly, causing
permission errors when user invoking NCrystal did not have
write-permission to the input file. Thanks to the McStas crew for
noticing this.
v2.2.1 2020-12-02
* Bugfix restoring support for .nxs/.laz/.lau files which was accidentally
disabled in v2.2.0.
* Modify CMake code slightly to avoid warnings or unset CMAKE_BUILD_TYPE
under certain conditions where NCrystal is included as a sub-project.
v2.2.0 2020-12-02
* Support plugins (github issue #50)! Such plugins can be externally
developed (for instance on GitHub), and either loaded dynamically at
run-time by NCrystal or statically compiled into the NCrystal library
(see the next item). How to use or develop plugins is described in
more detail at https://github.com/mctools/ncrystal/wiki/Plugins .
* Major revamp and modernisation of CMake configuration code. Client code
can now find NCrystal via find_package statements (github issue #45),
which makes an NCrystal::NCrystal library target available. Geant4-code
needing the Geant4-NCrystal hooks must instead search for G4NCrystal
with find_package and add a dependency on the G4NCrystal::G4NCrystal
target. The new CMake code also facilitates static inclusion of
externally developed plugins (if for some reason this is preferred to
dynamic loading of the plugins). NCrystal now requires CMake 3.10.
A side-effect of the modernised CMake code is that installation
directories are affected somewhat.
* Add ncrystal-config script which can be queried for details about a
given installationn, or even used to setup the user environment by
typing $(./path/to/ncrystal/installation/bin/ncrystal-config --setup) in
a shell. The installed setup.sh file now simply wraps such a call.
A side-effect of the work on ncrystal-config and CMake is that NCrystal
installations are in general more relocatable and should continue to
function even if the installation directory is moved.
* Officially stop support of Python2 (github issue #48). Python2 (and many
major Python projects) had EOL January 2020, and PyPI (aka pip install)
has announced end of support for Python2 by January 2021. Users needing
to use NCrystal with Python2 will have to stick with NCrystal release
v2.1.1.
* Add support for NCRYSTAL_DATA_PATH variable, checked after
NCRYSTAL_DATADIR env. var and NCRYSTAL_DATADIR preprocessor definition
(github issue #49).
* Add ability to browse a list of available .ncmat files (of course only
those in the current working directory or search path). Can for instance
be accessed via "ncrystal_inspectfile --browse" (github issue #5). The
same tool can also --extract content of available files, and display
available plugins with --plugins.
* Fix Python interface cleanup-order bug where __del__ method could refer
to an already removed ctypes module at programme shutdown.
* Fix silly bug where W was left out of the alphabet in a few places.
* Fix big affecting printing of MatCfg objects with in-memory datafiles.
* Remove obsolete functions naturalElementDB and naturalElementDBByName
from Python interface (use the atomDB function instead), and update the
ncrystal_endf2ncmat script to work with new atomDB interface.
* Modernise C++ code, preventing raw new/delete usage and associated
memory management woes. RCHolder objects can be automatically converted
when possible (to const ptr or base class ptr), and add makeRC / castRC
/ static_castRC functions, similar to std::make_unique and
std::make_shared, but for instantiating classes derived from RCBase
directly into an RCHolder object. Apply new features throughout
codebase, and fix a slew of compilation warnings (mostly for clang12 or
gcc 4.8).
* Add DynLoader utility class for dynamic loading of shared libraries and
access to contained functions (used for dynamic plugin loading).
* Add common utilities for reading environment variables.
* Add ncglob function for file globbing.
* Add FactoryBase::combineScatterObjects helper method to encapsulate
the workarounds still needed in custom scatter factories.
v2.1.1 2020-11-07
* Reverse minor change in NCDefs.hh, which meant that client code which
was including public NCrystal C++ headers was prevented from using constants
like M_PI and friends (of course, usage of such constants is not
portable, and thus not really recommended). Release 2.1.1 is otherwise
completely identical to release 2.1.0.
v2.1.0 2020-11-06
* Introduce the NCMAT v3 format, which supports @ATOMDB (github issue #21)
and @CUSTOM_ sections (github issue #42). As usual, the file
docs/ncmat_doc.md documents the new format in detail.
* With the @ATOMDB section (and the related configuration parameter named
atomdb, documented in NCMatCfg.hh), it is now possible to configure
atomic compositions in a highly flexible manner. Thus, both enriched
elements and impurities/dopants are now supported, and physics constants
such as neutron scattering lengths can be overridden from the data file
-- but most users will likely find plenty of materials in the internal
database. This internal database has now been expanded with 261 isotopes
in addition to the natural elements previously included (note that the
constants for some natural elements have received slight tweaks for
consistency).
* The @CUSTOM sections provides a way to embed custom data in NCMAT files
and having it end up on the Info object (accessible from
C/C++/Python). This is mainly intended for people working on extending
NCrystal with custom or experimental physics models, who need a
mechanism for providing the extra data. Note that by default NCrystal
emits warnings when loading NCMAT files with @CUSTOM_ sections. This is
because files with such sections are by their very nature associated
with custom code development, and therefore can not be expected to
provide consistent physics if shared with a wider community. It is
possible to silence these warnings, via the C++ API or an environment
variable.
* Support for using in-memory NCMAT data (github issue #20). This makes
it possible to initialise materials from dynamic string-data in
C++/Python/C, rather than needing on-disk files.
* Add script ncrystal_ncmat2cpp which can be used to convert NCMAT files
to C++ code which embeds the data directly in a binary, using the the
new feature for in-memory NCMAT data.
* Add CMake installation option for embedding the shipped .ncmat data
files into the NCrystal shared library. Enable via CMake configuration
flag -DEMBED_DATA=ON. The files are still accessible via their usual
names in NCrystal cfg strings, e.g. createScatter("Al_sg225.ncmat") will
still work, even if there will be no physical Al_sg225.ncmat file
installed.
* Added advanced C++ example which shows how it is possible to customize
NCrystal and add a new physics model. The example also use the new
features for in-memory files and @CUSTOM_ section in .ncmat files.
The example is in the file examples/ncrystal_example_customphysics.cc
(which compiles to the executable bin/ncrystal_example_customphysics
when installing via CMake).
* The internal database of elements and isotopes is now accessible also in
the C and Python interfaces. In Python, one can iterate through all
entries using the new module-level function named iterateAtomDB, or
extract specific entries using the new module-level function named
atomDB. The latter accepts either Z and A values, or strings such as
"Al", "He3", etc.
* The Python-API is made slightly more convenient, by equipping the
Process and Scatter classes with new methods named xsect and
genscat. These methods optionally accepts neutron wavelengths (by the wl
parameter), and will delegate the calls to oriented and non-oriented
functions depending on whether the parameter named direction was provided.
* Various other improvements were done for the Python interface as well:
AtomInfo, Compositions, and all Debye temperature methods are now
accessible as well, there are now functionality for efficiently
generating large amount of oriented scatterings, and finally all classes
and methods now have proper doc-strings.
* Various improvements were carried out in the C++ code: removed obsolete
__cplusplus >= 201103L precompiler checks, added more string utility
functions, made wl2ekin and ekin2wl constexpr, made createInfo(..)
multi-thread safe, added NCRYSTAL_API macro to new classes and functions
(including those introduced in v2.0.0). Remove custom UniquePtr class in
favour of std::unique_ptr from C++11. Improve RCHolder class (*,->
overloading, move semantics).
* Fix radian->degree conversion in the plot of scatter angles versus
wavelength provided by ncrystal_inspectfile (it was multiplying by 57
instead of 180/pi which is 0.5% off).
* Support the rare use-case of wanting HKL structure factors calculated
with Debye-Waller factors forced to unity (github issue #22). Setting
the NCRYSTAL_FILLHKL_FORCEUNITDEBYEWALLERFACTOR environment variable
will now result in just this.
* Parsing of NCMAT v1 files now more strictly adheres to the
specification, and does not allow comments except as full-line comments
before the first data section.
* Info dumps will now detect and display simple fractions in atomic
positions (e.g. "1/3" instead of "0.666667"). This only happens for
denominators <=64 and for exact matches at full double-precision.
* Internal NCrystal header files are now exposed in the internal sub-
directory (github issue #46) with include statements like #include
"NCrystal/internal/NCMath.hh" . These are meant to facilitate
experimental development of new features, and are not guaranteed to
present a stable API. They also do not in general contain NCRYSTAL_API
statements needed for symbol visibility in certain builds.
v2.0.0 2020-08-13
* Milestone 2.0.0 release!
* The main feature of this release is that it finally brings proper
state-of-the-art inelastic physics to NCrystal. Additionally, also
incoherent-elastic scattering was cleaned up and made self-consistent,
so NCrystal v2.0.0 can truly be said to be the release in which NCrystal
finally moves beyond its former focus on Bragg diffraction. Additionally
and also for the first time, NCrystal can now support the modelling of
certain non-crystalline materials (e.g. liquids).
* The actual changes between NCrystal v1.0.0 and v2.0.0 took place in ~500
commits touching several hundreds of files, and are far too vast to list
here in detail. However, the release announcement page for NCrystal
2.0.0 attempts to provide a short summary of user-facing changes
concerning physics capabilities, the materials data library, and the
syntax of NCrystal configuration strings:
https://github.com/mctools/ncrystal/wiki/Announcement-Release2.0.0
* A few technical details warrent highlighting here though as they
potentially impact deployment: Firstly, NCrystal now requires C++11 or
later for compilation, the older standards C++98 and C++03 are no longer
supported. Secondly, in order to support C++11, the standard NCrystal
CMakeLists.txt file now requires CMake 3.1.0 or later (as opposed to the
previous requirement of CMake 3.0.0). Finally, in order to backport
std::span from C++20 for internal usage in NCrystal code, a single file
(NCSpan.hh) is for now covered under the Boost Software License (the
license text is included in the file NCSpan.hh itself). This license is
even more permissive than the Apache 2.0 license which still covers the
rest of the core NCrystal code, and as such this should not add any new
licensing burdens to users.
v1.99.1 2020-08-11
* Release candidate number 1 for the new major release v2.0.0. The only
difference between this release and the release v2.0.0 is in a few
pieces of documentation and changed wording in an error message. Thus,
for all practical purposes it is identical to release v2.0.0.
v1.0.0 2019-07-05
* Milestone 1.0.0 release!
* Introduce new optional modelling of more realistic energy transfers in
inelastic scattering which can be enabled by setting
bkgd=phonondebye:modeldeltae. This feature is still to be considered
highly experimental and unvalidated.
* C-buffer length fixes for gcc 8.2.0.
* Prefer importlib.import_module rather than exec in ncrystal_inspectfile
v0.9.19 2019-02-19
* Default value of sccutoff parameter is moved slightly down, from 0.5Aa
to 0.4Aa and to make the effect less complicated, fsquared values are no
longer taken into account. The effect of the change is very small,
influencing the single crystal mosaicity distributions slightly for
neutrons with wavelengths below 1Aa.
v0.9.18 2019-01-24
* SPACEGROUP field is now optional in .ncmat files (but is always provided
in all official ones).
* The loadNCMAT function now accepts std::string for convenience.
v0.9.17 2019-01-11
* Change source for Quartz data file (results in small numerical changes only).
* Add new datafile for Sodalite.
* Updated year in copyright notice in all files.
v0.9.16 2018-12-18
* Fix small mistake preventing compilation of McStas component.
v0.9.15 2018-12-18
* Add three new materials, expanding coverage of data library: Uraninite,
Aragonite and SiLu2O5.
* Lower default dcutoff value for most .ncmat files to 0.1Aa, in response
to validation plots of Uraninite.
* Updated year in copyright notice in all files.
* Laz/Lau file loader now deals correctly with missing lattice_b/lattice_c
parameters, and performs sanity checks in all cases.
* Provide convenience functions/methods to Info objects, providing
d-spacing of a given hkl value.
* FillHKL use numerically stable summation when calculating structure factors.
* Add NCrystal version printout from the NCrystal_sample component in
McStas. Also sanity check the header file and library versions found.
* Add NCDebyeMSD utilities for getting mean squared atomic displacements
in the Debye model and use in .ncmat factory (to replace isotropic
Debye/Glauber model everywhere for consistency).
* For cosmetic reasons, avoid signed negative zero in atomic positions.
* Minor updates to .ncmat files (mostly cosmetic or rounding of numbers).
v0.9.14 2018-10-17
* Minor change in Geant4 interface to support Geant4 10.4 and later releases.
v0.9.13 2018-09-27
* Stop shipping hand-written .nxs files. Instead, attempt to auto-generate
.nxs files from all shipped .ncmat files, and where possible ship
those. This is done in order to ensure greater consistency and a lower
burden of maintenance moving forward. During this process a few issues
were found with Wyckoff positions in a few .nxs files, which should now
be fixed by the new procedure.
* Changed dcutoff for crystals with complex unit cells (like yttrium
oxide) from 0.4Aa to 0.25Aa when loading from .ncmat. For all other
.ncmat files in our data library, the value stays at 0.15Aa.
* Fix LCBragg error in case of the double degenerate case where both
neutron and lcaxis are parallel to (0,0,1).
* Faster fillHKL function, in particular for very small dcutoff values.
* The fillHKL function now supports the NCRYSTAL_FILLHKL_IGNOREFSQCUT
environment variable, which can be used to disable the fsquarecut entirely.
* Increased numerical stability in structure factor summation during
PCBragg initialisation.
* Phase out usage of non-standard constants like M_PI.
* Increase MC overlay safety factor slightly for LCBragg scatter generation.
* Improve colors and linestyles in ncrystal_inspectfile script.
* LCBraggRef models use numerically stable summation.
v0.9.12 2018-08-28
* Fix GaussMos cache-polution bug, where planes with similar d-spacing but
different Fsquared could get wrong Q-factor in single crystals with large
mosaicity.
* Fix uninitialised variable in NCMatCfg.cc, affecting only floating point
parameters not supporting units.
* Allow re-seeding of the RandXRSR fallback RNG.
* Add McStas example instrument file.
* More checks for invalid geometry parameters in the McStas component.
v0.9.11 2018-08-18
* Mark API functions and classes in an attempt to support Windows DLL
builds and UNIX builds with -fvisibility=hidden (see github issue #17).
* Add missing include in NCPCBragg.cc.
v0.9.10 2018-08-15
* This release represents a large amount of work in many areas, and in
particular focusing on aspects of Bragg diffraction in single crystals.
* The Gaussian mosaicity modelling code was completely reimplemented,
going back to the fundamental equations and making sure everything is
carried out in a consistent and precise manner. Cross-section evaluation
automatically selects between efficient numerical Romberg integrations
and evaluation of new improved closed-form expressions, which takes the
relevant spherically geometric into account. The code thus now
gracefully handles everything from backscattering to forward scattering
scenarios, and a large dynamic range of mosaicities, covering at least a
range of 0.01arcseconds to tens of degrees. Despite this, computational
speed is also improved, thanks to various enhancements and in particular
faster code for searching through the available plane normals. A new
parameter, mosprec, can be used to tune the tradeoff between precision
and speed. The default value of 1e-3 is likely adequate for almost all
users.
* Introducing a completely new and precise modelling of layered crystals,
with the LCBragg class. This class, primarily intended to be used for
modelling of Pyrolythic Graphite, by default takes the rotational
aspects of such crystal into account using an from-first-principles
approach to figuring out which sets of normals will contribute to the
scattering cross-sections, and then finding the exact contribution
through efficient numerical integrals. A crystal is considered to be a
layered crystal if it has the lcaxis vector parameter set. Additionally,
the lcmode parameter can be used to select slower reference parameters,
which simply sample an SCBragg single-crystal instance many times, in
different rotated systems.
* Huge speedup when modelling low-wavelength (<1Aa) neutrons in single
crystals: Approximate the very large number of very weak and
uninteresting scatter planes at 2*d-spacings < 1Aa with an isotropic
mosaicity distribution, which is a rather appropriate approximation due
to the very large number of very weak planes involved. The cutoff value
of dspacing=0.5Aa can be modified with the new sccutoff parameter.
* Bragg diffraction in powders and polycrystals was never slow, but the
PCbragg class was nonetheless rewritten to become even faster by working
on energies directly, avoiding internal conversions to wavelength at
each call.
* Embedded an NCRYSTALMATCFG[lcaxis=0,0,1] statement in the data file
C_sg194_pyrolytic_graphite.ncmat, so that it will by default be modelled
as a layered crystal with the correct rotation axis, which is likely
what almost all users will want.
* Calling generateScattering where cross-sections are vanishing now
generally leads to nothing happening (i.e. scatter_angle = 0 and
delta_ekin=0) rather than the previous fallback of isotropic elastic
scattering.
* Retire RandSimple and introduce instead RandXRSR implementing the
xoroshiro128+ generator. This means that the fall-back RNG option
shipped with NCrystal is now not only fast, but also fully suitable for
scientific work.
* Fix bug in the NCrystal McStas component which resulted in wrong
attenuation factors being calculated for the default absorption mode.
* Changed the conversion constants used in the McStas component in order
to make unit conversion issues in the NCrystal-McStas interface less
likely to produce undesired imprecision. Further discussions with McStas
devs will be needed in order to completely address the issue.
* Code creating lattice rotation matrices was updated in order to avoid
small rounding errors in the generated normals in most cases.
* More sanity checks and input pruning of atomic positions and lattice
structure loaded from input files. Also improved robustness of .nxs file
loading.
* Remove spurious ref-count increase in CalcBase::setRandomGenerator
(thanks to A. Morozov for the report).
* Fix windows builds (see github issue #17). Many thanks to A. Morozov for
a detailed report.
* Many general infrastructure improvements: Refactor random sampling
algorithms from CalcBase objects (a necessary step for future enhanced
MT support). Refactor orientation code from SCBragg (now used by both
SCBragg and LCBragg). Refactor .ncmat loading code to disentangle the
parsing code from the code. Lots of new utilities: Cubic splines,
Romberg integration, root finding, derivative estimation. Single header
NCDefs.hh providing all ubiquitous definitions and infrastructure
related to memory handling and error reporting, and also handles
includes which must get special treatment due to differences between
platforms or C++ versions. Add UniquePtr (similar to C++11's
unique_ptr). Add PlaneProvider (supported in PCBragg, SCBragg, LCBragg),
for customizing which planes goes in which process. Avoid bind1st usage
as it is removed in C++17. Custom functions for evaluating sine and
cosine of angles in various ranges - between 5-10 times faster than the
standard functions at 15 significant digits. Also add fast
approximations for atan and exp. Performed careful changes to ncmin and
ncmax functions with large performance implications (surprisingly,
std::fmax generates very inefficient machine code:
https://godbolt.org/g/Dxy52A ). Add helper class for efficiently
generating sine and cosine values for all grid-points in a grid. PCBragg
supports more custom constructors.
v0.9.9 2018-03-26
* Expose loadNCMAT function to client C++ code, making it possible to work
with .ncmat files completely independent from the factory
infrastructure.
* Cleanup internal .ncmat loading code, splitting out fillHKL to a new
utility file and renaming old loader code to be purely a parser.
* Allow Wyckoff positions and mean-squared-displacement parameters on
NCInfo.
* Rename standard factories to stdnxs, stdncmat, stdlaz, stdscat and
stdabs respectively.
* Allow factory-specific parameters to be passed along to info
factories. Thus, expandhkl which was until now a global NCMatCfg
parameter, is now a parameter specific to the stdncmat factory. The
stdnxs factory gets two flags: mcstaslike and fixpolyatom. The former
makes nxs-provided bkgd curves use same composition as in the McStas nxs
component (the default is to compose as in NXSG4).
* Remove polyatom fix in wrapped nxslib code, so bkgd=external xs curves
for .nxs files are now completely as in NXSG4, apart from the fact that
our version contains fixes for crashes (reported upstream).
* Rename NonOrientedScatter to IsotropicScatter.
* Fix compilation error under some compilers in NCRCBase.hh.
v0.9.8 2018-03-19
* Decouple PhononDebye background cross-section code from .ncmat format,
making it the new default also for .nxs files. For .nxs files, it is
still possible to select the old behaviour of using curves provided by
nxslib itself by configuring those files with "bkgd=external". A side
benefit of this splitout can in some cases result in significant faster
initialisation times when working with .ncmat files.
* Major cleanup and renaming of configuration variables, in preparation of
the 1.0.0 release milestone. The renames are: "mosaicity"->"mos",
"orientationprimary"->"dir1", "orientationsecondary"->"dir2",
"orientationtolerance"->"dirtol", "packingfactor"->"packfact",
"dcutoffupper"->"dcutoffup", "scatterbkgdmodel"->"bkgd",
"scatterfactory"->"scatfactory, "absorptionfactory"->"absnfactory" and
"skippbragg" becomes "bragg" but with opposite logic, e.g. "bragg=0"
disables Bragg diffraction. Removed entirely was the variables
braggonly (use "bkgd=none" or "bkgd=0" instead now) and
"nphonon". Experts can now instead tune parameters for specific
background models by embedding them in the "bkgd" parameter value
itself, e.g. "bkgd=phonondebye:nphonon@20".
* Temporarily disable single-crystal speedup code while we investigate
further, due to concerns that it is too aggresive (see github issue #13).
v0.9.7 2018-03-06
* Don't produce floating point exception when loading .ncmat files with H,
Li, Ti, V or Mn (github issue #8).
* McStas component now actually applies requested packingfactor for powder
materials (github issue #9).
v0.9.6 2018-02-07
* Fix visualisation of box-shaped sample in McStas component.
* Rename McStas component parameter multscatt to multscat.
v0.9.5 2018-02-05
* Add support for python3 (github issue #6).
v0.9.4 2018-01-31
* Correct version numbers.
v0.9.3 2018-01-31
* NCrystal_sample.comp (McStas interface): Fix link flags on OSX
(github issue #3) and compilation warnings (github issue #4).
v0.9.2 2018-01-23
* Fix cross-section and material composition bugs in Geant4
interface. Only affects Geant4 users.
* CMakeLists.txt: Always use absolute rpath (needed on OSX).
* Fix gcc7 compilation.
v0.9.1 2017-08-30
* Proper behaviour of python interface if Numpy is absent.
v0.9.0 2017-08-30
* First github based public release of NCrystal.