非線形の問題に関連する問題について回答を得ようとして、あなたに連絡しています。
実際、方程式を線形化しようとしたので、c1 = c10 + dc1 を使用しました。ここで、c1 は変数、c10 は初期定数、dc1 は増分です。
対応するコードは次のとおりです。
//Initial value
dc=0;
//Problem
problem first(c1,c2) = int2d(Sh)(c2*dc1/dt) - int2d(Sh)(c2*dc/dt) + int2d(Sh)(R(dx(c1)dx(c2)+dy(c1)dy(c2))/(c10 + dc1)) + int2d(Sh)(ESN*(dx(c1)dx(c2)+dy(c1)dy(c2))c1) - int2d(Sh)(R(c10 + dc1)F/NDgrad(c2)‘grad(S)) - int2d(Sh)(ESFgrad(c2)’*grad(S)) + on(1,c1=C0) + on(2,c1=C0) + on(3,c1=C0) + on(4,c1=C0)
//Where dc is the incement at t-1
//and c2 is the test function added when the variational form, of the problem, was written.
problem second([Vx, Vy],[Ux, Uy]) = -int2d(Sh)(A*epsilon(Vx,Vy)'*epsilon(Ux,Uy)+C*div(Ux,Uy)*div(Vx,Vy)) + int2d(Sh)((B+A)*c1*X*div(Ux,Uy)) + on(1,Vx=0) + on(2,Vy=0)
// Where Vx, Vy are my variables and Ux, Uy are functions test (in the same way as previously).
増分 dc1 を決定するために、ループを使用しました。
second;
for (iter=1;iter< niter+1;iter=iter+1)
{
first;
dc1 = c1-c10;
second;
cout << "t = " << tt << "/"<< dt*niter <<" -> residu = " << residu << endl ;
// iteration //
tt=iter*dt;
dc=dc1 ;
};
コードをコンパイルすると、c1 の値は完全に正しくなく、急速に増加します。
誰かが私を助けることができますか?または、このコードに関するヒントを教えてください。
コードと、特に私が書かなければならなかったエラーを理解できるように、十分な情報を提供できたことを願っています。
前もって感謝します。