2.4.0
What's Changed
LFRic
- Significant progress towards fully-automatic driver generation for extracted kernels (using PSyIR);
- Support for standalone and NetCDF kernel extraction;
- Significant progress towards generating PSyIR for the Algorithm layer;
- Many classes have been moved out of the (extremely large) dynamo0p3.py file and renamed (replacing "Dyn" with "LFRic");
- New setval_random built-in;
- Bug fixes to KernelModuleInlineTrans;
- New kernel metadata handling;
- Support for new field/operator precisions (e.g. r_solver, r_trans etc.)
- Invoke names now constrained to be valid Fortran names;
- Add compilation support to lfric/eg14 (OpenACC example);
- Allow for GH_WRITE access to arguments to inter-grid kernels;
PSyAD
- Assorted bug fixes (including kind parameter declarations, routine naming, unary minus operators);
- Application to Functions now forbidden;
- LFRic-specific support added;
- New ReferenceToArrayTrans transformation;
- Support for test-harness generation (both generic and LFRic-specific);
- Support for LFRic kernel arguments containing geometry information;
- Selection of LFRic tangent-linear kernels added under examples;
PSyIR
- Improvements to dependence analysis (induction variables, variables with names matching Sympy reserved names)
- New HoistLoopBoundExprTrans transformation;
- New routine-inlining transformation (including support for routines in a different Container);
- Support for new OpenMP tasking transformations;
- Improvements to support of OpenMP Target directives;
- Improvements to identification of private, firstprivate etc. attributes on OpenMP directives;
- SIR backend - support for intrinsics;
- Bug fix to DotproductTrans;
- New Sum2CodeTrans and {Min,Max}Val2Code transformations;
- Support for OpenMP 'teams distribute parallel do' directive;
- Improvements to SymbolTable functionality;
- Add support for static/save Symbol attribute;
- Support for Symbols that are renamed upon import;
- New HoistLocalArraysTrans;
- Addition of 'force' option to ParallelLoopTrans;
- New 'is_independent' method added to Loop to encapsulate dependence analysis;
- Support for ACC ENTER DATA and ACC UPDATE directives (data movement);
- Support for GANG and VECTOR clauses on ACC LOOP directive;
- New ACCClause nodes for specifying data movement;
- New automatic tree-update mechanism to allow ancestor nodes to update if their descendants change;
- New 'IntrinsicCall' node type used for all intrinsics (previously, some were Operations);
- All Fortran2018 intrinsics now supported;
- Fortran 'INCLUDE' statements are now forbidden (must be handled by fparser);
- Support for Fortran parameter statements;
- Support for Fortran declarations containing initialisation expressions;
- Support for Fortran 'DO WHILE' loops;
- Generic "kernel" extraction support;
- Support for assumed-shape arrays;
- Bug fix to handling of USE statements in Fortran backend;
- Improved support for Fortran INTERFACEs;
- Support for Fortran Common blocks;
- Support for 'elemental' and 'pure' Routines;
- Bug fixes for Routines CONTAINed within other Routines in Fortran;
- Added support for Fortran EQV operator;
- Bug fix for SELECT CASE involving a logical variable;
- UnknownFortranType extended to allow capture of known type information;
- Support for the use of array expressions and derived types in Sympy;
- Improvements to Node.ancestor() and new Node.path_from() method;
GOcean
- New kernel metadata handling;
- Support for OpenMP tasking;
General
- Fix to locations searched for PSyclone config file;
- Improve CLI --version interface;
- Remove constraint that supplied Fortran is free-form;
- Update to fparser 0.1.3;
- Improvements to NEMO training/tutorial material;
- Fixes to the handling of compiler flags for the libraries, examples and tutorials;
- Bug fixes to the line-length limiting module to avoid generation of lines containing only whitespace and a line-continuation character;
- Support for logical data in PSyData;
- Support for the Tau profiler using the PSyData interface;
- PSyclone integration testing implemented - correctness and performance tested for both LFRic and NEMO.
New Contributors
- @matthewrmshin made their first contribution in #1997
- @svalat made their first contribution in #2014
- @mo-lottieturner made their first contribution in #2098
- @BHFock made their first contribution in #2123
- @jwallwork23 made their first contribution in #2259
- @oakleybrunt made their first contribution in #2260
Full Changelog: 2.3.1...2.4.0