• ベストアンサー
  • 暇なときにでも

質問(Fortran)について

  • 質問No.1259039
  • 閲覧数147
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 43% (10/23)

おはようございます。
下記のFortranでここから~ここまでと---で囲んでいる
部分の意味が分かりません。
乱数Pを発生させてPがEE以下になったら、140へ行けとあるのですが。。

それと(1)の部分をCに書き換えるとどうなるか、知っている方教えてください。

よろしくお願いいたします。


C *---------------------------------------------------------*
C サブルーチンWGEN
C *---------------------------------------------------------*
SUBROUTINE WGEN(EM,R,NN,IR,ACC,ND,DT,AMAX,VMAX,MXCYCL,ERR,UW1,
* UW2)
C
implicit real*8(a-h,o-z)

COMPLEX*16 C(4096)
DIMENSION ACC(ND),UW1(ND),UW2(ND)
DIMENSION E(33),X(33),EE(33)
DIMENSION PDIF(2046),PHI(2049),F(2049),T(2049),SV(2049),H(1),
* RES(2049,1),RR(2049)
PARAMETER (PI2=6.283185)
DATA DX/0.03125/,H0/0./,H/0.05/,IR/101/
C
C
------------------- ここから -------------------
DO 150 K=1,NN2-2
P=RAND2(IR) ← (1)
C
DO 130 J=2,33
IF(P.LE.EE(J)) GO TO 140
C
130 CONTINUE
C
140 PDIF(K)=-(X(J-1)+(P-EE(J-1))/(EE(J)-EE(J-1))*DX)*PI2
C
150 CONTINUE
C
------------------- ここまで -------------------

C *---------------------------------------------------------*
C ファンクションRAND01
C *---------------------------------------------------------*
REAL*8 FUNCTION RAND2(I)
C
INTEGER*4 L,C,T30
REAL MU

PARAMETER(L=843314861,C=453816693,T30=2**30,MU=2.0**31)
C
I=L*I+C
IF(I.LT.0) I=(I+T30)+T30
RAND2=REAL(I)/MU
END
C

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 55% (2225/4034)

ファンクションRAND01(RAND2)の乗算剰余法で求めた0~1の間の乱数をPに代入、32個のEEと個々Pを比較しPがEEのどれは1つ以下となった時点で140にジャンプする。32このいずれのEEに対してもEE以下にならない場合は(1)のPをそのまま使って140に進むという内容です。DO 150で140で計算したPDIFを(NN2-3)個繰り返し計算しています。140の計算式が何をしているかわこのプログラムを見ただけでは分かりかねます。このサブルーチンWGENそのものの計算目的の計算式であることには違いないですが。
yamayama1さんがこのプログラムを提示されているわけですからこのサブルーチンが何をするものかわかって見えるでしょうから、140の式はそのための最終の式ですのでyamayama1さん自身はわかってみえると思います。

>それと(1)の部分をCに書き換えるとどうなるか、
乱数が得られなくなり、Pが未定義となるエラーが発生します。

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 25% (2/8)

f2c というプログラムでフォートランのソースはCに変えられます。
といってもgoto連発で読みやすいものではないようですが。。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ