Changeset 7848


Ignore:
Timestamp:
04/12/11 11:03:35 (14 years ago)
Author:
Mathieu Morlighem
Message:

Added rhelogy law for B temperature dependence
NoneEnum -> B does not depend on T
PatersonEnm -> use Paterson's table (default)
ArrheniusEnum -> use Arrhenius law from EISMINT tests

Location:
issm/trunk/src
Files:
4 added
13 edited

Legend:

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

    r7746 r7848  
    431431        OptionDoubleEnum,
    432432        OptionLogicalEnum,
    433         OptionStructEnum
    434           /*}}}*/
     433        OptionStructEnum,
     434        /*}}}*/
     435        /*Rheology law (move too Material) {{{1*/
     436        RheologyLawEnum,
     437        PatersonEnum,
     438        ArrheniusEnum
     439        /*}}}*/
    435440};
    436441
  • issm/trunk/src/c/EnumDefinitions/EnumToString.cpp

    r7746 r7848  
    381381                case OptionLogicalEnum : return "OptionLogical";
    382382                case OptionStructEnum : return "OptionStruct";
     383                case RheologyLawEnum : return "RheologyLaw";
     384                case PatersonEnum : return "Paterson";
     385                case ArrheniusEnum : return "Arrhenius";
    383386                default : return "unknown";
    384387
  • issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp

    r7746 r7848  
    379379        else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
    380380        else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
     381        else if (strcmp(name,"RheologyLaw")==0) return RheologyLawEnum;
     382        else if (strcmp(name,"Paterson")==0) return PatersonEnum;
     383        else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
    381384        else _error_("Enum %s not found",name);
    382385
  • issm/trunk/src/c/Makefile.am

    r7739 r7848  
    327327                                        ./shared/Elements/elements.h\
    328328                                        ./shared/Elements/Paterson.cpp\
     329                                        ./shared/Elements/Arrhenius.cpp\
    329330                                        ./shared/Elements/GetVerticesCoordinates.cpp\
    330331                                        ./shared/Elements/GetLocalDofList.cpp\
     
    962963                                        ./shared/Elements/elements.h\
    963964                                        ./shared/Elements/Paterson.cpp\
     965                                        ./shared/Elements/Arrhenius.cpp\
    964966                                        ./shared/Elements/GetVerticesCoordinates.cpp\
    965967                                        ./shared/Elements/GetLocalDofList.cpp\
  • issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r7408 r7848  
    3636        parameters = new Parameters(ParametersEnum);
    3737
    38         parameters->AddObject(new    IntParam(SolutionTypeEnum,solution_type));
    39         parameters->AddObject(new    IntParam(AnalysisTypeEnum,analysis_type));
    40         parameters->AddObject(new    IntParam(AnalysisCounterEnum,analysis_counter));
    41         if (iomodel->dim==2) parameters->AddObject(new IntParam(DimEnum,2));
    42         else parameters->AddObject(new IntParam(DimEnum,3));
     38        parameters->AddObject(new IntParam(SolutionTypeEnum,solution_type));
     39        parameters->AddObject(new IntParam(AnalysisTypeEnum,analysis_type));
     40        parameters->AddObject(new IntParam(AnalysisCounterEnum,analysis_counter));
     41
     42        parameters->AddObject(new IntParam(DimEnum,iomodel->dim));
    4343        parameters->AddObject(new BoolParam(IsHutterEnum,iomodel->ishutter));
    4444        parameters->AddObject(new BoolParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
     
    7979        parameters->AddObject(new BoolParam(IoGatherEnum,iomodel->io_gather));
    8080        parameters->AddObject(new IntParam(GroundingLineMigrationEnum,iomodel->gl_migration));
     81        parameters->AddObject(new IntParam(RheologyLawEnum,iomodel->rheology_law));
    8182
    8283        /*Deal with more complex parameters*/
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r7421 r7848  
    50955095
    50965096        bool   converged;
    5097         int    i;
     5097        int    i,rheology_law;
     5098        double xyz_list[NUMVERTICES][3];
    50985099        double values[numdof];
    50995100        double B[numdof];
    5100         double B_average;
     5101        double B_average,s_average;
    51015102        int*   doflist=NULL;
    51025103
     
    51145115        }
    51155116
     5117        /*Get all inputs and parameters*/
     5118        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     5119        Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
     5120
    51165121        this->inputs->GetParameterValue(&converged,ConvergedEnum);
    51175122        if(converged){
    51185123                this->inputs->AddInput(new PentaVertexInput(TemperatureEnum,values));
    51195124
    5120                 /*Update Rheology only if convreged (we must make sure that the temperature is below melting point
     5125                /*Update Rheology only if converged (we must make sure that the temperature is below melting point
    51215126                 * otherwise the rheology could be negative*/
    5122                 B_average=Paterson((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0);
    5123                 for(i=0;i<numdof;i++) B[i]=B_average;
    5124                 this->matice->inputs->AddInput(new PentaVertexInput(RheologyBEnum,B));
     5127                this->parameters->FindParam(&rheology_law,RheologyLawEnum);
     5128                switch(rheology_law){
     5129                        case NoneEnum:
     5130                                /*Do nothing: B is not temperature dependent*/
     5131                                break;
     5132                        case PatersonEnum:
     5133                                B_average=Paterson((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0);
     5134                                for(i=0;i<numdof;i++) B[i]=B_average;
     5135                                this->matice->inputs->AddInput(new PentaVertexInput(RheologyBEnum,B));
     5136                                break;
     5137                        case ArrheniusEnum:
     5138                                surface_input->GetParameterAverage(&s_average);
     5139                                B_average=Arrhenius((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0,
     5140                                                        s_average-((xyz_list[0][2]+xyz_list[1][2]+xyz_list[2][2]+xyz_list[3][2]+xyz_list[4][2]+xyz_list[5][2])/6.0),
     5141                                                        matice->GetN());
     5142                                for(i=0;i<numdof;i++) B[i]=B_average;
     5143                                _error_("Not supported yet (See Rutt2009 for example)");
     5144                                break;
     5145                        default:
     5146                                _error_("Rheology law %s not supported yet",EnumToString(rheology_law));
     5147
     5148                }
    51255149        }
    51265150        else{
  • issm/trunk/src/c/objects/IoModel.cpp

    r7674 r7848  
    214214        IoModelFetchData(&this->melting_rate_correction_apply,iomodel_handle,"melting_rate_correction_apply");
    215215        IoModelFetchData(&this->gl_melting_rate,iomodel_handle,"gl_melting_rate");
     216        IoModelFetchData(&this->rheology_law,iomodel_handle,"rheology_law");
    216217       
    217218        /*qmu: */
     
    225226                IoModelFetchData(&this->qmu_save_femmodel,iomodel_handle,"qmu_save_femmodel");
    226227        }
    227 
    228228
    229229        /*i/o: */
     
    321321        this->rheology_n=NULL;
    322322        this->rheology_B=NULL;
     323        this->rheology_law=0;
    323324
    324325        /*!solution parameters: */
  • issm/trunk/src/c/objects/IoModel.h

    r7674 r7848  
    113113                double* rheology_B;
    114114                double* rheology_n;
     115                int     rheology_law;
    115116
    116117                /*numerical parameters: */
  • issm/trunk/src/c/shared/Elements/elements.h

    r5989 r7848  
    1212
    1313double Paterson(double temperature);
     14double Arrhenius(double temperature,double depth,double n);
    1415int    GetVerticesCoordinates(double* xyz,  Node** nodes, int numvertices);
    1516int    GetNumberOfDofs( Node** nodes,int numnodes,int setenum,int approximation_enum);
  • issm/trunk/src/m/classes/model.m

    r7676 r7848  
    139139                 rheology_B=NaN;
    140140                 rheology_n=NaN;
     141                 rheology_law=0;
    141142
    142143                 %Geometrical parameters
     
    732733                         md.hydro_kn=0;
    733734
     735                         %Rheology law: what is the temperature dependence of B with T
     736                         %available: None, Paterson and Arrhenius
     737                         md.rheology_law=PatersonEnum;
    734738
    735739                         %i/o:
  • issm/trunk/src/m/enum/EnumToString.m

    r7748 r7848  
    376376case OptionLogicalEnum(), string='OptionLogical'; return
    377377case OptionStructEnum(), string='OptionStruct'; return
     378case RheologyLawEnum(), string='RheologyLaw'; return
     379case PatersonEnum(), string='Paterson'; return
     380case ArrheniusEnum(), string='Arrhenius'; return
    378381otherwise, error(['Enum ' num2str(enum)  ' not found']);
    379382
  • issm/trunk/src/m/enum/StringToEnum.m

    r7748 r7848  
    374374                        elseif (strcmpi(name,'OptionLogical')), enum=OptionLogicalEnum(); return
    375375                        elseif (strcmpi(name,'OptionStruct')), enum=OptionStructEnum(); return
     376                        elseif (strcmpi(name,'RheologyLaw')), enum=RheologyLawEnum(); return
     377                        elseif (strcmpi(name,'Paterson')), enum=PatersonEnum(); return
     378                        elseif (strcmpi(name,'Arrhenius')), enum=ArrheniusEnum(); return
    376379else error(['Enum ' name  ' not found']);
    377380
  • issm/trunk/src/m/model/marshall.m

    r7674 r7848  
    104104WriteData(fid,md.rheology_B,'Mat','rheology_B');
    105105WriteData(fid,md.rheology_n,'Mat','rheology_n');
     106WriteData(fid,md.rheology_law,'Integer','rheology_law');
    106107
    107108%Control methods
Note: See TracChangeset for help on using the changeset viewer.