[14312] | 1 | Index: ../trunk-jpl/src/c/solvers/solver_newton.cpp
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/c/solvers/solver_newton.cpp (revision 14166)
|
---|
| 4 | +++ ../trunk-jpl/src/c/solvers/solver_newton.cpp (revision 14167)
|
---|
| 5 | @@ -55,12 +55,32 @@
|
---|
| 6 | xdelete(&old_uf);old_uf=uf;
|
---|
| 7 |
|
---|
| 8 | /*Solver forward model*/
|
---|
| 9 | - femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
|
---|
| 10 | + if(count==1){
|
---|
| 11 | + femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
|
---|
| 12 | + CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
|
---|
| 13 | + Reduceloadx(pf,Kfs,ys);xdelete(&Kfs);
|
---|
| 14 | + Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df);
|
---|
| 15 | + Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);
|
---|
| 16 | + InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);xdelete(&ug);
|
---|
| 17 | + xdelete(&old_ug);old_ug=ug;
|
---|
| 18 | + xdelete(&old_uf);old_uf=uf;
|
---|
| 19 | + }
|
---|
| 20 | + uf=old_uf->Duplicate(); old_uf->Copy(uf);
|
---|
| 21 | +
|
---|
| 22 | + /*Prepare next iteration using Newton's method*/
|
---|
| 23 | + femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);xdelete(&df);
|
---|
| 24 | CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
|
---|
| 25 | - Reduceloadx(pf,Kfs,ys);xdelete(&Kfs);
|
---|
| 26 | - Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df);
|
---|
| 27 | + Reduceloadx(pf,Kfs,ys); xdelete(&Kfs);
|
---|
| 28 | +
|
---|
| 29 | + pJf=pf->Duplicate();
|
---|
| 30 | + Kff->MatMult(uf,pJf);// xdelete(&Kff);
|
---|
| 31 | + pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); //xdelete(&pf);
|
---|
| 32 | +
|
---|
| 33 | + femmodel->CreateJacobianMatrixx(&Jff,kmax);
|
---|
| 34 | + Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf);
|
---|
| 35 | + uf->AXPY(duf, 1.0); xdelete(&duf);
|
---|
| 36 | Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);
|
---|
| 37 | - InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);xdelete(&ug);
|
---|
| 38 | + InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
|
---|
| 39 |
|
---|
| 40 | /*Check convergence*/
|
---|
| 41 | convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters);
|
---|
| 42 | @@ -81,20 +101,6 @@
|
---|
| 43 | break;
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | - /*Prepare next iteration using Newton's method*/
|
---|
| 47 | - femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
|
---|
| 48 | - CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
|
---|
| 49 | - Reduceloadx(pf,Kfs,ys); xdelete(&Kfs);
|
---|
| 50 | -
|
---|
| 51 | - pJf=pf->Duplicate(); Kff->MatMult(uf,pJf); xdelete(&Kff);
|
---|
| 52 | - pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); xdelete(&pf);
|
---|
| 53 | -
|
---|
| 54 | - femmodel->CreateJacobianMatrixx(&Jff,kmax);
|
---|
| 55 | - Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf);
|
---|
| 56 | - uf->AXPY(duf, 1.0); xdelete(&duf);
|
---|
| 57 | - Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);
|
---|
| 58 | - InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
|
---|
| 59 | -
|
---|
| 60 | count++;
|
---|
| 61 | }
|
---|
| 62 |
|
---|