Я не эксперт, но я пишу код, используя Absoft Fortran 2016. Вкратце: кажется, что массивы пишут друг на друга или, возможно, они используют одну и ту же часть памяти.Я выяснил, что выходные значения не рациональны. После некоторых проверок я обнаружил, что существует проблема с массивами. Я упростил код до той части, которая столкнулась с проблемой.Есть основной корпус и 2 подпрограммы.Первая подпрограмма (SubInput0) считывает основные данные, а вторая (SubInput1) считывает подробные данные.В SubInput1 некоторые координаты должны быть прочитаны из некоторых файлов.они читаются правильно, но в следующем цикле значения начинают меняться!Я имею в виду, что пока следующий цикл читает следующий массив, предыдущий массив также изменился, хотя между ними нет никакой связи.Выходные данные показывают, что следующий массив записывает себя в предыдущий.Это действительно смутило меня.
Спасибо за вашу помощь.
Я пробовал разные способы объявлять массивы по-разному, также объявлять или не объявлять массивы внутри тела, пробовал разные неявные подходы.
SubRoutine Control()
!THIS SUBROUTINE CONTROLS THE PROGRAM
!==================================================
Common /A/NNP,NODB3
Common /A1/NB3,NNPBED3,NNE,NNPEN
Common /C/NLoad,NTime,ITime,DTime
Common /E/GRAV
Real,Dimension(2,NNP) :: X
Real,Dimension(2,NNE) :: XEncl
Real,Dimension(3) :: MATERIAL
Open (10,FILE=Input.TXT) !Open Input File
Open (20,FILE=Output.TXT) !Open Output File
Open (30,FILE='Log.txt') !Open Log File
Open (40,FILE='Node.txt') !Open Node Coordinate File
Open (50,FILE='Encl.txt') !Open Encl Node Coordinate File
!--------Calling Sub Routines
!==============================
Call SubInput0 () !Call Sub to read the basic info
!==============================
!==============================
Call SubInput1 (X,XEncl,MATERIAL) !Call Sub to read the Details
!==============================
RETURN
END
SubRoutine SubInput0
SubRoutine SubInput0()
!This SubRoutine Reads The Basic Data From The Input Files
! Commons -----------------------------------------
Common /A/NNP,NODB3
Common /A1/NB3,NNPBED3,NNE,NNPEN
Common /C/NLoad,NTime,ITime,DTime
Common /E/GRAV
!--------------------------------------------------
Character*10 C$
Write(*,*) "SubInput0 Started"
Read(10,*) C$ ! Read Project Name
Read(10,*) NNP ! Read Num of total Nodes
Read(10,*) NNPBED3,NNPEN
Read(10,*) NLOAD,NTIME,DTime ! Read Num of Load and Time Steps
Grav=9.81
NB3=NNPBED3
NNE=NNPEN
RETURN
End
SubRoutine SubInput1
SubRoutine SubInput1(X,XEncl,MATERIAL)
!This SubRoutine Reads The Basic Data From The Input Files
! Commons -----------------------------------------
Common /A/NNP,NODB3
Common /A1/NB3,NNPBED3,NNE,NNPEN
Common /C/NLoad,NTime,ITime,DTime
Common /E/GRAV
!--------------------------------------------------
Real,Dimension(2,NNP), intent(out) :: X
Real,Dimension(2,NNE), intent(out) :: XEncl
Real,Dimension(3), intent(out) :: MATERIAL
Write(*,*) "SubInput1 Started"
Do i=1,NNP
read(40,*) NN,X(1,i),X(2,i) ! First it's readed correctly
Enddo
Do i=1,NNE
read(50,*) NE,XEncl(1,i),XEncl(2,i) ! But here the X will also change
Enddo
!Read Material Data------------------------------
Read(10,*) MATERIAL(1),MATERIAL(2),MATERIAL(3)
! Also here both X and XEncl change
!------------------------------------------------
RETURN
END
X, сразу после его чтения в первом цикле, которые являются правильными:
-100.000 0,000000 -80,0000 0,000000 -60,0000 0,000000 -40,0000 0,000000 -20,0000 0,000000 0,000000 0,000000 20,0000 0,000000 40,0000 0,000000 60,0000 0,000000 80,0000 0,000000 100 000 0,000000
X, значения после второго цикла неверны:
-100.000 -20.0000 -100.000 -40.0000 -100.000 -60.0000 -100.000 -80.0000 -100.000 -100.000 -80.0000 -100.000 -60.0000 -100.000 -40.0000 -100.000 -20.0000 -100.000 0.000000 -100.000 20.0000 -100.000
XEncl Значения, которые, я думаю, как-то связаны с измененными значениями X:
-100.000 -20.0000 -100.000 -40.0000 -100.000 -60.0000 -100.000 -80.0000 -100.000 -100.000 -80.0000 -100.000 -60.0000 -100.000-40.0000 -100.000 -20.0000 -100.000 0.000000 -100.000 20.0000 -100.000 40.0000 -100.000 60.0000 -100.000 80.0000 -100.000100.000 -100.000 100.000 -80.0000 100.000 -60.0000 100.000 -40.0000 100.000 -20.0000