1

GFortran と CodeBlocks を使用していますが、モジュールと複数のファイルについて問題があります。私はこのエラーを受け取り続けます:

Fatal Error: Can't open module file 'mesh.mod' for reading at (1): No such file or directory

何らかの理由で、GFortran は「mesh.mod」ファイルを構築していません。すべてのコードを 1 つの .f90 ファイルに入れると、この問題は発生しません。

以下は、このエラーが発生するコードの例です。

main.f90

MODULE MESH
IMPLICIT NONE
INTEGER :: IMAX,JMAX,NMAX
REAL(8), ALLOCATABLE :: XD(:),YD(:),FX(:,:),FY(:,:)
REAL(8) :: PI,E,DX,DY,H,L,RHO,MU
PARAMETER (PI = ACOS(-1.D0))
PARAMETER (E = 2.718)
END MODULE MESH
!**************************************************************

program Cavity
Use Mesh
implicit none
Real(8), Allocatable :: func(:)
Real(8) :: Der,DfDx
integer :: i

IMAX=10
DX=1./10

Allocate(xd(IMAX),func(IMAX))

Do i=1,IMAX
   xd(i)=i*DX
End Do

Do i=1,IMAX
func(i) = xd(i)**2
End Do

Der=Dfdx(func,2)
Write(*,*) Der

End program Cavity

デリバティブ.f90

Real(8) Function DfDx(f,i)
        Use Mesh
        implicit none
        Real(8) :: f(1:Imax)
        integer :: i

           DfDx=(f(i+1)-f(i-1))/(2d0*dx)

        return
end function DfDx

CodeBlocks インターフェイスの代わりにコンソール コマンド ライン コンパイルを使用すると、この問題は既に解決されています (モジュールを使用して複数のファイルをコンパイルする) が、CodeBlocks ではまだこの問題が発生しています。

この問題を解決する方法を知っている人はいますか?

4

3 に答える 3

1

あなたが書いたものがあなたのコードであると仮定すると、問題はmodule meshメインプログラム内にあり、別のファイルではないことにあるようです。Mesh.f90Derivatives.f90およびの 3 つのファイルが必要ですMain.f90

Mesh.f90 はあなたが持っているものとまったく同じです。

module Mesh
   implicit none
   integer :: IMAX,JMAX,NMAX
   real(8), allocatable :: XD(:),YD(:),FX(:,:),FY(:,:)
   real(8) :: PI,E,DX,DY,H,L,RHO,MU
   parameter (PI = ACOS(-1.D0))
   parameter (E = 2.718)
end module Mesh

Derivatives.f90 は、次を使用して別のモジュールとして作成する必要がありますcontains

module Derivatives
   use mesh
  contains
   real(8) function dfdx(f,i)
      real(8) :: f(i:imax)
      integer :: i

      DfDx=(f(i+1)-f(i-1))/(2d0*dx)

   end function dfdx
end module Derivatives

Main.f90 はuse両方のモジュールになります。変数を削除する必要があることに注意してくださいDfDx。これはfunction DfDxinと競合するためです。module Derivatives

program Cavity
   Use Mesh
   use Derivatives
   implicit none
   Real(8), Allocatable :: func(:)
   Real(8) :: Der
   integer :: i  

   IMAX=10
   DX=1./10

   Allocate(xd(IMAX),func(IMAX))

   Do i=1,IMAX
      xd(i)=i*DX
   End Do

   Do i=1,IMAX
      func(i) = xd(i)**2
   End Do

   Der=Dfdx(func,2)
   Write(*,*) Der

End program Cavity

CodeBlocks がどのように機能するかはわかりませんが、コンパイル順序を選択できると思います。その場合は、最初に Mesh.f90 をコンパイルし、次に Derivatives.f90 をコンパイルし、次に Main.f90 をコンパイルしてから実行可能ファイルにリンクする必要があります。

それらをコンパイルしてリンクすると、0.200000002980232の答えが得られました。うまくいけば、それはあなたが持っているものにもリンクします.

于 2013-07-09T13:53:18.153 に答える