Please mention any changes to the code which will break users' code here - to be put in the release notes for the next release. Also mention any significant improvements or new features.
The real definitive release notes will be written in source:trunk/docs/ReleaseNotes.html at the time of release. To make that process easier, please structure this page in the same manner, rather than simply copying from LatestNews.
OlderReleaseNotes -- release notes for releases 1.1 to 3.1
Release 3.2 (changes since Release 3.1)
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.
Headline features
General
- The non-cardiac portions of Chaste have now been ported to Windows. See InstallGuides/Windows for install and usage instructions.
- Chaste has been ported to Mac OS X and continuous integration tests are performed on OS X v10.8 "Mountain Lion".
- The Ubuntu package now also supports up to Trusty Tahr (14.04 Long-Term Support edition).
- Chaste works with most recent PETSc versions up to and including PETSc 3.4.
- Chaste works with most recent VTK versions up to and including VTK 6.1.
- Chaste works with most recent Boost versions up to and including Boost 1.54.
- 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.
- We now allow access to the latest development version of the code (see ChasteGuides/AccessCodeRepository), provide resources for external developers (see ChasteGuides/ExternalDeveloperGuide), and allow public registration on the trac wiki to view and open 'tickets'.
- Chaste includes a CITATION.txt file for easy citation.
Cardiac
- 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 #1795 for some benchmarking).
- 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.
- 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.
Cell-based
- 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 UpdateAfterSolve and UpdateAfterTimestep have been moved from simulation classes and into the relevant modifiers.
- 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 AbstractCellPopulation::OpenWritersFiles() hasn't been called before writing.
- Cellular Automata class changes: MultipleCaBasedCellPopulation has been removed, as CaBasedCellPopulation now allows (optionally) for more than one species at a site.
- NodesOnlyMesh now works in parallel and uses a DistributedBoxCollection to select which nodes it owns based on the decomposition in the box collection. It is necessary to include the PetscSetupAndFinalize.hpp header in the test to use this type of mesh.
Major new functionality & code changes
General
- To enable cross-platform support, we have removed all linux system calls to rm and cp, these are now done via FileFinder. The following are of note:
- FileFinder::Remove() this operates like rm for a file, and rm -r for a folder. It will only delete things that are in a testoutput folder that contains the signature file (.chaste_deletable_folder denoting the fact Chaste made the folder in the first place).
- FileFinder::DangerousRemove() this operates like rm -f for a file, and rm -rf for a folder. It will delete anything in the testoutput 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.
- There is no command to remove files from anywhere else on your machine. If you did manage to set your CHASTE_TEST_OUTPUT to be "/" then DangerousRemove() could wipe large parts of your system, obviously this should be avoided.
- To enable cross-platform support, have moved from a rand() based random number algorithm, to boost::random (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 cell_based and crypt) will get subtly different results now.
- 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.
- All mesh element files now have floating point attributes by default. Old binary element files with attributes cannot be read by Chaste. A conversion utility ./python/utils/ConvertBinaryElementAttributes.py is provided to assist users with this change.
- Simple airway tree ventilation models (Poiseuille flow and Pedley resistance) have been added to continuum_mechanics.
- Node now uses a NodeAttributes class to store its attributes. It is only created if the attributes are used so any code in projects that calls Node::rGetNodeAttributes() without having first set an attribute will encounter an error. If you need to check whether any attributes are set up, Node::GetNumNodeAttributes will return the number of attributes (0 if none set).
Cardiac
- 3D quadrature now uses second order (rather than first order) integration. This may change results slightly (for the better!).
- Fibre reading capability for extended bidomain problem has been implemented such that ExtendedBidomainTissue has modified conductivities in all 3 fields (thanks to Shameer).
- 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 AbstractContractionCellFactory, and setting this in the electro-mechanics problem definition.
- Fixed a bug when using parMETIS partitioning (the default, PARMETIS_LIBRARY) which often resulted in deadlock when using state variable interpolation (SVI) in 3-D.
- Changed cell factories from passing node indices to pointers to Node objects, and element indices to pointers to Element objects.
- For most users this will mean updating all instances of CreateCardiacCellForTissueNode to have the correct argument (from e.g. unsigned node to e.g. Node<DIM>* pNode where DIM is probably 1, 2, or 3) and replacing all occurrences like GetMesh()->GetNode(node) with simply pNode.
- Contraction cell factory (AbstractContractionCellFactory and LabelBasedContractionCellFactory) methods CreateContractionCellForElement have changed from taking an unsigned to an Element<DIM,DIM>*.
- AbstractPurkinjeCellFactory::CreatePurkinjeCellForTissueNode has changed from taking an unsigned to a Node<DIM>*.
- 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.
- A script python/utils/AddVtuTimeAnnotations.py 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.
Cell-based
- Fixed bug in area and volume calculations for 3-d cell-centred mesh-based simulations and 3-d vertex mesh simulations
- The definition of the cut-off length in a NodeBasedCellPopulation has been moved to the underlying NodesOnlyMesh. Consequently it should be set when constructing the mesh using ConstructNodesWithoutMesh(mesh, cut_off) rather than calling NodeBasedCellPopulation::SetMechanicsCutOffLength(cut_off).
- Cell radii in NodeBasedCellPopulation type simulations are now stored in the NodeAttributes of each Node. It should now be accessed directly through the node, rather than through NodesOnlyMesh.
- Forces on a node in OffLatticeSimulation are now stored in the NodeAttributes rather than a separate vector. This means that AbstractForce::AddForceContribution now only takes the cell population as an argument. For example, in a cell population or a force class rForces[p_node->GetIndex()] is replaced with p_node->rGetAppliedForce() and rForces[p_node->GetIndex()] += force is replaced with p_node->AddAppliedForceContribution(force).
- AbstractCellProperty is more widely used throughout the code, and classes such as ProliferativeTypes now use this framework.
Minor
New functionality and code changes, which may still require changes to user code
General
- For developers, you no longer have to type "test_suite=" after scons, this makes it easier to use tab completion.
- AbstractNonlinearElasticitySolver::WriteCurrentDeformationGradients has been renamed, replace calls of solver.WriteCurrentDeformationGradients(..) with solver.WriteCurrentStrains(DEFORMATION_GRADIENT_F,..). Other strains can also be written - see How To page.
- One dimensional meshes can now be written out to VTK format using the VtkMeshWriter, 2D and 3D were before.
- Change to CVODE solving: AbstractCvodeSystem and CvodeAdaptor have enabled the CVodeSetStopTime 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 Solve as default. You can still re-initialise on every call by manually calling the method AbstractCvodeSystem::SetForceReset(true); if you need to.
- Additional time points are no longer permitted in TimeStepper.
- Auto-generated quadratic slab/rectangular meshes have different node/element indexing to release 3.1.
- Continuum mechanics solvers now reference AbstractTetrahedralMesh rather than (subclass) QuadraticMesh to allow use of a parallel version (DistributedQuadraticMesh). This may break any user projects that contain solver subclasses.
Cardiac
- What was called DynamicRestitutionStimulus has been renamed SteadyStateRestitutionStimulus, as we talked to some physiologists!
- Unfortunately, an error was discovered in a calculation behind the CompressibleExponentialLaw (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
- The coarsened version of the Oxford Rabbit mesh located at apps/texttest/weekly/Propagation3d has been renamed OxfordRabbitHeart_481um.
- 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".
- AbstractCardiacCellInterface::UseCellMLDefaultStimulus() now returns a boost::shared_ptr<RegularStimulus> to the stimulus instead of returning void. This may break user projects if you are storing auto-generated models. In this case the method should be updated as per r19552. This has the benefit of providing access to the RegularStimulus methods, without having to remember how to static cast a boost shared pointer to an AbstractStimulusFunction.
- You can now print out additional action potential model variables in a BidomainWithBath simulation, previously this failed because a FakeBathCell doesn't have them.
- HeartConfig::Instance()->SetVisualizeWithVtk(); will now work in 1D as well as 2D and 3D.
- 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.
- Fibre input and output in parallel has been improved. Binary fibre files are preferred.
- PyCML has the ability to produce cells that can be solved using generalised Rush-Larsen (release 3.1 added original Rush-Larsen).
- 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".
- Altered the output from PseudoEcgCalculator 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.
- PostprocessingWriter and PseudoEcgCalculator now use FileFinders in their constructors to specify directories (instead of a string and a bool).
- 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.
Cell-based
- Bug in vertex-based simulations which involved cells not being counted as removed after T2 swaps has been fixed.
- 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.
Future Plans
- General: The next release of Chaste will no longer support versions of boost < 1.40.
- Cardiac: The next release of Chaste will no longer output Meshalyzer format as default (it will remain an option to enable).