Changeset 14416
- Timestamp:
- 02/28/13 10:08:32 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/solvers/solver_newton.cpp
r14415 r14416 15 15 /*intermediary: */ 16 16 bool converged; 17 int count ;17 int count,newton; 18 18 IssmDouble kmax; 19 19 Matrix<IssmDouble>* Kff = NULL; … … 37 37 femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum); 38 38 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 39 femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum); 39 40 femmodel->UpdateConstraintsx(); 40 41 … … 56 57 57 58 /*Solver forward model*/ 58 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL); 59 if(count==1 || newton==2){ 60 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL); 61 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 62 Reduceloadx(pf,Kfs,ys);xdelete(&Kfs); 63 Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df); 64 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys); 65 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);xdelete(&ug); 66 xdelete(&old_ug);old_ug=ug; 67 xdelete(&old_uf);old_uf=uf; 68 } 69 uf=old_uf->Duplicate(); old_uf->Copy(uf); 70 71 /*Prepare next iteration using Newton's method*/ 72 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);xdelete(&df); 59 73 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 60 74 Reduceloadx(pf,Kfs,ys);xdelete(&Kfs); 61 Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df); 75 76 pJf=pf->Duplicate(); 77 Kff->MatMult(uf,pJf);// xdelete(&Kff); 78 pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); //xdelete(&pf); 79 80 femmodel->CreateJacobianMatrixx(&Jff,kmax); 81 Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf); 82 uf->AXPY(duf, 1.0); xdelete(&duf); 62 83 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys); 63 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug); xdelete(&ug);84 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug); 64 85 65 86 /*Check convergence*/ … … 82 103 } 83 104 84 /*Prepare next iteration using Newton's method*/85 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);86 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);87 Reduceloadx(pf,Kfs,ys); xdelete(&Kfs);88 89 pJf=pf->Duplicate(); Kff->MatMult(uf,pJf); xdelete(&Kff);90 pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); xdelete(&pf);91 92 femmodel->CreateJacobianMatrixx(&Jff,kmax);93 Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf);94 uf->AXPY(duf, 1.0); xdelete(&duf);95 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);96 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);97 98 105 count++; 99 106 }
Note:
See TracChangeset
for help on using the changeset viewer.