推しミネラルウォーターはありますか?

const int N = 100;
const double q = 10.0, dt = 0.00001, Dm = 30.0, t0 = 2.0, K = 1.0, pi = 3.141592, f = 3.0;
double C[N], dC[N];
double dx = q/N;
for (int i = 0; i < N; ++i) C[i] = 0; // 初期条件
for (double t = 0; t < t0; t += dt) {
 C[0] = 0; // 境界条件1
 C[N - 1] = K*sin(2*pi*f*t); // 境界条件2
 for (int i = 1; i < N - 1; ++i) dC[i] = (Dm*(C[i + 1] - 2*C[i] + C[i - 1])/(dx*dx))*dt;
 for (int i = 1; i < N - 1; ++i) C[i] += dC[i];
}
for (int i = 0; i < N; ++i) cout << C[i] << endl; // t = t0
このプログラムをfortranに変換できる方いますか?

A 回答 (2件)

だいたい,このくらいです。


処理系によっては,配列の添字は1以上で,0はダメかもしれません。

INTEGER N,IT
DOUBLE Q,dt,DM,T0,K,PI,F,dx
DATA N/100/,Q/10/,dt/0.00001/,DM/30/,T0/2.0/,K/1.0/,pi/3.141592,/F/3.0/
DOUBLE C(100),DC(100)
dx=Q/N
* 初期条件
DO 10 I=1,N-1
C(I)=0
10 CONTINUE

DO 20 IT=1,T0/dt-1
t=IT*dt
C(0)=0
* 境界条件
C(N-1)=K*sin(2.0*pi*f*t)
* 境界条件2

DO 30 I=1,N-2
dC(I) = (Dm*(C(I + 1) - 2*C(I) + C(I - 1))/(dx*dx))*dt
30 CONTINUE

DO 40 I=1,N-2
C(I)=C(I)+ dC(I)
40 CONTINUE

20 CONTINUE

DO 60 I=0,N-1
write(*,*) C(I)
60 CONTINUE
* t=T0

この回答への補足

もう。。。なんて言ったらよいか。。。本当にありがとうございます。
これを基本ベースにして様々な応用をしていきたいと思います!!!

補足日時:2011/10/26 14:20
    • good
    • 0
この回答へのお礼

返信ありがとうございます!!!

お礼日時:2011/11/10 12:21

はい!(元気よく手を挙げる)

この回答への補足

申し訳ないのですが。。。お時間のある時にでもしていただきたいのですが。。。

プログラミング詳しいですね(>_<)

補足日時:2011/10/25 20:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報