weno法について

はっち
記事: 2
登録日時: 6年前

weno法について

投稿記事 by はっち » 6年前

今現在移流項をweno法で解こうと思っております。
以下に自分で作ったweno法を載せるのですが、やり方があっているのかわからず、ご教授頂けると幸いです。

PARAMETER(KSTEP=2000,NX=401)
DIMENSION X(NX),F(NX,3),FD(NX,2),D(NX,2)


L=1.D0
DX=L/FLOAT(NX-1)
DT=0.01*DX
U=1.D0

DO I=1,NX

X(I+1)=X(I)+DX
F(I,1)=EXP(-400*(X(I)-0.2)**2)
ENDDO

DO KT=1,KSTEP
DO I=1,NX
F(I,2)=F(I,1)
ENDDO
C###################################################################
C 移流項の計算の考察 #
C###################################################################
C============================W E N O 法=============================
DO I=2,NX
D(I,1)=(F(I ,2)-F(I-1,2))/DX
ENDDO
DO I=1,NX-1
D(I,2)=(F(I+1,2)-F(I ,2))/DX
ENDDO
c###################################################################
DO I=4,NX-2
C
FUI1=11*D(I ,1)/6.D0-7*D(I-1,1)/6.D0+D(I-2,1)/3.D0
FUI2=- D(I-1,1)/6.D0+5*D(I ,1)/6.D0+D(I+1,1)/3.D0
FUI3= D(I ,1)/3.D0+5*D(I+1,1)/6.D0-D(I+2,1)/6.D0
C
S1=13*( D(I-2,1)-2*D(I-1,1)+ D(I ,1))**2/(12.D0)
> +( D(I-2,1)-4*D(I-1,1)+3*D(I ,1))**2/( 4.D0)
C
S2=13*( D(I-1,1)-2*D(I ,1)+ D(I+1,1))**2/(12.D0)
> +( D(I-1,1) -D(I+1,1))**2/( 4.D0)
C
S3=13*( D(I ,1)-2*D(I+1,1)+ D(I+2,1))**2/(12.D0)
> +(3*D(I ,1)-4*D(I+1,1)+ D(I+2,1))**2/( 4.D0)
C
E=1.D-6
TT1=(S1+E)**2
TT2=(S2+E)**2
TT3=(S3+E)**2
A1=0.1/TT1
A2=0.6/TT2
A3=0.3/TT3
C
W1=A1/(A1+A2+A3)
W2=A2/(A1+A2+A3)
W3=A3/(A1+A2+A3)
C
FD(I,1)=(W1*FUI1+W2*FUI2+W3*FUI3)
ENDDO

FD(3,1)=0.5D0*(F(4,2)-F(2,2))/DX
FD(2,1)=0.5D0*(F(3,2)-F(1,2))/DX
FD(NX-1,1)=0.5D0*(F(NX,2)-F(NX-2,2))/DX
FD(1,1)=(F(2,2)-F(1,2))/DX
FD(NX,1)=(F(NX,2)-F(NX-1,2))/DX
C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DO I=3,NX-3
C
FUI1=11*D(I ,2)/6.D0-7*D(I-1,2)/6.D0+D(I-2,2)/3.D0
FUI2=- D(I-1,2)/6.D0+5*D(I ,2)/6.D0+D(I+1,2)/3.D0
FUI3= D(I ,2)/3.D0+5*D(I+1,2)/6.D0-D(I+2,2)/6.D0
C
S1=13*( D(I-2,2)-2*D(I-1,2)+ D(I ,2))**2/(12.D0)
> +( D(I-2,2)-4*D(I-1,2)+3*D(I ,2))**2/( 4.D0)
C
S2=13*( D(I-1,2)-2*D(I ,2)+ D(I+1,2))**2/(12.D0)
> +( D(I-1,2) -D(I+1,2))**2/( 4.D0)
C
S3=13*( D(I ,2)-2*D(I+1,2)+ D(I+2,2))**2/(12.D0)
> +(3*D(I ,2)-4*D(I+1,2)+ D(I+2,2))**2/( 4.D0)
C
E=1.D-6
TT1=(S1+E)**2
TT2=(S2+E)**2
TT3=(S3+E)**2
A1=0.1/TT1
A2=0.6/TT2
A3=0.3/TT3
C
W1=A1/(A1+A2+A3)
W2=A2/(A1+A2+A3)
W3=A3/(A1+A2+A3)
C
FD(I,2)=(W1*FUI1+W2*FUI2+W3*FUI3)
ENDDO
C
FD(NX-2,2)=0.5D0*(F(NX-1,2)-F(NX-3,2))
FD(2,2)=0.5D0*(F(3,2)-F(1,2))/DX
FD(NX-1,2)=0.5D0*(F(NX,2)-F(NX-2,2))/DX
FD(1,2)=(F(2,2)-F(1,2))/DX
FD(NX,2)=(F(NX,2)-F(NX-1,2))/DX
C###################################################################
DO I=1,NX
F(I,1)=F(I,2)-DT*
> (0.5D0*(U+ABS(U))*FD(I,1)+0.5D0*(U-ABS(U))*FD(I,2))


ENDDO
最後に編集したユーザー はっち on 2017年9月28日(木) 16:46 [ 編集 2 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 13年前

Re: weno法について

投稿記事 by みけCAT » 6年前

  • ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
    BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
    見やすくてありがたいです。
  • 特に書きたくない理由がなければ、質問は日記ではなく質問掲示板に投稿したほうがいいかもしれません。
  • 提示されたソースコード(?)は大文字が多い上、短くて意味がわかりにくい変数がほとんどなので、わかりにくく感じます。
    以下の情報を提示するとわかりやすくなるでしょう。
    • 使用している(プログラミング)言語の名前
    • 入出力例
    • (「weno法」の簡単な説明や参考リンク)
  • 自分でテストを行うことで、あっているかはわからなくても、間違っているといえるかどうかはわかるでしょう。

アバター
沖 滉均
記事: 237
登録日時: 13年前

Re: weno法について

投稿記事 by 沖 滉均 » 6年前

構文とPARAMETER文からFORTRAN 77ですかね…
下記に、空白を調整してコードを書き出してみたものの16行目に対応するENDDOがないですし、KTをどこかで使用している形跡もないですね
とりあえず、WENO法が何をやっているものなのかわかりかねますので現状はこれ以上は答えかねますが、質問は質問掲示板側で聞いたほうが答えが返ってくるかもしれませんよ
オフトピック
もっとも、FORTRAN 77を今聞いてどれだけ分かる人がいるのか謎ですが…

CODE:

      PARAMETER(KSTEP=2000,NX=401)
      DIMENSION X(NX),F(NX,3),FD(NX,2),D(NX,2)


      L=1.D0
      DX=L/FLOAT(NX-1)
      DT=0.01*DX
      U=1.D0

      DO I=1,NX

      X(I+1)=X(I)+DX
      F(I,1)=EXP(-400*(X(I)-0.2)**2)
      ENDDO

      DO KT=1,KSTEP
      DO I=1,NX
      F(I,2)=F(I,1)
      ENDDO
C###################################################################
C 移流項の計算の考察 #
C###################################################################
C============================W E N O 法=============================
      DO I=2,NX
      D(I,1)=(F(I ,2)-F(I-1,2))/DX
      ENDDO
      DO I=1,NX-1
      D(I,2)=(F(I+1,2)-F(I ,2))/DX
      ENDDO
c################################################################### 
      DO I=4,NX-2
C
      FUI1=11*D(I ,1)/6.D0-7*D(I-1,1)/6.D0+D(I-2,1)/3.D0
      FUI2=- D(I-1,1)/6.D0+5*D(I ,1)/6.D0+D(I+1,1)/3.D0
      FUI3= D(I ,1)/3.D0+5*D(I+1,1)/6.D0-D(I+2,1)/6.D0
C
      S1=13*( D(I-2,1)-2*D(I-1,1)+ D(I ,1))**2/(12.D0)
     > +( D(I-2,1)-4*D(I-1,1)+3*D(I ,1))**2/( 4.D0)
C
      S2=13*( D(I-1,1)-2*D(I ,1)+ D(I+1,1))**2/(12.D0)
     > +( D(I-1,1) -D(I+1,1))**2/( 4.D0)
C
      S3=13*( D(I ,1)-2*D(I+1,1)+ D(I+2,1))**2/(12.D0)
     > +(3*D(I ,1)-4*D(I+1,1)+ D(I+2,1))**2/( 4.D0)
C
      E=1.D-6
      TT1=(S1+E)**2
      TT2=(S2+E)**2
      TT3=(S3+E)**2
      A1=0.1/TT1
      A2=0.6/TT2
      A3=0.3/TT3
C
      W1=A1/(A1+A2+A3)
      W2=A2/(A1+A2+A3)
      W3=A3/(A1+A2+A3)
C
      FD(I,1)=(W1*FUI1+W2*FUI2+W3*FUI3)
      ENDDO

      FD(3,1)=0.5D0*(F(4,2)-F(2,2))/DX
      FD(2,1)=0.5D0*(F(3,2)-F(1,2))/DX
      FD(NX-1,1)=0.5D0*(F(NX,2)-F(NX-2,2))/DX
      FD(1,1)=(F(2,2)-F(1,2))/DX
      FD(NX,1)=(F(NX,2)-F(NX-1,2))/DX
C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      DO I=3,NX-3
C 
      FUI1=11*D(I ,2)/6.D0-7*D(I-1,2)/6.D0+D(I-2,2)/3.D0
      FUI2=- D(I-1,2)/6.D0+5*D(I ,2)/6.D0+D(I+1,2)/3.D0
      FUI3= D(I ,2)/3.D0+5*D(I+1,2)/6.D0-D(I+2,2)/6.D0
C
      S1=13*( D(I-2,2)-2*D(I-1,2)+ D(I ,2))**2/(12.D0)
     > +( D(I-2,2)-4*D(I-1,2)+3*D(I ,2))**2/( 4.D0)
C
      S2=13*( D(I-1,2)-2*D(I ,2)+ D(I+1,2))**2/(12.D0)
     > +( D(I-1,2) -D(I+1,2))**2/( 4.D0)
C
      S3=13*( D(I ,2)-2*D(I+1,2)+ D(I+2,2))**2/(12.D0)
     > +(3*D(I ,2)-4*D(I+1,2)+ D(I+2,2))**2/( 4.D0)
C
      E=1.D-6
      TT1=(S1+E)**2
      TT2=(S2+E)**2
      TT3=(S3+E)**2
      A1=0.1/TT1
      A2=0.6/TT2
      A3=0.3/TT3
C
      W1=A1/(A1+A2+A3)
      W2=A2/(A1+A2+A3)
      W3=A3/(A1+A2+A3)
C
      FD(I,2)=(W1*FUI1+W2*FUI2+W3*FUI3)
      ENDDO
C
      FD(NX-2,2)=0.5D0*(F(NX-1,2)-F(NX-3,2))
      FD(2,2)=0.5D0*(F(3,2)-F(1,2))/DX
      FD(NX-1,2)=0.5D0*(F(NX,2)-F(NX-2,2))/DX
      FD(1,2)=(F(2,2)-F(1,2))/DX
      FD(NX,2)=(F(NX,2)-F(NX-1,2))/DX
C###################################################################
      DO I=1,NX
      F(I,1)=F(I,2)-DT*
     > (0.5D0*(U+ABS(U))*FD(I,1)+0.5D0*(U-ABS(U))*FD(I,2))


      ENDDO
ところで下記は質問掲示板側のみに適用される内容なので指摘ではないですが下記はあなたでしょうか?
https://oshiete.goo.ne.jp/qa/9963265.html
こちらも一部、実行順が異なっている部分があることはともかく、DOに対応するENDDOがないことなどもそうですがコメントや変数名など書き方が同じですよね?
最後に編集したユーザー 沖 滉均 on 2017年9月29日(金) 10:45 [ 編集 1 回目 ]

はっち
記事: 2
登録日時: 6年前

Re: weno法について

投稿記事 by はっち » 6年前

お二人ともご指摘ありがとうございます。
この掲示板不慣れなものでどこに投稿していいのかわかりませんでした。
次回からは質問掲示板に聞いてみます。

またおしえてGOOに投稿してあるのは私のです。
KSTEPは反復のものでして、ENDDOは記載しわすれていました。ご指摘ありがとうございます。