Changeset 21382


Ignore:
Timestamp:
11/16/16 19:51:51 (8 years ago)
Author:
felicity
Message:

NEW: ESTAR thermal model capability

Location:
issm/trunk-jpl/src/c/analyses
Files:
2 edited

Legend:

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

    r21377 r21382  
    108108
    109109        bool dakota_analysis,ismovingfront,isenthalpy;
    110         int frictionlaw,basalforcing_model;
     110        int frictionlaw,basalforcing_model,materialstype;
    111111        int FrictionCoupling;
    112112       
     
    134134        iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
    135135        iomodel->FindConstant(&frictionlaw,"md.friction.law");
     136        iomodel->FindConstant(&materialstype,"md.materials.type");
    136137
    137138        iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
     
    145146                iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
    146147        }
    147         iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
    148         iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
    149148        iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
    150149        iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
     
    171170                        iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
    172171                        break;
     172        }
     173
     174        /*Rheology type*/
     175        iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
     176        switch(materialstype){
     177                case MatdamageiceEnum:
     178                        iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
     179                        break;
     180                case MatestarEnum:
     181                        iomodel->FetchDataToInput(elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
     182                        iomodel->FetchDataToInput(elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
     183                        break;
     184                case MaticeEnum:
     185                        iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
     186                        break;
     187                default:
     188                        _error_("not supported");
    173189        }
    174190       
     
    589605                }
    590606
    591                 /*Artifficial diffusivity*/
     607                /*Artificial diffusivity*/
    592608                if(stabilization==1){
    593609                        element->ElementSizes(&hx,&hy,&hz);
     
    14521468        int         i,rheology_law;
    14531469        IssmDouble  B_average,s_average,T_average=0.,P_average=0.;
     1470        IssmDouble  n=3.0;
    14541471        int        *doflist   = NULL;
    14551472        IssmDouble *xyz_list  = NULL;
     
    14771494
    14781495        /*Get all inputs and parameters*/
     1496        if(element->material->ObjectEnum()!=MatestarEnum) n=element->GetMaterialParameter(MaterialsRheologyNEnum);
    14791497        element->GetInputValue(&converged,ConvergedEnum);
    14801498        element->GetInputListOnNodes(&pressure[0],PressureEnum);
     
    15061524                                break;
    15071525                        case CuffeyTemperateEnum:
    1508                                 for(i=0;i<numnodes;i++) B[i]=CuffeyTemperate(temperature[i], waterfraction[i], element->GetMaterialParameter(MaterialsRheologyNEnum));
     1526                                for(i=0;i<numnodes;i++) B[i]=CuffeyTemperate(temperature[i], waterfraction[i],n);
    15091527                                element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
    15101528                                break;
     
    15151533                        case ArrheniusEnum:
    15161534                                element->GetVerticesCoordinates(&xyz_list);
    1517                                 for(i=0;i<numnodes;i++) B[i]=Arrhenius(temperature[i],surface[i]-xyz_list[i*3+2],element->GetMaterialParameter(MaterialsRheologyNEnum));
     1535                                for(i=0;i<numnodes;i++) B[i]=Arrhenius(temperature[i],surface[i]-xyz_list[i*3+2],n);
    15181536                                element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
    15191537                                break;
    15201538                        case LliboutryDuvalEnum:
    1521                                 for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],element->GetMaterialParameter(MaterialsRheologyNEnum),element->GetMaterialParameter(MaterialsBetaEnum),element->GetMaterialParameter(ConstantsReferencetemperatureEnum),element->GetMaterialParameter(MaterialsHeatcapacityEnum),element->GetMaterialParameter(MaterialsLatentheatEnum));
     1539                                for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n,element->GetMaterialParameter(MaterialsBetaEnum),element->GetMaterialParameter(ConstantsReferencetemperatureEnum),element->GetMaterialParameter(MaterialsHeatcapacityEnum),element->GetMaterialParameter(MaterialsLatentheatEnum));
    15221540                                element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
    15231541                                break;
  • issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r21377 r21382  
    7373void ThermalAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
    7474
    75         int frictionlaw,basalforcing_model;
     75        int frictionlaw,basalforcing_model,materialstype;
    7676        int FrictionCoupling;
    7777        /*Now, is the model 3d? otherwise, do nothing: */
     
    9393        iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
    9494        iomodel->FindConstant(&frictionlaw,"md.friction.law");
     95        iomodel->FindConstant(&materialstype,"md.materials.type");
    9596
    9697        iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
     
    106107        iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
    107108        iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
    108         iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
    109         iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
    110109        iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
    111110        iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
     
    116115        InputUpdateFromConstantx(elements,0.,VyMeshEnum);
    117116        InputUpdateFromConstantx(elements,0.,VzMeshEnum);
     117
     118        /*Rheology type*/
     119        iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
     120        switch(materialstype){
     121                case MatdamageiceEnum:
     122                        iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
     123                        break;
     124                case MatestarEnum:
     125                        iomodel->FetchDataToInput(elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
     126                        iomodel->FetchDataToInput(elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
     127                        break;
     128                case MaticeEnum:
     129                        iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
     130                        break;
     131                default:
     132                        _error_("not supported");
     133        }
    118134        if(ismovingfront){
    119135                iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
     
    722738        int        *doflist   = NULL;
    723739        IssmDouble *xyz_list  = NULL;
     740        IssmDouble  n=3.0;
    724741        bool        hack      = false;
    725742
     
    756773
    757774        /*Get all inputs and parameters*/
     775        if(element->material->ObjectEnum()!=MatestarEnum) n=element->GetMaterialParameter(MaterialsRheologyNEnum);
    758776        element->GetInputValue(&converged,ConvergedEnum);
    759777        if(converged){
     
    782800                        case ArrheniusEnum:{
    783801                                element->GetVerticesCoordinates(&xyz_list);
    784                                 for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],element->GetMaterialParameter(MaterialsRheologyNEnum));
     802                                for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],n);
    785803                                element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
    786804                                break;
Note: See TracChangeset for help on using the changeset viewer.