Changeset 14167


Ignore:
Timestamp:
12/14/12 11:15:55 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: fixed newton iteration solver (only one iteration needed)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/solvers/solver_newton.cpp

    r13940 r14167  
    5656
    5757                /*Solver forward model*/
    58                 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
     58                if(count==1){
     59                        femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
     60                        CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
     61                        Reduceloadx(pf,Kfs,ys);xdelete(&Kfs);
     62                        Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df);
     63                        Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);
     64                        InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);xdelete(&ug);
     65                        xdelete(&old_ug);old_ug=ug;
     66                        xdelete(&old_uf);old_uf=uf;
     67                }
     68                uf=old_uf->Duplicate(); old_uf->Copy(uf);
     69
     70                /*Prepare next iteration using Newton's method*/
     71                femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);xdelete(&df);
    5972                CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
    60                 Reduceloadx(pf,Kfs,ys);xdelete(&Kfs);
    61                 Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df);
     73                Reduceloadx(pf,Kfs,ys);   xdelete(&Kfs);
     74
     75                pJf=pf->Duplicate();
     76                Kff->MatMult(uf,pJf);// xdelete(&Kff);
     77                pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);     //xdelete(&pf);
     78
     79                femmodel->CreateJacobianMatrixx(&Jff,kmax);
     80                Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf);
     81                uf->AXPY(duf, 1.0); xdelete(&duf);
    6282                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);
     83                InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
    6484
    6585                /*Check convergence*/
     
    82102                }
    83103
    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 
    98104                count++;
    99105        }
Note: See TracChangeset for help on using the changeset viewer.