Changeset 14415
- Timestamp:
- 02/28/13 08:59:05 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/solvers/solver_newton.cpp
r14414 r14415 15 15 /*intermediary: */ 16 16 bool converged; 17 int count ,newton;17 int count; 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);40 39 femmodel->UpdateConstraintsx(); 41 40 … … 57 56 58 57 /*Solver forward model*/ 59 if(count==1){ 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); 58 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL); 73 59 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 74 Reduceloadx(pf,Kfs,ys); xdelete(&Kfs); 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); 60 Reduceloadx(pf,Kfs,ys);xdelete(&Kfs); 61 Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df); 83 62 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys); 84 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug); 63 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);xdelete(&ug); 85 64 86 65 /*Check convergence*/ … … 103 82 } 104 83 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 105 98 count++; 106 99 }
Note:
See TracChangeset
for help on using the changeset viewer.