	1) PR #2199 for #2189. Fix bugs with missing maps in enter data
	directive.

	2) PR #2269 for #2268. Rename DynInvokes to LFRicInvokes and move
	to own module.

	3) PR #2255 for #2237. The derived type intial values are not lost
	anymore, and the "extends" or "abstract" keywords cause a
	UnknownFortranType.

	4) PR #1822 towards #1338. Adds support for the OMP tasking
	directive and transformation.

	5) PR #2346 for #2345. Make the integration tests use a parameterised
	version of python, currently 3.11.4. Pin pylint to < 3.0

	6) PR #2325 for #1947. Adds support for OMP/ACC Atomics and OMP Simd
	directives.

	7) PR #2355 for #2347. Adds testing to demonstrate that the new LFRic
	metadata handling works for multi-precision kernels.

	8) PR #2342 for #2340. Fix issues with VERIFY, ISHFTC and PRECISION
	intrinsics and introduce a NEMO passthrough test.

	9) PR #2350 for #2349. Update to HEAD of fparser master to get
	fparser1 fix for parsing WHERE.

	10) PR #2285 for #2284. Split LFRicRunTimeChecks from dynamo0p3.py.

	11) PR #2313 towards #2197. LFRic PSyLayer uses array pointers instead
	of derived types accessors in the kernel/builtin arguments.

	12) PR #2321 for #2319. Refactors DynStencil into a dataclass named
	LFRicArgStencil.

	13) PR #2361 for #2360. Fix LFRic Loop.independent_iterations with domain
	information and allow sequential directives on loops with dependencies.

	14) PR #2365 for #2351. Fix ref2arrayrange allocated bug.

	15) PR #2363 for #1254. Fortran FORMAT, ENTRY and IMPLICIT statements
	produce CodeBlocks instead of losing the statements.

	16) PR #2357 for #2353. Adds the ACC-loops NEMO transformation script
	and includes its use in the integration testing.

	17) PR #2380 and #2378 for #2369. Add PSyIR node.sibilings property.

	18) PR #2375 for #2374. Bug fix for LFRic kernel-extraction driver
	creation for netcdf.

	19) PR #2385. Update tests to include python 3.12.

	20) PR #2377 for #2368. Adds optional 'depth' argument to Node.walk().

	21) PR #2362 for #2243 and #2312. Add support for Fortran save statements.

	22) PR #2379 for #2370. Adds a Node.get_sibling_lists() method.

	23) PR #2366 towards #342. Improve symbols and tighten-up ACCRoutineTrans
	validation.

	24) PR #2383 towards #2256. Adds support for 'DO CONCURRENT' in the
	fparser2 frontend.

	25) PR #2100 for #2091. Renames DynKern to LFRicKern and moves its
	implementation to domain/lfric.

	26) PR #2391 for #2390. Fix bug in generator.py error message.

	27) PR #2364 towards #1941. Moves map of LFRic precisions to
	config. file.

	28) PR #2376 for #1525. Add lowering methods to all LFRic Built-ins.

	29) PR #2406 for #2404. Fixes bug in setop_random kernel (was only
	filling the lowest vertical level).

	30) PR #2389 toward #928. Adds support for field_bcs_kernel when
	parsing kernels using kernel_interface.py. This is required when
	validating LFRic kernel arguments.

	31) PR #2388 for #2323. Rename the array reduction 2code transformations
	to use the 2loop postfix and improve their implementation. 

	32) PR #2400 for #1508. Add flag/config option to disable backend checks.

	33) PR #2428 for #2427. Fixes bug in MaxVal2LoopTrans.

	34) PR #2430 towards #2421. Ensures local symbol table is merged into
	routine scope following an inline transformation. (Works around
	#2424.)

	35) PR #2412 for #2411. Remove NemoKern and add the 'routine' profiling
	option to the psyclone command.

	36) PR #2401 for #2261. Split DynLoop out of dynamo0p3 and rename.

	37) PR #2387 towards #1799. Add support for querying the datatype of
	operations.

	38) PR #2434 for #2433. Bug fix for process_nemo.py script to
	aggregate -I arguments.

	39) PR #2426 for #2254. Make LFRic PSyAD test harness use LFRic
	logging API.

	40) PR #2273 for #2272. Split LFRicFields into domain/lfric module.

	41) PR #2393 for #2392. Split and rename DynKernMetadata into
	into domain/lfric module (LFRicKernMetadata class).
	
	42) PR #2240 for #2132. Update Integration test software stack.

	43) PR #2454 for #2418. Fix OMPTaskTrans attempts to inline IntrinsicCalls.

	44) PR #2459 for #2458. Fix broken documentation links.

	45) PR #2472 for #2471. Update all copyright dates to include 2024 and
	add utils/update_copyright.sh script to do this task.

	46) PR #2443 for #2442. Fix bug for PSy-layer generation involving CMA
	operators in the LFRic API.

	47) PR #2481 for #1192. Unpin jsonschema version.

	48) PR #2470 for #2468 and towards #237. Fixes Sphinx link-check errors
	for links to anchors in User Guide and also updates the name of the
	dl_esm_inf library and updates associated links (remove references to
	puma).

	49) PR #2420 towards #1786. Add and update Built-ins to support
	mixed precision in the LFRic API: real to real, real to integer
	and integer to real field types.

	50) PR #2480 for #2479. Updates .gitignore for files generated by
	examples.

	51) PR #2486 for #2419. Renames Unknown[Fortran]Type to
	Unsupported[Fortran]Type and DeferredType to UnresolvedType.

	52) PR #2482 towards #2062. Adds a new 'origin_string()' method
	to Node to return information on the origin (line number and file
	name) of a PSyIR node.

	53) PR #2439 for #2105. Use maxval2loop and atomics to parallelise
	NEMO stpctl.f90.

	54) PR #2493 for #2492. Fix bug in NemoOuterArrayRange2LoopTrans

	55) PR #2465 towards #2004. Move same_range functionality to
	ArrayMixin and other improvements.

	56) PR #2372 towards #1960. Fix bugs on Fortran WHERE canonicalisation. 

	57) PR #2489 for #2488. Unify generic LoopFuseTrans and allow renaming
	the second loop variable for certain cases.

	58) PR #2423 for #2410. Split off and rename DynStencils to
	LFRicStencils in the LFRic API.

	59) PR #2490 towards #2447. Update PSyclone to use fparser 0.1.4 release.

	60) PR #2501 for #2447. Create PSyclone release 2.5.0.

release 2.4.0 29th of September 2023

	1) PR #1758 for #1741. Splits the PSyData read functionality into a
	standalone module to remove dependence on infrastructure for
	driver code.

	2) PR #1766 FOR #1764. Fixes various syntax errors in some of the
	Fortran test files.

	3) PR #1759 for #1752. Updates to GOcean examples so that F90FLAGS
	is used consistently and is also used when linking.

	4) PR #1700. Various improvements to the example NEMO processing
	scripts.

	5) PR #1762 for #1743. Ensures declaration of precision variables
	in PSyAD test harness.

	6) PR #1774 for #1773. Fixes syntax error in test Fortran file.

	7) PR #1620 for #1555. Create Algorithm Layer for a Kernel.

	8) PR #1767 for #1739. Fixes dep-analysis bug whereby CMA operator
	arguments to LFRic kernels were not given correct access value.

	9) PR #1763 for #1717. Fixes invalid adjoint names for subroutine
	and module.

	10) PR #1776 for #1775. Fixes post_region_code_gen and improves
	test fixtures.

	11) PR #1784 towards #1779. Removes the use of config-provided bounds
	from the NemoRange2Loop Transformation.

	12) PR #1765 for #1724. Remove kernel use statements from
	processed algorithm layer code.

	13) PR #1785 for #1771. Refactor algorithm-creation functionality.

	14) PR #1769 for #1721. Fixes bugs in use of sympy simplify() and
	expand().

	15) PR #1791 for #1780. Add setval_random built-in in LFRic API.

	16) PR #1778 for #1751. Add ReplaceInductionVariableTrans transformation.

	17) PR #1652 for #1645. Symbols representing LFRic BuiltIn Functors

	18) PR #1795 for #1583. Bug fix for PSyAD for expressions involving
	a unary minus.

	19) PR #1809. A few fixes for code style issues.

	20) PR #1803 for #1797. Adds support for logical variables to the
	PSyData API.

	21) PR #1804 for #637. Extends the dependence analysis to support
	LFRic built-in kernels.

	22) PR #1790 for #1787. Adds HoistLoopBoundsExprTrans transformation
	which hoists complex loop-bound expressions out of loops.

	23) PR #1811 for #1810. Separate LFRic LMA Operator infrastructure
	into its own file.

	24) PR #1808 for #1681. Extends PSyAD to reject functions.

	25) PR #1633 towards #1631. New implementation of kernel meta-data
	parser for GOcean API.

	26) PR #1821 for #1557. Extends PSyAD to support LFRic mixed-
	precision kernels.

	27) PR #1551 towards #1338. Add OpenMP Clauses and its referenced
	variables as part of the PSyIR tree.

	28) PR #1838 for #1704. Update replace_with method to take into
	account named arguments.

	29) PR #1847. Make a subSignature a Signature and allow
	Signature.to_language w/o arguments

	30) PR #1831 for #1735. Changes the directory structure in the
	test LFRic infrastructure to mimic that in the full LFRic
	infrastructure. Alter the testing infrastructure to use the
	Makefile to build the LFRic library.

	31) PR #1814 towards #924. Add new PSyIR InlineTransformation.

	32) PR #1819 for #1815. Forbid OMPTarget regions from containing
	CodeBlock nodes.

	33) PR #1830 for #1828. Fixes to enable explicit OpenACC Loop
	parallelism with UM.

	34) PR #1855 for #1840. Fix bug with dependency analysis when an
	expression has the same array reference with and without indices.

	35) PR #1827 for #1826. Adds support for SIR intrinsics.

	36) PR #1839 for #1782. Adds a -api option to the PSyAD script.

	37) PR #1844 towards #1823. Makes module inlining work in LFRic
	when the same kernel is used multiple times.

	38) PR #1825 for #1576. Adds the Reference2ArrayRangeTrans
	transformation.

	39) PR #1846. Fixes to various docstrings in transformations.py
	and node.py.

	40) PR #1845 for #1813. Adds a standalone PSyData extraction
	library (that uses only Fortran IO).

	41) PR #1836 for #1834. Adds support for explicit array-range
	declarations to the dotproducttrans transformation.

	42) PR #1871 for #1870. Fixes typo in link in User Guide.

	43) PR #1875 for #1874. Remove pytest-pep257 dependency from setup.py

	44) PR #1860 for #1538. Fixes search for config file when
	`python setup.py install` used instead of pip and adds yaml config
	file to tell RTD to use pip and Python 3.8 (for interop. with
	SymPy).

	45) PR #1768 for #1711. Add initial Sum2CodeTrans transformation.

	46) PR #1885 for #1878. Update FortCL submodule to head of master to
	fix invalid-boz compilation errors with newer versions of gfortran.

	47) PR #1890 for #1889. Fix test to avoid temporary files being
	left after pytest run.

	48) PR #1850 towards #1799. Initial PSyIR node.datatype implementation
	to query the resulting datatype of a PSyIR subtree.

	49) PR #1869 for #1868. Extend PSyAD to make use of the
	Reference2ArrayRangeTrans.

	50) PR #1880 for #1865. Improves support for function calls in the
	PSyIR by ensuring the associated RoutineSymbol has the correct
	datatype.

	51) PR #1894 for #1893. Fix bug in is_upper/lower_bound for UnknownTypes.

	52) PR #1853 for #1829. Add OMP teams distribute parallel do directive
	and refactor OMPLoopTrans.

	53) PR #1900 for #1893. Fix bug in is_upper/lower_bound for non-typed
	Symbols.

	54) PR #1782 for #1496. Adds initial support for PSyAD test
	harness generation for LFRic kernels. Some issues remain.

	55) PR #1807 towards #1806. Adds PSyIR support for LFRic kernel
	metadata.

	56) PR #1906 for #1896. Update HoistLocalArrayTrans to avoid hoisting
	parameter arrays and, unless explicitly requested, device parallel routines.

	57) PR #1901 towards #1892 and #1898. Add support for storing and
	querying the index of a metadata argument.

	58) PR #1884 for #1882. Extends the inlining transformation to support
	inlining of functions.

	59) PR #1912 for #1851. Fixes pycodestyle (2.9) errors/warnings for
	with Python 3.10.

	60) PR #1899 towards #1823. Refactors KernelModuleInlineTrans so that
	the in-lining happens at transformation time rather than code-
	generation time.

	61) PR #1852 for #1750. Adds an option to VariablesAccessInfo to
	report/not report array arguments as first parameter to
	lbound/ubound/size as read access. This fixes several issues with the
	dependency tools.

	62) PR #1867 for #1861. Significantly improves test coverage,
	especially of the compilation-testing utilities.

	63) PR #1924 for #1923. Fix issues building Developer and Reference
	guides.

	64) PR #1913 for #1848. Fix issues with case-sensitivity in the
	SymbolTables.resolve_imports method.

	65) PR #1917 for #1916. Extends InlineTrans to support calls to
	routines in different Containers.

	66) PR #1940. Replace Python 3.10 with 3.11 in GHA test suite.

	67) PR #1943 for #1942. Fixes incorrect path in tutorial
	Makefile setup.

	68) PR #1905 for #1903. OpenMP schedule can be set to "none", which skips
	the schedule clause in the OpenMP directive. This is the new default in
	generic PSyIR (GOcean and LFRic still default to "static").

	69) PR #1892 towards #1824. get_kernel_schedule supports resolving
	interfaces (e.g. for the LFRic mixed precision kernels).

	70) PR #1911 for #1909. Update fparser dependency.

	71) PR #1908 for #1879. Completes the new meta-data parsing
	functionality for the LFRic API.

	72) PR #1918 for #1883. Updates kern_call_arg_list() (for LFRic) to
	use PSyIR. (Step towards using PSyIR in LFRic PSy-layer generation
	and required for PSyKE driver generation.)

	73) PR #1898 towards #1708. Extends PSyAD LFRic harness support to
	kernels with field arguments that contain geometry information.

	74) PR #1982 for #1981. Updates the GHA configuration to use
	Python 3.7 instead of 3.6.

	75) PR #1956 for #1955. Updates the tests/.pylintrc file to remove
	unsupported options.

	76) PR #1888 for #1783. Adds NEMO OpenMP transformation scripts
	to the examples.

	77) PR #1933 for #1902. Adds run-time checks when hoisting
	local work arrays.

	78) PR #1963 towards #1883. More work to improving the use of PSyIR
	in LFRic (as needed for PSyKE driver creation).

	79) PR #1964 for #1961. Adds lower_to_language_level to DynLoop to
	ensure loop variable names preserved in PSyKE driver creation.

	80) PR #1952 for #310. Adds support for ACCEnterData and ACCUpdate
	directives in the NEMO API.

	81) PR #1925 for #1832. Add a 'force' option to the ParallelLoopTrans.

	82) PR #1988 for #1507. Drop 'six' dependency and fix many pylint issues.

	83) PR #1968 towards #1823. Fixes additional issues with module-
	inlining in LFRic. (Interfaces, imported global variables and some
	validation problems.)

	84) PR #1996. Addendum to #1952 to cover missed lines.

	85) PR #1994 for #1986. Fix issues with LFRic OMP support by skipping
	dependence analysis for coloured loops.

	86) PR #1997 for #888. Updates the handling of the '-v'
	command-line flag for requesting version information. The
	psyclone script will now quit after outputting the version
	information.

	87) PR #1970 for #1966. Add an overwrite_datatype option to
	StructureReferences for when an API knows what type a DeferedType is.

	88) PR #2003. Pins the Sphinx version to < 6.1 to avoid a bug in
	the link-checking functionality. Also corrects various links to
	the VirtualBox site.

	89) PR #1972 for #1967. Ensures that proper Signatures are created
	for structure accesses that appear in LFRic kernel arguments.

	90) PR #1907 for #1366. Introduces the IntrinsicCall node and the
	IntrinsicSymbol symbol. Adds ALLOCATE, DEALLOCATE and RANDOM_NUMBER
	intrinsics.

	91) PR #2007 for #2000. Removes pinning of Sphinx version in setup.py
	now that the linkcheck bug has been fixed in a new release.

	92) PR #1976 for #1974. Fixes issues with literal constants and
	array accesses in VariableAccessInfo for the LFRic API.

	93) PR #2015 for #2012. Fixes crash in access-information
	collection when there is an LFRic 'domain' loop.

	94) PR #2014. Extends psyir_from_source() so that the caller
	can specify if the Fortran is in fixed format.

	95) PR #1993 towards #1953. Extends the LFRicKernelMetadata
	class to support stencil specifications.

	96) PR #2020 for #2019. Fix inconsistencies in handling of precision
	symbols

	97) PR #2023 for #1975. Extends DynReferenceElement to ensure that
	it adds related kernel arguments to KernCallArgList as PSyIR.

	98) PR #2030 for #1529. Update eg19 Makefile so that compilation
	works.

	99) PR #2029 for #1567. Fix visibility issues with imported symbols.

	100) PR #2024 for #1984. Fixes the dependence analysis for the case
	where a single element of an array of fields is passed as an
	argument to an LFRic built-in.

	101) PR #1980 for #1978. Updated LFRic Infrastructure files in
	PSyclone repository and PSyData libraries to support 32- and
	64-bit mixed precision.

	102) PR #2034 for #1864: Add support for adjoint test-harness
	generation for kernels with operator arguments.

	103) PR #2038 for #1998. Adds support for r_tran_operator_type to
	LFRic (dynamo0.3).

	104) PR #2036 for #2033. Splits core/access_info into its constiutent
	classes and moves utility functions out of the DependencyTools
	module.

	105) PR #2056 for #2055. Extends the Reference2ArrayRange
	transformation such that it rejects any References that are args to
	the DEALLOCATE intrinsic.

	106) PR #2047 for #2046. Adds a 'return' statement to the
	lower_to_language_level() methods.

	107) PR #2032 for #92. Forbid include statements (which should have been
	processed by the preprocessor or fparser before PSyclone).

	108) PR #1973 for #1904. Fix inlining issues with complex access
	expressions (e.g. array offsets and partial derived types accesses).

	109) PR #2044 for #1295. Changes LFRic psyir to avoid use of exec
	and ensures that LFRicConstants is not created *before* the config.
	file has been read.

	110) PR #2066 for #1587. Introduces new DebugWriter visitor for
	fast generation of Fortran-like content in error messages.

	111) PR #1914 for #1891. Improves error handling when there are
	undeclared arguments.

	112) PR #2067 towards #1618. Fixes bugs relating to gh_sum for
	scalars and use of any_space_* spaces in the new metadata
	handling. Also corrects a (tested) docstring so that it sets
	up a Config object first.

	113) PR #2063. Improve search for optimisation script and handling
	of any errors when it is imported.

	114) PR #2071 for #2042. Adds support for the Fortran 'parameter'
	statement to the fparser2 frontend.

	115) PR #2068 for #352 and #1422. Adds a 'DoWhile' node to represent
	Fortran DO WHILE and unbounded DO loops.

	116) PR #2072 tidying of IfBlock following #2068.

	117) PR #2061 towards #598. Improves the use of dependence analysis
	in the OMP transformations to infer which variables are firstprivate
	in some cases.

	118) PR #2059 for #2057. Adds kernel-extraction support for the
	NEMO API.

	119) PR #2073. Fixes typos across the repo.

	120) PR #2025 for #1483. Adds driver generation for LFRic kernel
	extraction (PSyKE).

	121) PR #2048 towards #1772. Implements a new MetadataToArgumentsRules
	class using the new LFRic metadata functionality.

	122) PR #2085 for #840. Add support for minval, maxval and sum Fortran
	intrinsics.

	123) PR #2077 for #2075. Specify LFRic built-in metadata descriptions
	within LFRic built-in classes.

	124) PR #2104 towards #1618. Fix invalid use of subroutine instead of
	function in an LFRic example algorithm.

	125) PR #2098 towards #2091. Split off and rename DynKernCallFactory
	to LFRicKernCallFactory.

	126) PR #2103 towards #1618. Support Fortran interfaces whose symbols
	are already declared.

	127) PR #2099. Update of tutorials.

	128) PR #1937 for #1935. Adds all LFRic TL and adjoint kernels under
	examples.

	129) PR #2112 towards #1618. Splits LFRic eg11 source file into
	driver and algorithm.

	130) PR #2118 for #2117. Ensure build flags passed to LFRic
	infrastructure

	131) PR #2026 for #1991. Improves the support for building a
	standalone driver for an extracted kernel. All required modules are
	now inlined into the driver source file.

	132) PR #2086 for #2013. Adds support for logical scalar arguments
	in PSyAD test harness generation.

	133) PR #2060 towards #1618. Adds an optional code path for LFRic
	Algorithm-layer handling using the new metadata processing
	functionality.

	134) PR #2123. Updates GOcean project link in UG.

	135) PR #2121 for #2109. Updates PSyclone to fparser 0.1.1 release.

	136) PR #2128 towards #1618. Bug fix in LFRicAlgInvoke2PSyCallTrans
	for kernels requiring more than 1 quadrature object.

	137) PR #967 towards #2132. Add GH workflows for self-hosted runner.

	138) PR #2084 for #1801. Improve handling of assume-shape arrays with
	specified bounds.

	139) PR #2129 towards #1618. Bug fix for -ve Literal args to kernels
	in PSyIR handling of LFRic Alg Layer.

	140) PR #2133 for #2126. Add RTD YAML config files to allow the
	documentation (user guide, developer guide etc) to be managed
	separately and to allow software environments other than the
	default to be specified.

	141) PR #2092 for #2008. Refactors Symbol interfaces and adds support
	for Static/SAVE variables.

	142) PR #2089 for #2005. Add a SymbolTable merge method and improve symbol
	renaming capabilities.

	143) PR #2141 towards #1618. Add support for Symbols imported from
	Containers with renaming.

	144) PR #2136 for #2134. Fix compilation tests bug with assumed shape arrays.

	145) PR #2115 for #2114. Fortran allocate with type-spec becomes a CodeBlock.

	146) PR #2130 towards #1161. Adds support for HUGE and TINY intrinsics.

	147) PR #2095 towards #2091. Split off and rename DynInvoke to LFRicInvoke.

	148) PR #2146 for #2145. Skip CI link checks for mybinder as they
	occasionally fail.

	149) PR #2135 towards #1618. Adds (limited) PSyIR support for Fortran
	interfaces without a name.

	150) PR #2152 for #2149. Adds checks in Literal constructor that
	supplied string is a valid format.

	151) PR #2143 for #2043. Adds basic PSyIR support for Fortran COMMON
	blocks.

	152) PR #2150 towards #2132. Improve self-hosted CI workflow.

	153) PR #2090 for #1545. Split off and rename DynCollection to
	LFRicCollection.

	154) PR #2140 for #2139. Encapsulates the result of the dependency-
	analysis' get_in_out_parameters() in a single class.

	155) PR #2160 for #2159. Adds support for LFRic kernel arguments with two
	new precision names (r_bl and r_phys).

	156) PR #2170 for #2169. Correct import of fparser2
	Declaration_Construct.

	157) PR #2131 towards #1618. Improves the error handling when we find
	a Routine with the same name as an LFRic Builtin.

	158) PR #2147 for #2119. Add elemental and pure routine attributes.

	159) PR #2181 for #2175. Bug fixes for processing of Fortran
	declarations and integer literals.

	160) PR #2107 for #2106. Improvements to NEMO processing scripts and
	inclusion in Integration Testing.

	161) PR #2198 for #2194. Fixes handling of a function where the
	precision of the result is only defined within the function.

	162) PR #2187 towards #1618. Remove builtin use statements when
	lowering.

	163) PR #2191 for #2185. Fix element order used in PSyAD test
	harness.

	164) PR #2208 towards #2205. Ensures that functions or subroutines
	that CONTAIN other functions/subroutines are put into a CodeBlock.

	165) PR #2124 fir #2101. Refactors OpenMP inference of private/first-
	private variables and those requiring synchronisation.

	166) PR #2210 for #2206. Ensure symbol renaming included when deep-
	copying a symbol table.

	167) PR #2209 for #2204. Add support for EQV and NEQV and fix select
	case bug with logical comparisons.

	168) PR #2211 for #2183. Change PSyAD test-harness generation to use
	the same variable names as the TL kernel being tested.

	169) PR #2212 for #2203. Fix bug in PSyIR fparser2 frontend when
	DO WHILE contains normal DO loops.

	170) PR #2220 for #2219. Adds 'shared_with' argument to the
	node.ancestor() method.

	171) PR #2174 for #2171. Add support for obtaining the partial datatype
	of an UnknownFortranType.

	172) PR #2163 for #1537. Support array-slicing notation in SymPy
	comparisons.

	173) PR #2221 for #2214. Fix names of invokes containing a single
	kernel in the PSyIR of the LFRic Alg layer.

	174) PR #2225 for #2224. Fix erroneous CI link check error by
	omitting test for the particular link.

	175) PR #2172 for #1833. Fixes the LFRic tutorials so that they
	build correctly.

	176) PR #2227 for #2226. Adds new Node.path_from(ancestor) method.

	177) PR #2158 for #81. Ensures all example/test Fortran code for
	LFRic follows the LFRic naming convention.

	178) PR #2218 towards #2132. Adds LFRic integration tests and
	new, associated optimisation scripts. Includes bug fixes for
	matmul inlining transformation.

	179) PR #2230 for #2228. Improve reporting of errors due to kernel
	functors not explicitly included in algorithm use statements.

	180) PR #2207 for #1419. Split the DataSymbol constant_value attribute
	into is_constant (bool) and initial_value (PSyIR Node). This allows
	parsing Fortran declarations with initial_value that are not constant.

	181) PR #2231 for #2213. The Fortran frontend and backend now also
	consider that UnresolvedInterface symbols can come from the body of
	a Fortran Interface.

	182) PR #2240 for #2234. Fix WhileLoop issue in the NEMO OpenACC kernels
	script.

	183) PR #2182 for #2179. Fix LFRic eg14 nvfortran compilation and add
	nvfortran examples and tutorials steps in the Integration tests. 

	184) PR #2250 for #2248 and #1575. Fixes bug in line-length limiter
	to prevent it breaking a line before the first non-whitepsace
	character.

	185) PR #2262 towards #446. Implement reference_access for Call nodes.

	186) PR #2184 for #2166. Adds Sympy support for user-defined types.

	187) PR #2270 for #1575. Fixes the line-length limiter for code that
	has an indent greater than the max. line length.

	188) PR #2259 for #1932. Adds support for the 'gang' and 'vector'
	clauses on OpenACC Loop directives.

	189) PR #2276 for #2274. Small fixes for various complaints
	produced by latest version of pycodestyle.

	190) PR #2291 for #2290. Bug fix to KernelModuleInlineTrans -
	ensures that the new RoutineSymbol added to the Container is given
	a DefaultModuleInterface.

	191) PR #2238 for #2234. Adds support for a generic interface to
	perform variable comparison when the datatype is unknown. (Required
	for canonicalising SELECT CASE constructs.)

	192) PR #2292 for #2288. Workaround for Sphinx-doctest bug by
	building html dev guide before running the doctests.

	193) PR #2260 for #2245. Splits LFRicLoopBounds class from
	dynamo0.3.py.

	194 PR #2241 for #2215. Adds support for Fortran names being the
	same as Python keywords when using sympy within PSyclone, e.g. in
	comparisons between expressions.

	195) PR #2295 for #2294. Extends the PSyData extraction library
	to support character variables

	196) PR #2157 for #1396. Add tree-update mechanism and new ACCClause
	nodes for data movement.

	197) PR #2281 for #2258. Adds a PSyData wrapper for the TAU profiler.

	198) PR #2283 for #2282 and #2286. Adds a get_ubound_expression
	method to ArrayMixin (analagous to get_lbound_expression).

	199) PR #2293 for #2301. Add 'is_independent' property/query to Loop.

	200) PR #2309 for #1558. Add support for out-of-order parameter statements.

	201) PR #2148 towards #2105. Adds {Min,Max}Val2Code transformations.

	202) PR #2298 for #1987. Change all intrinsic Operations to IntrinsicCalls.

	203) PR #2320 for #2242. Pin Sphinx dependency to <7 to fix RTD building step.

	204) PR #2264 for #2263. Split LFRicScalarArgs from src/psyclone/dynamo0p3.py.

	205) PR #2328 for #2316. Update PSyclone to use 0.1.3 of fparser.

	206) PR #2329 towards #2204 and closes #2315. Bug fix to fparser2
	frontend to ensure that a PROGRAM with a CONTAINS is captured as
	a CodeBlock.

	207) PR #2327 towards #2132. Updates the LFRic integration tests
	to use a Spack environment and the latest HEAD of trunk of LFRic.
	Also extends the integration tests to upload performance numbers
	to a GitHub gist.

	208) PR #2154 for #95 and #994. Enforce valid Fortran names for
	invoke names in the LFRic API.

	209) PR #2332 for #2318. Small bug fix to the LFRic extraction
	driver creation. eg17/full_example_extract now builds and runs OK.

	210) PR #2287 for #2253. Allow for GH_WRITE access to continuous
	field arguments to inter-grid kernels in the LFRic API.

	211) PR #2299 for #2297. Add option to get original symbol name
	(for an imported symbol) in VariablesAccessInfo.

	212) PR #2233 for #1772. Correct kernel metadata for LFRic adjoint code.

	213) PR #2334. Fix missing backtick in docstrings.

	214) PR #2306 for #2305. Rename DynHaloExchange to LFRicHaloExchange.

release 2.3.1 17th of June 2022

	1) PR #1747 for #1720. Adds support for If blocks to PSyAD.

	2) PR #1669 for #450. Remove set_dirty/clean from ACC regions

	3) PR #1745 towards #1731. Split PSyLoop class from Loop node.

	4) PR #1761 for #1760. Create release 2.3.1

release 2.3.0 9th June 2022

	1) PR #1672. Fixes BOZ literal standard incompatibility in the
	nvidia profiling wrapper code.

	2) PR #1670 for #1650. Fixes various inconsistencies in the symbol
	table implementation.

	3) PR #1674 for #1644. Fixes bug in matmul transformation.

	4) PR #1673 for #1671. Fixes an error in the Makefile for the
	'time evolution' LFRic tutorial.

	5) PR #1628 for #1491. Extends PSyAD pre-processing phase to
	expand any expressions involving active variables.

	6) PR #1666 towards #1618. Modified prototype PSyIR-based
	algorithm generation to use a transformation to convert from
	invoke's to processed algorithm code, rather than it being done as
	part of lowering in the backend. This allows algorithm code with
	invoke's to be output by the backend.

	7) PR #1613 for #1238 and #1528. Improves the view() method so that
	it returns a str rather than printing to stdout. Also allows colour
	to be disabled.

	8) PR #1656 for #1649 and #1645. Add equality operator to all core
	PSyIR nodes in order to compare nodes by value.

	9) PR #1680. Refactors some of the code in various ACC directives to
	minimise duplication and switch to f-strings.

	10) PR #1639 for #1630. Add support for named arguments in Call and
	Operation PSyIR nodes, including Fortran front-end and backend support.

	11) PR #1682 for #1632. Extend the LFRic API to support transport
	field type. Required for mixed-precision support.

	12) PR #1678 for #1667. Work towards getting the LFRic OpenACC
	example (eg14) to compile.

	13) PR #1676 for #1644 Extend matmul2code transformation to
	support matrix matrix multiplication. Previously it was limited to
	matrix vector.

	14) PR #1697 for #1695. Small update to LFRic stub infrastructure to
	fix compilation failure when building tutorial code.

	15) PR #1699. Fix failing dynamopsy test by specifying dm=true
	explicitly

	16) PR #1684 for #1683. Adds support for MIN and MAX LFRic Built-ins.

	17) PR #1702 for #1695. Correction to LFRic infrastructure ('emdi') to
	bring up-to-date with current LFRic usage.

	18) PR #1705. Corrections for the NEMO tutorial. 

	19) PR #1692 for #1688. Prevents scoping regions from sharing symbol
	tables. Adds attach() and detach() methods to SymbolTable for
	managing this connection.

	20) PR #1703 for #1689. Fix stencil depth bug in LFRic halo exchange
	when a discontinuous writer follows a discontinuous stencil reader.

	21) PR #1608 towards #1542. Allow GH_WRITE access for fields on
	continuous function spaces in LFRic API.

	22) PR #1722. Changes all PSyIR code over to using f-strings.

	23) PR #1725. Allows parsing an empty Fortran file.

	24) PR #1716 for #1713. Fix bug in matmul transformation. 

	25) PR #1693 for #1661. Improve dependency analysis tools.

	26) PR #1347 for #1730. The Fortran backend now generates declarations with
	dependencies in the appropriate order.

	27) PR #1729. Minor fixes for MarkDown link checker and path to
	test file.

	28) PR #1733 for #1707. Update PSyclone master to the latest version of
	fparser to enable running of PSyclone tests.

	29) PR #1679. Add a limit parameter to the PSyIR node ancestor method.

	30) PR #1749 for #1748. Updates version of fparser specified in setup.py
	to 0.0.15.

	31) PR #1740 for #1738. Update the operator implementation in the 
	cut-down LFRic infrastructure and change the USE statements generated
	for CMA operators.
 
release 2.2.0 17th March 2022

	1) PR #1439 for #1074. Adds a GOcean example for the use of the NaN-
	checking functionality (in PSyData).

	2) PR #1463 for #1461. VALID_LOOP_TYPES constant made consistent
	across APIs to permit check on loop type in dependency tools.

	3) PR #1473 for #1423. Adds the ChunkLoopTrans PSyIR transformation.

	4) PR #1475 for #595. Remove memento and transformation return values.

	5) PR #1470 for #1459. Refactor OMPLoopTrans to support OMPLoop
	directive and add OMPTargetTrans.

	6) PR #1452 for #1451. Add doctest for the Dev Guide to GitHub Actions
	and tidy the examples so that they work.

	7) PR #1503 for #1502. Fix incorrect path in tutorial README.

	8) PR #1489 for #1488. Configure MD link checker to skip links to MO wiki.

	9) PR #1501 for #1484. Remove Python2 validation, update
	documentation, start removing Python2-specific code and start
	using any pylint-suggested Python3-specific code constructs.

	10) PR #1476 for #1456. Fix precision problems in the PSyAD harness
	code generation and add harness documentation.

	11) PR #1482 for #1481. Renames symbol_from_tag->find_or_create_tag
	and tidies its use.

	12) PR #1521 for #1193. Update Python 3.5 to 3.6 in the GitHubActions CI.

	13) PR #1512 for #1511 and #1516. Fix silent compilation test failures,
	and make sure all files are compiled in tmpdir.

	14) PR #1531. Fixes incorrect imports of OMPTaskwaitTrans in examples
	in class docstrings.

	15) PR #1498 for #533. Adds the use of SymPy for comparing expressions
	for equality. Removes math_equal() and
	ArrayRange2LoopTrans.string_compare() methods.

	16) PR #1492 for #1457. Adds support for the transformation of Loops
	when taking the adjoint of a code.

	17) PR #1520 towards #1504. The Fortran frontend marks class type
	definitions as UnknownFortranType in the PSyIR.

	18) PR #1522 for #1519. Make the LoopSwapTransformation generic and
	move it to the psyir.transformations module.

	19) PR #1539 for #1524. Re-enable a previously deleted compilation test
	due to a compilation error now fixed.

	20) PR #1535 for #1534. Adds testing of Python 3.10 in GHA and
	updates PSyclone to work with 3.10. Also makes GHA build examples
	with 2 threads (as 2 cores are available) and runs tests with as
	many threads as there are cores available (again 2 at this time).

	21) PR #1510 for #1499. Add SymbolTable method to resolve the properties
	of imported symbols.

	22) PR #1485 for #1429. Create correct variable intents for
	generated adjoint kernel code.

	23) PR #1228 towards #753. The GOcean API now uses PSyIR for the Algorithm
	layer.

	24) PR #1526 for #1430. Fixes and improves support for array
	ranges in psyad.

	25) PR #1500 for #1487. Improvements to NEMO arrayrange2loop
	transformation.

	26) PR #1541 for #1513. Adds a 2D loop-tiling transformation.

	27) PR #1533 for #1523. Adds SymPy symbols for Fortran names
	in the tools.symbolic_maths module.

	28) PR #1579 for #1550. Removes duplicated use statements produced
	by the Fortran backend.

	29) PR #1518 for #1506. Bugfix for WHEREs involving derived types.

	30) PR #1578 for #1517. Uses dependency analysis to check for
	loop-carried dependencies when attempting to parallelise a loop.
	Also improves validation checks at code-generation time to ensure
	that any OMP Loop directive is within a Target or Parallel region.

	31) PR #1598 towards #282. Removes reference to the Dynamo 0.1 API
	in the documentation.

	32) PR #1462 for #451. Make LFRic loop bounds constant within the
	PSy-layer with any function calls or structure accesses looking up
	bounds information being computed separately beforehand. This can
	help compilers correctly compile the code, particularly when there
	are directives and may also help compilers produce more efficient
	code.

	33) PR #1592 for #1585. Add a PSyIR clause node and start implementing
	clauses for the OpenMP directives.

	34) PR #1599 for #282. Removes Dynamo 0.1 API code and tests (removes
	the API completely).

	35) PR #1556 for #1490. Adds a dotproduct2code transformation and
	extends PSyAD to make use of it.

	36) PR #1597 towards #753. Fixes naming bugs in GOcean Algorithm
	PSyIR.

	37) PR #1565 for #1505. Fix bug with UnknownFortranTypes inside other
	fparser frontend declarations.

	38) PR #1603 for #1566. Fparser reader parses derived types with
	contains statements as UnknownFortranType.

	39) PR #1602 towards #753. A new PSyclone script entry point (the
	trans_alg function) can be used to transform the Alg-layer (currently
	just for the gocean API).

	40) PR #1601 for #1600. Removes the GOcean 0.1 API.

	41) PR #1410 for #1398. Add Sphinx docs link checking in the CI.

	42) PR #1586 for #1559. Adds support for SoA and AoSoA in the
	Range2Loop transformation.

	43) PR #1574 towards #1555. Replaces gen_kernel_stub script with
	psyclone-kern. This more generic script can be extended to other
	kernel modification options in the future (in particular
	generating an algorithm layer from a kernel).

	44) PR #1607 for #1559. Transform MATRIX_MULTIPLY to equivalent
	code before creating adjoint.

	45) PR #1527 towards #1525. Adds lower_to_language_level methods
	to all LFRic builtins with the exception of those involving
	reductions or type casting.

	50) PR #1616 for #1615. Fixes list of files to profile in NEMO
	kernels script plus some other typos.

	51) PR #1621 for #1581. Extends PSyAD to make use of the
	ArrayRange2Loop transformation to remove any array ranges before
	constructing the adjoint.

	52) PR #1622 towards #1618. Fixes code generation for PSyIR of
	Algorithm Layer by removing `invoke` symbol during lowering.

	53) PR #1609 for #1584, #1041 and #490. Adds transformation to
	add OpenMP target directive to routines and updates existing
	one for OpenACC to use PSyIR instead of parse tree.

	54) PR #1625 for #1606. Fixes bug in PSyAD by ensuring that all
	local, active variables are initialised to zero.

	55) PR #1349 for #1277. Extend the LFRic API to use algorithm
	precision/types when generating the PSy layer. Required for
	mixed-precision support.

	56) PR #1624 towards #1618. Bug fix for LFRic algorithm PSyIR module
	and subroutine names.

	57) PR #1637 for #1634. Add HoistLocalArraysTrans transformation.

	58) PR #1553 for #1134. Completes the movement of OpenCL-generation
	into its own transformation.

	59) PR #1657 for #1640. Changes ready for new 2.2 release.

release 2.1.0 3rd November 2021

	1) PR #1183 for #1075. Improves (tightens) the checking performed
	by the LoopFusion transformation.

	2) PR #1197 for #1189. Changes the dependence analysis to use a
	Signature rather than just the symbol name (in preparation for
	supporting derived types/structures).

	3) PR #1216 for #1188. Adds a FortranReader PSyIR frontend.

	4) PR #1217 towards #1210. Adds raising transformations for NEMO.

	5) PR #1222 for #1171. Adds a new class to encapsulate all constants
	related to the LFRic API.

	6) PR #1233 for #1231. Adds psyadd driver script that will process an
	LFRic tangent-linear kernel and produce its adjoint.

	7) PR #1124 for #1185. Refactor PSyDataNode class and sub-classes.

	8) PR #1229 for #1170. Adds a Container parent node above all
	InvokeSchedule nodes.

	9) PR #1225 towards #1223. Moves remaining GOcean constants into
	new GOceanConstants class.

	10) PR #1241 for #1240. Adds support for functions in the PSyIR and
	Fortran frontend and backend.

	11) PR #1257 for #1248. Adds support for logical, read-only, scalar
	arguments to LFRic user-supplied kernels.

	12) PR #1234 for #1230. Adds FileContainer node.

	13) PR #1264 towards #1258. Adds mappings for the LFRic infrastructure
	types to their Fortran modules to the LFRic Constants class.

	14) PR #1236 for #1028. Extends the core variable-access analysis
	functionality to support structures (derived types).

	15) PR #1239 towards #1237. Adds lower_to_language_level() method
	for some LFRic builtins.

	16) PR #1195 for #1194. Fixes some incorrect str(error) usage in the
	tests, introduces a PSycloneError base class and adds tests to make
	sure that it is used. Also adds tests to ensure that future accidental
	use of str(error) will cause a failure.

	17) #1243 for #1242. Bug fix for OpenCL code generation - ensures
	synchronisation calls are added where necessary if kernels are running
	on different command queues.

	18) #1273 for #1272. Fixes missing fparser initialisation when
	GOcean loop bounds are read from config file.

	19) #1287 towards #1259. Rename TypeSymbol to DataTypeSymbol.

	20) #1265 for #1260. Fixes various bugs to better support PSyIR
	code generation. Includes function return values and string
	storage in PSyIR.

	21) #1293 for #1178, #1179, #1285. Update installation instructions
	to include autoapi and tex-gyre, and added allclean target to
	reference guide to clean up all automatically created files.

	22) #1278 for #1271. Updates dependency tools to use Signatures.

	23) #1286 for #1274. Updates the Visitors so that they perform
	any necessary lowering and do so on a *copy* of the PSyIR tree
	so that there are no side effects.

	24) #1290 for #2183. Adds support for != and other comparison
	operators to the Signature class.

	25) #1262 for #920. Adds capturing of algorithm-layer datatypes
	which are then stored in the algorithm.py Arg class.

	26) #1252 for #1251. Fix Ranges inside StructureType accesses.

	27) #1294 towards #1259. Add the TypedSymbol abstract class.

	28) #1311 for #1303. Fortran frontend do not merge CodeBlocks
	when these are not full statements.

	29) #1212 towards #1010. Updates the gocean1.0 API so that the PSy-layer
	generation uses the PSyIR Fortran backend. (N.B. the OpenCL generation
	still uses the f2pygen mechanism for the moment.)

	30) #1316 for #1301 and #1304. The Fortran frontend handles labelled
	and named constructs.

	31) #1299 for #1249. Some LFRic built-ins use the PSyIR backend, which
	fixes a unary operator precedence bug.

	32) #1279 for #1250. Adds capability to specify multiple kernel
	directories.

	33) #1329 for #1308. Fix bug in the Fortran frontend WHERE clause.

	34) PR #1327 towards #1208. Moves the implementations of the various
	Directive nodes out of psyGen.py and into psyir/nodes.

	35) #1255 for #1253. Improve the parsing of Fortran specification
	code and includes support for Fortran interface blocks.

	36) #1319 for #1307. Add support for lower bounds in PSyIR ArrayType.

	37) #1261 towards #1277. Gather more information in LFRicConstants
	so values are not hardcoded in multiple locations. Includes adding
	precision information derived from LFRic rules which is required
	for mixed precision support.

	38) PR #1317 for #1315. Fixes bug in dependence analysis caused by
	introduction of FileContainer root node.

	39) PR #1340 for #1334. Add support for symbols in
	'psyir_from_expression()' and fix code generation bug for LFRic
	"power" built-ins with literal constants that have explicit precision.

	40) PR #1323 for #1305. Capture the default visibility of a Fortran
	module and store it in the symbol table.

	41) PR #1313 for #1268 and #1269. Adds new ComponentIndices class
	to manage indices for component accesses.

	42) PR #1325 for #1247. Adds PSyIR support for comments (associated with
	Container, Routine and Statement nodes).

	43) PR #1342 towards #1338. Adds the OMPSingleTrans transformation for
	creating an OMP SINGLE region.

	44) PR #1352 towards #1338. Adds the OMPMasterTrans transformation for
	creating an OMP MASTER region.

	45) PR #1360 for #1359. Fix pytest fixtures tear downs.

	46) PR #1353 for #1324. Add support for generating structure accesses in
	the C backends.

	47) PR #1358 towards #1338. Add the OpenMP Taskloop directive and its
	corresponding insertion transformation.

	48) PR #1369 for #1367. GOcean supports REAL literals in kernel arguments.

	49) PR #1362 for #1361. Fix bug in PSyIRGen when PSyIR node corresponds
	to more than one fparser2 node.

	50) PR #1344 for #1309. Fix bug in PSyIR backend name comparison.

	51) PR #1372 for #1371. Bring tutorial notebooks up-to-date and add
	them to the CI.

	52) PR #1341 towards #1134. Move OpenCL transformation to GOcean
	transformations folder and rename.

	53) PR #1368 towards #1338. Adds OMPTaskWaitDirective node.

	54) PR #1282 for #871. Adds generation of callback routines for
	GOcean in order to do data movement with OpenACC.

	55) PR #1267 for #1232. Adds a TL to Adjoint transformation for
	assignments.

	56) PR #1263 for #1139. Adds a transformation that converts an
	array access into a single-trip loop.

	57) PR #1378 for #879. Renames the Symbol interface GlobalInterface
	to ImportInterface.

	58) PR #1376 for #1374. Create intermediate RegionDirective and
	StandaloneDirective PSyIR node classes.

	59) PR #1380 for #1375. Add the LazyString utility to prevent generating
	costly error messages when these are not used.

	60) PR #1354 for #1256. Change GOConstLoopBoundsTrans to modify the
	tree rather than just setting a flag.

	61) PR #1343 for #1336. Use github actions to verify all links in
	all markdown files.

	62) PR #1385 towards #430 and 737. Improve accessibility attribute support
	on the PSyIR Fortran frontend and backend.

	63) PR #1363 for #1356. Adds a hoist transformation for assignments.

	64) PR #1330 for #1297. Adds TL to Adjoint test harness code
	generation.

	65) PR #1379 towards #1288. Alters the driver generation for
	GOcean kernel extraction to use the PSyIR.

	66) PR #1403. Adds support for private clause for declarations in f2pygen.

	67) PR #1406 for #1404. Temporary copy() bug fix while the loop variable
	is not part of the PSyIR tree.

	68) PR #1407 towards #1383. Standardises the node_str() method of
	DirectiveNode and remove un-needed code.

	69) PR #1401 for #1400. Extend psyad script to allow list of active
	variables to be specified.

	70) PR #1326 for #1292. Add support for GH_READINC access for continuous
	fields in the LFRic API.

	71) PR #1409 for #1383. Standardises and cleans-up dag_name() methods
	and pins jsonschema to version 3.0.2 to fix jupyter notebooks with
	older versions of Python.

	72) PR #1147 for #430, #435 and #616. The NEMO API now uses the PSyIR
	backend to generate output code.

	73) PR #1395 for #1100. Replaces the first two LFRic examples with new
	ones that use the 'dynamo0.3'/'lfric' domain instead of 'dynamo0.1'.
	This is a step towards removing the 'dynamo0.1' domain.

	74) PR #1397 for #1390. Add support for unary minus in SIR backend.

	75) PR #1413 towards #1134. Moves the generation of some OpenCL
	support routines from the generation stage to the transformation
	stage.

	76) PR #1420 for #1113. Completes the symbol-specialisation
	functionality by adding support for attributes.

	77) PR #1435 for #1425. Adds LFRic BuiltIns for subtraction of
	field elements from a scalar.

	78) PR #1412 for #1411. Adds visitor to PSyAD script and have it
	call assignment transformation.

	79) PR #1433 for #1378. Adds dependence checks to the hoist
	transformation.

	80) PR #1450 for #1291. Adds new dependence-analysis chapter to UG to
	bring together documentation on 'old' and 'new' way of doing things.

	81) PR #1436 for #1434. Adds new Max2Code transformation.

	82) PR #1427 for #1405. Adds new PSyIR nodes for OMPTarget and
	OMPLoop directives.

	83) PR #1466 for #1465. Update SIR backend so that generated code
	specifies cartesian grid (to match latest Dawn API).

	84) PR #1469 for #1468. Update deprecated 'operatorPrecedence' to
	'infixNotation' in 'src/psyclone/expression.py' for compatibility
	with the pyparsing 3.01 update in GitHub.

	85) PR #1455 for #1441. Extends PSyAD to cope with kernels
	containing multiple assignment statements.

	86) PR #1432 for #1168. Adds PSyIR lowering support for generic
	PSyData nodes.

	87) PR #1415 towards #1338. Adds the OMPTaskwaitTrans transformation
	that resolves dependencies between task loops.

	88) PR #1460 for #1454. Fix code generation to pass the number of
	cells up to the last edge cell instead of the halo cells to the
	'domain' kernels in the LFRic API.

	89) PR #1438 towards #1134. Moves the creation of the OpenCL
	set_args routines into the transformation.

	90) PR #1480 for #1479 Makes PSyclone use the release version of
	fparser (0.0.13) from pypi on installation (towards making a new
	PSyclone release).

release 2.0.0 28th April 2021

	1) #778 for #713. Use 'make' to execute all examples.

	2) #782 for #780. Refactor FunctionSpace support and move it
	out of dynamo0p3.py and into the lfric domain.

	3) #785 for #679. Use a DataSymbol to represent the PSyIR Loop variable.

	4) #795 for #793. Add the scope property to PSyIR node.

	5) #779 for #763. Capture unrecognised declarations in a new
	PSyIR UnknownType DataType.

	6) #787 for #786. Introduce the PSyIR Call node and the RoutineSymbol.

	7) #784 for #764. Update LFRic test kernels to use fs_continuity_mod.

	8) #797 for #790. Add intrinsic type information to GOcean grid
	properties in config file. Add OpenCL to GOcean/eg1 ('shallow').

	9) #792 for #789. Return kernel argument objects instead of just names
	from unique_declarations() and unique_declarations_by_intent().

	10) #750 for #575. Add support for jupyter notebooks with links to
	binder for some examples.

	11) #804 for #801. Correct Fortran intents for invoke arguments in
	unique_declns_by_intent().

	12) #794 for #788. Re-structuring and tidying of DynArgDescriptor03
	to become LFRicArgDescriptor.

	13) #807 for #805. Put fparser2 bare DO constructs inside CodeBlocks.

	14) #816 for #810 (fix GOcean examples to build dl_esm_inf if
	required) and #730 (bring GOcean/eg5 up-to-date with latest dl_timer).

	15) #811 for #783. Removes potential duplication of orientation
	pointer declarations.

	16) #808 for #800. Adds support in the PSyIR for the case when a
	variable used to dimension an array has deferred or unknown type.

	17) #822 for #820. Excludes return statements from profile and
	directive regions. Also reworks the relevant code to exclude nodes
	rather than include them which makes more sense as exclusion is
	the exception.

	18) #796 for #412. Adds a transformation to convert an assignment
	to an array range into an explicit loop in the PSyIR.

	19) #834 for #833. Adds the NINT intrinsic to the PSyIR and adds
	support in fparser2reader for translating Fortran NINT into this
	intrinsic.

	20) #821 for #630. Extends symbol table functionality to allow
	search of ancestor symbol tables.

	21) #837 for #824. Introduce profile_PSyDataStart() and
	profile_PSyDataStop() functions for NVTX profiling on NVIDIA.

	22) #818 for #138. Modifies PSyclone tests which use GH_WRITE for
	continuous fields when iterating over cells (as this is not
	valid).

	23) #842 for #841. Fixes gocean/eg1 so that PSYCLONE_CONFIG is
	set correctly (and adds a .gitignore).

	24) #825 for #646. Extends the dependency analysis so that it
	works for all 'implicit' arguments passed to LFRic kernels.

	25) #799 for #757. Extends kernel metadata such that multiple
	implementations (in different precisions) of a single kernel
	may now be specified through an interface block.

	26) #854 for #848. Adds a tutorial in the form of Jupyter
	notebooks. Covers fparser2, the NEMO API and PSyIR navigation.

	27) #839 for #836. Improves the separation between the metadata
	parsing and type information in the LFRic API.

	28) #862 for #860. Fixes error when building documentation using
	windows filesystems (removes symbolic links).

	29) #812 towards #199. Adds PSyclone support for read-only
	verification for LFRic and GOcean.

	30) #829 for #827. Removes the NemoImplicitLoop node and the
	associated NemoExplicitLoopTrans (now that the PSyIR has support
	for assignments to array ranges).

	31) #844 for #809. Improves PSyclone linelength support by
	allowing linelength checks to be applied to modified or generated
	code but not input code. The various options can be controlled by
	command line switches.

	32) #882 for #881. Removes specific version of pylint in setup.py.

	33) #884 for #883. Restructure psyclone user guide to move
	psyclone command section nearer the front of the document.

	34) #823 for #471. Updates the access from INC to READWRITE for
	those kernels that loop over DoFs.

	35) #872 for #736 and #858. Routine Symbols are captured by the Fortran
	front-end when parsing a Container.

	36) #850 for #849 - basic support for distributed memory in GOcean.
	N.B. dl_esm_inf does not yet have support for set_dirty/clean.

	37) #875 for #774. Add support for new metadata format for scalar
	arguments to LFRic kernels - sepecify the intrinsic type
	separately.

	38) #895 towards #871. Updates to HEAD of dl_esm_inf, introduces
	FortCL as a submodule and alters the OpenCL code generation for gocean
	in order to create a read_from_device function.

	39) #865 for #832. Use Jinja to generate Fortran code for the
	PSyData read-only verification library plus the dl_esm_inf
	implementation of this.

	40) #893 towards #866. Introduce support for "operates_on" instead of
	"iterates_over" in LFRic kernel metadata.

	41) #887 for #876. Create a generic symbol when no better information is
	provided about a symbol and replace the symbol later on if more
	information is found.

	42) #904 for #903. Fixed an error in handling use statements (a
	symbol clash when there should not be one).

	43) #877 for #867. Bug fix to enable dependencies on HaloExchange
	objects to be ignored while updating the dependency information.

	44) #907 for #906. Refactor PSyDataTrans and subclasses to reduce
	code duplication (especially in the __str__ and name methods).

	45) #902 for #866. Update (virtually) all LFRic test kernels and
	examples to use "operates_on" instead of "iterates_over" metadata.

	46) #914 for #897. Update Coding Style in Dev guide with details
	on raising Exceptions.

	47) #878 for #832. Use Jinja and the PSyDataBase class for building
	most of the PSyData profiling wrapper libraries.

	48) #915 for #908. Alters the module generation for the LFRic PSy
	layer so that use statements for LFRic field and operator modules are
	only generated if required.

	49) #922 for #921. Fixes pycodestyle errors in the code base.

	50) #899 for #896. Adds a new PSyIR Routine Node that subclasses
	Schedule and is subclassed by KernelSchedule.

	51) #932 for #931. Fixes the dependency analysis in the case
	that no existing Symbol is found for an array access. This is
	a workaround until the NEMO API has a fully-functioning symbol
	table enabling the dependency analysis to be based upon Symbol
	information (#845).

	52) #930 for #885. Bug fix for missing halo exchange before a
	Builtin Kernel with a field argument with read-write access.

	53) #919 for #916. Fixes errors in docstrings which show up when
	generating the reference guide.

	54) #938 for #937. Correct erroneous use of str(err) instead of
	str(err.value) in symboltable_test.py.

	55) #940 for #939. Bug fix to ensure utf-8 encoding is set in both
	Python 2 and 3 when reading files. (Required when running in
	non-Unicode locales.)

	56) #942 for #941. Bug fix so that an exception is raised if a
	directive is placed around a loop or code region containing a
	codeblock.

	57) #912 for #781. Adds support for '2D cross' stencils (i.e.
	cross stencils where the directions of the arms is encoded
	and their lengths may vary).

	58) #956 towards #955. Changes the directory structure for
	the dl_esm_inf netcdf PSyData wrapper library.

	59) #954 for #745. Update PSyclone copy of the LFRic infrastructure
	to create compilable and runnable LFRic examples.

	60) #943 for #923. Adds generation of an in-kernel boundary mask
	when generating OpenCL kernels for GOcean. (Fixes failures seen
	for arbitrary problem sizes.)

	61) #911 for #363. Add support for derived/structure types.

	62) #953 for #952. Make RegionTrans and its subclasses accept a
	node as input as well as a list of nodes.

	63) PR #965. Add github actions for CI - runs flake8, pytest,
	codecov and examples for Python 2.7, 3.5 and 3.8.

	64) PR #975 for #972 - correct use of str(err) with str(err.value)
	in a couple of recently-added tests.

	65) PR #983 for #982 - Improve 'kernels' auto-profiling for NEMO API.

	66) PR #977 for #976. Fix dimension parameter for Jinja templates
	in the PSyData libraries.

	67) PR #981 for #980. Move jupyter notebooks into a notebooks
	subfolder of the tutorial directory ready for the addition of
	"practicals" tutorials

	68) PR #958 for #957. Add checks that raise an exception at code
	generation time if there are any orphan OpenACC or OpenMP
	directives e.g. OpenMP loop should be within OpenMP parallel.

	69) PR #970 for #955. Use Jinja to generate the netcdf extraction
	library for the GOcean API.

	70) PR #986 for #819. Adds support for NetCDF data extraction
	for the LFRic API.

	71) PR #964 for #933. Adds nemo practical 'hands-on' tutorial
	documentation and examples.

	72) PR #905 for #989. Adds PSyData wrapper libraries for dl_esm_inf
	and LFRic that provide NAN/infinity checking for real inputs/outputs
	to a kernel. Also adds the NanTestNode and a NanTestTrans (which
	inserts an instance of the former).

	73) PR #961 for #936. Add hands-on tutorial for distributed memory
	with the LFRic API.

	74) PR #985 for #979. Hands-on tutorial for single-node optimisations
	with the LFRic API.

	75) PR #962 for #952. Hands-on tutorial for building an LFRic
	application.

	76) PR #995 for #971. Hands-on tutorial for using PSyData
	functionality with the LFRic API.

	77) PR #1000 for #988. Add missing dependencies in gungho_lib/Makefile
	in LFRic building_code tutorials 3 and 4.

	78) PR #1012 for #1001. Adds a wrapper script to find a Python
	executable when building any of the PSyData wrapper libraries. (Required
	because some distributions now only ship with 'python3').

	79) PR #947 for #946. Array shape elements are DataNodes (References,
	Literals or expressions). If an int is provided, it is transformed to
	a Literal.

	80) PR #1020 towards #363. Rename the PSyIR node Array to ArrayReference.

	81) PR #1011 for #1008. Auto kernel profiling can fail after OpenMP
	transformations.

	82) PR #951 for #950. Adds f2pygen support for generating code from
	PSyIR nodes.

	83) PR #1026 for #1025. Removes code associated with, and
	reference to, travis as we have migrated to github actions.

	84) PR #944 towards #925. Added metadata support and constraints
	tests for operates_on=domain kernels.

	85) PR #901 towards #873. Adds PSyIR support for recognised quantities
	in LFRic kernels. Currently only used for argument validation.

	86) PR #1034 for #1037. Final fixes for problems found when
	running with LOCALE=C.

	87) PR #974 for #974. Support skip ci with GitHub Actions.

	88) PR #1021 towards #363. Add PSyIR nodes for structure references and
	its accessors, also the associated Fortran back-end visitors.

	89) PR #1036 for #1033. Fix bug in coluring adjacent_face array with
	OpenMP in LFRic API.

	90) PR #1023 for #1017. Update and improve PSyData LFRic tutorial.

	91) PR #894 towards #817. Adds support for LFRic kernel metadata
	specifying the intrinsic type (real and integer) of fields and
	operators.

	92) PR #1029 towards #1010. Sets up initial API and examples for
	generating PSy-layer code using the PSyIR backends.

	93) PR #1032 for #1019. Adds OpenCL configuration parameters to
	enable profiling and out-of-order execution of kernels. Also adds
	an 'OpenCL devices per node' configuration option.

	94) PR #1044 towards #817. Updates the metadata in LFRic test
	kernels to specify the type of field and operator arguments.

	95) PR #1038 for #999. Changes to the PSyData wrapper libraries
	so that they build with Intel. (Ensures that generic interfaces
	to various routines are declared in the correct locations.)

	96) PR #1024 for #843. Implements the ArrayRange2LoopTrans for
	the NEMO API.

	97) PR #1045 towards #817. Updates the LFRic kernel metadata
	in the examples to specify the type of field and operator args.

	98) PR #1042 for #1039. Adds new method to SymbolTable that
	supports the creation of symbols of particular types.

	99) PR #1053 towards #363. Add frontend support and semantic navigation
	methods for PSyIR structures.

	100) PR #1060 (and #1046) for #194. Enables the support for region
	stencils in LFRic.

	101) PR #1071 for #1069. Modifies the regex used in a couple of
	tests in order to reduce run-time.

	102) PR #1068 for #1064. Updates to latest fparser and fixes
	parsing of invokes now that some kernel calls are identified
	as structure constructors instead of array accesses.

	103) PR #1051 towards #817. Add field and operator data type
	to kernel metadata in the LFRic tutorials.

	104) PR #1059 for #960. Removed LFRic support for orientation as
	this is not required.

	105) PR #1079 for #363. Complete the PSyIR structure support.

	106) PR #1070 for #703. Add the ability to rename PSyIR symbols

	107) PR #847 for #846. Adds support for the LFRic timer to the
	PSyData profiling wrapper.

	108) PR #1093 for #1088. Add fparser2reader support for Call statements.

	109) PR #1084 for #1080. Introduces the use of PSyIR for GOcean
	kernel arguments and loop limits.

	110) PR #1052 for #817. Add LFRic field datatype metadata for fields
	and operators in remaining test modules.

	111) PR #1092 for #1091. Auto-invoke profiling does not include
	Return nodes anymore.

	112) PR #1087 for #1086. PSyIR Fortran backend for routines merges
	symbol tables into single scope.

	113) PR #1062 for #1037. Fix LFRic examples and tutorials to
	compile and run with the Intel Fortran compiler.

	114) PR #1054 for #1047. Adds check that the intrinsic types of
	scalar arguments in the LFRic API are consistent. Extends argument-
	filtering routines to additionally filter on intrinsic type.

	115) PR #1102 towards #1031. Improves PSyIR fparser2 frontend support for
	structures types.

	116) PR #1111 for #1110. The Call create method is a classmethod.

	117) PR #1121 for #1120. Introduce bibtex_bibfiles to Sphinx UG
	and DG config files to fix latex build errors in the latest
	version of Sphinx which were causing read the docs to fail to
	build the documentation.

	118) #1058 for #917. Updates the profiling example (gocean/eg5)
	so that the appropriate wrapper library is automatically
	compiled.

	119) PR #1090. Adds support for LFRic builtins that accept integer-
	valued fields.

	120) PR #1105 for #1104. Adds support for program, module and subroutine
	to Fparser2Reader

	121) PR #1101 towards #1089. Remove check on arrays dimension symbols.

	122) PR #1128 for #1127. Fix Sphinx-RTD builds of user and developer guides.

	123) PR #1117 for #1003. Change intent for 'GH_WRITE' arguments from
	'in' to 'inout' (because a kernel does not write to all data points in
	a field).

	124) PR #1063 towards #935. Add basic support for specialisation of
	symbols.

	125) PR #1073 for #1022. Updates the Makefiles for the examples
	and tutorials to make them consistent. Default target for the tutorials
	is now 'transform'.

	126) PR #1095 for #1083. Adds a LoopTrans base class that Loop
	transformations can subclass and use any common functionality.

	127) PR #1138 for #1137. Add support for Fortran Program in the PSyIR.

	128) PR #1122 for #1112. Restructures the way the colour to use
	for a given PSyIR node is specified.

	129) PR #1125 for #1114. Harmonises LFRic built-in and module names to
	consistently use "LFRic" rather than "Dyn".

	130) PR #1065 for #1061. Re-structures the GOcean PSyData examples.

	131) PR #1141 for #1132. Small fix to ensure depth() returns correct
	values for a GOcean kernel with 'pointwise' access.

	132) PR #1096 for #1056. Add GOcean transformations to insert
	boundary masks inside kernels and eliminate return statements.

	133) PR #1109 for issue #402. Add NEMO processing scripts to the
	repository.

	134) PR #1135 for issue #1124. Add a replace_with method to PSyIR node.

	135) PR #1126 for #1098. Add kernel stub generation support for the
	'2D cross' stencils in the LFRic API.

	136) PR #1145 for #1107. Adds new LFRic builtins (type-conversion,
	SIGN, plus others).

	137) PR #1133 for #1130. Uses GOcean stencil metadata to correctly
	populate the field access information (dependency analysis) for a
	GOcean kernel.

	138) PR #1154 for #1153. Work towards improving usability of
	loop fusion transformation. Moves transformations into separate
	files in the appropriate directories.

	139) PR #1155 for #529. Adds PSyIR support for REAL and INT
	BinaryOperations.

	140) PR #1144 for #1136. Add checks that PSyIR nodes are only children
	of one parent.

	141) PR #1150 for #1146. Fixed bug in PSyIR, making the name
	matching in the Node swap method case insensitive.

	142) PR #1166 for #1152. Adds support for the unary sum operator
	in the PSyIR and the fparser2psyir reader.

	143 PR #1131 for #1116. Make the number of any*space function
	spaces (and basis supported datatypes) configurable.

	144) PR #1082 for #925. Adds code generation support for
	operates_on=domain kernels in LFRic.

	145) PR #1162 for #1160. Add Fortran backend support for unresolved
	interfaces when there is wildcard imports.

	146) PR #1157 for #478. Updates the LoopFusion transformation so
	that the 'same space' option is now provided with the options
	dict, in line with the way other transformations work.

	147) PR #1165 for #1164. Update PSyIR Assignment node
	is_array_range test to work with structures.

	148) PR #1072 for #1067. Re-structures the LFRic runnable examples.

	149) PR #1177 for #1168. Adds lowering method for the ProfileNode node.

	150) PR #1129 towards #753. Adds generic and LFRic Algorithm-Layer
	PSyIR nodes and transformations.

	151) PR #1191 for 1163. Rationalise config file list processing. This
	PR breaks backward compatibility of config files.

	152) PR #1169 for #294. Updates the various ChildrenList methods
	so that the parent property of child nodes is automatically updated.

	153) PR #1196 for #1106. Moves tests related to field and scalar
	arguments to LFRic kernels into appropriate files.

	154) PR #1186 for #1173. Reshapes mesh maps for LFRic inter-grid kernels.

	155) PR #1205 for #870. Removes support for the old-style 'iterates_over'
	metadata in LFRic API.

	156) PR #1156 for #874. Removes support for old-style LFRic arg_type
	descriptor. Primitive type of all kernel arguments must now be
	specified.
	
	157) PR #1182 for #1181. Add OpenACC directives support to the PSyIR
	Fortran backend.

	158) PR #1167 for #1097. Install PSyData wrapper libraries; support
	integer fields in PSyData.

	159) PR #1176 for #1174. Check that schedule is not empty when applying
	profiling.

	160) PR #1201 for #1198. Introduces the ScopingNode abstract base
	class. Container, Schedule and Routine now subclass this and deep
	copying is supported.

	161) PR #1211 towards #1210. Add CreateNemoKernTrans transformation.

	162) PR #1219 for #1218. Removes the Node.gen_code() abstract method
	as this is not used by the new PSyIR nodes that we are adding.

	163) PR #1192 towards #753. Add methods to lower the Algorithm layer PSyIR
	and create the appropriate symbols to be used by the PSy-layer.

	164) PR #1175 for #1066. Update the GOcean OpenCL read/write
	interfaces and use so that only halo data moved to/from the host for
	halo exchanges.

	165) PR #1207 for #1184. Add a validation for the node global constraints
	that is check once a node is visited by any of the Visitor classes.

	166) PR #1226 towards #1151. Update fparser to 0.0.12 for the
	PSyclone release 2.0.0.

	167) Issue #1151. Release version 2.0.0 of PSyclone.

release 1.9.0 20th May 2020

	1) #602 for #597. Modify Node.ancestor() to optionally include
	self.

	2) #607 for #457. Add fixtures documentation to the developer
	guide and split guide into smaller files.

	3) #610 towards #567. Extends the Profile transformation so that
	a user can supply name and location strings rather than rely
	on the automatic generation of suitable names.

	4) #600 for #468. Adds a datatype to literals in the PSyIR.

	5) #601 for #599. Add create methods to assist bottom up PSyIR node
	creation.

	6) #608 for #594. Add 'DEFERRED' and 'ATTRIBUTE' as PSyIR array extents.

	7) #606 towards #474. Moves Profile and Extract transformations into
	new directory structure (psyir/transformations/). Begin putting
	domain-specific transformations into domain/ directory.

	8) #618 for #567. Corrects the automatic generation of names for
	profiled regions.

	9) #624 for #566. Removes the 'force profile' option from the psyclone
	script as it is no longer required.

	10) #614 for #612. Use the datatype of the Literal node in the SIR
	backend rather than assuming all literals are real.

	11) #555 for #190. Adds a GlobalsToArguments transformation that
	converts kernel accesses to global data into arguments.

	12) #627 for 625. Adds SymbolTable.new_symbol_name() method to generate
	names that don't clash with existing symbols.

	13) #623 for #622. Bug fix for adding loop directives inside
	region directives for the nemo api.

	14) #631 for #628. Add support for compiling additional
	non-library code in compilation tests.

	15) #643 for #617. Corrects table widths in the html version of the
	documentation and also fixes broken links to developer guide.

	16) #632 for #585. Add support for the use of expressions when
	assigning values to constant Symbols.

	17) #635 for #634. Update PSyclone to use new parent functionality
	in fparser and to remove spurious white space in some of the
	generated (end do/if) code.

	18) #657 towards #474. Moves various node classes out of psyGen
	and into the psyclone.psyir.nodes module.

	19) #669 towards #474. Move those error/exception classes that
	were in psyGen into a new 'errors' module.

	20) #656 towards #412. Add PSyIR Range node to support array slice
	accesses. This could also be used for loop indices.

	21) #672 for #651. Add PSyIR lbound and ubound BinaryOperations.

	22) #670 for #666. Make the various GOcean grid properties
	configurable (previously the mapping from meta-data name to
	corresponding Fortran code was a dict in the code).

	23) #671 for #653 and #652. Fixes two issues with OpenCL
	generation for the GOcean API (handling of the SAVE attribute
	and support for real and integer scalar arguments).

	24) #541 for #536. Adds transformations to convert MIN, ABS and
	SIGN intrinsics into equivalent PSyIR code and uses these in
	NEMO/eg4.

	25) #662 for #661. Adds PSyIR support for the MATMUL intrinsic
	and renames the dynamo examples to lfric.

	26) #665 for #603 and #673. Alters the Reference and Array nodes
	so that they refer to a Symbol instead of just a name.

	27) #683 for #682. Modifies PSyclone fparser2 front-end reader to
	work with the latest version of fparser2 which now correctly deals
	with intent attributes.

	28) #681 for #680. Small fix to failing profiling test (DM assumed
	to be on but not explicitly set).

	29) #691 for #690. Fix PSyIR fparser frontend handling of allocatable
	array declarations.

	30) PR #605 for #150. Implements code generation for reference
	element properties in the Dynamo0.3 (LFRic) API.

	31) PR #615 for #586 and #323. Improves support for use statements
	including unqualified use statements.

	32) PR #650 for #583. Implementation of the PSyData API and
	refactoring of Extraction and Profiling support. Note that the LFRic
	(Dynamo0.3) API is not yet fully supported.

	33) PR #702 for #660. Read the default KIND parameters for the LFRic
	domain from the configuration file.
	NOTE: this change requires that any local config file be updated as
	the new KIND mapping is mandatory.

	34) PR #704 for #699 and #697. Fixes gocean/eg2 and adds a
	--compile option to the check_examples script.

	35) PR #684 for #655. Re-factor psy-data-based transformations.

	36) PR #700 for #687. Adds support for Fortran array syntax
	to the PSyIR Fortran front-/back-ends.

	37) PR #707 for #694. Extends gocean/eg5 to produce executables
	for the simple_timing, dl_timer and drhook profiling wrappers.

	38) PR #689 for #312. Removes the Namespace manager and replaces
	it with a SymbolTable. This is work towards all code being
	generated by the PSyIR backends.

	39) PR #722 for #716. Adds support for reference-element normals
	and extends the kernel-stub generator to support reference-element
	properties.

	40) PR #708 for #638. Adds limited support for GOcean grid properties
	to the ExtractNode functionality.

	41) PR #701 for #193 and #195. Adds support for face and edge
	quadrature as well as multiple quadratures in a kernel in the
	Dynamo0.3 (LFRic) API. Also extends kernel-stub generator support.

	42) PR #709 for #698. Adds the 'target' attribute to declarations
	of the PSyData object.

	43) PR #729 for #12. Change the Fortran intent of all derived-type
	objects passed into the PSy layer in the LFRic API to be 'in'.

	44) PR #739 for part of #18. Documents mesh properties that a
	kernel can request in LFRic (Dynamo0.3) API.

	45) PR #743 for #740. Remove old unused quadrature_mod.f90 from
	LFRic (Dynamo0.3 API).

	46) PR #734 for #539. Added the Wchi function space to LFRic
	(Dynamo0.3 API).

	47) PR #728 for #721. Adds DataType hierarchy decoupled from DataSymbol.

	48) PR #596 for #500. Makes the NEMO API use the symbol table.

	49) PR #686 for #684. Adds the MatMul2CodeTrans which transforms
	a MATMUL PSyIR operation into the equivalent PSyIR expression.

	50) PR #747 for #18. Implements code generation (PSy-layer and
	kernel stub) for mesh properties that a kernel can request in
	LFRic (Dynamo0.3) API.

	51) PR #731 for #668. Adds support for ProfileInit and ProfileEnd
	functions in the PSyData API. Re-structuring of the associated
	documentation.

	52) PR #756 for #749. Adds the option to generate run-time checks
	for the LFRic API that fields are on function spaces consistent
	with those specified in kernel metadata.

	53) PR #726 for issue #723. Adds the concepts of DataNode and
	Statement to the PSyIR and adds checks that ensure that when a
	child Node is added to a parent Node, the type of the child Node
	is compatible with the type of Node expected by the parent.

	54) PR #758 for #733. Shortens the variable names that are
	constructed for LFRic PSy-layer variables related to any-space
	function spaces.

	55) PR #760 for #751. Adds support for W2htrace and W2vtrace
	function spaces.

	56) PR #762 for #725. Renames the various builtin-operation-to-
	code transformations now that they are not NEMO specific.

	57) PR #773 for #772 and #715. Adds support for reading Fortran
	parameter statements containing symbols into the PSyIR.

	58) PR #776 for #775. Small bug fix for upper loop bound in
	Matmul2CodeTrans transformation.

	59) PR #735 for #732. Add a Visibility attribute to symbols and
	fparser2 front-end captures public and private visibilities.

	60) PR #770 for #766. Fix operation precedence issues in the Fortran
	back-end by inserting parenthesis when needed.

	61) PR #769 for #588. Adds frontend support for *N and double
	precision type declarations.

release 1.8.1 29th November 2019

	1) #579 for #509. Improves the structuring of the html version
	of the User Guide.

	2) PR #581 for #578. Extends the PSyIR Fortran backend so
	that variable declarations include kind information. This
	currently only works if kind-parameters are declared or
	explicitly imported in the local scope - see #587 and #586.

	3) PR #562 for #473. Fixes the DAG generation to allow for
	Loops having Schedules and children (e.g. loop limits) that
	we want to ignore.

	4) PR #535 for part of #150. Implements support for parsing
	of reference element metadata in the Dynamo0.3 (LFRic) API.

	5) PR #516 for #497. Adds support for translating the Fortran
	where construct into the PSyIR.

	6) PR #545 for #544 and #543. Moves the Symbol support into
	a separate sub-module and adds support for parameter declarations
	and the functionality to resolve deferred datatypes.

	7) PR #559 for #483. Introduces new InlinedKernel class and
	uses this as the base class for all NEMO kernels.

	8) PR #580 for #542. Adds a Schedule as a child of ExtractNode and
	ProfileNode.

	9) PR #573 for #438. Fixes all tests to use the value property of
	exceptions rather than str(err).

	10) PR #416 for #408. Adds support for non-ascii chars in Fortran
	strings.

	11) PR #591 for #584. Adds the concept of a deferred interface to
	PSyIR symbols. This allows declarations to appear in any order and
	helps to deal with kind symbols scoped via module use statements.

release 1.8.0 8th November 2019

	1) #245 and PR #247. Extend PSyIR to support common kernel
	constructs (e.g. asignments) and generalise ASTProcessor and
	CodeBlocks.

	2) #275 and PR #276. Update fparser submodule (to point to latest
	version) as this was not done at the last release.

	3) #269 and PR #273. Remove generation of unnecessary
	infrastructure calls when an Invoke only contains calls to
	built-ins.

	4) #196 and PR #242. Add support for kernels with evaluators on
	multiple target function spaces.

	5) #270 and PR #271. Add ability to specify include directories in
	PSyclone script to allow Fortran include files to be found when
	transforming kernels.

	6) #201 and PR #224. Add ability to write transformed kernels to
	file. Also ensures that kernel and psy-layer names match, allows
	an output directory to be specified and supports different output
	options when the same kernel is transformed in more than one
	location.

	7) #126 and PR #283. Update xfailing tests in alggen_test.py which
	require multiple quadrature objects in a single invoke to pass.

	8) #227 and PR #233. Add a gocean1.0 API OpenACC example.

	9) #207 and PR #280. Remove support for gunghoproto API.

	10) #174 and PR #216. Adds the ability to generate an OpenCL PSy
	layer in the gocean1.0 API (including an OpenCL transformation).

	11) #272 and PR #277. Adds an implicit-to-explicit-loop
	transformation for the nemo API.

	12) PR #255. Construct a KernelSchedule for kernel code with a
	SymbolTable to hold information on variables used.

	13) PR #302. Fix API's -> APIs typo in documentation.

	14) #292 and PR #293. Add allowed list of nodes to RegionTrans.

	15) #254 and PR #299. Adds methods to generate C and OpenCL
	code for the Symbol Table and for certain PSyIR nodes.

	16) PR #301. Adds an extras_require section to setup.py to simplify
	installation of dependencies required for docs and tests.

	17) #281 and PR #313. Adds support for compiling the code
	generated as part of the GOcean 1.0 tests (including OpenCL
	code that uses FortCL).

	18) #139 and PR #218. Beginning of implementation of kernel-
	extraction functionality (PSyKE). Currently only inserts
	comments into generated Fortran code.

	19) #327 and PR #328. Fix for erroneous xpassing test.

	20) #238 and PR #285. Use fparser2 for parsing the
	Algorithm layer (instead of fparser1).

	21) #321 and PR #325. Document kernel coding restrictions required
	for kernel transformations.

	22) #326 PR #335. Alters the use of pytest fixtures to remove the now
	deprecated use of the global pytest.config.

	23) PR #318. Updates the Schedule hierarchy within the PSyIR.
	Introduces a new Schedule base class which KernelSchedule and
	InvokeSchedule then sub-class.

	24) #332 and PR #333. Bug fix for parsing of simple arithmetic
	expressions in kernel argument lists in the Algorithm layer.

	25) #337 and PR #341. Bug fix to make matching of kernel names
	in module use statements (in the Algorithm) case insensitive.

	26) #268 and PR #306. Restructure of PSy and stub code generation.

	27) #248 and PR #287. Extends OpenACC transformation support to
	the nemo api, adds transformations for OpenACC data and kernel
	directives and adds a sequential option to the OpenACC loop
	directive transformation.

	28) #319 and PR #331. Bug fix to make matching of kernel names
	in module use statements (in the Kernel) case insensitive.

	29) #349 Bug fix for unicode characters in comment strings for
	Python 3 to 3.6.

	30) #320 and PR #334. Remove obsolete GUI-related code.

	31) #322 and PR #343. Add gocean1.0 api example which contains
	kernels with use statements.

	32) #345 and PR #352. Makes the search for kernels within the parse
	tree case insensitive.

	33) #350 and PR #351. Bug fix in the stencil lookup for field
	vectors in the Dynamo0.3 API.

	34) #336 and PR #338. PSyIR Fortran array parsing support (logical
	type, a(xx) dimension specifications and array size can be an
	integer variable).

	35) #346 and PR #357. In the nemo api put do-while loops into a
	code block rather than recognising them as do-loops and make
	default(present) optional for ACCKernels transformations.

	36) #362 and PR #367. Adds the basics of a transformation for identifying
	certain LFRic kernel arguments that can be converted to constants.
	Currently only identifies candidate arguments and prints them to
	stdout.

	37) PR #347 (working towards #256). Adds support for If and CASE
	constructs to the PSyIR (superseding and removing the existing, NEMO-
	specific support for If constructs).

	38) #377 and PR #378. Update fparser submodule to point to latest
	fparser master (contains bug fix for Python 2 installation).

	39) #329 and PR #371. Removes the global psyGen.MAPPINGS_ACCESSES by
	moving the functionality into the api-specific config section of
	the configuration file.

	40) #361 and PR #365. Identify NemoKernel nodes via the PSyIR
	rather than the fparser2 parse tree.

	41) #340 and PR #380. Split the documentation into a user-guide
	and a developer-guide. These will be available separately on
	read-the-docs.

	42) #369 and PR #347. Adds support for constant values (fixed compile-time
	known values) in the PSyIR Symbol representation.

	43) PR #383. Fixes to various pylint errors.

	44) PR #384 (working towards #354) Adds support for CASE constructs with
	a DEFAULT clause when translating Fortran fparser2 to PSyIR.

	45) PR #366 (working towards #323) Improves the Symbol interface
	infrastructure with Arguments and FortranGlobals. The Fortran-to-PSyIR
	front-end parses the 'use module only' statements.

	46) PR #370 for #339. Makes the support for operators in the PSyIR
	more robust by using an enumerator. Adds support for some intrinsics.

	47) PR #389 for #386. Variable names and associated loop-types
	for the NEMO API are now stored in the configuration file.

	48) PR #394 for #392. Fixes a bug in the way the test suite checks
	for whether the graphviz package is available.

	49) PR #387 for #249. Extends OCLTrans() so that all kernels within a
	transformed Invoke are converted to OpenCL. Also includes a
	work-around for array accesses incorrectly identified as Statement
	Functions by fparser2.

	50) PR #403 for #390. Use AutoAPI to generate the PSyclone Reference Guide
	and build all local documentation using the 'sphinx_rtd_theme'.

	51) PR #404 for #364. Re-structure class hierarchy for Kernels, with
	CodedKernels and BuiltIns as specialisations.

	52) PR #297. Adds support for the Dr Hook profiling library.

	53) PR #413 for #411. Adds support for semantic navigation of the
	PSyIR tree.

	54) PR #376 for #368. Introduces PSyIR back-end infrastructure using the
	Visitor Pattern and creates a PSyIR-to-Fortran back-end.

	55) PR #428 for #427. Fix to test suite so that empty, transformed
	kernel files are not created in the CWD.

	56) PR #439 and Issue #438. Instruct pip to install the version of
	pytest prior to 5.0 (as changes to the structure of the exception
	object break a lot of our tests).

	57) PR #420 for #418. Moves the C/OpenCL generation functionality out
	of the Node class and implements it as PSyIR backends using the
	Visitor Pattern.

	58) PR #434 for #354. Add support for translating ranges in
	Fortran case statements into PSyIR.

	59) PR #421. Alters the generated code for the dynamo 0.3 API so that
	the mesh object is obtained from proxy. (Consistent with other accesses
	and works around a bug in the PGI compiler.)

	60) PR #452 for #397. Removes unnecessary walk_ast() call from the
	NemoInvokes constructor.

	61) PR #424 for #399. Adds dependence-analysis functionality to
	the PSyIR (for reasoning about existing code such as in kernels or
	the NEMO API).

	62) PR #464 for #443. Adds a coding-style guide to the Developers'
	Guide.

	63) PR #453 for #449. Adds support for NVIDIA's nvtx profiling
	API to the PSyclone profiling interface.

	64) PR #454 for #410. Simplifies the Node.walk() method.

	65) PR #400 towards #385. Adds support for Fortran Do loops in
	the PSyIR - loop bounds are now captured.

	66) PR #469 for #465. Removes duplicate lma tests.

	67) PR #479 from kinow:fix-gungho-link. Fixes broken GungHo link
	in documentation.

	68) PR #441 for #373. Adds support for writing transformed LFRic
	kernels to file.

	69) PR #445 for #442. First step towards supporting OpenACC for
	the LFRic (Dynamo0.3 API) PSy layer.

	70) PR #466. Adds basic SIR backend to the PSyIR.

	71) PR #407 for #315. Use the PSyIR SymbolTable to check for
	global symbols (module variables) in kernels. Use this support to
	raise an exception in transformations where global symbols are not
	supported (e.g. the OpenCL transformation).

	72) PR #498 for #388. Documents the PSyIR CodeBlock node and extends
	the CodeBlocks with a property to differentiate between statement/s
	and expression/s.

	73) PR #476 for #429, #432, #433. Fix multi-line codeblocks,
	add support for nemo implicit loops and nemo invokes.

	74) PR #458 for #425. Add support for profiling in the NEMO API.

	75) PR #510 for #419. Code re-structuring - moves what was the
	FParser2ASTProcessor into psyir.frontend.fparser2.

	76) PR #503 for #502. Adds size intrinsic to PSyIR and makes use
	of it in the gocean api's for setting loop bounds.

	77) PR #511 for #508. Includes the test directories in the Python
	module so that the test utilities are available throught the test
	directory hierarchy.

	78) PR #496 for #494, #495 and #499. Fixes for OpenCL generation
	including the ability to specify kernel local size and command
	queue parameters.

	79) PR #517 for #513. Adds support for if statements to the SIR
	backend.

	80) PR #522 for #519. Fix for adding profiling around a select
	case construct.

	81) PR #460 for #133. Add support for ANY_DISCONTINUOUS_SPACE in
	the dynamo0.3 API (LFRic).

	82) PR #531 for #455. Add ANY_SPACE_10 to the dynamo0.3 API
	(LFRic) to be consistent with LFRic infrastructure.

	83) PR #360 for part of #150. Document the rules for reference
	element properties in the dynamo0.3 API (LFRic).

	84) PR #518 for #393. Add the Container PSyIR node.

	85) PR #525 for #459. Bug fix for passing scalar grid properties
	to GOcean kernels when using OpenCL.

	86) PR #485. Adds a psyclone.psyir.tools.dependency_analysis
	module and associated DependencyTools class to help with
	dependence analysis in the PSyIR.

	87) PR #532 for #204. Adds support for W2broken and W2trace
	function spaces in the dynamo0.3 (LFRic) API.

	89) PR #515 for #512. Adds PSyIR backend support (Fortran and C)
	for Directives.

	90) PR #534 for #520. Adds PSyIR Fortran backend support for the
	Container Node.

	91) #547 and PR #551. Update all READMEs to use MarkDown and correct
	paths in documentation on creating built-ins.

	92) #546 for PR #553. Rename psyir.psyir.backend.base to visitor.

	93) #526 for PR #527. Update fparser submodule and fix parsing of
	intrinsics with a single argument.

	94) PR #556 for #478. Changes the apply() and validate() methods of
	all Transformations to take a dict of options. Also renames any
	_validate() methods to validate().

	95) PR #558 for #557. Move code-creation out of visitor and into
	the appropriate back-ends.

	96) PR #565 for #564. Alter implementation of auto-addition of
	profiling so that it happens *after* the application of any
	transformation script.

	97) PR #505 for #303. Restructure view method to move the replicated
	logic into the abstract class and add index numbers to the printed
	Schedule statements. Also adds a Schedule to encapsulate Directive
	children.

	98) #570. PSyclone now set to require fparser 0.0.9 on
	installation.

	99) PR #572 for #571. Bug fixes now that fparser uses unicode.

	100) PR 524 for #472. Adds support for scalar variables to the
	SIR backend.

	101) PR #574 towards #567. Fixes bug in profiling that causes
	crash if first kernel in an invoke is a built-in.

	102) PR #576 for #530. Includes the repository examples in the
	distribution and updates the documentation accordingly.

release 1.7.0 20th December 2018

	1) #172 and PR #173 Add support for logical declaration, the save
	attribute and initialisation in f2pygen (required for the OpenACC
	transformation)

	2) #137 Add support for Python 3. Travis now runs the test suite
	for both Python 2 and Python 3.

	3) #159 and PR #165. Adds a configuration option for the Dynamo
	0.3 API to turn on (redundant) computation over annexed dofs in
	order to reduce the number of halo exchanges required.

	4) #119 and PR #171. Adds support for inserting profiling/
	monitoring into a Schedule.

	5) #179 and PR #183. Bug fix in CompileError constructor to run
	tests under Python 3.

	6) #121 and PR #166. Adds a user editable configuration file.

	7) #181 and PR #182. Adds support for generating declarations of
	character variables and for the target attribute.

	8) #170 and PR #177. Adds OpenACC transformations for use with the
	GOcean1.0 API. Appropriate Kernel transformations need to be added
	for full automated OpenACC code parallelisation.

	9) #164 and PR #184. Updates documentation to refer to psyclone
	script instead of generator.py.

	10) PR #187. Add example transformation scripts for the Dynamo
	0.3 API.

	11) PR #180. Makes the specification of loop limits in the GOcean
	API more flexible. This will enable us to support single-iteration
	loops.

	12) #188 and PR #189. Bug fix to ensure that the name of profiling
	regions remains the same when gen() is called multiple times.

	13) #176 and PR #200. Introduce new RegionTrans base class and
	add _validate method to ensure that the list of nodes to
	be transformed (with OpenMP or OpenACC) is correct.

	14) #197. Tidying of the test suite to use the new, get_invoke()
	utility everywhere.

	15) #212 and PR #213. Adds fparser as a submodule of psyclone to
	allow concurrent development of PSyclone and fparser (by allowing
	development versions of PSyclone to point to development versions
	of fparser).

	16) #185 and PR #202. Adds ability to modify a kernel in PSyclone
	using fparser2 and includes an OpenACC transformation to specify a
	kernel is an OpenACC kernel by adding an appropriate
	directive. Currently it is not possible to write the modified
	kernel to file.

	17) #134 and PR #217. Add support for colouring intergrid kernels.

	18) #196 and PR #210. Adds metadata support for evaluators on
	multiple function spaces in the Dynamo 0.3 API.

	19) #191 and PR #215. Add ability to specify iteration space
	definitions to the configuration file.

	20) #228 and PR #232. Fix for examples and travis now checks
	examples at the same time as coverage and code style.

	21) #219 and PR #225. Refactor dependence analysis and fix bug
	that meant that unnecessary halo exchanges of vector components
	were not being removed (following a redundant computation
	transformation).

	22) #27 and PR #209. Created initial NEMO api. Needs lots of work
	but it provides a starting point.

	23) #214 and PR #221. Adds a transformation to convert a
	synchronous halo exchange into an asynchronous halo exchange.

	24) #235 and PR #243. Removes dependency on Habakkuk in NEMO API.

	25) #134 and PR #236. Adds support for adding OpenMP to intergrid
	kernels.

	26) #198 and PR #223. Updates PSyclone to use the latest
	version of dl_esm_inf which has "GO_" prefixed to all public
	quantities. Adds dl_esm_inf as a git submodule.

	27) #158 and PR #253. Fix to remove unnecessary halo exchanges
	related to GH_INC updates to kernel arguments.

	28) #317 and PR #330. Fix to allow module use statements to be
	added to functions.

	29) #330 and PR #422. Adds PSyIR node to represent Nary operators and
	increases the number of supported operators.

release 1.6.1 6th December 2018

	1) #250. Change setup.py (used for pip installation) to only use
	version 0.0.7 of fparser.

release 1.6.0 18th May 2018

	1) #91 and PR #111 Remove unnecessary __init__.py files.

	2) PR #107 Fix errors in Fortran test files revealed by update
	to fparser 0.0.6. Update to catch new AnalyzeError raised by
	fparser.

	3) #90 and PR #102 Add support for integer, read-only, scalar
	arguments to built-in kernels. Add new inc_X_powint_n Built-in
	that raises a field to an integer power.

	4) #67 Bug fix - printing Invoke object caused crash.

	5) #112 and PR #113 - add travis support for codecov coverage tool

	6) #118 and PR #122 - add .pylintrc file in tests directory
	to disable some warnings that we don't care about (for testing
	code).

	7) #117 and PR #125 - bug fix for passing kernel arguments by value
	in the GOcean API.

	8) #105 and PR #115 - add support for coloured loops when
	performing redundant computation.

	9) #84 and PR #128 - make w2v and wtheta discontinuous function
	spaces

	10) PR #93 - add support for a swap-loop transform for the GOcean
	API.

	11) PR #152 - add pylintrc so that pylint's line-length limit
	matches that of pep8.

	12) PR #143 - bug fix for DAG generation in the GOcean API.

	13) PR #153 - added -v option to the psyclone script to show the
	version

	14) PR #136 - add support for intergrid kernels (required for
	multigrid)

	15) PR #149 - add support for GH_READWRITE access for
	discontinuous fields

	16) PR #163 - updating PSyclone to work with the latest version of
	the parser (0.0.7) as the API has changed

	17) PR #169 - add support for specifying stencils in the GOcean
	kernel meta-data.

release 1.5.1 3rd December 2017

	1) #53 and PR #88 Add a version file so that PSyclone does not
	need to be installed to generate documentation.

	2) #94, #96, #98 and PR #97 Make name="name" support in invoke
	calls more robust e.g. names must be valid fortran and match
	should be insensitive to case.

	3) #76 and PR #89 Add support for the new LFRic quadrature
	api. Currently only gh_quadrature_xyoz is supported.

	4) #99 and PR #100 Make the author list for the user manual
	strictly alphabetical.

	5) #50 and PR #78 Implement a redundant-computation transformation.
	This enables a user to request that a kernel (or kernels) is
	computed out into the halo region and any affected halo swaps
	be updated (and/or removed) as required.

	6) #103 and PR #104. Bug fix to ensure that a halo swap is not
	inserted if read annexed dofs are already clean due to a previous
	write to the L1 halo.

release 1.5.0 3rd October 2017

	1) #20 and PR #28 Add dependence analysis (and a Move
	transformation) to PSyclone. This will subsequently allow for
	the safe implementation of more complex schedule transformations
	and optimisations.

	2) #16 and PR #29 Update and add new PSyclone-generated builtins
	to support the functionality required by the current LFRic code.

	3) #43 and PR #44 Update of Met Office-specific install script to
	symlink the generator.py file rather than copy it.

	4) #40 and PR #47 Update example lfric/eg3 to use builtins and to
	merge invokes together as much as possible

	5) #45 and PR #49 Change of kernel metadata names from
	evaluator_shape to gh_shape and modifications to its values.

	6) #3 and PR #51 Restructure repository to allow installation via
	pip. Due to this change we can now use travis and coveralls within
	github for automated testing. Also, new releases are now
	automatically uploaded to pypi (via travis) and status badges can
	now be used so have been added to the README.md file (which is
	shown on the main github page).

	7) #55 and PR #66 Update the documentation to cover installation
	on systems running OpenSUSE.

	8) #61 and PR #71 Re-name existing Dynamo0.3 builtins to follow
	a consistent scheme and add support for some new ones (including
	setval_{c,X}, X_minus_bY etc.). See psyclone.pdf for the full list.

	9) #32 and PR #39 Adds the ability to build the generated code
	when performing Python tests. Generated code can now be checked
	that it compiles as part of the development process helping avoid
	making releases with errors in them. Note, existing tests still
	need to be updated.

	10) #54 and PR #63 The view() method (used to look at the internal
	representation of a schedule) now outputs coloured text (for
	easier viewing) if the termcolor package is installed.

	11) #69 and PR #73 setup.py now uses an absolute path to avoid
	failing tests (with file not found) in some environments when
	running py.test from a different directory to the tests
	themselves.

	12) #59 and PR #75 added metadata support for inter-grid kernels
	which will be used for the multi-grid code.

	13) #82 and PR #83 modified a test to work with different versions
	of graphviz which output files with different ammounts of white
	space

	14) #52 and PR #60 added support for evaluators. An evaluator is
	specified by setting the gh_shape metadata in kernels
	appropriately.

	15) #85 and PR #86 - minor correction to documentation (section
	on Inter-Grid kernel rules was in the wrong place).

release 1.4.1

	1) #22 Updated PSyclone to support enforce_operator_bc_kernel (in
	addition to the existing enforce_bc_kernel) for boundary
	conditions. PSyclone no longer adds in boundary condition calls
	after a call to matrix_vector_kernel, it is up to the user to add
	them in the algorithm layer in all cases. Also fixes a bug
	introduced in 1.4.0 issue #12.

release 1.4.0

	1) #2 Add support for kernel meta-data changes required to support
	Column-wise operators (Column Matrix Assembly).

	2) #6 Implement support for Column Matrix Assembly (CMA) in
	PSyclone.

	3) #12 Add support for the any_w2 function space descriptor

	4) #33 Update documentation referring to fparser.

release 1.3.3

	1) Project moved to github: https://github.com/stfc/PSyclone.
	Hereon, ticket numbers now refer to github issues instead of
	SRS tickets.

	2) #8 Remove the f2py source code from the PSyclone distribution
	and use the fparser package (https://github.com/stfc/fparser)
	instead.

	3) #9 Update documentation to refer to github.

release 1.3.2

	1) #908 Bug fix - ensure that the dynamo0p3 loop colour
	transformation raises an exception if the loop it is applied to
	does not iterate over cells.

	2) #923 Change the name of the generated Fortran module containing
	PSy-layer code for the Dynamo 0.3 API. The name is constructed by
	appending "_psy" to the Algorithm-layer name. (Previously "psy_"
	was prepended to it.) The names of modules produced by other
	PSyclone APIs are unchanged.

release 1.3.1

	1) #846 Bug fix - generate correct logic and code for the call to
	enforce_bc_kernel after a call to matrix_vector_kernel. Also add
	w2h and w2v as spaces that cause enforce_bc_kernel to be called in
	addition to W1 and W2.

	2) #853 Bug fix - make sure that an operator object is only used
	as a lookup for values in the PSy layer when it is correct to do
	so. In particular, make sure that the dofmap lookup is always from
	a field, as this fixes the known bug.

release 1.3.0

	1) #686 Stencil extents (depth of the stencil) are now changed to
	stencil sizes (number of elements in the stencil) in the PSy-layer
	as the algorithm expects to provide the former and the kernel
	expects to receive the latter.

	2) #706 Avoid potential name clashes with stencil extent and
	direction arguments (as well as nlayers).

	3) #673 Fixed an xfailing built-in test

	4) #721 Bug fix - generate correct variable declarations and
	module use statements without modifying original arguments. Invokes
	requiring multiple enforce-bc kernel calls are now handled correctly.

	5) #727 Addition of install script (contributions/install) to
	support Met Office modules environment.

	6) #423 Add support for distributed-memory for built-ins.
	Global sums are now generated for calls to inner_product and
	sum_field built-in kernels.

	7) #489 Support the dereferencing of an object/derived type in the
	argument list of a kernel call within an invoke in the algorithm
	layer e.g. call invoke(kern(a%b))

	8) #669 Added support for named arguments to the expression
	analyser. This is the first step towards supporting named invokes
	in PSyclone.

	9) #628 dofmap lookups are now outside loops in the
	PSy-layer. This makes no functional difference but should give a
	performance benefit.

	10) #304 Added support for named invokes in PSyclone.

	11) #580 Implemented tests for the agreed dynamo0.3 builtin
	rules. For example, all fields must be on the same function space
	within a builtin.

	12) #761 Added support for parsing evaluator metadata.

	13) #484 Add support for the use of OpenMP (including reductions)
	with builtins.

	14) #819 Re-structuring of DynKern._create_arg_list. Replaced with
	new ArgList base class which is then sub-classed to KernCallArgList
	and KernStubArgList.

	15) #576 Added tests and documentation to check and describe the
	dynamo0.3 api kernel and builtin rules.

release 1.2.4

	1) #658 Adds support for the use of real and integer literals with
	kind specified in kernel calls from the algorithm layer. For
	example 0.0_rdef. This will be particularly useful for built-ins.

	2) #475 Fixes any remaining string assert comparison errors in
	tests. Updates algen_test.py to be pep8, pyflakes and pylint
	compliant.

	3) #468 Add support for kernels that perform stencil operations.
	Stencil depth is specified at the algorithm layer.

	4) #672 Fix error in boundary layer code generation for
	matrix_vector_kernel. The function space check is now always
	correct (hopefully).

	5) #680 Bug fix: the kernel stub generator was not adding the stencil
	dofmap required by a field with stencil access.

release 1.2.3

	1) #111 Adds support for dynamo0.3 built-in operations running
	sequentially.

	2) #640 Update PSyclone to call enforce_bc_kernel after every
	call to matrix_vector_kernel if the space is W1 or W2. (Previously
	PSyclone looked for matrix_vector_mm_kernel and only W2.)

	3) #430 Adds support for multiple kernels within an invoke with
	kernel arguments specified as any_space. Previously there was a
	limit of one kernel per invoke. This is particularly relevant for
	built-ins as all of these currently have arguments that are
	any_space.

	4) #657 Changes to the declaration and assignment of the mesh
	object (it is now a pointer) within the generated PSy layer so as
	to use the mesh singleton and not generate a temporary copy of it.

release 1.2.2

	1) #575 Add parser support for stencil meta-data.

	2) #587 Changed scalar metadata names to gh_real and gh_integer

	3) #501 Updates to parser and documentation to support writing to
	scalar arguments (reductions). Note that this is currently only
	supported for serial code. Implementation of this functionality
	for OpenMP and MPI will be done under #484 and #423, respectively.

	4) #235 PSyclone now uses the appropriate intent for arguments in
	the generated PSy code. Previously it always used inout. This
	allows the algorithm developer to specify the intent of data in
	the algorithm layer appropriately, rather than being forced to use
	inout in all cases.

	5) #604 If PSyclone encounters an Algorithm file that contains no
	invoke calls then it now issues a warning and outputs that file
	unchanged (previously it did not output a file at all). No PSy
	file is created in this case.

	6) #618 fix for #235. Data with intent out should have fields
	declared as inout as internal subroutines within the field are
	dereferenced so are required as intent in.

	7) #610 When PSyclone is operating in line length limiting mode
	("-l" switch) problems are caused if it breaks a line in the middle
	of a string. PSyclone now prefixes all continued lines with an
	ampersand. This then produces valid Fortran irrespective of whether
	the line-break happens within a string.

release 1.2.1

	1) Added a PSyclone logo

	2) #360 Internal code structure changes to make the Node class
	calls() method more intuitive and consistent with other methods. A
	side effect is that the OpenMP private list should no longer
	contain any variables names that are not required (as this change
	fixes that bug).

	3) #546 Bug fix for colouring when a kernel is passed an operator.
	PSyclone was not generating the correct cell look-up when
	colouring a loop containing a kernel call with an operator. i.e.
	the PSy layer passed 'cell' to the kernel rather than
	'cmap(colour, cell)'.

	4) #542 generate correct OpenMP private list. This was actually
	fixed by the changes made under #360 (change 2 above) so this
	ticket only adds a test for this functionality.

release 1.2.0

	1) #415 Support for parsing stencil information supplied in
	Dynamo 0.3 kernel meta-data.

	2) #367 Make gocean Python conform to pep8

	3) #230 Add documentation for the GOcean1.0 API

	4) #379 Make f2pygen and its tests conform to pep8, pylint and
	improve the test coverage

	5) #429 Support for read-only scalar arguments in the 0.3
	Dynamo API.

	6) #420 Support for inter-invoke halo calls and logic (for
	distributed memory)

	7) #514 Fix for a bug in the if test round a halo_exchange call
	in which arrays (vectors) did not have their index added.

	8) #521 Fix bugs in the logic for adding halo exchange calls before
	loops.

	9) #532 Fix in the logic for adding halo exchange calls before
	loops which recognises that operators do not have halos.

	10) #467 Support transformations in Distributed Memory. Enable the use
	of OpenMP (and other transformations) with DM. Note that PSyclone
	currently does not support halo swaps inside OpenMP parallel regions.

release 1.1.0

	1) #263 OpenMP (including colouring) supported for the 0.3 Dynamo
	API. Parser fails gracefully if Kernel-code parsing is
	unsuccessful.

	2) #292 Add support for user-supplied transformations/optimisations
	via a script passed to the generate function/command-line. This
	enables the use of transformations within a build system.

	3) #292 Documentation for Algorithm, PSy and Kernel layers as well
	as for transformations has been added. Documentation on using
	transformation scripts then added on top.

	4) #292 Dynamo example scripts fixed.

	5) #258 First version of kernel-stub generator added. Given kernel
	metadata as input, PSyclone has enough information to be able to
	generate stub kernel code with the appropriate arguments and
	argument ordering.

	6) #364 OpenMP fix for update 1) (ticket #263). 'ncolour' variable
	now declared. New lfric/eg3 example added to demonstrate the use
	of transformation scripts introduced in update 2) (ticket #292).

	7) #361 Minor updates to the kernel-stub generator. Remove spurious
	dir() command, remove additional '_code' from kernel subroutine name
	and add 'implicit none' to the generated subroutine.

	8) #363 Update to the generator script to catch any run-time
	errors generated by the user-supplied optimisation script. Such
	errors are then reported in a user-friendly fashion to aid
	debugging.

	9) #272 Added support for explicit loop bounds in the PSy layer
	for the GOcean1.0 API. The Cray compiler makes use of this
	information to generate more efficient code. This option can be
	switched on or off using a transformation.

	10) Support the module in-lining of kernel subroutines. i.e.
	kernel subroutines can be moved into the same module that contains
	the invoke from which they are called. This functionality is
	implemented as a new transformation, 'KernelModuleInlineTrans'.
	psyGen.py has also been made fully pep8 compliant.

	11) #347 Add an option to limit the length of lines of fortran
	code that PSyclone generates to 132 chars. This is the length
	mandated by the Fortran free-format standard and is rigorously
	enforced by some compilers (e.g. PGI). As a part of this change
	PSyclone now checks the length of all lines of source code in
	the Algorithm and Kernel files that it parses.

	12) #395 Add support for new function spaces: Wtheta, W2H and W2V.

	13) #396 and #397 Make all tests work with Python 2.6. Previously
	two of the tests only worked in Python 2.7 and a third caused
	resource issues when using deepcopy.

	14) #355 Support operators where the "to" and "from" function
	spaces are different.

release 1.0.2

	1) #299 temporary boundary condition
	support. matrix_vector_kernel_mm now uses enforce_bc_code rather
	than enforce_boundary_w2 as the latter is no longer used.

release 1.0.1

	1) #299 temporary boundary condition support. removed the
	hardwired code and associated test that added an additional
	boundary condition array to ru_kernel as this kernel is no longer
	required. Added support for generating a boundary condition array
	in the PSy layer and passing it into the enforce_bc_kernel
	kernel. enforce_bc_kernel should be placed by the algorithm
	developer to enforce boundary conditions.

release 1.0.0
