Changeset 17553


Ignore:
Timestamp:
03/26/14 16:40:35 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: done with first version of XTH algorithm

Location:
issm/trunk-jpl/src
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r17548 r17553  
    29002900        IssmDouble *xyz_list = NULL;
    29012901
    2902         /*FIXME this should change*/
    2903         r = 1.;
    2904 
    29052902        /*Get problem dimension*/
    29062903        element->FindParam(&meshtype,MeshTypeEnum);
     2904        element->FindParam(&r,AugmentedLagrangianREnum);
    29072905        switch(meshtype){
    29082906                case Mesh2DverticalEnum: dim = 2; epssize = 3; break;
     
    32893287                ElementVector* petemp =new ElementVector(pe1,pe2,pe3);
    32903288                ElementVector* pe4=CreatePVectorFSViscousXTH(element);
    3291                 ElementVector* pe = new ElementVector(petemp,pe4);
     3289                pe = new ElementVector(petemp,pe4);
    32923290                delete pe1;
    32933291                delete pe2;
     
    34033401        }
    34043402
    3405         /*FIXME*/
    3406         r = 1.;
    3407 
    34083403        /*Fetch number of nodes and dof for this finite element*/
    34093404        int vnumnodes = element->NumberofNodesVelocity();
     
    34273422
    34283423        /*Retrieve all inputs and parameters*/
     3424        element->FindParam(&r,AugmentedLagrangianREnum);
    34293425        element->GetVerticesCoordinates(&xyz_list);
    34303426
     
    42604256        Gauss*      gauss = NULL;
    42614257
     4258        parameters->FindParam(&r,AugmentedLagrangianREnum);
    42624259        parameters->FindParam(&meshtype,MeshTypeEnum);
    42634260        switch(meshtype){
     
    42674264                default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet");
    42684265        }
    4269 
    4270         /*FIXME*/
    4271         r = 1.;
    42724266
    42734267        for(int i=0;i<elements->Size();i++){
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17535 r17553  
    624624        AbsoluteEnum,
    625625        IncrementalEnum,
     626        AugmentedLagrangianREnum,
    626627        /*}}}*/
    627628        /*Grounding Line{{{*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17535 r17553  
    603603                case AbsoluteEnum : return "Absolute";
    604604                case IncrementalEnum : return "Incremental";
     605                case AugmentedLagrangianREnum : return "AugmentedLagrangianR";
    605606                case AgressiveMigrationEnum : return "AgressiveMigration";
    606607                case NoneEnum : return "None";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17535 r17553  
    615615              else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
    616616              else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
     617              else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
    617618              else if (strcmp(name,"AgressiveMigration")==0) return AgressiveMigrationEnum;
    618619              else if (strcmp(name,"None")==0) return NoneEnum;
     
    628629              else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
    629630              else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
    630               else if (strcmp(name,"Colinear")==0) return ColinearEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
     634              if (strcmp(name,"Colinear")==0) return ColinearEnum;
     635              else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
    635636              else if (strcmp(name,"Fset")==0) return FsetEnum;
    636637              else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
  • issm/trunk-jpl/src/c/shared/Numerics/NewtonSolveDnorm.cpp

    r17546 r17553  
    11#include <math.h>
    22#include "./types.h"
     3#include "../Exceptions/exceptions.h"
    34
    45int NewtonSolveDnorm(IssmDouble* pdnorm,IssmDouble c1,IssmDouble c2,IssmDouble c3,IssmDouble n){
     
    1213         */
    1314
     15        /*trivial solution*/
     16        if(c3==0.){
     17                *pdnorm =0.;
     18                return 0;
     19        }
    1420
    1521        /*Intermediaries*/
     22        int        counter = 0;
    1623        IssmDouble s = (1.+n)/n;
    1724        IssmDouble y2;
     
    2431
    2532                /*Newton step*/
    26                 y2 = y1 - (c1*pow(pow(10.,y1),s-1.) + c2*pow(10.,y1) - c3)/((s-1)*c1*log(10)*pow(pow(10.,y1),s-1) + c2*log(10.)*pow(10.,y1));
     33                y2 = y1 - (c1*pow(pow(10.,y1),s-1.) + c2*pow(10.,y1) - c3)/((s-1)*c1*log(10)*pow(pow(10.,y1),s-1.) + c2*log(10.)*pow(10.,y1));
    2734
    28                 if( fabs(y2-y1)/fabs(y1)<threshold ){
     35                if( fabs(y2-y1)/(fabs(y2))<threshold ){
    2936                        break;
    3037                }
    3138                else{
    3239                        y1=y2;
     40                        counter++;
    3341                }
     42
     43                if(counter>50) _error_("Could not converge");
    3444        }
    3545
    3646        /*Assign output pointer*/
    3747        *pdnorm = pow(10.,y2);
     48        return 0;
    3849}
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_la_theta.cpp

    r17541 r17553  
    3030        analysis->InitializeXTH(femmodel->elements,femmodel->parameters);
    3131
    32         /*Solve KU=F*/
    33         SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
    34         CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
    35         Reduceloadx(pf, Kfs, ys); delete Kfs;
    36         Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters);
    37         delete Kff; delete pf; delete df;
    38         Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
     32        /*Convergence criterion*/
     33        int count = 0;
     34        femmodel->parameters->SetParam(10.,AugmentedLagrangianREnum);
    3935
    40         /*Update solution*/
    41         InputUpdateFromSolutionx(femmodel,ug);
     36        while(true){
    4237
    43         /*Update d and tau accordingly*/
    44         analysis->InputUpdateFromSolutionFSXTH(femmodel->elements,femmodel->parameters);
     38                /*Solve KU=F*/
     39                SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
     40                CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
     41                Reduceloadx(pf, Kfs, ys); delete Kfs;
     42                Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters);
     43                delete Kff; delete pf; delete df;
     44                Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
     45
     46                /*Update solution*/
     47                printf("ug norm = %g\n",ug->Norm(NORM_TWO));
     48                InputUpdateFromSolutionx(femmodel,ug);
     49
     50                /*Update d and tau accordingly*/
     51                analysis->InputUpdateFromSolutionFSXTH(femmodel->elements,femmodel->parameters);
     52
     53                count++;
     54                if(count>5) break;
     55        }
    4556
    4657        /*Check for convergence*/
    47         _error_("STOP");
     58        //_error_("STOP");
    4859
    4960        delete ug; 
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17535 r17553  
    595595def AbsoluteEnum(): return StringToEnum("Absolute")[0]
    596596def IncrementalEnum(): return StringToEnum("Incremental")[0]
     597def AugmentedLagrangianREnum(): return StringToEnum("AugmentedLagrangianR")[0]
    597598def AgressiveMigrationEnum(): return StringToEnum("AgressiveMigration")[0]
    598599def NoneEnum(): return StringToEnum("None")[0]
Note: See TracChangeset for help on using the changeset viewer.