今現在移流項を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
weno法について
Re: weno法について
- ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。 - 特に書きたくない理由がなければ、質問は日記ではなく質問掲示板に投稿したほうがいいかもしれません。
- 提示されたソースコード(?)は大文字が多い上、短くて意味がわかりにくい変数がほとんどなので、わかりにくく感じます。
以下の情報を提示するとわかりやすくなるでしょう。- 使用している(プログラミング)言語の名前
- 入出力例
- (「weno法」の簡単な説明や参考リンク)
- 自分でテストを行うことで、あっているかはわからなくても、間違っているといえるかどうかはわかるでしょう。
Re: weno法について
構文とPARAMETER文からFORTRAN 77ですかね…
下記に、空白を調整してコードを書き出してみたものの16行目に対応するENDDOがないですし、KTをどこかで使用している形跡もないですね
とりあえず、WENO法が何をやっているものなのかわかりかねますので現状はこれ以上は答えかねますが、質問は質問掲示板側で聞いたほうが答えが返ってくるかもしれませんよ
ところで下記は質問掲示板側のみに適用される内容なので指摘ではないですが下記はあなたでしょうか?
https://oshiete.goo.ne.jp/qa/9963265.html
こちらも一部、実行順が異なっている部分があることはともかく、DOに対応するENDDOがないことなどもそうですがコメントや変数名など書き方が同じですよね?
下記に、空白を調整してコードを書き出してみたものの16行目に対応するENDDOがないですし、KTをどこかで使用している形跡もないですね
とりあえず、WENO法が何をやっているものなのかわかりかねますので現状はこれ以上は答えかねますが、質問は質問掲示板側で聞いたほうが答えが返ってくるかもしれませんよ
オフトピック
もっとも、FORTRAN 77を今聞いてどれだけ分かる人がいるのか謎ですが…
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 回目 ]
Re: weno法について
お二人ともご指摘ありがとうございます。
この掲示板不慣れなものでどこに投稿していいのかわかりませんでした。
次回からは質問掲示板に聞いてみます。
またおしえてGOOに投稿してあるのは私のです。
KSTEPは反復のものでして、ENDDOは記載しわすれていました。ご指摘ありがとうございます。
。
この掲示板不慣れなものでどこに投稿していいのかわかりませんでした。
次回からは質問掲示板に聞いてみます。
またおしえてGOOに投稿してあるのは私のです。
KSTEPは反復のものでして、ENDDOは記載しわすれていました。ご指摘ありがとうございます。
。