Paul,
I do not find submodules anywhere. Which specific files have them? Are you looking at some fork or work in progress? Is this 1D, 2D or 3D version of the code? They seems were written by different people. I'm looking specifically at epoch3d version unpacked from TAR files. The Makefile generates bin folder with executable out of src directory inside epoch3d. By the way code authors claim that the code was written using Fortran2003.
UPDATE
The only place 'submodule' word indeed was found is completely different folder called SDF which has numerous visualization and etc tools written using variety of languages. It does not look submodules are Fortran related there. Google search claims that all Fortran compilers included submodules recently, though indeed it is not clear that there was any use of them here.
By the way adding MPI to FTN95 would probably eliminate the necessity of speeding up single core performance of FTN95 (like on Polyhedron tests etc) because all the time consuming operations and all the gain could be obtained from multi-core MPI. Same was with linear algebra with my own codes. For 20 last years I did not care that FTN95 was slower on single core performance because all the gain for me was coming from multicore parallel linear algebra which was successfully linked to FTN95 programs. And that worked like a charm despite the linear algebra obj (made with Microsoft Fortran and CVF) or dll's (gfortran, mecej4 helped here a lot) were third parties created not natively in FTN95
This program definitely was written by the crazy Fortran language Nazi. 😃 Is this an advancement of Fortran or its death given that much more often used by engineers and researchers MATLAB goes exactly in opposite direction (simplicity)? They have 16MB of source text like this:
...................
FUNCTION pid_inner_list_holds(this, test_id, index_out) RESULT(holds)
CLASS(particle_id_inner_list), INTENT(IN) :: this
INTEGER(hkind), INTENT(IN) :: test_id
INTEGER, INTENT(OUT), OPTIONAL :: index_out
TYPE :: particle_id_hash
PRIVATE
CHARACTER(LEN=c_max_string_length) :: name
TYPE(particle_id_inner_list), DIMENSION(:), ALLOCATABLE :: buckets
INTEGER(i8) :: count, hash_gr
INTEGER(i4) :: id_chunk_size
CONTAINS
PRIVATE
PROCEDURE :: hash => pid_hash_hash
PROCEDURE, PUBLIC :: holds => pid_hash_holds
PROCEDURE, PUBLIC :: add => pid_hash_add
PROCEDURE, PUBLIC :: delete => pid_hash_delete
PROCEDURE :: init_i8 => pid_hash_init_i8
PROCEDURE :: init_i4 => pid_hash_init_i4
GENERIC, PUBLIC :: init => init_i8, init_i4
PROCEDURE, PUBLIC :: optimise => pid_optimise
#ifdef USE_F03
FINAL :: pid_hash_destructor
#endif
END TYPE particle_id_hash
.............
.............
Not surprisingly the entire project activity dropped to one comment per year recently. No one feels comfortable touching such code and as a consequence the help is also not existent as its this main part author essentially left the project