Changeset 9013


Ignore:
Timestamp:
07/16/11 01:38:53 (14 years ago)
Author:
Eric.Larour
Message:

Added MaxSteadystateIterations, to control steady state a little bit better.

Location:
issm/trunk/src
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r9002 r9013  
    541541        NpartEnum,
    542542        QmuMassFluxNumProfilesEnum,
    543         PartEnum
     543        PartEnum,
     544        MaxSteadystateIterationsEnum
    544545};
    545546
  • issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r9002 r9013  
    483483                case QmuMassFluxNumProfilesEnum : return "QmuMassFluxNumProfiles";
    484484                case PartEnum : return "Part";
     485                case MaxSteadystateIterationsEnum : return "MaxSteadystateIterations";
    485486                default : return "unknown";
    486487
  • issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r9002 r9013  
    3939        parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
    4040        parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,(IssmInt)iomodel->max_nonlinear_iterations));
     41        parameters->AddObject(new IntParam(MaxSteadystateIterationsEnum,(IssmInt)iomodel->max_steadystate_iterations));
    4142        parameters->AddObject(new DoubleParam(EpsvelEnum,iomodel->epsvel));
    4243        parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
  • issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r9002 r9013  
    481481        else if (strcmp(name,"QmuMassFluxNumProfiles")==0) return QmuMassFluxNumProfilesEnum;
    482482        else if (strcmp(name,"Part")==0) return PartEnum;
     483        else if (strcmp(name,"MaxSteadystateIterations")==0) return MaxSteadystateIterationsEnum;
    483484        else _error_("Enum %s not found",name);
    484485
  • issm/trunk/src/c/objects/IoModel.cpp

    r8936 r9013  
    185185        IoModelFetchData(&this->eps_abs,iomodel_handle,EpsAbsEnum);
    186186        IoModelFetchData(&this->max_nonlinear_iterations,iomodel_handle,MaxNonlinearIterationsEnum);
     187        IoModelFetchData(&this->max_steadystate_iterations,iomodel_handle,MaxSteadystateIterationsEnum);
    187188        IoModelFetchData(&this->dt,iomodel_handle,DtEnum);
    188189        IoModelFetchData(&this->ndt,iomodel_handle,NdtEnum);
     
    355356        this->eps_abs=0;
    356357        this->max_nonlinear_iterations=0;
     358        this->max_steadystate_iterations=0;
    357359        this->dt=0;
    358360        this->ndt=0;
  • issm/trunk/src/c/objects/IoModel.h

    r8936 r9013  
    150150                double  eps_abs;
    151151                double  max_nonlinear_iterations;
     152                double  max_steadystate_iterations;
    152153                double  dt,ndt;
    153154                int     time_adapt;
  • issm/trunk/src/c/solutions/steadystate_core.cpp

    r9010 r9013  
    2020        int dim;
    2121        int solution_type;
    22         int max_its;
     22        int max_steadystate_iterations;
    2323        bool control_analysis;
    2424       
     
    2727        femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
    2828        femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
    29         femmodel->parameters->FindParam(&max_its,MaxNonlinearIterationsEnum);
     29        femmodel->parameters->FindParam(&max_steadystate_iterations,MaxSteadystateIterationsEnum);
    3030
    3131        /*intialize counters: */
     
    4444                        if(steadystateconvergence(femmodel)) break;
    4545                }
    46                 if(step>max_its){
    47                         _printf_(VerboseSolution(),"%s%i%s\n","   maximum number of iterations ",max_its," reached");
     46                if(step>max_steadystate_iterations){
     47                        _printf_(VerboseSolution(),"%s%i%s\n","   maximum number steadystate iterations ",max_steadystate_iterations," reached");
    4848                        break;
    4949                }
  • issm/trunk/src/m/classes/model.m

    r8987 r9013  
    193193                 eps_abs                  = {0,true,'Double'};
    194194                 max_nonlinear_iterations = {0,true,'Double'};
     195                 max_steadystate_iterations = {0,true,'Double'};
    195196                 sparsity                 = {0,true,'Double'};
    196197                 connectivity             = {0,true,'Integer'};
     
    660661                         %maximum of non-linear iterations.
    661662                         md.max_nonlinear_iterations=100;
     663                         
     664                         %maximum of steady state iterations
     665                         md.max_steadystate_iterations=100;
    662666
    663667                         %sparsity
  • issm/trunk/src/m/model/extrude.m

    r9002 r9013  
    224224md.surface=project3d(md,'vector',md.surface,'type','node');
    225225md.thickness=project3d(md,'vector',md.thickness,'type','node');
     226md.thickness_coeff=project3d(md,'vector',md.thickness_coeff,'type','node');
    226227md.bed=project3d(md,'vector',md.bed,'type','node');
    227228md.nodeonboundary=project3d(md,'vector',md.nodeonboundary,'type','node');
  • issm/trunk/src/m/model/partition/AreaAverageOntoPartition.m

    r5241 r9013  
    1 function partvector=AreaAverageOntoPartition(md,vector)
     1function partvector=AreaAverageOntoPartition(md,vector,layer)
    22%AREAAVERAGEONTOPARTITION  compute partition values for a certain vector expressed on the vertices of the mesh. Use area weighted average.
    33%
    44%   Usage: average=AreaAverageOntoPartition(md,vector)
     5%           average=AreaAverageOntoPartition(md,vector,layer) %if in 3D, chose which layer is partitioned
    56%
    67
    7 %ok, first check that part is Matlab matlab indexed
     8%some checks
     9if md.dim==3,
     10        if nargin~=3,
     11                error('layer should be provided onto which Area Averaging occurs');
     12        end
     13        %save 3D model
     14        md3d=md;
     15       
     16        md.elements=md.elements2d;
     17        md.x=md.x2d;
     18        md.y=md.y2d;
     19        md.numberofnodes=md.numberofnodes2d;
     20        md.numberofelements=md.numberofelements2d;
     21        md.vwgt=[];
     22        md.nodeconnectivity=[];
     23
     24        %run connectivity routine
     25        md=adjacency(md);
     26
     27        %finally, project vector:
     28        vector=project2d(md3d,vector,layer);
     29        md.part=project2d(md3d,md3d.part,layer);
     30end
     31
     32%ok, first check that part is Matlab indexed
    833part=md.part+1;
     34
     35%some check:
     36if md.npart~=max(part),
     37        error('AreaAverageOntoPartition error message: ''npart'' should be equal to max(md.part)');
     38end
    939
    1040%initialize output
     
    1747        partvector(i)=sum(weightedvector(pos))/sum(md.vwgt(pos));
    1848end
     49
     50%in 3D, restore 3D model:
     51if md.dim==3,
     52        md=md3d;
     53end
  • issm/trunk/src/m/model/partition/partitioner.m

    r8298 r9013  
    3030npart=getfieldvalue(options,'npart');
    3131recomputeadjacency=getfieldvalue(options,'recomputeadjacency');
     32
     33if(md.dim==3),
     34        %partitioning essentially happens in 2D. So partition in 2D, then
     35        %extrude the partition vector vertically.
     36        md3d=md; %save  for later
     37        md.elements=md.elements2d;
     38        md.x=md.x2d;
     39        md.y=md.y2d;
     40        md.numberofnodes=md.numberofnodes2d;
     41        md.numberofelements=md.numberofelements2d;
     42        md.vwgt=[];
     43        md.nodeconnectivity=[];
     44end
    3245
    3346%adjacency matrix if needed:
     
    87100end
    88101
     102%extrude if we are in 3D:
     103if md.dim==3,
     104        md=md3d;
     105        part=project3d(md,'vector',part','type','node');
     106end
     107
    89108md.part=part;
  • issm/trunk/src/m/model/tres.m

    r8430 r9013  
    8585        md.temperature=PatchToVec(md.results.SteadystateSolution.Temperature);
    8686        md.basal_melting_rate=PatchToVec(md.results.SteadystateSolution.BasalMeltingRate);
    87        
     87
    8888        if md.control_analysis==1,
    89                 if control_type==md.control_type
    90                         md.(EnumToModelField(control_type))=PatchToVec(md.results.DiagnosticSolution.(EnumToString(control_type)));
     89                for control_type=md.control_type
     90                        md.(EnumToModelField(control_type))=PatchToVec(md.results.SteadystateSolution.(EnumToString(control_type)));
    9191                end
    9292        end
Note: See TracChangeset for help on using the changeset viewer.