-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathchangelog
2051 lines (1408 loc) · 74.6 KB
/
changelog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
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.
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.