@@ -63,24 +63,35 @@ subroutine get_partition_parameters( partitioning_nml, &
6363 panel_xproc = partitioning_nml% panel_xproc()
6464 panel_yproc = partitioning_nml% panel_yproc()
6565
66+ ! nvfortran does not properly support the polymorphic allocation, to fix it
67+ ! deallocate the polymorphic class and allocate each concrete type inside
68+ ! the select cases
69+ if (allocated (decomposition)) deallocate (decomposition)
70+
6671 select case (panel_decomposition)
6772
6873 case ( panel_decomposition_auto )
74+ allocate (auto_decomposition_type :: decomposition)
6975 decomposition = auto_decomposition_type()
7076
7177 case ( panel_decomposition_row )
78+ allocate (row_decomposition_type :: decomposition)
7279 decomposition = row_decomposition_type()
7380
7481 case ( panel_decomposition_column )
82+ allocate (column_decomposition_type :: decomposition)
7583 decomposition = column_decomposition_type()
7684
7785 case ( panel_decomposition_custom )
86+ allocate (custom_decomposition_type :: decomposition)
7887 decomposition = custom_decomposition_type( panel_xproc, panel_yproc )
7988
8089 case ( panel_decomposition_auto_nonuniform )
90+ allocate (auto_nonuniform_decomposition_type :: decomposition)
8191 decomposition = auto_nonuniform_decomposition_type()
8292
8393 case ( panel_decomposition_guided_nonuniform )
94+ allocate (guided_nonuniform_decomposition_type :: decomposition)
8495 decomposition = guided_nonuniform_decomposition_type( panel_xproc )
8596
8697 case default
0 commit comments