ここに投稿するのはこれが初めてです。私の経験不足を許してください。私はただ学んでいます。
GSL ルート検索メソッドを実装しようとしていますが、依存変数とパラメーターの構造体を関数に渡す必要があります。
関数に渡されるパラメーター構造体は次のとおりです (.h ファイルにあります)。
struct SumForces_params
{
double curvature;
struct panel panels[1000];
int lenPanels;
};
ここで、パラメーターのインスタンスを定義します。
struct SumForces_params params = {0.0000001, {panels[1000]}, lenPanels};
関数は次のとおりです。
double SumForces(double NAloc, void *params)
{
struct SumForces_params *p = (struct SumForces_params *) params;
double curvature = p->curvature; //works fine
int lenPanels = p->lenPanels; //works fine
struct panel panels = p->panels[1000];
//~ printf("panel 421 location = %g\n", panels[421].Yloc);
//~ Above line gives this error: SumForces.c:54: error: subscripted value is neither
//~ array nor pointer
double yloc = 0;
yloc = p->panels[421].Yloc;
printf("panel 421 location = %g\n", yloc);
}
主に、これにより期待される出力が得られます。
printf("Main Panel 421 loc = %g\n",panels[421].Yloc);
しかし、関数コードからわかるように、struct panel panels = p->panels[1000]; は機能せず、2 回目の試行 (最後の 3 行) からの出力はゼロを返します。誰かが私が間違っていることを見ていますか?
構造体パネルの私の定義は次のとおりです。
struct panel
{
double strain[136];
double stress[136];
double AE[136];
double Ys;
double E;
double Yloc;
double Area;
gsl_interp_accel *acc_stress;
gsl_spline *spline_stress;
gsl_interp_accel *acc_AE;
gsl_spline *spline_AE;
};
ここでは、パネルを 1000 個のパネル構造の配列として定義しています。
struct panel panels[1000];