2013-10-23 24 views
5

割り付け可能な配列をサブルーチンに渡すプログラムが必要です。私がそれを行う方法が標準であるかどうかを知る必要があります。fortran、割り当て可能な配列を右端のサブルーチンに渡す

私がfortranの標準をどこで検索できるかわかっている場合は、教えてください。ここで

が良い言葉画面上

program test 

use modt99 

implicit none 

real(pr), dimension(:), allocatable :: vx 

allocate(vx(-1:6)) 
vx=(/666,214,558,332,-521,-999,120,55/) 
call test3(vx,vx,vx) 
deallocate(vx) 

end program test 
モジュールと

modt99

module modt99 

contains 
subroutine test3(v1,v2,v3) 
    real(pr), dimension(:), intent(in) :: v1 
    real(pr), dimension(0:), intent(in) :: v2 
    real(pr), dimension(:), allocatable, intent(in) :: v3 

    print*,'================================' 
    print*,v1(1:3) 
    print*,'================================' 
    print*,v2(1:3) 
    print*,'================================' 
    print*,v3(1:3) 
    print*,'================================' 

end subroutine test3 


end module modt99 

よりも説明します少しのコードで、私は3つの方法がある

================================ 
    666.000000000000  214.000000000000  558.000000000000  
================================ 
    214.000000000000  558.000000000000  332.000000000000  
================================ 
    558.000000000000  332.000000000000  -521.000000000000  
================================ 

を取得しますサブルーチンtest3 legal(どのバージョンのFortran、90,95,2003?)のダミー引数を使用し、それらの動作正常?

答えて

5

最初のバージョンでは、アレイスライスがサブルーチンに渡されます。境界情報はこのように渡されないことに注意してください。配列は1で始まり、size(array)に行くと仮定します。

第2の方法は最初の方法と似ていますが、手動で下限境界を0に設定すると、v3(1:3)の印刷ではオフセットが1の値になります。

3番目の方法は、配列情報をサブルーチン(境界を含む)に渡すため、「正しい」索引付けを行います。渡したallocatable配列は、Fortran 2003で導入されました。

エイリアシングの問題(3つの異なる仮引数に同じ変数を渡す)以外に、3つのバージョンは合法です。

標準hereのすべての文書を見つけることができます。

特に、形状繰延形状仮引数で配列を仮定間の違いを見るためのFortran 2003規格、Ch. 5.1.2.5 DIMENSION attributeを見てみましょう。

+0

あなたの答えをありがとう、それは私をたくさん助けます。あなたが与えるリンクでは、それはf95でも大丈夫でしょうか、そうではありませんか? – user2910558

+0

*すべての*標準文書は、Fortran for IBM 704 *(1957!)から始まります。 –

関連する問題