ファイルへの書き込みモジュールは、以下のとおりです。は、その後、私は4つのモジュールを使用して、.txtファイルへの行列を記述しようとしています
- input.f90は.txtファイル
- navierstokes_loserからの入力を読み取り.F90は行列を作成
- main.f90のすべての組み合わせ
- が、それは.txtにプリントnavierstokes_loserから行列にファイルを取るresultatplot.f90(私は最初、私はちょうどそれを印刷する必要があり、いくつかは、ここでループを行うに追加しますが)モジュールを実行してプログラムを実行する
プログラムを実行すると、プログラム受信信号SIGSEGV:セグメンテーションフォルト - 無効なメモリ参照が取得されます。
私は間違っていますか?
input.f90
module input
implicit none
contains
subroutine lesinput(n,omega)
!Output
integer :: n
real(8) :: omega
!Åpner fil og gir variable verdier
open(1, file='input.txt',status='old',action='read')
read(1,*), n
read(1,*), omega
close(1)
end subroutine lesinput
end module input
navierstokes_loser.f90
module navierstokes_loser
implicit none
contains
subroutine los_navier(n,omega,u)
!input
integer :: n
real(8) :: omega
!lokal
real(8) :: u(n+1,n+1)
integer :: i,j
u(n+1,n+1)=0.0d0
end subroutine los_navier
end module navierstokes_loser
resultatplot.f90
module resultatplot
implicit none
contains
subroutine vektorplot(n,u)
!input
integer :: n
real(8) :: u(n+1,n+1)
!lokale
integer :: i,j
real(8) :: vek_x
!Skriver vektor verdier til fil som gnuplot skal bruke
open(2,access='sequential',file='vekdata.txt',status='unknown')
write(2,*)'# x y vx vy'
do i=1,n+1
do j=1,n+1
vek_x=u(j,i)
write(2,*) i, j, vek_x
end do
write(2,*)''
end do
close(2,status='keep')
end subroutine vektorplot
end module resultatplot
main.f90の
program main
use input
use navierstokes_loser
use resultatplot
implicit none
integer :: n
real(8) :: omega
real(8), dimension (:,:), allocatable :: u
call lesinput(n,omega)
allocate(u(n+1,n+1))
call los_navier(n,omega,u)
call vektorplot(n,u)
end program main
あなたが段階的に試すことができます。最初に入力を読み、正しいことを確認してください。行列の計算を追加し、その点までうまく動作していることを確認し、行列の印刷をファイルに追加します。人々がすべてをやるのを待つのはあまり賢明ではありません。 – innoSPG
これは、main.f90とnavierstokes_loser.f90の両方の入力を正しく読み込みますが、行列を追加するとバグが発生します。 – ursmooth
私の問題は、行列uを格納してからvektorplotに渡すことです。 – ursmooth