非定常熱伝導の計算のプログラムを作ったんですけど、エラーは出ないのに、結果が出ません。
何が問題なのでしょうか?
include <stdlib.h>
// パラメータ設定
#define Nx 50 // x方向のグリッド数
#define Ny 50 // y方向のグリッド数
#define Nz 50 // z方向のグリッド数
#define Lx 1.0 // x方向の領域の長さ
#define Ly 1.0 // y方向の領域の長さ
#define Lz 1.0 // z方向の領域の長さ
#define dx (Lx / (Nx - 1)) // x方向のグリッド間隔
#define dy (Ly / (Ny - 1)) // y方向のグリッド間隔
#define dz (Lz / (Nz - 1)) // z方向のグリッド間隔
// 時間のパラメータ
#define dt 0.01 // 時間ステップ
#define totalTime 1.0 // 総シミュレーション時間
#define numTimeSteps ((int)(totalTime / dt)) // 時間ステップ数
// 熱拡散率の定義
#define alpha 0.1
// 初期条件: T(x, y, z, t=0)
double initialTemperature(int i, int j, int k) {
// 例として中心に熱スポットを置く初期条件
double x = i * dx - Lx / 2.0;
double y = j * dy - Ly / 2.0;
double z = k * dz - Lz / 2.0;
double distanceSquared = x*x + y*y + z*z;
return distanceSquared < 0.1 ? 1.0 : 0.0;
}
int main() {
// 温度の配列を初期化
double T[Nx][Ny][Nz];
// 初期条件を設定
for (int i = 0; i < Nx; ++i) {
for (int j = 0; j < Ny; ++j) {
for (int k = 0; k < Nz; ++k) {
T[i][j][k] = initialTemperature(i, j, k);
}
}
}
// 明示的なオイラー法を使用して時間積分する
for (int t = 0; t < numTimeSteps; ++t) {
// 新しい温度を格納するための一時的な配列を作成
double T_new[Nx][Ny][Nz];
// 明示的なスキームを使用して新しい温度を計算する
for (int i = 1; i < Nx - 1; ++i) {
for (int j = 1; j < Ny - 1; ++j) {
for (int k = 1; k < Nz - 1; ++k) {
T_new[i][j][k] = T[i][j][k] + alpha * dt * (
(T[i+1][j][k] - 2*T[i][j][k] + T[i-1][j][k]) / (dx*dx) +
(T[i][j+1][k] - 2*T[i][j][k] + T[i][j-1][k]) / (dy*dy) +
(T[i][j][k+1] - 2*T[i][j][k] + T[i][j][k-1]) / (dz*dz)
);
}
}
}
// 次の時間ステップのために T を T_new に更新する
for (int i = 0; i < Nx; ++i) {
for (int j = 0; j < Ny; ++j) {
for (int k = 0; k < Nz; ++k) {
T[i][j][k] = T_new[i][j][k];
}
}
}
}
// 最終的な温度分布を出力する(例として、中間の平面を出力)
int midIndex = Nx / 2; // 中間平面のインデックス
for (int j = 0; j < Ny; ++j) {
for (int k = 0; k < Nz; ++k) {
printf("%.2f ", T[midIndex][j][k]);
}
printf("\n");
}
return 0;
}
- 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
- 今の自分の気分スタンプを選ぼう!
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
結果が出ないといったら、結果が出力されていない、つまり、printf()が動作していない、呼ばれていない、という意味にも取れます
技術系の質問をするのであれば、その辺りには気をつけた方が良いとおもいます
ざっとみた感じ、initialTemperature()の、戻り値が、全て1.0(全てが中心点になっている?全体が全て同じ温度?)であれば、下記計算部分で、x,y,zが、int に丸められて、計算結果が、0になって、それが、0.0にキャストされているかもしれません
double x = i * dx - Lx / 2.0;
double y = j * dy - Ly / 2.0;
double z = k * dz - Lz / 2.0;
x, y, z をprintf()で、確認し、常に0.0になっていれば、i, j, k、を(double)でキャストしてから、計算すべきでしょう
No.1
- 回答日時:
プログラムは「思ったとおりには動かず、作った通りに動く」ものです。
当方は非定常熱伝導の計算を知りませんし具体的に現状どのような結果が出力されているのかわかりませんが、要所要所に変数の内容をプリントするprint文を入れてデバッグされてみてはいかがでしょう。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
Linux Cプログラミングを学ぶための書籍
C言語・C++・C#
-
mallocについて
C言語・C++・C#
-
-
4
だれがとけるの?
C言語・C++・C#
-
5
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
6
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
7
C#でログファイルにファイルパスが出ないようにしたい
C言語・C++・C#
-
8
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
9
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
10
右ビットシフト
C言語・C++・C#
-
11
なんで
C言語・C++・C#
-
12
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
13
プログラミング
Visual Basic(VBA)
-
14
プログラム言語について プログラム言語c c++ java iPhone用言語だけ使ったら性能軽さな
C言語・C++・C#
-
15
プログラマーです。このDB設計だと絶対後々面倒なことになるぞ...! って思った時ってどうしたらいい
C言語・C++・C#
-
16
C言語 バッファについて。
C言語・C++・C#
-
17
C言語について。
C言語・C++・C#
-
18
C言語 解答について。
C言語・C++・C#
-
19
C言語について
C言語・C++・C#
-
20
c言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
c言語
-
複数桁10進数の*桁目だけを抽出...
-
C言語での奇数の和
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
c言語のリダイレクトによる円...
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
比較回数と交換回数表示について
-
C言語
-
課題でつまってます・・・
-
数字列を3桁ごとにカンマで区切...
-
if と配列の組み合わせ
-
acceptをalarmでタイムアウトさ...
-
市松模様
-
「{ } で囲むだけ」は正しい?
-
実数の整数部,小数部の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
課題でつまってます・・・
-
c言語の配列を使ってサイコロを...
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報