forked from Chaste/Chaste
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReleaseNotes.html
1632 lines (1385 loc) · 148 KB
/
ReleaseNotes.html
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
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Chaste Release Notes</title>
</head>
<body>
<h1>Chaste Release Notes</h1>
<h2>Release 2021.1 (changes since Release 2019.1)</h2>
<h3>Headline features</h3>
<ul><li>Chaste has now been <strong>updated to Python3 (3.5+)</strong>.
<ul><li>New dependencies (which most systems will already have):
<ul><li>python3
</li><li>python3-venv
</li><li>python3-pip
</li></ul></li><li>The following Python2 dependencies are no longer required:
<ul><li>python-devel
</li><li>python-lxml
</li><li>python-amara
</li><li>python-rdflib
</li><li>python-dateutil
</li></ul></li></ul></li><li>Chaste now supports Ubuntu 20.04 LTS (Focal).
</li></ul>
<h3>New dependency support</h3>
<ul><li>Chaste now supports PETSc up to 3.12, Boost up to 1.74, SUNDIALS up to 4.1.0 and VTK up to 8.2.
</li></ul>
<h3>Heart</h3>
<ul><li>The CellML to Chaste hpp/cpp converter was <tt>PyCML</tt> (based on Python 2) this has been replaced by <tt>chaste_codegen</tt> (<a href="https://github.com/ModellingWebLab/chaste-codegen">https://github.com/ModellingWebLab/chaste-codegen</a>, based on Python 3). See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides">ChasteGuides</a>/CodeGenerationFromCellML for info on how to use this new library at the command line, but no changes needed unless you were using PyCML manually before. There are a couple of nice new features with this:
<ul><li>You no longer need to manually use the proprietary software Maple to compute Analytic Jacobians for CVODE to get speed ups, we now use the free software <a href="https://www.sympy.org/en/index.html">SymPy</a> behind the scenes to do this on the fly. <strong>N.B. these are now generated and used automatically, but are known to cause issues in a handful of models, so use the <tt>ForceUseOfNumericalJacobian()</tt> method if CVODE errors suddenly appear and you hadn't heard of using Maple or analytic Jacobians before. See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/SingleCellSimulation">https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/SingleCellSimulation</a> for more info.</strong>
</li><li>We now automatically analyse your model to detect singularities in <a href="https://en.wikipedia.org/wiki/Goldman%E2%80%93Hodgkin%E2%80%93Katz_flux_equation">GHK equations</a>, and apply an interpolation fix so that they don't cause any problems at the voltages of concern (often, but not always, V=0). From now on, <strong>manual fixes for these singularities should be removed from CellML files</strong>. We'll be writing a note on how exactly we've done this, but you can examine the results of the fixes <a href="https://github.com/ModellingWebLab/chaste-codegen/blob/assets/singularity_fixes.md">here</a> for a range of models (grey=original, red=fix, orange shaded region=voltage range where interpolation is used). As a nice side-effect, lookup tables no longer need to go from offset voltages like -150.00001mV to 100.00001mV to avoid hitting these singularities, and have been moved to nice round numbers!
</li></ul></li></ul>
<h3>Cell Based</h3>
<ul><li>You can now specify any dimension to have a periodic boundary condition in 3-D <tt>NodeBased</tt> simulations. This also works in parallel. See for example <tt>TestOffLatticeSimulationWithNodeBasedCellPopulationIn3d::TestSimple3dTissueYPeriodic</tt>
</li></ul><ul><li>Fixed to output of cell proliferative type to stop this output being overwritten by mutations state or label id.
</li></ul><ul><li>Bug fix on daughter cell placement in off-lattice centre-based simulations. Daughter cells are now correctly placed equal distances from the parent cell centre location.
</li></ul><ul><li>Changes to performance and correctness of <tt>VertexBased</tt> code.
<ul><li>Bug in <tt>MutableVertexMesh::PerformIntersectionSwap()</tt> working at boundary of <tt>VertexMesh</tt> found and fixed. Previous code expected there to be four elements surrounding the intersection whereas, at the boundary, there are several other cases.
</li><li>Bug fix to <tt>MutableVertexMesh::PerformT2Swap()</tt> in the case where a small triangular element has no neighbours.
</li><li>Performance optimization to <tt>MutableVertexMesh::CheckForIntersections()</tt>.
</li></ul></li></ul>
<h3>Future Plans</h3>
<p>
This will be the last release of Chaste to support Ubuntu 16.04 LTS and its dependencies. The following will not be supported in future releases:
</p>
<ul><li>Boost < 1.65.1
</li><li>CMake < 3.10.2
</li><li>HDF5 < 1.10.0
</li><li>PETSc < 3.7.7
</li><li>VTK < 6.3.0
</li><li>Xerces < 3.2.0
</li><li>SUNDIALS < 2.7.0
</li></ul>
<h2>Release 2019.1 (changes since Release 2018.1)</h2>
<h3>Headline features</h3>
<ul><li>Chaste is now compiled with <a href="https://en.wikipedia.org/wiki/C%2B%2B14">C++14</a>.
</li><li>Chaste now supports up to and including Ubuntu 19.04 (Disco).
</li><li>The minimum required CMake version for building Chaste is now 3.5.1.
</li><li>Installing Chaste is now even easier using the new <a href="https://github.com/Chaste/chaste-docker">docker image for Chaste</a>.
</li></ul>
<h3>New dependency support</h3>
<ul><li>Chaste now supports PETSc up to 3.11, Boost up to 1.70, HDF5 up to 1.10.5, Xerces up to 3.2.2, SUNDIALS up to 3.1.0 and VTK up to 8.1.
</li><li>Chaste no longer supports PETSc < 3.6, Boost < 1.58, HDF5 < 1.8.16, XSD < 4.0.0, Xerces < 3.1.3, SUNDIALS < 2.5.0 and VTK < 6.2.
</li></ul>
<h3>Core</h3>
<ul><li>Two new CMake build types have been added: <tt>AggressiveOpt</tt> which sets <tt>-Ofast -march=native -DNDEBUG</tt> and is good for release builds with more aggressive optimisation, and <tt>DebugOpt</tt> which sets <tt>-Og -g</tt> and is a good default for an edit-compile-debug workflow.
<ul><li><tt>TestChasteBuildInfo.hpp</tt> is now displaying correct information for C++ compiler flags for both cmake and the old scons build system.
</li></ul></li><li>Dropping support for XSD 3.x should prevent Chaste builds from emitting warnings about deprecated <tt>std::auto_ptr</tt>.
</li><li>The <tt>docs</tt> directory has been refactored to contain more relevant information, and now includes a <a href="https://joss.theoj.org/">JOSS</a> paper about Chaste and recent publications it has enabled.
</li><li>The unused interface <tt> Hdf5DataWriter::DefineFixedDimensionUsingMatrix()</tt> was <strong>deleted</strong>.
</li></ul>
<h3>Heart</h3>
<ul><li>Intracellular calcium is now converted consistently into milliMolar within the action potential models and so the method <tt>AbstractCardiacCellInterface::GetIntracellularCalciumConcentration()</tt> (used by mechanics models) always returns calcium in milliMolar. Note that this has changed the state variable ordering in the PyCML-generated C++ models, so any archives of these variables will need to be updated.
</li><li>Tweaks to <tt>SteadyStateRunner</tt> class which might provide a speed-up for getting certain action potential models to steady state, by removing maximum time step from CVODE and solving separately during stimulus and non-stimulus regions.
</li><li>The behaviour of <tt>AbstractCardiacProblem<>::SetOutputNodes()</tt> and <tt>SingleTraceOutputModifier</tt> has been altered. When running in parallel node indices into the original mesh are now automatically converted to indices into then permuted runtime mesh.
</li></ul>
<h3>Future Plans</h3>
<ul><li>This is the last release of Chaste to support Xerces < 3.1.2.
</li></ul></div>
<h2>Release 2018.1 (changes since Release 2017.1)</h2>
<h3>Headline features</h3>
<ul><li>Chaste now supports Ubuntu 18.04 LTS (Bionic).
</li></ul>
<h3>New dependency support</h3>
<ul><li>Chaste now supports Boost 1.66 and 1.67 (boosts 1.64 and 1.65 are a bit buggy for us and should be avoided if possible).
</li><li>Chaste now supports CVODE (Sundials versions) 3.0.0 and 3.1.0.
</li><li>Chaste now supports HDF5 versions 1.8.20 and 1.10.2.
</li><li>Chaste now supports PETSc versions 3.8 and 3.9.
</li><li>Chaste now supports VTK version 8.1.
</li><li>Chaste now supports Xerces versions 3.2.0 and 3.2.1.
</li></ul>
<h3>Core</h3>
<ul><li>CVODE 3.0.0 has changed its interface for analytic Jacobians, dropping the <tt>long int N</tt> that was the first argument. We have followed suit in Chaste's <tt>AbstractCvodeSystem::EvaluateAnalyticJacobian()</tt> method, so <strong>this may break user projects</strong> if you have your own CVODE systems which override this method. To fix this just delete the argument and get the size directly from the vectors if you need it.
</li></ul>
<h3>Future Plans</h3>
<p>
This will be the last release of Chaste to support Ubuntu 14.04 LTS and its dependencies. The following will not be supported in future releases:
</p>
<ul><li>Boost < 1.58
</li><li>CMake < 3.5
</li><li>HDF5 < 1.8.16
</li><li>Parmetis < 4.0
</li><li>PETSc < 3.6
</li><li>VTK < 6.2
</li><li>XSD < 4.0
</li></ul></div>
<h2>Release 2017.1 (changes since Release 3.4)</h2>
<h3>Headline features</h3>
<ul><li>Chaste's build system has moved from <tt>scons</tt> to <tt>cmake</tt> (although <tt>scons</tt> will work with this release, it may not be supported in future).
</li><li>Chaste now uses C++11 rather than C++98, and users and developers can begin to use the new features introduced in C++11.
</li><li>We have updated support for dependencies and new compilers, up to gcc 7.2, intel 17 and clang 5.0. Chaste 2017.1 is compatible with all Ubuntus up to 17.10 that are still in support.
</li><li>We have changed our version control system (from <tt>svn</tt> to <tt>git</tt>), which allows users more flexibility in choosing the stability of their Chaste version. Releases such as this are the most stable, but a host of other options now available, and listed at <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/ExternalDeveloperGuide">ChasteGuides/ExternalDeveloperGuide</a>. The repository is mirrored at <a href="https://github.com/Chaste/Chaste">https://github.com/Chaste/Chaste</a>.
</li><li>Chaste no longer supports cmake < 2.8.12, scons, PETSc < 3.4, Boost < 1.54, HDF5 < 1.8.11, XSD < 3.3, Xerces < 3.1.1, Sundials < 2.5.0, and VTK < 5.8, as these were dropped with Ubuntu 12.04.
</li></ul>
<h3>New functionality & code changes</h3>
<h4>Cell-based</h4>
<ul><li>Member variables have been added to <tt>NodeAttributes</tt> to store neighbouring nodes, speeding up node-based simulations by a factor of between 2 and 3.
</li><li>Improvements to vertex robustness and speed:
<ul><li>The method <tt>GetShortAxisOfElement()</tt> has made more robust to cell size.
</li><li>A member variable <tt>mDistanceForT3SwapChecking</tt> has been added to <tt>MutableVertexMesh</tt>, which can be used to speed up vertex model simulations with a free boundary.
</li><li>The restriction on vertex displacements at each timestep of vertex model simulations has been made optional by the addition of a member variable <tt>mRestrictVertexMovement</tt> to <tt>VertexBasedCellPopulation</tt>.
</li></ul></li><li>Some cell-cycle models have been renamed (<tt>AbstractSimpleGenerationBasedCellCycleModel</tt> to <tt>AbstractSimpleGenerationalCellCycleModel</tt>, <tt>ExponentiallyDistributedStochasticDurationGenerationBasedCellCycleModel</tt> to <tt>ExponentialG1GenerationalCellCycleModel</tt>, <tt>FixedDurationGenerationBasedCellCycleModel</tt> to <tt>FixedG1GenerationalCellCycleModel</tt>, <tt>GammaDistributedStochasticDurationCellCycleModel</tt> to <tt>GammaG1CellCycleModel</tt>, <tt>StochasticDurationCellCycleModel</tt> to <tt>UniformCellCycleModel</tt>, <tt>StochasticDurationGenerationBasedCellCycleModel</tt> to <tt>UniformG1GenerationalCellCycleModel</tt>).
</li><li>The cell-cycle model hierarchy has been refactored to allow models with no phase, with new classes <tt>AbstractOdeBasedPhaseBasedCellCycleModel</tt>, <tt>AbstractPhaseBasedCellCycleModel</tt>, <tt>BernoulliTrialCellCycleModel</tt>, <tt>FixedSequenceCellCycleModel</tt>, and <tt>NoCellCycleModel</tt> added.
</li><li><tt>DiagonalVertexBasedDivisionRule</tt> has been renamed to <tt>FixedVertexBasedDivisionRule</tt>, and new cell division rules <tt>AbstractCentreBasedDivisionRule</tt>, <tt>FixedCentreBasedDivisionRule</tt>, <tt>RandomDirectionCentreBasedDivisionRule</tt>, and <tt>ShovingCaBasedDivisionRule</tt> have been added.
</li><li>Several methods for adding and removing update rules have changed location and name (e.g. <tt>AddUpdateRule()</tt>, <tt>RemoveAllUpdateRules()</tt> and <tt>GetUpdateRuleCollection()</tt>).
</li><li>Off-lattice models now allow for numerical integration schemes other than Forward Euler to be specified (see <tt>AbstractNumericalMethod</tt> and subclass).
</li><li>A bug relating to archiving of cell-based simulations has been fixed.
</li><li>Node attributes are now correctly copied upon mesh creation and cell division events in centre-based models.
</li><li>A new class <tt>CellDataWriter</tt> and method <tt>OffLatticeSimulation::rGetForceCollection()</tt> have been added.
</li><li>Labelled cells now by default have the default damping constant, not the mutant damping constant.
</li><li>To streamline the cell-based code, the methods <tt>GetDefaultTimeStep()</tt>, <tt>WriteCellPopulationDataToVisualizerSetupFile()</tt>, <tt>WriterForceDataToVisualizerSetupFile()</tt>, <tt>CopySrnModelVariables()</tt> and <tt>SimulationSetupHook()</tt> have been added.
</li><li>Target area modifiers are now permitted on non-vertex-based models.
</li><li>A profiling test has been added for 3D node-based simulations.
</li></ul>
<h4>Cardiac</h4>
<ul><li>The <tt>CellProperties</tt> postprocessing class can now return the times at which peak voltages occurred during each action potential.
</li><li>Mesh partitioning now defaults to parMETIS:
<ul><li>Use of METIS for mesh partitioning is deprecated - the code will drop through to parMETIS with a warning.
</li><li>When the PETSc/partitioner is not available the code will also drop through to parMETIS with a warning (previously the drop-through in this case was to a dumb mesh partition).
</li></ul></li><li>HDF5 output changes:
<ul><li><tt>Hdf5DataWriter</tt> can now cache writes (to whole chunks), improving performance with high-latency I/O systems (i.e. in HPC systems). It can be enabled in cardiac problems with <tt>SetUseHdf5DataWriterCache()</tt>.
</li><li>HDF5 writer chunk size & alignment parameters can now be set from cardiac problems using <tt><whatever>Problem.SetHdf5DataWriterTargetChunkSizeAndAlignment(...)</tt>. This is useful, for example, on a striped filesystem where setting this method with the stripe size (in bytes) will mean chunks fit into and align with the stripes, resulting in best performance.
</li></ul></li><li>A bug in the <tt>CellProperties</tt> APD calculation has been fixed, it was reporting spuriously large action potential durations in the event that a sub-threshold AP preceded a super-threshold AP.
</li><li>Some extra <tt>NodeAttributes</tt> been added (see "Cell-based" above) which have increased the memory footprint of large tissue simulations by about 0.5%, unlikely to be a problem for anyone, but mentioned here in case!
</li><li>We are unable to support and distribute a cardiac "standalone" executable. Users who rely on it should understand that this functionality is still available but that the executable must be compiled from source.
</li></ul>
<h4>Core</h4>
<ul><li>The box collection classes have been refactored:
<ul><li><tt>BoxCollection</tt> renamed to <tt>ObsoleteBoxCollection</tt>, which will be deprecated once functionality (including arbitrary periodicity) has been included in the default class (<tt>DistributedBoxCollection</tt>).
</li><li>Methods <tt>GetLocalBoxes()</tt> have been renamed <tt>rGetLocalBoxes()</tt>.
</li></ul></li><li>A Chaste docker file has been added.
</li><li>The <tt>Identifiable->GetIdentifier()</tt> method has been made more robust to segmentation faults.
</li></ul>
<h3>Future Plans</h3>
<p>
From now on we intend to follow the Ubuntu 6 monthly release schedule, tagging our <tt>master</tt> branch once it contains support for the latest Ubuntu.
</p>
<h2>Release 3.4 (changes since Release 3.3)</h2>
<h3>Headline features</h3>
<h4>General</h4>
<ul><li>Support for Ubuntu [up to] 15.10 added. We aim to ensure compatibility for any Ubuntu that has not reached 'end of life'.
</li><li>Support for Boost up to 1.60 added.
</li><li>See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/InstallGuides/DependencyVersions">InstallGuides/DependencyVersions</a> for all supported versions of dependencies.
</li><li>The CMake builder has been extended to support compilation on Windows, Linux and Mac OS X with a range of compilers. This is part of a planned migration to a unified build system on all platforms.
</li></ul>
<h4>Cardiac</h4>
<ul><li>A new class <tt>AbstractCvodeCellWithDataClamp</tt> allows the 'data clamp' proposed by <a href="http://www.ncbi.nlm.nih.gov/pubmed/15142755">Dokos & Lovell (2004)</a> to be applied to any CellML model. Models inheriting from this class can be generated with <tt>ConvertCellModel.py --cvode-data-clamp</tt>.
</li><li>This is the last release of Chaste for which a pre-built cardiac <em>standalone executable</em> can be bundled.
</li></ul>
<h4>Cell-based</h4>
<ul><li>We have improved functionality for outputting results of cellular automaton (CA) and cellular Potts model simulations, as well as cell-based simulations on periodic domains, to VTK.
</li><li>We have extended functionality for CA simulations, including a new location "switching" rule and division rule class hierarchies.
</li><li>Each cell now contains a "subcellular reaction network model" as well as a cell-cycle model. This mainly affects users of the <tt>DeltaNotchCellCycleModel</tt> class, which is now implemented using the <tt>DeltaNotchSrnModel</tt>, allowing the model to be coupled with any of the cell cycle models (see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/CreatingAndUsingANewSrnModel">UserTutorials/CreatingAndUsingANewSrnModel</a> for details).
</li><li>Much of the vertex model code has been refactored to improve efficiency. In addition, two new classes, <tt>MutableVertexMeshWithRosettes</tt> and <tt>CellRosetteRankWriter</tt>, have been added to implement the necessary functionality for simulating multicellular 'rosettes' (where more than three cells meet at a point).
</li></ul>
<h4>Lung</h4>
<ul><li>A new package for investigating ventilation in the lung using reduced dimensional models has been introduced.
</li><li>Key classes are
<ol><li><tt>MultiLobeAirwayGenerator</tt> allows anatomical models of the conducting airways to be created.
</li><li><tt>AbstractVentilationProblem</tt> and related subclasses allow simulation of airflow on the conducting airway models using a Poiseuille flow model model with Pedley correction.
</li><li><tt>DynamicVentilationProblem</tt> couples nonlinear elastic models of the acini (gas exchange area) to the ventilation model, allowing simulation of the full breathing cycle
</li></ol></li><li>Tutorials for this functionality are available on the tutorials page <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials#LungChaste">UserTutorials#LungChaste</a>.
</li></ul>
<h3>New functionality & code changes</h3>
<p>
New functionality and code changes, which may require changes to user code.
</p>
<h4>General</h4>
<ul><li>An element argument has been added to <tt>AbstractLinearParabolicPde::ComputeSourceTerm()</tt>. If you have your own PDEs inheriting from <tt>AbstractLinearParabolicPde</tt> this argument will need adding to the method (it can be ignored), see e.g. <a href="https://chaste.cs.ox.ac.uk/trac/changeset?new=23885%40trunk%2Fpde%2Ftest%2Fpdes%2FHeatEquationWithSourceTerm.hpp&old=23343%40trunk%2Fpde%2Ftest%2Fpdes%2FHeatEquationWithSourceTerm.hpp">relevant change to the heat equation</a>.
</li></ul
><h4>Cardiac</h4>
<ul><li>Classes inheriting from <tt>AbstractCardiacCellWithModifiers</tt> can now be archived/checkpointed.
</li><li>We have renamed the CellML metadata <tt>leakage_current</tt> to <tt>membrane_leakage_current</tt> as there is also an SR one sometimes... <strong>This may break user projects using this metadata</strong>. There have also been other updates to the metadata which will enable more advanced features in future versions.
</li><li>A light-weight output modifier allows the user to output specific traces during a simulation rather than at post-process time. See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/HowTo#Output">ChasteGuides/HowTo#Output</a>.
</li><li>A bug has been found in one method for partitioning of meshes in parallel code (Windows only). This method has been switched off while we investigate further.
</li></ul>
<h4>Cell-based</h4>
<ul><li>A new tutorial (<a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/CreatingAndUsingANewCellBasedSimulationModifier">UserTutorials/CreatingAndUsingANewCellBasedSimulationModifier</a>) shows how to create and use cell-based simulation modifiers.
</li><li>The new class <tt>VoronoiVertexMeshGenerator</tt> uses Lloyd's Relaxation steps to generate random initial conditions for vertex model simulations.
</li><li>The <tt>PlaneBasedBoundaryCondition</tt> class can be used in a simulation where <tt>ELEMENT_DIM != SPACE_DIM</tt>.
</li><li>Two new force classes, <tt>DiffusionForce</tt> and <tt>DifferentialAdhesionGeneralisedLinearSpringForce</tt>, have been added.
</li><li>The new class <tt>CellVecData</tt> enables a vector (e.g. the solution to an intracellular PDE problem) to be associated with each cell.
</li><li>The default parameter values in <tt>NagaiHondaForce</tt> match those in the original publication.
</li><li>Two new writer classes, <tt>CellDeltaNotchWriter</tt> and <tt>CellPopulationAdjacencyMatrixWriter</tt>, have been added.
</li></ul>
<h3>Future Plans</h3>
<ul><li>This is the last release of Chaste that will:
<ul><li>support Ubuntu 10.04 LTS;
</li><li>support versions of PETSc < 3.0, or boost < 1.48;
</li><li>bundle a pre-built cardiac <em>standalone executable</em> (the executable is dependent on third-party libraries which are to be deprecated).
</li></ul></li><li>Work is progressing on switching the build infrastructure to use CMake and code repository to use Git.
<ul><li>The CMake build is available to test in this release; see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/CmakeBuildGuide">ChasteGuides/CmakeBuildGuide</a> for more details. (SCons will be deprecated at a later date.)
</li><li>The switch of the code repository from Subversion to Git will happen after this release. For information on migrating please see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/GitMigration">GitMigration</a>.
</li></ul></li></ul>
<h2>Release 3.3 (changes since Release 3.2)</h2>
<p>
This release is designed to coincide with several publications that have associated code projects, including <a href="https://chaste.cs.ox.ac.uk/trac/wiki/PaperTutorials/Frontiers2014">PaperTutorials/Frontiers2014</a> and others under review; see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/PaperTutorials">PaperTutorials</a> for the latest list.
It also includes support for new library versions that have been released since Chaste 3.2, and for the latest version of Ubuntu.
</p>
<h3>Headline features</h3>
<h4>General</h4>
<ul><li>A new run time flag <tt>-citations [file]</tt> was implemented that generates a list of BibTeX-format citations for the libraries/algorithms used in a particular run. With no arguments the citations are printed to std::cout. With an optional argument they are printed to a file on disk (note: a relative or absolute path may be given but the directory must exist and be writeable).
</li><li>Chaste works with most recent PETSc versions up to and including PETSc 3.5.
</li><li>Recent releases of Boost (1.56 and newer) are now supported, and support for versions prior to 1.40 has been dropped.
</li><li>CodeSynthesis XSD version 4.0 is now supported.
</li><li>Ubuntu Utopic (14.10) is now supported.
</li></ul>
<h4>Cardiac</h4>
<ul><li>Meshalyzer output is now off by default, as more people are using VTK. It can be turned back on with <tt>HeartConfig::Instance()->SetVisualizeWithMeshalyzer()</tt>.
</li><li>A human heart mesh has been added to our public data repository: <a href="https://chaste.cs.ox.ac.uk/trac/browser/data/public">https://chaste.cs.ox.ac.uk/trac/browser/data/public</a>
</li></ul>
<h4>Cell-based</h4>
<ul><li>The re-factoring of the way cell populations write data to file, begun in the last release, has been further refined. See below for more details.
</li></ul>
<h3>Major new functionality & code changes</h3>
<h4>General</h4>
<ul><li>PETSc 3.5 support has been added. If you have been solving nonlinear systems with your own Jacobian matrices, then the method interface needs to change to work with PETSc 3.5. The commit <a href="https://chaste.cs.ox.ac.uk/trac/changeset/22721" title="#2565 PETSc 3.5 support">r22721</a> gives lots of examples of how to do this.
</li><li>In Boost 1.56 the algorithm for generating normal random numbers has changed, to fix a bug in earlier Boost versions. Chaste now uses that algorithm across all Boost versions, giving consistent results, but this means <strong>random numbers have changed from previous Chaste releases</strong>, and this may change simulation results.
</li></ul>
<h4>Cardiac</h4>
<ul><li>The formulation for extended biodomain (tridomain) has been changed from solving for voltages (3 phi variables at each point in space) to transmembrane potentials (1 phi and 2 V_m variables at each point in space). The new matrix formulation is symmetric and hence faster linear solvers (conjugate gradient) are now used by default. Checkpointing is backward compatible.
</li><li>The list of Oxford CellML metadata has been moved to a new file <tt>oxford-metadata.ttl</tt>, see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/CodeGenerationFromCellML#Standardisednames">CodeGenerationFromCellML</a> for more details.
</li><li>Lookup table settings can take advantage of automatic units conversion.
</li><li>A new lightweight output class has been added as an addition (or replacement) to HDF5 output and post-processing. There are currently two concrete implementations: <a href="https://chaste.cs.ox.ac.uk/docs/classSingleTraceOutputModifier.html" title="Documentation for the SingleTraceOutputModifier class">class:SingleTraceOutputModifier</a> which outputs time and voltage(s) at a single node to a named file during the simulation and <a href="https://chaste.cs.ox.ac.uk/docs/classActivationOutputModifier.html" title="Documentation for the ActivationOutputModifier class">class:ActivationOutputModifier</a> which computes a limited number of activation/recovery times at every node with results being written to file at the end of the simulation.
</li></ul>
<h4>Cell-based</h4>
<ul><li>The method <tt>OutputSimulationModifierParameters()</tt> has been added to the simulation modifier class hierarchy. This is pure virtual in <tt>AbstractCellBasedSimulationModifier</tt> so must be provided by subclasses.
</li><li>For clarity, <tt>CellLocationWriter</tt> and <tt>CellVariablesWriter</tt> have been renamed to <tt>CellLocationIndexWriter</tt> and <tt>CellCycleModelProteinConcentrationsWriter</tt> respectively; their associated output filenames and VTK cell data names have also been updated.
</li><li>Writers which involve total counts of cells (<tt>CellMutationStatesCountWriter</tt>, <tt>CellProliferativeTypesCountWriter</tt> and <tt>CellProliferativePhasesCountWriter</tt>) form a new subclass which behaves differently to the <tt>CellPopulationWriter</tt> class. They should be added to the population with <tt>AddCellPopulationCountWriter<>()</tt>.
</li></ul>
<h3>Minor</h3>
<p>
New functionality and code changes, which may still require changes to user code.
</p>
<h4>General</h4>
<ul><li>Code timing should now be done with the <a href="https://chaste.cs.ox.ac.uk/docs/classTimer.html" title="Documentation for the Timer class">class:Timer</a>, rather than manual calls to <tt>std::clock</tt> or <tt>MPI_Wtime</tt>.
</li><li>Updated random normal distribution sampling using <tt>RandomNumberGenerator</tt> - it has been altered to match the results from the latest boost (no matter what version of boost you are using): a small bug fix introduced in boost 1.56.
</li><li>Fixed a bug in reseeding random normal numbers. If you had called a random normal distribution sample an odd number of times, the first number you got after reseeding was what the next one should have been before reseeding.
</li><li>We have replaced all occurrences of <tt>PetscTruth</tt> with <tt>PetscBool</tt>. New code should be written to use the newer type (<tt>PetscBool</tt>).
</li><li>Some new utility methods have been added: <tt>OutputFileHandler::GetRelativePath</tt>, <tt>PetscTools::IsInitialised</tt>, <tt>FileComparison::IgnoreBlankLines</tt>
</li></ul>
<h4>Cardiac</h4>
<ul><li>If using many different cell models with lookup tables, the memory used could become excessive. A new <tt>FreeMemory()</tt> method has been added to the <a href="https://chaste.cs.ox.ac.uk/docs/classAbstractLookupTableCollection.html" title="Documentation for the AbstractLookupTableCollection class">class:AbstractLookupTableCollection</a> class for releasing memory when a particular cell model is no longer needed. Note that if you are just using multiple instances of the same cell model there is no need for this, as the lookup tables are shared between instances.
</li><li>Running a parallel cardiac simulation on more processes than suitable for the size of the problem now produces an error which terminates the simulation (rather than a warning). This is to avoid potential deadlock later in the run.
</li><li>There is a new method <tt>SetSolver()</tt> on <a href="https://chaste.cs.ox.ac.uk/docs/classAbstractCardiacCellInterface.html" title="Documentation for the AbstractCardiacCellInterface class">class:AbstractCardiacCellInterface</a>, and a method <tt>HasAnalyticJacobian</tt> on <a href="https://chaste.cs.ox.ac.uk/docs/classAbstractCvodeSystem.html" title="Documentation for the AbstractCvodeSystem class">class:AbstractCvodeSystem</a>.
</li><li>The <a href="https://chaste.cs.ox.ac.uk/docs/classCellMLLoader.html" title="Documentation for the CellMLLoader class">class:CellMLLoader</a> now copies <tt>.out</tt> files if present, meaning it can generate analytic Jacobians for CVODE.
</li><li>When using CVODE in tissue simulations we now perform a reset on the rare occasions that it fails to solve.
</li><li>Added (somewhat slow) support for lookup tables in generalised Rush-Larsen models.
</li></ul>
<h4>Cell-based</h4>
<ul><li>There's now a new <tt>AbstractCellBasedWithTimingsTestSuite</tt> which uses <tt>Timer</tt>, and then calls the normal <tt>AbstractCellBasedTestSuite</tt> <tt>setUp</tt> and <tt>tearDown</tt> methods.
</li><li>There's now a <tt>ReturnSimulationModifiers</tt> method (on the simulation) to return the vector of simulation modifiers.
</li><li>The redundant <tt>VertexElementMap</tt> input argument has been removed from the <tt>MutableVertexMesh</tt> methods <tt>CheckForSwapsFromShortEdges()</tt> and <tt>IdentifySwapType()</tt>.
</li></ul>
<h3>Future Plans</h3>
<ul><li>Tested support for various older versions of third party libraries will likely be dropped in the next release. See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/InstallGuides/DependencyVersions">InstallGuides/DependencyVersions</a> for up-to-date information as development progresses.
</li></ul>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 3.2 (changes since Release 3.1)</h2>
<p>
This is a minor release, but includes new support for many recent versions of dependencies, wider cross-platform support, and a large number of fixes and small performance improvements in both cardiac and cell-based components. We recommend upgrading from any prior version of Chaste to 3.2.
</p>
<h3>Headline features</h3>
<h4>General</h4>
<ul><li>The non-cardiac portions of Chaste have now been ported to Windows. See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/InstallGuides/Windows">InstallGuides/Windows</a> for install and usage instructions.
</li><li>Chaste has been ported to Mac OS X and continuous integration tests are performed on OS X v10.8 "Mountain Lion".
</li><li>The Ubuntu package now also supports up to Trusty Tahr (14.04 Long-Term Support edition).
</li><li>Chaste works with most recent PETSc versions up to and including PETSc 3.4.
</li><li>Chaste works with most recent VTK versions up to and including VTK 6.1.
</li><li>Chaste works with most recent Boost versions up to and including Boost 1.54.
</li><li>We no longer test Chaste on a 32-bit machine, so some tests may fail if run in a 32-bit context. We no longer provide a 32-bit stand-alone cardiac executable.
</li><li>We now allow access to the latest development version of the code (see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/AccessCodeRepository">ChasteGuides/AccessCodeRepository</a>), provide resources for external developers (see <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/ExternalDeveloperGuide">ChasteGuides/ExternalDeveloperGuide</a>), and allow public registration on the trac wiki to view and open 'tickets'.
</li><li>Chaste includes a CITATION.txt file for easy citation.
</li></ul>
<h4>Cardiac</h4>
<ul><li>Analytic Jacobians can now be auto-generated for cardiac cell models, using maple, and used by CVODE solvers to provide between 5-30% speed up in ODE solving. These can be used in single cell and tissue. If present, the analytic Jacobian is used by default (see <a href="https://chaste.cs.ox.ac.uk/trac/ticket/1795" title="user story: Set up analytic jacobians for Cvode systems (closed: fixed)">#1795</a> for some benchmarking).
</li><li>HDF5 file access has been improved to use more appropriate 'chunk' sizes. This speeds up cardiac output file reading/writing/postprocessing in quite a lot of situations.
</li><li>Postprocessing maps can now be written to VTK as well as meshalyzer. They are now written via HDF5, so you can get them to any format you like with an appropriate HDF converter.
</li></ul>
<h4>Cell-based</h4>
<ul><li>There is a new cell-based modifier mechanism which allows you to modify the cell population. This replaces the old hierarchy where each modification involved making a new subclass of the population. Examples of use cases would include modifying the target area of cells, tracking Delta-Notch, calculating the volume of all cells, or outputting statistics. Methods such as <tt>UpdateAfterSolve</tt> and <tt>UpdateAfterTimestep</tt> have been moved from simulation classes and into the relevant modifiers.
</li><li>We have re-factored the way cell populations write data to file by creating a writer hierarchy. One of these writers is created for each file that needs to be written, and then the population visits each writer it owns when it writes to file. This shouldn't affect user projects as the interfaces in tests for simulations hadn't changed. User tests of populations may fail if <tt>AbstractCellPopulation::OpenWritersFiles()</tt> hasn't been called before writing.
</li><li>Cellular Automata class changes: <tt>MultipleCaBasedCellPopulation</tt> has been removed, as <tt>CaBasedCellPopulation</tt> now allows (optionally) for more than one species at a site.
</li><li><tt>NodesOnlyMesh</tt> now works in parallel and uses a <tt>DistributedBoxCollection</tt> to select which nodes it owns based on the decomposition in the box collection. It is necessary to include the <tt>PetscSetupAndFinalize.hpp</tt> header in the test to use this type of mesh.
</li></ul><h3>Major new functionality & code changes</h3>
<h4>General</h4>
<ul><li>To enable cross-platform support, we have removed all linux system calls to <tt>rm</tt> and <tt>cp</tt>, these are now done via <tt>FileFinder</tt>. The following are of note:
<ul><li><tt>FileFinder::Remove()</tt> this operates like <tt>rm</tt> for a file, and <tt>rm -r</tt> for a folder. It will only delete things that are in a <tt>testoutput</tt> folder that contains the signature file (.chaste_deletable_folder denoting the fact Chaste made the folder in the first place).
</li><li><tt>FileFinder::DangerousRemove()</tt> this operates like <tt>rm -f</tt> for a file, and <tt>rm -rf</tt> for a folder. It will delete anything in the <tt>testoutput</tt> or chaste source folders (but not elsewhere), regardless of the presence of a signature file. This is used very very rarely in the code, and should be avoided if possible.
</li><li>There is no command to remove files from anywhere else on your machine. If you did manage to set your <tt>CHASTE_TEST_OUTPUT</tt> to be "/" then <tt>DangerousRemove()</tt> could wipe large parts of your system, obviously this should be avoided.
</li></ul></li><li>To enable cross-platform support, have moved from a <tt>rand()</tt> based random number algorithm, to <tt>boost::random</tt> (Mersenne Twister), this is supposed to be "more random", and has the benefit of getting the same answers on different platforms to facilitate testing. So any programs you have that use random numbers (this includes most of <tt>cell_based</tt> and <tt>crypt</tt>) will get subtly different results now.
</li><li>Reading of binary mesh files was scaling badly with mesh size (for file sizes of >0.5Gb) on some file systems. This has been fixed so that partitioning and loading binary meshes on supercomputers is now faster.
</li><li>All mesh element files now have floating point attributes by default. Old binary element files with attributes <strong>cannot be read</strong> by Chaste. A conversion utility <tt>./python/utils/ConvertBinaryElementAttributes.py</tt> is provided to assist users with this change.
</li><li>Simple airway tree ventilation models (Poiseuille flow and Pedley resistance) have been added to <tt>continuum_mechanics</tt>.
</li><li><tt>Node</tt> now uses a <tt>NodeAttributes</tt> class to store its attributes. It is only created if the attributes are used so any code in projects that calls <tt>Node::rGetNodeAttributes()</tt> without having first set an attribute will encounter an error. If you need to check whether any attributes are set up, <tt>Node::GetNumNodeAttributes</tt> will return the number of attributes (0 if none set).
</li></ul>
<h4>Cardiac</h4>
<ul><li>3D quadrature now uses second order (rather than first order) integration. This may change results slightly (for the better!).
</li><li>Fibre reading capability for extended bidomain problem has been implemented such that <tt>ExtendedBidomainTissue</tt> has modified conductivities in all 3 fields (thanks to Shameer).
</li><li>Heterogeneous contraction models can now be used in electro-mechanics simulations, on a per-element basis on the mechanics mesh. This is done by creating a factory inheriting from <tt>AbstractContractionCellFactory</tt>, and setting this in the electro-mechanics problem definition.
</li><li>Fixed a bug when using parMETIS partitioning (the default, <tt>PARMETIS_LIBRARY</tt>) which often resulted in deadlock when using <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/StateVariableInterpolation">state variable interpolation (SVI)</a> in 3-D.
</li><li>Changed cell factories from passing node indices to pointers to Node objects, and element indices to pointers to Element objects.
<ul><li>For most users this will mean updating all instances of <tt>CreateCardiacCellForTissueNode</tt> to have the correct argument (from e.g. <tt>unsigned node</tt> to e.g. <tt>Node<DIM>* pNode</tt> where <tt>DIM</tt> is probably 1, 2, or 3) and replacing all occurrences like <tt>GetMesh()->GetNode(node)</tt> with simply <tt>pNode</tt>.
</li><li>Contraction cell factory (<tt>AbstractContractionCellFactory</tt> and <tt>LabelBasedContractionCellFactory</tt>) methods <tt>CreateContractionCellForElement</tt> have changed from taking an <tt>unsigned</tt> to an <tt>Element<DIM,DIM>*</tt>.
</li><li><tt>AbstractPurkinjeCellFactory::CreatePurkinjeCellForTissueNode</tt> has changed from taking an <tt>unsigned</tt> to a <tt>Node<DIM>*</tt>.
</li></ul></li><li> In Bidomain with bath simulations electrode 'on' and 'off' events are now required to coincide with printing time-steps. If they do not coincide then a run-time exception is thrown.
</li><li>A script <tt>python/utils/AddVtuTimeAnnotations.py</tt> has been added. This can convert VTK output so that it is easily animated in Paraview. Note that the resulting files are paraview-specific and not part of the generic VTK standard.
</li></ul>
<h4>Cell-based</h4>
<ul><li>Fixed bug in area and volume calculations for 3-d cell-centred mesh-based simulations and 3-d vertex mesh simulations
</li><li>The definition of the cut-off length in a <tt>NodeBasedCellPopulation</tt> has been moved to the underlying <tt>NodesOnlyMesh</tt>. Consequently it should be set when constructing the mesh using <tt>ConstructNodesWithoutMesh(mesh, cut_off)</tt> rather than calling <tt>NodeBasedCellPopulation::SetMechanicsCutOffLength(cut_off)</tt>.
</li><li>Cell radii in <tt>NodeBasedCellPopulation</tt> type simulations are now stored in the <tt>NodeAttributes</tt> of each <tt>Node</tt>. It should now be accessed directly through the node, rather than through <tt>NodesOnlyMesh</tt>.
</li><li>Forces on a node in <tt>OffLatticeSimulation</tt> are now stored in the <tt>NodeAttributes</tt> rather than a separate vector. This means that <tt>AbstractForce::AddForceContribution</tt> now only takes the cell population as an argument. For example, in a cell population or a force class <tt>rForces[p_node->GetIndex()]</tt> is replaced with <tt>p_node->rGetAppliedForce()</tt> and <tt>rForces[p_node->GetIndex()] += force</tt> is replaced with <tt>p_node->AddAppliedForceContribution(force)</tt>.
</li><li><tt>AbstractCellProperty</tt> is more widely used throughout the code, and classes such as <tt>ProliferativeType</tt>s now use this framework.
</li></ul>
<h3>Minor</h3>
<p>
New functionality and code changes, which may still require changes to user code
</p>
<h4>General</h4>
<ul><li>For developers, you no longer have to type "test_suite=" after <tt>scons</tt>, this makes it easier to use tab completion.
</li><li><tt>AbstractNonlinearElasticitySolver::WriteCurrentDeformationGradients</tt> has been renamed, replace calls of <tt>solver.WriteCurrentDeformationGradients(..)</tt> with <tt>solver.WriteCurrentStrains(DEFORMATION_GRADIENT_F,..)</tt>. Other strains can also be written - see How To page.
</li><li>One dimensional meshes can now be written out to VTK format using the <tt>VtkMeshWriter</tt>, 2D and 3D were before.
</li><li><i>Change to CVODE solving:</i> <tt>AbstractCvodeSystem</tt> and <tt>CvodeAdaptor</tt> have enabled the <tt>CVodeSetStopTime</tt> option to make sure that CVODE stops exactly where requested (before it solved up to where it felt like, and interpolated an answer back to you). Users should not notice much difference (you may get changes in e.g. 4th decimal place due to more accurate answers now). Because of this, we have also changed the default behaviour on repeated Solve calls to re-initialise CVODE only when it is evident something has changed (tStart != last time's tEnd, or state variables have changed), previously we re-initialised CVODE on every call to <tt>Solve</tt> as default. You can still re-initialise on every call by manually calling the method <tt>AbstractCvodeSystem::SetForceReset(true);</tt> if you need to.
</li><li>Additional time points are no longer permitted in <tt>TimeStepper</tt>.
</li><li>Auto-generated quadratic slab/rectangular meshes have different node/element indexing to release 3.1.
</li><li>Continuum mechanics solvers now reference <tt>AbstractTetrahedralMesh</tt> rather than (subclass) <tt>QuadraticMesh</tt> to allow use of a parallel version (<tt>DistributedQuadraticMesh</tt>). This may break any user projects that contain solver subclasses.
</li></ul>
<h4>Cardiac</h4>
<ul><li>What was called <tt>DynamicRestitutionStimulus</tt> has been renamed <tt>SteadyStateRestitutionStimulus</tt>, as we talked to some physiologists!
</li><li>Unfortunately, an error was discovered in a calculation behind the <tt>CompressibleExponentialLaw</tt> (a material law, and for compressible cardiac electro-mechanics the default law), which will have resulted in too small stresses and overly large deformations. The class has been fixed. This may change user projects results
</li><li>The coarsened version of the Oxford Rabbit mesh located at <tt>apps/texttest/weekly/Propagation3d</tt> has been renamed <tt>OxfordRabbitHeart_481um</tt>.
</li><li>When constraints are placed on valid values for cardiac cell model state variables (e.g. gating variables should stay between 0 and 1), CVODE is now allowed to break these to within a factor of its specified absolute tolerances, following the CVODE documentation on "Advice on controlling unphysical negative values".
</li><li><tt>AbstractCardiacCellInterface::UseCellMLDefaultStimulus()</tt> now returns a <tt>boost::shared_ptr<RegularStimulus></tt> to the stimulus instead of returning <tt>void</tt>. <strong>This may break user projects if you are storing auto-generated models</strong>. In this case the method should be updated as per <a href="https://chaste.cs.ox.ac.uk/trac/changeset/19552" title="#2412 Make dealing with the CellML default stimulus nicer.">r19552</a>. This has the benefit of providing access to the <tt>RegularStimulus</tt> methods, without having to remember how to static cast a boost shared pointer to an <tt>AbstractStimulusFunction</tt>.
</li><li> You can now print out additional action potential model variables in a <tt>BidomainWithBath</tt> simulation, previously this failed because a <tt>FakeBathCell</tt> doesn't have them.
</li><li><tt>HeartConfig::Instance()->SetVisualizeWithVtk();</tt> will now work in 1D as well as 2D and 3D.
</li><li>The CVODE change (see general above) has led to a small improvement in accuracy for CVODE in heart tissue, since voltage was not being updated at precisely the correct time before.
</li><li>Fibre input and output in parallel has been improved. Binary fibre files are preferred.
</li><li>PyCML has the ability to produce cells that can be solved using <i>generalised</i> Rush-Larsen (release 3.1 added original Rush-Larsen).
</li><li>When constraints are placed on valid values for cardiac cell model state variables (e.g. gating variables should stay between 0 and 1), CVODE is now allowed to break these to within a tolerance, following the CVODE documentation on "Advice on controlling unphysical negative values".
</li><li>Altered the output from <tt>PseudoEcgCalculator</tt> to include the time value along with the ECG value. Also added the ability to skip time steps which allows an ECG graph to be computed more quickly.
</li><li><tt>PostprocessingWriter</tt> and <tt>PseudoEcgCalculator</tt> now use <tt>FileFinder</tt>s in their constructors to specify directories (instead of a string and a bool).
</li><li>Code generation for Backward Euler cell models now uses a slightly different Maple routine (to allow for discontinuities on the right-hand side). This means code can now be generated for models where it used to fail. Note that a finer resolution in lookup tables can be required, so try reducing the table step if you find the Newton solver failing to converge.
</li></ul>
<h4>Cell-based</h4>
<ul><li>Bug in vertex-based simulations which involved cells not being counted as removed after T2 swaps has been fixed.
</li><li>When calculating the volume of cells in Node based simulations we now take into account the number of cells connected and its relation to the optimal packing of spheres.
</li></ul>
<h3>Future Plans</h3>
<ul><li><strong>General</strong>: The next release of Chaste will no longer support versions of boost < 1.40.
</li><li><strong>Cardiac</strong>: The next release of Chaste will no longer output Meshalyzer format as default (it will remain an option to enable).
</li></ul>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 3.1 (changes since Release 3.0)</h2>
<p>
Release 3.1 is a minor release, which brings support for newer versions of libraries and a small number of new capabilities and bug fixes. It provides access to a release version of Chaste under the BSD licence (rather than the LGPL licence), to make it easier to use Chaste in industrial settings.
</p>
<h3>Headline features</h3>
<h4>General</h4>
<ul>
<li>Chaste is now released under the BSD licence, this is one of the major reasons for this release: <a href="http://opensource.org/licenses/BSD-3-Clause">http://opensource.org/licenses/BSD-3-Clause</a>.
</li><li>The Ubuntu package now also supports Precise Pangolin (12.04 Long-Term Support edition).
</li><li>Support for PETSc version 3.2 has been added. Some previously supported versions have been dropped so that the minimum required version of PETSc is now 2.3.2. The minimum version of Boost is now 1.34.
</li><li>Support for up to GCC 4.7.0 and Intel 12.1 compilers.
</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Cardiac electro-mechanics now works with bidomain as well as monodomain simulations.
</li><li>Cardiac cell models in tissue can now be solved using <tt>CVODE</tt> (versions 2.5-2.7), this can provide large speed-ups for problems that are small enough to get all the Cvode solvers in memory.
</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>The global singleton <tt>CellWiseData</tt> has been replaced by a much more general <tt>CellData</tt> component in each cell.
</li><li>The cell property hierarchy is now used much more extensively throughout the code.
</li><li>A new cell population class has been introduced to enable the simulation of cellular automata with multiple site occupancy.
</li>
</ul>
<h3>Major new functionality & code changes</h3>
<h4>General</h4>
<ul>
<li>Chaste is now beginning to use the Boost Filesystem library for low-level file management. This means an extra third-party dependency; your builds will fail if the library is not installed. Updating to the latest version of the chaste-dependencies Ubuntu package will ensure the library is installed; many systems will have it anyway. Your <tt>hostconfig</tt> file may require editing to link against <tt>boost_system</tt> as well as <tt>boost_filesystem</tt> if using recent Boost versions. (Boost >= 1.34 is now required.)
</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>A <tt>CellMLLoader</tt> class is available which makes the dynamic loading of CellML files into (almost) a one line call.
</li><li>The Cmgui script that helps the user to load the simulation data has been adapted to Cmgui version 2.8 or later. It is still compatible with previous Cmgui versions 2.7 and 2.6. The name of the script is now LoadSolutions.com in both the undeformed and deformed cases.
</li><li>A CellML project has been created containing many annotated CellML files for use with Chaste. See the Chaste wiki (<a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/CodeGenerationFromCellML">ChasteGuides/CodeGenerationFromCellML</a>) for details of how to access it.
</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>The global singleton <tt>CellWiseData</tt> has been replaced by a <tt>CellData</tt> component in each cell. These data are scalable and are accessed by name rather than index. There is a helper method on cell populations for visiting all cells and setting constant data (<tt>SetDataOnAllCells()</tt>). When using nutrient-dependent cell-cycle models or PDEs the <tt>CellData</tt> name must match with the name used in the class.
</li><li>Cell-based simulations, populations, forces and cell killers can now all be templated over element dimension as well as space dimension; this currently allows for mesh-based simulations of 2D surfaces in 3D space without cell division.
</li><li>Two serious bugs fixed in Delta-Notch code (the number of times that the ODE is solved and which variables get updated in the <tt>CellData</tt>).
</li><li>A new cell-population class, <tt>MultipleCaBasedCellPopulation</tt>, has replaced <tt>CaBasedCellPopulation</tt>. This enables cellular automata to be simulated which allow multiple site occupancy (more than one cell model at each lattice site).
</li><li>Centre-based simulations now have a movement threshold in order to check for numerical stability. You will need to manually call <tt>SetAbsoluteMovementThreshold()</tt> in simulations where large cell movements are typical.
</li>
</ul>
<h3>Minor new functionality and code changes, which may still require changes to user code</h3>
<h4>General</h4>
<ul>
<li>The <tt>testoutput</tt> directory in the main trunk has been renamed <tt>test_summary</tt> to avoid confusion. For each build, it contains a generated webpage with a summary of test results and links to their console output, your actual test output goes elsewhere. This means you need to update any browser bookmarks to the test results summary.
</li><li>The method <tt>AbstractElement::SetRegion</tt> has been renamed to <tt>SetAttribute</tt>. Similarly, <tt>GetRegion</tt> has been renamed to <tt>GetAttribute</tt>.
</li><li>It is now possible to run Electromechanics problems where the electrical problem is a bidomain problem. The interface of <tt>CardiacElectroMechanicsProblem</tt> has changed. You now need to pass the electrics problem type as second parameter to the constructor (e.g., MONODOMAIN, BIDOMAIN) and the electrics problem dimension as second template (defaults to 1).
</li><li>We now pass fibre file names around using a <tt>FileFinder</tt> rather than a string, to allow loading from a wider variety of locations.
</li><li>A local.py settings file may be placed in python/hostconfig to be used in preference to any other hostconfig settings.
</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Most of the heart solvers and cell factories now use <tt>AbstractCardiacCellInterface</tt>, not <tt>AbstractCardiacCell</tt> (to enable the use of CVODE solvers).
</li><li>In the version 3.1 XML parameters file, the <tt>ConductivityHeterogeneities</tt> element has been moved from inside <tt><Simulation></tt> to inside <tt><Physiological></tt>. New files written to this version of the schema will need to reflect this; old files still using a previous version can still be used unchanged.
</li><li>For simulations with <i>compressible</i> material laws, the electro-mechanics solver should have been scaling the active tension returned by the contraction model, by the determinant of the deformation gradient. This has now been fixed. (See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/FiniteElementImplementations">ChasteGuides/FiniteElementImplementations</a> for the (corrected) equations). Results using the compressible material law in the repository have barely changed, since this material law is nearly incompressible. However, simulation results with any user-defined highly compressible law might change.
</li><li>Pseudo ECG calculations for Bidomain-with-Bath simulations have been changed, as pointed out on the mailing list, these had a bug that meant the integral was performed over the whole mesh (including bath) instead of just cardiac tissue.
</li><li>Fixed a small bug in cardiac checkpointing, when loading and running a simulation from an archive to a new output folder the voltage at the final time step in the .h5 file was spuriously reported as "0".
</li><li><tt>FibreReader::GetNextFibreVector(vec)</tt> has been changed to <tt>FibreReader::GetFibreVector(index,vec)</tt> and <tt>GetNextFibreSheetAndNormalMatrix(mat)</tt> to <tt>GetFibreSheetAndNormalMatrix(index,mat)</tt>.
</li><li>The <tt>HeartConfig</tt> class has undergone an extensive refactor internally. This shouldn't impact users (although you might notice that a <tt>ChasteDefaults.xml</tt> file is no longer written to checkpoints), but some "nonsensical" calls to Get methods may now return different or new errors.
</li><li>There have been changes the interface of the <tt>VoltageInterpolaterOntoMechanicsMesh</tt> class. Now you need to pass in the names of the electrics variables you want to interpolate onto the mechanics mesh (variable 'V' used to be hardcoded as the only one to be interpolated).
</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>Renamed the <tt>AbstractCellBasedSimulation</tt> methods <tt>PostSolve()</tt> and <tt>AfterSolve()</tt> to <tt>UpdateAtEndOfTimeStep()</tt> and <tt>UpdateAtEndOfSolve()</tt> respectively; also moved the code out of the existing <tt>AbstractCellBasedSimulation</tt> methods into the main <tt>Solve()</tt> method, so that these methods don't have to be called by every overridden version.
</li><li>Corrected the implementation of <tt>StochasticDurationGenerationBasedCellCycleModel</tt> by making use of parameters <tt>mStemCellG1Duration</tt> and <tt>mTransitCellG1Duration</tt> in the method <tt>SetG1Duration()</tt>. This won't break user projects, but may change results.
</li><li>Created a new <tt>AbstractCellPopulation</tt> method <tt>GetVolumeOfCell()</tt>, which is overridden in concrete subclasses; this method is now used in <tt>VolumeTrackedOffLatticeSimulation</tt>, which hence now works with any off-lattice cell-based population.
</li><li>Corrected initialisation of <tt>CellwiseData</tt> (now <tt>CellData</tt>; see above) in <tt>VolumeTrackedOffLatticeSimulation</tt>; it is now populated automatically when a simulation is set up, rather than having to be manually initialized.
</li><li>VTK output has been enabled for cell-based simulations that use a <tt>MultipleCaBasedCellPopulation</tt> or <tt>PottsBasedCellPopulation</tt>.
</li><li>Moved <tt>mpBoxCollection</tt> from <tt>NodeBasedCellPopulation</tt> to <tt>NodesOnlyMesh</tt>.
</li><li>Made <tt>CellId</tt> a concrete <tt>CellProperty</tt> to exploit the functionality of this class hierarchy.
</li><li>Created the class <tt>CellAncestor</tt>, which inherits from <tt>AbstractCellProperty</tt> and stores the unsigned variable associated with each ancestor. The <tt>Cell</tt> method <tt>SetAncestor()</tt> now takes a shared pointer to a <tt>CellAncestor</tt> rather than an unsigned.
</li><li>Extended the class <tt>SurfaceAreaConstraintUpdateRule</tt> and the <tt>PottsMesh</tt> method <tt>DivideElement()</tt> to work in 3D
</li><li>In node-based simulations cell radii are now inherited from parent cells; before this was hard-coded to 0.5. Also enabled updating of cells radii through <tt>CellData</tt>. This won't break user projects, but may change results.
</li><li>The <tt>HoneycombMeshGenerator</tt> was producing slightly irregular cell-cell spring lengths due to floating point truncation. This has been fixed, which means that all simulations using <tt>HoneycombMeshGenerator</tt> now give slightly different results, and monolayer simulations surrounded by layers of ghosts nodes pull the convex hull of the ghost nodes to a circle more rapidly than before. This won't break user projects, but may change results.
</li><li>We have renamed the cell killer methods <tt>TestAndLabelSingleCellForApoptosis()</tt> and <tt>TestAndLabelCellsForApoptosisOrDeath()</tt> to <tt>CheckAndLabelSingleCellForApoptosis()</tt> and <tt>CheckAndLabelCellsForApoptosisOrDeath()</tt> respectively, since it is not ideal to have a method with the prefix Test- outside a test suite.
</li><li><tt>OxygenBasedCellKiller</tt> has been renamed <tt>ApoptoticCellKiller</tt> to more accurately reflect its functionality.
</li><li><tt>CryptCellsGenerator</tt> now works with a <tt>PottsBasedCellPopulation</tt>.
</li><li>Refactored <tt>VertexElement</tt> and <tt>PottsElement</tt> to both inherit from a new class, <tt>MutableElement</tt>, and moved appropriate functionality up into this parent class. Also changed the order of the parameters in <tt>MutableElement::AddNode()</tt> so that <tt>rIndex</tt> can default in child classes. This will particularly affect <tt>VertexElement</tt> where users will need to change the order of the parameters, switching <tt>pNode</tt> and <tt>rIndex</tt>.
</li><li>The <tt>divisions.dat</tt> data file, if output, now includes an extra column containing the age of the parent cell just prior to division.
</li><li>Moved <tt>mCellProliferativeType</tt> from <tt>AbstractCellCycleModel</tt> back into <tt>Cell</tt>.
</li><li>Forces in node-based populations may now be made dependent on cell radii.
</li><li>Added a new force class, <tt>NagaiHondaDifferentialAdhesionForce</tt>, and associated tutorial <tt>TestRunningDifferentialAdhesionSimulationsTutorial</tt>. This class inherits from <tt>NagaiHondaForce</tt> and allows for different interaction energies depending on which (if any) of a pair of interacting cells have the property <tt>CellLabel</tt>.
</li><li>Removed an exception in <tt>NodeBasedCellPopulation</tt> that had prohibited a simulation from having a single cell.
</li><li>Added a new force class <tt>DiffusionForce</tt> to the trunk for simulating random movement.
</li><li>Added several 'removal' methods: <tt>RemoveAllUpdateRules()</tt> to <tt>MultipleCaBasedCellPopulation</tt> and <tt>PottsBasedCellPopulation</tt>; <tt>RemoveAllCellKillers()</tt> to <tt>AbstractCellBasedSimulation</tt>; <tt>RemoveAllForces()</tt> to <tt>OffLatticeSimulation</tt>; and <tt>RemoveAllMultipleCaUpdateRules()</tt> and <tt>RemoveAllPottsUpdateRules()</tt> to <tt>OnLatticeSimulation</tt>.
</li><li>The <tt>CellBasedPdeHandler</tt> method <tt>UseCoarseMesh()</tt> now takes a <tt>ChasteCuboid</tt> defining both the size and location of the coarse mesh to use, so that the user can specify the exact location of the coarse mesh rather than it defaulting to centering on the centre of the cell population. The user should either ensure this contains the population or set the extra flag to true to automatically centre this mesh on the centre of the cell population.
</li><li>In order to allow more than one cell per location index in <tt>MultipleCaBasedCellPopulation</tt>, the <tt>GetCellResults()</tt> method in <tt>AbstractCellPopulation</tt> has been modified to take in a <tt>CellPtr</tt> rather than a location index.
</li>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 3.0 (changes since Release 2.3)</h2>
<h3>Headline features</h3>
<h4>General</h4>
<ul>
<li>The Ubuntu package now also supports Oneiric Ocelot (11.10)</li>
<li>Support for PETSc 3.1 has been added, and Chaste should also work with the latest versions of the Boost libraries.</li>
<li>This is the last Chaste release that will officially support Boost 1.33.1 and PETSc 2.2.</li>
<li>The mechanics (and cardiac electro-mechanics) solvers have been made significantly more flexible.</li>
<li>It is relatively easy to write new solvers of coupled systems of linear PDEs, and tutorials on how to do this have been added.</li>
<li>We now recommend using VTK with Chaste, and the default.py hostconfig assumes it is available; previously support for VTK input/output within Chaste defaulted to off.</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>(Work has begun on solving fluid flow and electrophysiology with Purkinje fibres, but these features are not yet completed.)</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>Lattice based cellular Potts models have been implemented.</li>
<li>There has been a major refactor of the structure of the cell-based code to make the specification of multi-cell models (such as cell-centre, over-lapping spheres, vertex-based and cellular Potts) more consistent.</li>
<li>The handling of PDEs has been improved allowing PDEs to be coupled to node-based simulations.</li>
<li>More exceptions are thrown when incompatible classes are used. Exception messages give information on how to fix the problem.</li>
</ul>
<h3>Major new functionality & code changes</h3>
<h4>General</h4>
<ul>
<li>An error is given if using Boost 1.41 due to a <a href="http://sourceforge.net/apps/trac/easystroke/ticket/21">bug</a> in its serialization library. Versions 1.44-1.46.1 also have a <a href="https://svn.boost.org/trac/boost/ticket/4842">bug</a> triggered when some tests exit, but the tests do run successfully.</li>
<li>All the solid mechanics related functionality has been moved out of the <tt>pde</tt> component to a new component <tt>continuum_mechanics</tt>. These components should be considered as quite separate to each other.</li>
<li>The interfaces to the solid mechanics solvers have changed considerably. They now take in a 'problem definition' object and are much more powerful. The tutorials describe the new interfaces in detail.
<ul>
<li>The incompressible solver is now called <tt>IncompressibleNonlinearElasticitySolver</tt>.</li>
<li>Further work has been done on the compressible solver.</li>
<li>Both the incompressible and compressible solvers take in a new class, <tt>SolidMechanicsProblemDefinition</tt>, on which the material law, body force, displacement and traction boundary conditions are defined. See the solid mechanics tutorial to see how these classes are used. They also now take in a reference to a mesh not a mesh pointer.</li>
<li>Sliding boundary conditions are now possible (i.e. displacement boundary conditions, for only some components of the displacement, at given nodes).</li>
<li>Solid mechanics problems can now use boundary conditions that specify that a particular pressure should act in the normal direction on deformed surfaces. It may not be fully optimised yet though - the Jacobian in the nonlinear solve needs altering.</li>
</ul></li>
<li>PDE-related changes:
<ul>
<li>When solving general time-dependent PDEs the solution can now be written to file at a specified sampling interval, in a variety of formats (HDF5, cmgui, text). See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/SolvingLinearPdes">UserTutorials/SolvingLinearPdes</a> for more details.</li>
<li>Renamed <tt>AbstractFeObjectAssembler</tt> to <tt>AbstractFeVolumeIntegralAssembler</tt>, moved the surface integral functionality from this class to <tt>AbstractSurfaceIntegralAssembler</tt>, and created a natural Neumann concrete child of <tt>AbstractSurfaceIntegralAssembler</tt> to be used in PDE solvers.</li>
<li>These changes allow solvers of <i>systems of PDEs</i> to be set up relatively easily (for PDEs for which it is appropriate to use linear basis functions, e.g. systems of coupled heat or diffusion equations). Tutorials on writing your own PDE solvers have been added: start with <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/WritingPdeSolvers">UserTutorials/WritingPdeSolvers</a>.</li>
<li>Added new classes <tt>AbstractLinearParabolicPdeSystemForCoupledOdeSystem</tt> and <tt>LinearParabolicPdeSystemWithCoupledOdeSystemSolver</tt> for the numerical solution of coupled systems of reaction-diffusion PDEs and ODEs. See the associated tutorial <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/SolvingLinearParabolicPdeSystemsWithCoupledOdeSystems">UserTutorials/SolvingLinearParabolicPdeSystemsWithCoupledOdeSystems</a>.</li>
<li>The efficiency of <tt>PetscMatTools::ZeroRowsAndColumnsWithValueOnDiagonal</tt> has been significantly improved, which should improve performance when using Dirichlet boundary conditions.</li>
</ul></li>
<li>Due to floating point error, it was previously possible for <tt>TimeStepper</tt> to occasionally take a very small step in long simulations, when all steps should have been the same size, and hence break code that assumed a constant time-step. The tests and calculations have now been made much more robust, by being based on machine precision rather than magic numbers.
<ul>
<li>Any time-stepping object will throw if stepped past its end time. (Previously (i) the core/heart <tt>TimeStepper</tt> class silently remained at the end time and (ii) the cell_based <tt>SimulationTime</tt> singleton class silently stepped past the end time.)</li>
</ul></li>
<li>Mesh-related changes:
<ul>
<li><tt>GenericMeshReader</tt> has been changed from a class to a function. If you use it directly, you must now do something like "<tt>std::auto_ptr<AbstractMeshReader<2,2> > p_reader = GenericMeshReader<2,2>(mesh_path);</tt>". The returned smart pointer will automatically destroy the reader when it goes out of scope, so any other changes to your code should be limited to replacing <tt>reader</tt> with <tt>*p_reader</tt>.</li>
<li>Some mixed dimension meshes may now be read in to Chaste, i.e. 1d elements embedded in a 2d or 3d mesh. The 1d elements are defined in a separate <tt>.cable</tt> file, with the same format as the <tt>.edge</tt> file.</li>
</ul></li>
<li>Other new functionality:
<ul>
<li>Various additions to <tt>CommandLineArguments</tt> make it possible to pass in lists of arguments for a particular option. An option is now defined as starting with '-' followed by any non-numeric character to avoid confusion with negative numbers. Various helper methods have been added to avoid having to use <tt>char*</tt> and <tt>atoi</tt> etc.</li>
<li>There's a new class <tt>CompareDoubles</tt> in <tt>MathsCustomFunctions</tt> with static methods for comparing floating point numbers to absolute or relative tolerances. This is now used in <tt>NumericFileComparison</tt> so that files can be compared to the looser of an absolute or relative tolerance. The default is still to use just absolute as before.</li>
<li>Added methods <tt>PetscMatTools::CheckSymmetry</tt> and <tt>PetscMatTools::CheckEquality</tt>.</li>
<li>Where work can be split between isolated processes, it would be nice to be able to do so easily without worrying about collective calls made inside classes such as <tt>OutputFileHandler</tt> leading to deadlock. A new method <tt>PetscTools::IsolateProcesses</tt> has been added to facilitate this. Note that it doesn't guarantee safety - collective calls not resulting from the 3 methods affected will still cause deadlock.</li>
</ul></li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Changes accessible via the XML parameters file:
<ul>
<li>Allowed the precision with which Meshalyzer and Cmgui visualisation output is written to be specified from the XML configuration file and via <tt>HeartConfig</tt>. (Thanks to Megan Marsh.)</li>
<li>Added the ability to specify paths relative to the XML configuration file for elements with type <tt>path_type</tt> (e.g. <tt>ArchiveDirectory</tt> and cell model paths). Use the attribute <tt>relative_to="this_file"</tt>.</li>
</ul></li>
<li>Electro-mechanics: See the cardiac electro-mechanics tutorials for examples/usage of the following changes:
<ul>
<li>Cardiac electro-mechanics solvers can now use compressible elasticity as well as incompressible elasticity.</li>
<li>The interface to <tt>CardiacElectroMechanicsProblem</tt> has completely changed, and the interface to <tt>CardiacElectroMechProblemRegularGeom</tt> has slightly changed. <tt>CardiacElectroMechanicsProblem</tt> now takes in a problem definition object (c.f. the mechanics solvers) which means it is now much more flexible. Anything that can be done in a mechanics simulation can now immediately be done in a electro-mechanics simulation.</li>
<li>For both <tt>CardiacElectroMechanicsProblem</tt> and <tt>CardiacElectroMechProblemRegularGeom</tt>: electrics PDE timestep if different to 0.01, and simulation end time, should be set using <tt>HeartConfig</tt>, and not in the constructor of the problem class.</li>
<li><tt>CardiacElectroMechProblemRegularGeom</tt> constructor parameters are in a slightly different order, and it also can't be used with mechano-electric feedback or fibre files any longer (use <tt>CardiacElectroMechanicsProblem</tt> instead).</li>
<li>Some new tutorial tests have been added.</li>
</ul></li>
<li>Added functionality to solve extended bidomain problems (with two cell types at each control volume). This functionality is not yet available for the executable users.</li>
<li>The ability to perform non-matrix-based assembly (of the RHS vector) has been removed; matrix-based assembly is now always used. The option <tt>SetUseMatrixBasedRhsAssembly</tt> no longer exists.</li>
<li>The convenience method <tt>GetAllOrtho</tt> used to do VTK visualisation of ortho files was incorrect. It was returning the <i>rows</i> of the conductivity tensor which represent a transpose of the original fibre data.</li>
<li>Various cardiac post-processing operations scale poorly with the number of nodes. This has been significantly improved, although dramatic slowdown will still be observed with very large simulations. (Technical detail: the reason for this is that the output data is written to the HDF5 file at each printing time-step, and so the file layout is optimised for reading/writing every node at one time-step. However, post-processing needs to read every time-step for a single node or subset of nodes, and so cannot access disk as efficiently.)</li>
<li>Implemented calculating fibre orientations (Streeter) in a wedge preparation, for either left or right ventricle. Previously both LV and RV endocardial surfaces were required.</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>A major refactor of the cell population and cell-based simulation class hierarchies has taken place, based upon a distinction between on- and off-lattice models. This was done to integrate the code more thoroughly as on-lattice population and simulation classes were introduced, and to ensure that the use of update rules and forces is more consistent.
<ul>
<li>The <tt>CellBasedSimulation</tt> class has been split up into a hierarchy, with <tt>OffLatticeSimulation</tt> and <tt>OnLatticeSimulation</tt> inheriting from <tt>AbstractCellBasedSimulation</tt>.</li>
<li>All cell populations now inherit from either <tt>AbstractOffLatticeCellPopulation</tt> or <tt>AbstractOnLatticeCellPopulation</tt> the former are used by <tt>OffLatticeSimulation</tt> and the later are used by <tt>OnLatticeSimulation</tt>.</li>
</ul></li>
<li>Cellular Potts models have been implemented in Chaste
<ul>
<li>The <tt>PottsBasedCellPopulation</tt> has been created with associated <tt>PottsMesh</tt> and <tt>PottsElement</tt> classes to store spatial information.</li>
<li>The <tt>AbstractPottsBasedUpdateRule</tt> hierarchy is used to define the dynamics of the simulation.</li>
<li>Simulations make use of the existing cell-cycle model and cell-killer hierarchies.</li>
<li>Added functionality for visualizing Potts-based cell simulations either using the visualizer <tt>Visualize2dVertexCells.java</tt> or using Paraview with VTK output.</li>
</ul></li>
<li>We have moved much of the cell-based code to use <tt>boost::shared_ptr</tt>s rather than plain pointers. This makes memory handling much more straightforward.
<ul>
<li>The <tt>CellBasedSimulation</tt> class and its subclasses now store collections of cell killers, boundary conditions, forces or update rules as <tt>boost::shared_ptr</tt>s.
These are passed to cell-based simulations as (e.g.) <tt>std::vector<boost::shared_ptr<AbstractForce<DIM>>></tt> instead of <tt>std::vector<AbstractForce<DIM>*></tt>.</li>
<li>We also use helper macros such as <tt>MAKE_PTR</tt> a lot more in tests; these are defined in the header <tt>SmartPointers.hpp</tt>.</li>
</ul></li>
<li>A new overlapping spheres based force law, used by Buske <i>et al.</i> in their 2011 model of the crypt based on previous work by Galle <i>et al.</i>, has been implemented.
<ul>
<li>Added <tt>OdeLinearSystemSolver</tt> for solving large systems of ODEs of the form M dr/dt = f(t,r), where M is large and sparse.</li>
<li>Added two new force classes, <tt>BuskeInteractionForce</tt> and <tt>BuskeCompressionForce</tt>, to implement the model of cell-cell mechanical interactions used by Buske.</li>
<li>Added the ability to set/get cell radii in <tt>NodeBasedCellPopulation</tt> (via a member of <tt>NodesOnlyMesh</tt>), and allowed these to be updated when cell division/death occurs. Cell radii may also be written to VTK output.</li>
</ul></li>
<li>We have generalised the way that PDEs, coupled to cell-based simulations, are handled:
<ul>
<li>Altered the input arguments to the method <tt>CellBasedSimulationWithPdes::UseCoarsePdeMesh</tt> and allowed output of the PDE solution on the coarse mesh.</li>
<li>Enabled the numerical solution of one or more (steady) reaction-diffusion PDEs coupled to a <tt>NodeBasedCellPopulation</tt>, by introducing a "coarse" PDE mesh associated with the population.</li>
<li>Extended <tt>CellBasedEventHandler</tt> so that it also records the time spent solving any coupled PDEs, for use in <tt>CellBasedSimulationWithPdes</tt>.</li>
<li>Created an <tt>AbstractCellBasedPde</tt> class which contains the PDE, the solver, the boundary conditions and an interface to an <tt>AbstractCellPopulation</tt>. This class can be passed to a concrete instantiation of an <tt>AbstractCellBasedSimulation</tt> just as forces or update rules are; this change avoids having to implement PDEs in each of <tt>OffLatticeSimulation</tt> and <tt>OnLatticeSimulation</tt>.</li>
</ul></li>
<li>We have introduced a new method of imposing boundary conditions (such as restricted geometries) on cell-based simulations:
<ul>
<li>The <tt>CellBasedSimulation</tt> method <tt>ApplyCellPopulationBoundaryConditions</tt> has been removed.</li>
<li>Boundary conditions must now be implemented using the <tt>CellPopulationBoundaryCondition</tt> hierarchy. This change allows the use of multiple boundary conditions in a cell-based simulation, just as multiple force laws may be used.</li>
</ul></li>
<li>An example cell-cycle model class <tt>ContactInhibitionCellCycleModel</tt> has been added. This class may be used to simulate contact inhibition of cell division and assumes that the volume of each cell is stored in the singleton <tt>CellwiseData</tt>.
<ul>
<li>The simulation class <tt>VolumeTrackedOffLatticeSimulation</tt> has been created to be used with the contact inhibition cell cycle model.</li>
</ul></li>
<li>Cell cycle phases can now be written to file for visualization if required, in the file <tt>results.vizcellphases</tt>.</li>
</ul>
<h3>Minor new functionality and code changes, which may still require changes to user code</h3>
<h4>General</h4>
<ul>
<li>Mesh-related changes:
<ul>
<li>The mesh reader now throws an <tt>Exception</tt> if attributes are declared in the header line but missing in the mesh files.</li>
<li>Added <tt>AbstractTetrahedralElement::CalculateNormal</tt> and <tt>AbstractTetrahedralMesh::CheckOutwardNormals</tt> to obtain normal vectors to boundary elements, and check they all face outwards, respectively.</li>
<li>Altered perimeter edges created in <tt>TetrahedralMesh::ConstructRectangularMesh</tt> and <tt>DistributedTetrahedralMesh::ConstructRectangularMesh</tt> so that they are all oriented anticlockwise. This makes sure that the normals are pointing outward.</li>
<li>Previously a <tt>QuadraticMesh</tt> had to read a tetrahedral mesh from file using a special converter (i.e. with the method <tt>ConstructFromLinearMeshReader</tt>). Now the usual method (<tt>ConstructFromMeshReader</tt>) may also be used. It warns that extra work is done, since a mesher library has to be used to construct the extra nodes.</li>
</ul></li>
<li>Build system changes:
<ul>
<li>You can now do a coverage build for a single test in a project (e.g. <tt>scons b=Coverage ts=projects/...</tt>).</li>
<li>We have worked around an SCons issue that causes parallel builds (e.g. <tt>-j3</tt>) with <tt>cl=0</tt> to fail in parallel. However, it uses undocumented internal functionality in SCons, so please report an issue if it fails for you, and tell us what version of SCons you are using.</li>
<li>Removed broken support for the <tt>SPECIAL_SERIAL</tt> <tt>#define</tt>. This is unlikely to break anything, since it would have already been broken...</li>
</ul></li>
<li>Miscellaneous other changes:
<ul>
<li>The <tt>TERMINATE</tt> and <tt>NEVER_REACHED</tt> macros have been moved into <tt>Exception.hpp</tt> (from <tt>PetscTools.hpp</tt>), and various includes tidied up. Some macros have also been renamed for clarity and readability: <tt>EXPECTNON0</tt> -> <tt>EXPECT_NON0</tt>, <tt>MPIABORTIFNON0</tt> -> <tt>ABORT_IF_NON0</tt>. (The latter macro now works correctly in non-MPI-using tests.) Note also, if you are using <tt>PetscTools::Terminate</tt> directly rather than via a macro, that this method no longer exists - use <tt>Exception::Terminate</tt> instead.</li>
<li>The <tt>EXCEPTION</tt> and <tt>WARNING</tt> macros now allow 'streaming' within their message argument, so that you can write (for example)<pre>EXCEPTION("Number of nodes " << num_nodes << " does not match expected value of " << ELEMENT_DIM+1);</pre></li>
<li><tt>Exception</tt> subclasses may now change the error message after the base class is constructed.</li>
<li>A <tt>GetParent</tt> method has been added to <tt>FileFinder</tt>. A <tt>FileFinder</tt> can also now be created relative to some existing file or directory.</li>
<li>Functions <tt>CreateEmptyVector</tt> and <tt>IsEmptyVector</tt> have been added to <tt>VectorHelperFunctions.hpp</tt></li>
<li>Moved the functions <tt>SmallPow</tt> and <tt>Divides</tt> from the <tt>linalg</tt> component into a new header <tt>MathsCustomFunctions.hpp</tt>.</li>
<li>A new class <tt>AbstractCvodeSystem</tt> has been created between <tt>AbstractCvodeCell</tt> and <tt>AbstractParameterisedSystem</tt>, analogously to <tt>AbstractOdeSystem</tt>.
<ul>
<li><tt>AbstractCvodeSystem</tt> has a new method <tt>SetAutoReset</tt>. If this is turned on then CVODE will not have its internal state reset between calls to <tt>Solve</tt> (unless the state variables or simulation time are changed by external code in the meantime). A method <tt>ResetSolver</tt> has been added to force a reset if other changes are made externally that may require this (e.g. changing the RHS function by modifying a parameter).</li>
</ul></li>
<li>Moved all methods of <tt>AbstractParameterisedSystem</tt> which don't require the vector type up into a new base class <tt>AbstractUntemplatedParameterisedSystem</tt>. This should not affect other code.</li>
<li>Renamed <tt>PetscMatTools::AssembleFinal</tt> to <tt>PetscMatTools::Finalise</tt>, <tt>PetscMatTools::AssembleIntermediate</tt> to <tt>PetscMatTools::SwitchWriteMode</tt>, and <tt>PetscVecTools::Assemble</tt> to <tt>PetscVecTools::Finalise</tt>. Similar name changes happened to the analogous <tt>LinearSystem</tt> convenience methods.</li>
<li>Changed <tt>AbstractLinearEllipticPde::ComputeConstantInUSourceTerm(rX)</tt> to <tt>AbstractLinearEllipticPde::ComputeConstantInUSourceTerm(rX, pElement)</tt> so it can take in an element containing <tt>rX</tt> to make it consistent with <tt>ComputeLinearInUCoeffInSourceTerm</tt>. You can pass in a <tt>NULL</tt> pointer for <tt>pElement</tt>. Changed all associated classes.</li>
<li>Method for writing strain per element added to <tt>AbstractNonlinearElasticitySolver</tt>. There is as yet no interface to it: to use it you must call it from the main output method.</li>
</ul></li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Changes to CellML support:
<ul>
<li>The cell model converter class is now more robust to certain errors, and gives more helpful error messages. Temporary files are now saved when an error occurs during the conversion of a cell model from CellML.</li>
<li>Various performance improvements have been made to the cell model code generation in PyCml.</li>
<li>PyCml now includes support for generating cell models that can be solved using the Rush-Larsen method. These are not available 'by default' but must be generated manually or loaded dynamically. See <a href="https://chaste.cs.ox.ac.uk/trac/browser/trunk/heart/test/ionicmodels/TestRushLarsen.hpp">source:trunk/heart/test/ionicmodels/TestRushLarsen.hpp</a> for some examples.</li>
</ul></li>
<li>A binary format has now been defined for fibre files, to enable random access into the file.</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>Moved an uncaught exception (from the element Jacobian code) and turned it into a higher-level exception in <tt>MeshBasedCellPopulation</tt>, which is thrown when any element has zero area/volume.</li>
<li>Added a method to perform vertex intersection swaps in the <tt>VertexMesh</tt> class.</li>
<li>Resolved bug which prevented VTK or cell volume data at time-step zero being written to file.</li>
<li>Calling <tt>GetCircularMesh</tt> on a <tt>HoneycombMeshGenerator</tt> that contains ghost nodes now throws an exception; previously the generator created a corrupt mesh.</li>
<li><tt>HoneycombMeshGenerator</tt> now defaults to not use ghost nodes.</li>
<li>Moved the method <tt>GetNeighbouringNodeIndices</tt> from <tt>DiscreteSystemForceCalculator</tt> into <tt>AbstractCellPopulation</tt>, where it is pure virtual and hence overridden in subclasses.</li>
<li>Added an overridden <tt>WriteCellVolumeResultsToFile</tt> method in all cell population subclasses.</li>
<li>Added the <tt>SerializableSingleton</tt> class to allow for singleton classes and subclasses of <tt>AbstractCellBasedSimulation</tt> to be serialized more easily. This removed the need for the <tt>CryptSimulationArchiver</tt> class, which has been removed: simply use<tt> CellBasedSimulationArchiver</tt> instead.</li>
<li>Added methods to get the centre of mass and dimensions of a cell population to <tt>CellBasedSimulationWithPdes</tt>.</li>
<li>Added methods to <tt>NodesOnlyMesh</tt> to allow removal of nodes.</li>
</ul>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 2.3 (changes since Release 2.2)</h2>
<h3>Headline features</h3>
<h4>General</h4>
<ul>
<li>Support for the latest version of CVODE (2.6.0)</li>
<li>Reduced source download size (mainly through a reduction in the amount of data distributed with tests)</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>A simple model of drug conductance block is now available in the standalone executable.</li>
<li>A sequential implementation of adaptive mesh refinement has been added, using a library developed in collaboration with Imperial College London to reduce the computational load and memory footprint of large simulations. This is not available within the standalone executable however. Instructions for installing the required library are available on the Chaste wiki at <a href="https://chaste.cs.ox.ac.uk/trac/wiki/InstallAdaptivityLibrary">InstallAdaptivityLibrary</a>, and you will need to edit your hostconfig file to turn on support in Chaste (by setting <tt>use_adaptivity = True</tt> and adding appropriate paths etc.).</li>
</ul>
<h3>New functionality & major code changes</h3>
<h4>General</h4>
<ul>
<li>Archiving of ODE systems with parameters has been improved. You can now add parameters without breaking archive backwards compatibility.</li>
<li>A mixed-dimension mesh format has been defined and implemented (see the <tt>MixedDimensionMesh</tt> class) as the first step towards incorporating a Purkinje model in Chaste.</li>
<li>Further improvements to the compressible elasticity solver (although this is still in the process of being implemented).</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Added an optional <tt>ApplyDrug</tt> element to the <tt>Physiological</tt> section of the XML parameters file. This applies conductance block model to as many channels as required. Note that conductances to block must be annotated in the CellML file with oxmeta names and as modifiable parameters. This has been done for the LR91 model as an example. If a channel is not found in the CellML file, a warning will be generated (once per node...).
<ul>
<li><strong>NB</strong> This means that the parameter already in the LR91 model has changed name, which breaks archive backwards compatibility. Run the <tt>archive_convert.sed</tt> script on your archives to make them usable again. e.g. "<tt>find . -name *arch.? -print | xargs sed -i -f archive_convert.sed</tt>"</li>
</ul></li>
<li>The cardiac post-processing performance has been improved through greater use of caching.</li>
<li>Alternative material laws for mechanics can now be set from a test (see the tutorials for an example).</li>
</ul>
<h3>Code interface changes, which may require changes to user code</h3>
<h4>General</h4>
<ul>
<li>The interface of <tt>AbstractCvodeCell</tt> has been changed to be more like <tt>AbstractCardiacCell</tt>.
<ul>
<li>Moved <tt>SetStateVariables</tt> to <tt>AbstractParameterisedSystem</tt>. This means that its behaviour for <tt>AbstractCvodeCell</tt> has changed: it just copies the contents now, rather than handing over ownership of the vector. So callers must now delete the vector they pass to this method.
<ul><li>Hence removed <tt>AbstractCvodeCell::SetStateVariablesUsingACopyOfThisVector</tt> - use <tt>SetStateVariables</tt> instead.</li>
</ul></li>
<li>Moved initial conditions methods (<tt>GetInitialConditions</tt>, <tt>SetDefaultInitialConditions</tt>, <tt>SetDefaultInitialCondition</tt>, and <tt>ResetToInitialConditions</tt>) to <tt>AbstractParameterisedSystem</tt>.</li>
<li>Added helper functions <tt>CreateVectorIfEmpty</tt>, <tt>CopyToStdVector</tt>, and <tt>CopyFromStdVector</tt> to <tt>VectorHelperFunctions.hpp</tt>.</li>
</ul></li>
<li>Made <tt>CalculateOnElement</tt> public in <tt>AbstractFunctionalCalculator</tt> so users can compute contributions to integrals on each element.</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li><tt>NodeBasedCellPopulation</tt> constructors now take in a <tt>NodesOnlyMesh</tt> instead of a vector of nodes.</li>
</ul>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 2.2 (changes since Release 2.1)</h2>
<h3>Headline features</h3>
<h4>General</h4>
<ul>
<li>Full default test pack should now pass on more configurations.</li>
<li>Smarter chunking in HDF5 should reduce the time spent on I/O significantly for simulations with many output time steps.</li>
<li>Mesh load is scalable in parallel only with our binary mesh format. A conversion utility is provided. Please refer to the <a href="https://chaste.cs.ox.ac.uk/trac/wiki/UserTutorials/CardiacExecutable/MeshConvert">MeshConvert</a> tutorial.</li>
<li>Performance of checkpointing with large meshes has been improved. We now archive permuted meshes without writing from memory to disc; instead the original files are copied.</li>
<li>Further improvements to tutorials (including the addition of solid mechanics tutorials), and user documentation. Executable tutorials (as well as tutorial tests) are now routinely tested automatically.</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>Added support for the definition of multiple bath/tissue regions. Based on whichever convention you followed in the elements file, you can inform Chaste of your choice of region identifiers with <tt>HeartConfig::SetTissueIdentifiers(std::set<unsigned> )</tt> and <tt>HeartConfig::SetBathIdentifiers(std::set<unsigned> )</tt>. One can also assign different conductivities to different bath regions with <tt>HeartConfig::SetBathMultipleConductivities(std::map<unsigned, double> )</tt>.</li>
<li>State variable interpolation may now be used for cardiac simulations. This can lead to improved conduction velocity accuracy on meshes with spatial resolutions typically used in simulation studies, and has been implemented in an efficient manner. See <a href="https://chaste.cs.ox.ac.uk/trac/wiki/ChasteGuides/StateVariableInterpolation">ChasteGuides/StateVariableInterpolation</a> for more details.</li>
<li>It is now possible to output visualisation in parallel VTK (.pvtu) format. To do this you need to set the <tt>parallel_vtk</tt> attribute to "yes" in the <tt>OutputVisualizer</tt> element in the parameters file.</li>
<li>Fixed bug in fibre direction heterogeneities: when running in parallel some fibre directions were permuted between elements. (This bug did not exist prior to release 2.1.)</li>
<li>Fixed bug with conductivity heterogeneities in 1D and 2D causing a '<tt>boost::numeric::ublas::bad_size</tt>' error.</li>
<li>User may now specify a list of node indices where time traces of output variables are requested (see below for details).</li>
<li>A (Strang) operator splitting solver has been implemented for monodomain. This is mainly for comparison of numerical methods — it is neither the default solver nor optimised. It can be switched on using the <tt>HeartConfig</tt> class: <tt>HeartConfig::Instance()->SetUseDiffusionReactionOperatorSplitting()</tt>.</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>A new class <tt>CylindricalHoneycombMeshGenerator</tt> has been created and the existing <tt>HoneycombMeshGenerator</tt> class simplified. This included changing the arguments in the <tt>HoneycombMeshGenerator</tt> constructor. Also the class <tt>HoneycombMutableVertexMeshGenerator</tt> has been merged into <tt>HoneycombVertexMeshGenerator</tt> and the associated method <tt>GetMutableMesh</tt> renamed to <tt>GetMesh</tt> for consistency with the cell-centre code. These changes will break user projects.</li>
<li>A new cell population boundary condition class hierarchy has been handled, to deal with boundary conditions for cell movement. Such objects are passed to and stored in a <tt>CellBasedSimulation</tt> object in a similar way to forces and cell killers.</li>
<li>We have extended VTK functionality to allow for point data output from node- and mesh-based cell simulations for visualization in Paraview.</li>
<li>We have updated user tutorials and added new tutorial on using cell population boundary condition objects.</li>
<li>It has been made clear what code is needed in concrete <tt>CreateCellCycleModel</tt> methods.</li>
</ul>
<h3>New functionality & major code changes</h3>
<h4">General</h4>
<ul>
<li>We have a new algorithm for random samples from the normal distribution in the <tt>RandomNumberGenerator</tt>, for increased stability at very large numbers of calls. Any results dependent on this will change, even with the same seed.</li>
<li>"Infrastructure tests" such as checking copyright notices and for duplicate file names are now not run by default (i.e. <tt>do_inf_tests=0</tt> is now the default setting), unless you have <tt>do_inf_tests=1</tt> in your hostconfig file.</li>
<li>Some new helper methods have been added to <tt>OutputFileHandler</tt> and <tt>FileFinder</tt>:
<ul>
<li><tt>OutputFileHandler::FindFile</tt> - get a <tt>FileFinder</tt> for a file in the output directory</li>
<li><tt>OutputFileHandler::CopyFileTo</tt> - copy a file to the output directory</li>
<li><tt>FileFinder::GetLeafName</tt> - get the leaf name of a file</li>
</ul></li>
<li>Support has been added for Boost version 1.44. However, note that due to a bug in this Boost version, many tests will crash after they have finished running (with the message "pure virtual method called. terminate called without an active exception")!</li>
<li>A new header <tt>SmartPointers.hpp</tt> has been added containing a few helpful macros for working with <tt>boost::shared_ptr</tt>.</li>
<li>Created new helper classes <tt>PetscVecTools</tt> and <tt>PetscMatTools</tt> in <tt>linalg</tt> that encapsulate many of the PETSc functions we use related to vectors and matrices. This isolates much of the PETSc-version-specific code within these classes, enabling cleaner user code. If new PETSc-version-specific code is written, suitable methods should be added to these classes in preference to using PETSc directly.</li>
<li>Added named attribute functionality to <tt>AbstractParameterisedSystem</tt>, allowing arbitrary real-valued attributes to be attached to ODE classes. This is used by PyCml to support named attributes on CellML models. Also added <tt>Has...</tt> methods to ODE system information, to avoid the need for <tt>try...catch</tt> statements in generic code.</li>
<li>Changed the event handler classes to use <tt>MPI_Wtime</tt> rather than <tt>std::clock</tt> as underlying timer. This will give a more accurate wall clock time.</li>
<li>Time adaptivity can now be implemented for PDE solvers by writing an <tt>AbstractTimeAdaptivityController</tt> subclass. <tt>TestMonodomainWithTimeAdaptivity</tt> does some very simple adaptivity to demonstrate this.</li>
<li>Reduced parallel overhead associated with assembling PETSc objects. Since Chaste (almost always) ensures that data is generated only on the local process (and the helper methods in <tt>PetscVecTools</tt> and <tt>PetscMatTools</tt> enforce this), no data migration is required. We therefore by default set the PETSc option not to check whether migration is needed (<tt>{VEC,MAT}_IGNORE_OFF_PROC_ENTRIES</tt>).</li>
<li>ODE solvers now inherit from <tt>Identifiable</tt> in order to provide reflection, so that the solver used can be written to results files by <tt>OdeSolution</tt>. Unfortunately, this means that on older Boost versions (<1.37) you need to include <tt>CheckpointArchiveTypes.hpp</tt> in any test which solves an ODE system to obtain an <tt>OdeSolution</tt> object, or you'll experience a segfault!</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li>New options in the XML parameters file:
<ul>
<li>A user may now specify a list of node indices where time traces of output variables are requested. See <tt>ChasteParametersFullFormat.xml</tt> for an example of usage and the documentation of <tt>PostProcessingWriter::WriteVariablesOverTimeAtNodes</tt> for further information. The output files (one file per output variable) will have the nodal time traces arranged in columns (gnuplot-friendly), one column per requested node. The node numbers that the user requests are referred to the original (unpermuted) node numbering (hence it may differ from what the user sees - for example - when visualizing the output of a previous parallel simulation). No matter what permutation is used in the simulation, the output of the requested nodes will be the same.</li>
<li>A new post-processing step to calculate pseudo-ECGs has been added to the Chaste parameters file: the <tt>PseudoEcgElectrodePosition</tt> element, which specifies where the virtual probe electrode should be placed. This element may occur multiple times to calculate ECGs from different probe locations. Note that probe electrodes must be located outside the heart tissue!</li>
<li>A <tt>MeshPartitioning</tt> element has been added in the <tt>Numerical</tt> parameters section, allowing you to specify how a mesh gets partitioned in parallel (dumb/metis/parmetis/petsc). This maps to the <tt>HeartConfig</tt> methods <tt>Set/GetMeshPartitioning</tt>.</li>
<li>Stimuli section can use ellipsoid regions.</li>
</ul></li>
<li>Explicit instantiation is now used for <tt>CardiacSimulationArchiver</tt>, allowing this class and <tt>CardiacSimulation</tt> to be split into <tt>.hpp</tt> and <tt>.cpp</tt> files. This improves compile times (especially for the Intel compiler) but may break some projects or tests which use checkpointing when run with older Boost versions (<1.37).</li>
<li>Various improvements to cell model generation from CellML:
<ul>
<li>Lookup table settings (table bounds and step size) can now be modified at run-time, not just code generation time. There is a new <tt>AbstractLookupTableCollection</tt> base class for lookup tables that provides this functionality, with a get method on <tt>AbstractCardiacCellInterface</tt> that is overridden by subclasses providing tables.</li>
<li>There have been some improvements to the performance of various cell model optimisations. Some are not yet enabled by default (PyCml flags <tt>--include-dt-in-tables</tt>, <tt>--combine-commutative-tables</tt>, <tt>--no-member-vars</tt>, <tt>--pe-convert-power</tt>) and others are "unsafe in general" (PyCml flag <tt>--no-check-lt-bounds</tt>).</li>
<li>Conversion issues between cardiac cell models and Chaste are now handled in a more generic fashion within PyCml by creating an interface component. This ensures that all quantities read or written by the Chaste tissue model, including ionic currents, are in the correct units.</li>
<li>There is now a constructor options which allows the cell model converter (<tt>CellMLToSharedLibraryConverter</tt>) to save generated C++ source files for inspection.</li>
<li>A new option <tt>--expose-annotated-variables</tt> has been added to PyCml, which exposes all oxmeta-annotated variables to the <tt>GetAnyVariable</tt> functionality, i.e. it annotates non-state variables as parameters or derived quantities, as appropriate. There is also an <tt>--expose-all-variables</tt> option, which annotates every variable in the model.</li>
<li>Allowed certain computed variables (those which can be determined not to vary at run-time) to be metadata annotated constants. In particular, this allows the default stimulus current amplitude to be calculated within the cell model, rather than given as a fixed constant number.</li>
<li>Used the new named attribute functionality on <tt>AbstractParameterisedSystem</tt> to support named attributes on CellML models.</li>
</ul></li>
<li>Dedicated S1-S2 and dynamic restitution stimuli classes (mainly for single cell work) have been brought into the main trunk from a user project.</li>
<li>Added <tt>Has...</tt> methods to cardiac modifiers, to avoid the need for <tt>try...catch</tt> statements in generic code.</li>
<li>Implemented <tt>SolveAndUpdateState</tt> for backward Euler cells.</li>
<li>The interface for <tt>CardiacElectroMechanicsProblem</tt> (and <tt>CardiacElectroMechProbRegularGeom</tt>) has changed slightly, instead of taking in the number of electrics solves per mechanics solve, it takes in the mechanics solve timestep (which should be a multiple of the electrics PDE solve).</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>See above under "Headline features".</li>
</ul>
<h3>Code interface changes that may require changes to user code</h3>
<h4>General</h4>
<ul>
<li>The interface to the <tt>SimpleLinearParabolicSolver</tt> has changed: instead of calling <tt>SetTimes(t0,t1,dt)</tt>, you have to call two methods <tt>SetTimes(t0,t1)</tt> and <tt>SetTimeStep(dt)</tt>.</li>
<li><tt>DistributedVectorFactory</tt> now always sets <tt>mpOriginalFactory</tt> when loaded from an archive.</li>
<li>Moved the partitioning type into its own header file, rather than being nested in <tt>DistributedTetrahedralMesh</tt>. You just need to change (e.g.) <tt>DistributedTetrahedralMesh<1,1>::DUMB</tt> to <tt>DistributedTetrahedralMeshPartitionType::DUMB</tt>.</li>
</ul>
<h4>Cardiac</h4>
<ul>
<li><tt>VerifyStateVariables</tt> is now not called in <tt>NDEBUG</tt> builds, which may lead to tests not 'failing' in optimised builds.</li>
<li>Added an optional parameter <tt>pStateVariables</tt> to <tt>GetIIonic</tt>, which gives the state at which to evaluate the current. This will require a change to any manually written cell model to match the new interface.</li>
</ul>
<h4>Cell-based</h4>
<ul>
<li>Every cell cycle model now needs an <tt>OutputCellCycleModelParameters</tt> method. See existing models for what it should include.</li>
</ul>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<hr />
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<h2>Release 2.1 (changes since Release 2.0)</h2>
<h3>Headline changes</h3>
<h4>General</h4>
<ul>
<li>
The user documentation has been significantly extended, and tutorials written for the cardiac executable. Static versions of user guides and tutorials are available
for this release <a href="https://chaste.cs.ox.ac.uk/chaste/tutorials/release_2.1/">here</a>.