現在オープンソースの「Code Saturne」というものを利用しています。その中でC言語で書かれた関数を理解する必要があるの、C言語の勉強を始めたばかりです。一通り基礎を通してやったのですが、これまでpythonなどを軽く触っただけの経験しかなく、いざコードのポインタや構造体などを見ると頭が混乱してしまいます。本来ここはコードの修正点などを教えてもらう場所なことはわかっていますが、教えていただければ幸いです。
いろいろと定義に関しては下記のリンク先の右上の「search」に入力すれば定義のページに飛びます。
リンク:Code Saturne
void cs_user_initialization(cs_domain_t *domain) { cs_field_t *vel = cs_field_by_name("velocity"); cs_field_t *vel_m = cs_field_by_name("meanVel"); for (cs_lnum_t i = 0; i < cs_glob_mesh->n_cells; i++) { vel->val[i] = 1e5; } }
上記のコードの理解にお手伝いいただければと思います。
例えば
void cs_user_initialization(cs_domain_t *domain)
に関しては単に引数に構造体名「domain」のポインタを渡すという風に定義されていると考えるだけでよいですか?cs_user_initializationという関数は自分で定義したものではないです。これは場の初期化に使用するときに使う関数なのですが、引数で受け取ったポインタ値はそれより下のコード内で利用されていないと思うのですが、なぜそのようにポインタ値を引数で渡すようにしたのでしょうか。答えは結局人によるということになるのでしょうか。
また、
cs_field_t *vel = cs_field_by_name("velocity");
は「cs_field_by_name("velocity")」という関数みたいなもの?で「cs_field_t *vel」にポインタ値を格納しているだけだとは思いますが、正しいでしょうか?
cs_lnum_t i = 0; i < cs_glob_mesh->n_cells; i++
は「cs_lnum_t」型の変数「i」が、「cs_glob_mesh」という構造体の中の「n_cells」というメンバーの数以下になるまでiをつずつ増やしていくという理解で正しいでしょうか?「cs_glob_mesh->n_cells」とある場合は「cs_glob_mesh」は構造体、「n_cells」は構造体のメンバーという理解で正しいですか?
最後に
vel->val[i]
ですが、「vel」は構造体または配列で、その中のメンバーである「val」の「i」番目に右辺の値を格納しているということでしょうか。valを上記リンクで調べてみると「For each active location, pointer to matching values array」とあるのですが、結局「val」は「vel」という構造体の中の「val」という名前のメンバーでそれ自身は配列という理解で正しいでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 17:16
2021/09/03 17:41 編集
2021/09/03 18:06
2021/09/03 19:06
2021/09/03 20:38 編集
2021/09/03 20:44
2021/09/03 20:51
2021/09/04 03:04 編集