У меня есть следующий модуль с выделяемой переменной, которая определена в модуле, выделена в подпрограмме, а затем также используется во второй подпрограмме, вызываемой первой подпрограммой. В этой ситуации я должен передать переменную второй подпрограмме и объявить INTENT(inout)
? Или, поскольку это глобальная переменная, ее не нужно передавать в качестве аргумента?
MODULE test
IMPLICIT NONE
SAVE
REAL,ALLOCATABLE,DIMENSION(:,:,:) :: total
CONTAINS
!--- 1st subroutine
SUBROUTINE my_subr1(n,m,z)
IMPLICIT NONE
INTEGER,INTENT(in) :: n,m,z
ALLOCATE(total (n,m,z))
total=.9
CALL my_subr2(n)
END SUBROUTINE my_subr1
!-- 2nd subroutine
SUBROUTINE my_subr2(n)
IMPLICIT NONE
INTEGER,INTENT(in) :: n
total(n,:,:)=total(n-1,:,:)
END SUBROUTINE my_subr2
END MODULE test
total
. Переменные модуля также сохраняются по умолчанию. Однако в вашем коде есть проблемы (нет объявления фиктивных аргументов вmy_subr1
и нетend module ...
. - person Pierre de Buyl   schedule 25.02.2019