2017-05-19 8 views
1

私はFortranサブルーチンに 'フォーマット'を渡すことができるようにしたいと思います。この例を見てみましょう:フォーマット文をFortranのサブルーチンに渡すことはできますか?

 write(6,1002) M1  
1002 format(A, "M1, Mach number at boundary layer edge", f8.3) 

ここに入るには余りにも関与の理由から、私が書くために使用されるフォーマット文で変数を送信するための一般的な機能を有することが有用であろう。私はこれを行う方法を理解することはできません。

アイデア?

答えて

4

実際にフォーマットステートメントをサブルーチンに渡すことはできません。しかし、あなたはフォーマット文字列を渡すことができ、何かのように:いくつかは、そのフォーマット文字列がすべての状況でフォーマットを処理するための最良の近代的な方法であり、フォーマットの使用を引退している主張するかもしれない、その後

fmtstr = '(A, "M1, Mach number at boundary layer edge", f8.3)' 
... 
call mysub(args, fmtstr) 

subroutine mysub(args, fmtstr) 
    ... 
    character(*), intent(in) :: fmtstr 
    ... 
    write(*,fmtstr) M1 
end subroutine 

ステートメント。

+0

括弧が欠けているので注意してください:) –

1

は、FORMAT文を忘れて、フォーマット文字列

string = '(A, "M1, Mach number at boundary layer edge", f8.3)' 
    write(*,string) M1 

を使用しますが、サブルーチンに簡単に文字列を渡すことができます。

フォーマットステートメントは、時代遅れで扱いにくいだけです。

また、ユニット番号6を使用しないでください。*、これははるかに移植性があります。