Index: petsc/src/mat/f90-mod/makefile
===================================================================
--- petsc.orig/src/mat/f90-mod/makefile	2022-10-30 13:54:21.218191336 +0100
+++ petsc/src/mat/f90-mod/makefile	2022-10-30 13:54:21.210191275 +0100
@@ -2,7 +2,7 @@
 #requiresdefine   'PETSC_HAVE_FORTRAN'
 
 SOURCEC	   =
-SOURCEF90  = petscmatmod.F90
+SOURCEF90  = petscmatdefmod.F90 petscmatmod.F90
 SOURCEH	   = petscmat.h petscmat.h90 petscmatfactorinfosize.h petscmatinfosize.h
 LIBBASE	   = libpetscmat
 MANSEC	   = Mat
Index: petsc/src/mat/f90-mod/petscmatdefmod.F90
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ petsc/src/mat/f90-mod/petscmatdefmod.F90	2022-10-30 13:54:21.210191275 +0100
@@ -0,0 +1,95 @@
+
+        module petscmatdefdummy
+        use petscvecdef
+#include <../src/mat/f90-mod/petscmat.h>
+        end module
+
+        module petscmatdef
+        use petscmatdefdummy
+        interface operator(.ne.)
+          function matnotequal(A,B)
+            use petscmatdefdummy
+            logical matnotequal
+            type(tMat), intent(in) :: A,B
+          end function
+          function matfdcoloringnotequal(A,B)
+            use petscmatdefdummy
+            logical matfdcoloringnotequal
+            type(tMatFDColoring), intent(in) :: A,B
+          end function
+          function matnullspacenotequal(A,B)
+            use petscmatdefdummy
+            logical matnullspacenotequal
+            type(tMatNullSpace), intent(in) :: A,B
+            end function
+      end interface operator (.ne.)
+        interface operator(.eq.)
+          function matequals(A,B)
+            use petscmatdefdummy
+            logical matequals
+            type(tMat), intent(in) :: A,B
+          end function
+          function matfdcoloringequals(A,B)
+            use petscmatdefdummy
+            logical matfdcoloringequals
+            type(tMatFDColoring), intent(in) :: A,B
+          end function
+           function matnullspaceequals(A,B)
+            use petscmatdefdummy
+            logical matnullspaceequals
+            type(tMatNullSpace), intent(in) :: A,B
+            end function
+          end interface operator (.eq.)
+        end module
+
+
+        function matnotequal(A,B)
+          use petscmatdefdummy
+          logical matnotequal
+          type(tMat), intent(in) :: A,B
+          matnotequal = (A%v .ne. B%v)
+        end function
+
+       function matequals(A,B)
+          use petscmatdefdummy
+          logical matequals
+          type(tMat), intent(in) :: A,B
+          matequals = (A%v .eq. B%v)
+        end function
+
+        function matfdcoloringnotequal(A,B)
+          use petscmatdefdummy
+          logical matfdcoloringnotequal
+          type(tMatFDColoring), intent(in) :: A,B
+          matfdcoloringnotequal = (A%v .ne. B%v)
+        end function
+
+        function matfdcoloringequals(A,B)
+          use petscmatdefdummy
+          logical matfdcoloringequals
+          type(tMatFDColoring), intent(in) :: A,B
+          matfdcoloringequals = (A%v .eq. B%v)
+        end function
+
+        function matnullspacenotequal(A,B)
+          use petscmatdefdummy
+          logical matnullspacenotequal
+          type(tMatNullSpace), intent(in) :: A,B
+          matnullspacenotequal = (A%v .ne. B%v)
+        end function
+
+        function matnullspaceequals(A,B)
+          use petscmatdefdummy
+          logical matnullspaceequals
+          type(tMatNullSpace), intent(in) :: A,B
+          matnullspaceequals = (A%v .eq. B%v)
+        end function
+
+#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
+!DEC$ ATTRIBUTES DLLEXPORT::matnotequal
+!DEC$ ATTRIBUTES DLLEXPORT::matequals
+!DEC$ ATTRIBUTES DLLEXPORT::matfdcoloringnotequal
+!DEC$ ATTRIBUTES DLLEXPORT::matfdcoloringequals
+!DEC$ ATTRIBUTES DLLEXPORT::matnullspacenotequal
+!DEC$ ATTRIBUTES DLLEXPORT::matnullspaceequals
+#endif
Index: petsc/src/mat/f90-mod/petscmatmod.F90
===================================================================
--- petsc.orig/src/mat/f90-mod/petscmatmod.F90	2022-10-30 13:54:21.218191336 +0100
+++ petsc/src/mat/f90-mod/petscmatmod.F90	2022-10-30 13:54:21.210191275 +0100
@@ -1,103 +1,5 @@
+#include <petsc/finclude/petscmat.h>
 
-        module petscmatdefdummy
-        use petscvecdef
-#include <../src/mat/f90-mod/petscmat.h>
-        end module petscmatdefdummy
-
-        module petscmatdef
-        use petscmatdefdummy
-        interface operator(.ne.)
-          function matnotequal(A,B)
-            import tMat
-            logical matnotequal
-            type(tMat), intent(in) :: A,B
-          end function
-          function matfdcoloringnotequal(A,B)
-            import tMatFDColoring
-            logical matfdcoloringnotequal
-            type(tMatFDColoring), intent(in) :: A,B
-          end function
-          function matnullspacenotequal(A,B)
-            import tMatNullSpace
-            logical matnullspacenotequal
-            type(tMatNullSpace), intent(in) :: A,B
-            end function
-      end interface operator (.ne.)
-        interface operator(.eq.)
-          function matequals(A,B)
-            import tMat
-            logical matequals
-            type(tMat), intent(in) :: A,B
-          end function
-          function matfdcoloringequals(A,B)
-            import tMatFDColoring
-            logical matfdcoloringequals
-            type(tMatFDColoring), intent(in) :: A,B
-          end function
-           function matnullspaceequals(A,B)
-            import tMatNullSpace
-            logical matnullspaceequals
-            type(tMatNullSpace), intent(in) :: A,B
-            end function
-          end interface operator (.eq.)
-        end module
-
-        function matnotequal(A,B)
-          use petscmatdefdummy, only: tMat
-          implicit none
-          logical matnotequal
-          type(tMat), intent(in) :: A,B
-          matnotequal = (A%v .ne. B%v)
-        end function
-
-       function matequals(A,B)
-          use petscmatdefdummy, only: tMat
-          implicit none
-          logical matequals
-          type(tMat), intent(in) :: A,B
-          matequals = (A%v .eq. B%v)
-        end function
-
-        function matfdcoloringnotequal(A,B)
-          use petscmatdefdummy, only: tMatFDColoring
-          implicit none
-          logical matfdcoloringnotequal
-          type(tMatFDColoring), intent(in) :: A,B
-          matfdcoloringnotequal = (A%v .ne. B%v)
-        end function
-
-        function matfdcoloringequals(A,B)
-          use petscmatdefdummy, only: tMatFDColoring
-          implicit none
-          logical matfdcoloringequals
-          type(tMatFDColoring), intent(in) :: A,B
-          matfdcoloringequals = (A%v .eq. B%v)
-        end function
-
-        function matnullspacenotequal(A,B)
-          use petscmatdefdummy, only: tMatNullSpace
-          implicit none
-          logical matnullspacenotequal
-          type(tMatNullSpace), intent(in) :: A,B
-          matnullspacenotequal = (A%v .ne. B%v)
-        end function
-
-        function matnullspaceequals(A,B)
-          use petscmatdefdummy, only: tMatNullSpace
-          implicit none
-          logical matnullspaceequals
-          type(tMatNullSpace), intent(in) :: A,B
-          matnullspaceequals = (A%v .eq. B%v)
-        end function
-
-#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
-!DEC$ ATTRIBUTES DLLEXPORT::matnotequal
-!DEC$ ATTRIBUTES DLLEXPORT::matequals
-!DEC$ ATTRIBUTES DLLEXPORT::matfdcoloringnotequal
-!DEC$ ATTRIBUTES DLLEXPORT::matfdcoloringequals
-!DEC$ ATTRIBUTES DLLEXPORT::matnullspacenotequal
-!DEC$ ATTRIBUTES DLLEXPORT::matnullspaceequals
-#endif
         module petscmat
         use petscmatdef
         use petscvec
Index: petsc/gmakefile
===================================================================
--- petsc.orig/gmakefile	2022-10-30 13:54:21.218191336 +0100
+++ petsc/gmakefile	2022-10-30 13:54:21.210191275 +0100
@@ -231,7 +231,8 @@
 endif
 $(OBJDIR)/sys/f90-mod/petscsysmod.o   : $(if $(MPIUNI_MOD),$(OBJDIR)/sys/mpiuni/f90-mod/mpiunimod.o)
 $(OBJDIR)/vec/f90-mod/petscvecmod.o   : $(OBJDIR)/sys/f90-mod/petscsysmod.o
-$(OBJDIR)/mat/f90-mod/petscmatmod.o   : $(OBJDIR)/vec/f90-mod/petscvecmod.o
+$(OBJDIR)/mat/f90-mod/petscmatdefmod.o   : $(OBJDIR)/vec/f90-mod/petscvecmod.o
+$(OBJDIR)/mat/f90-mod/petscmatmod.o   : $(OBJDIR)/mat/f90-mod/petscmatdefmod.o
 $(OBJDIR)/dm/f90-mod/petscdmmod.o     : $(OBJDIR)/mat/f90-mod/petscmatmod.o
 $(OBJDIR)/dm/f90-mod/petscdmdamod.o   : $(OBJDIR)/dm/f90-mod/petscdmmod.o
 $(OBJDIR)/dm/f90-mod/petscdmplexmod.o : $(OBJDIR)/dm/f90-mod/petscdmmod.o
