PSyclone cannot parse LFRic's mesh/reference_element_mod.F90 (which was triggered by my dependency analysis for the LFRic driver creation, typically this file is not touched by PSyclone):
The same symbol 'edges' is used for different datatypes, 'real, r_def' and 'integer, i_def'. This is not currently supported.
This is apparently caused by several subroutine/functions using the argument same name for different types - besides edges the name this is a major issue - reference_element_mod.F90 has three different this :(
In order to parse this file, I had to rename many, many variables to avoid these 'name clashes' in parameter names. E.g.:
< subroutine face_on_edge_iface( this_ret, edges_idef )
---
> subroutine face_on_edge_iface( this, edges )
218,219c218,219
< class(reference_element_type), intent(in) :: this_ret
< integer(i_def), intent(out) :: edges_idef(:,:)
---
> class(reference_element_type), intent(in) :: this
> integer(i_def), intent(out) :: edges(:,:)
...
1596c1596
< subroutine reference_prism_destructor( this_rpt )
---
> subroutine reference_prism_destructor( this )
1600c1600
< type(reference_prism_type), intent(inout) :: this_rpt
---
> type(reference_prism_type), intent(inout) :: this
Once I've renamed these arguments, it parsed fine :( That's a really annoying bug :(
PSyclone cannot parse LFRic's
mesh/reference_element_mod.F90(which was triggered by my dependency analysis for the LFRic driver creation, typically this file is not touched by PSyclone):This is apparently caused by several subroutine/functions using the argument same name for different types - besides
edgesthe namethisis a major issue -reference_element_mod.F90has three differentthis:(In order to parse this file, I had to rename many, many variables to avoid these 'name clashes' in parameter names. E.g.:
Once I've renamed these arguments, it parsed fine :( That's a really annoying bug :(