Changeset 16745


Ignore:
Timestamp:
11/13/13 16:15:51 (11 years ago)
Author:
seroussi
Message:

CHG: working on Thermal and Enthalpy input update from solution

Location:
issm/trunk-jpl/src/c
Files:
3 edited

Legend:

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

    r16734 r16745  
    202202        IssmDouble* values        = xNew<IssmDouble>(numnodes);
    203203        IssmDouble* pressure      = xNew<IssmDouble>(numnodes);
     204        IssmDouble* surface       = xNew<IssmDouble>(numnodes);
     205        IssmDouble* B             = xNew<IssmDouble>(numnodes);
    204206        IssmDouble* temperature   = xNew<IssmDouble>(numnodes);
    205207        IssmDouble* waterfraction = xNew<IssmDouble>(numnodes);
     
    215217        /*Get all inputs and parameters*/
    216218        element->GetInputValue(&converged,ConvergedEnum);
    217         element->GetInputListOnNodes(pressure,PressureEnum);
     219        element->GetInputListOnNodes(&pressure[0],PressureEnum);
    218220        if(converged){
    219221                for(i=0;i<numnodes;i++){
     
    229231                 * otherwise the rheology could be negative*/
    230232                element->FindParam(&rheology_law,MaterialsRheologyLawEnum);
     233                element->GetInputListOnNodes(&surface[0],SurfaceEnum);
    231234                switch(rheology_law){
    232235                        case NoneEnum:
     
    234237                                break;
    235238                        case PatersonEnum:
    236                                 for(i=0;i<numnodes;i++) T_average+=values[i]/reCast<IssmDouble>(numnodes);
    237                                 B_average=Paterson(T_average);
    238                                 element->AddMaterialInput(MaterialsRheologyBEnum,&B_average,P0Enum);
     239                                for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]);
     240                                element->AddMaterialInput(MaterialsRheologyBEnum,&B[0],P1Enum);
    239241                                break;
    240                         case ArrheniusEnum:{
    241                                 Input* surface_input=element->GetInput(SurfaceEnum); _assert_(surface_input);
    242                                 surface_input->GetInputAverage(&s_average);
     242                        case ArrheniusEnum:
    243243                                element->GetVerticesCoordinates(&xyz_list);
    244                                 for(i=0;i<numnodes;i++) T_average+=values[i]/reCast<IssmDouble>(numnodes);
    245                                 //B_average=Arrhenius(T_average,
    246                                                         //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),
    247                                                         //element->GetMaticeParameter(MaterialsRheologyNEnum));
    248                                 element->AddMaterialInput(MaterialsRheologyBEnum,&B_average,P0Enum);
     244                                for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],element->GetMaterialParameter(MaterialsRheologyNEnum));
     245                                element->AddMaterialInput(MaterialsRheologyBEnum,&B[0],P1Enum);
    249246                                break;
    250                                 }
    251247                        case LliboutryDuvalEnum:
    252                                 for(i=0;i<numnodes;i++) T_average+=values[i]/reCast<IssmDouble>(numnodes);
    253                                 for(i=0;i<numnodes;i++) P_average+=pressure[i]/reCast<IssmDouble>(numnodes);
    254                                 B_average=LliboutryDuval(T_average,P_average,
    255                                                         element->GetMaterialParameter(MaterialsRheologyNEnum),
    256                                                         element->GetMaterialParameter(MaterialsBetaEnum),
    257                                                         element->GetMaterialParameter(ConstantsReferencetemperatureEnum),
    258                                                         element->GetMaterialParameter(MaterialsHeatcapacityEnum),
    259                                                         element->GetMaterialParameter(MaterialsLatentheatEnum));
    260                                 element->AddMaterialInput(MaterialsRheologyBEnum,&B_average,P0Enum);
    261                                 break;
    262                         default:
    263                                 _error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
     248                                //for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],material->GetN(),matpar->GetBeta(),matpar->GetReferenceTemperature(),matpar->GetHeatCapacity(),matpar->GetLatentHeat()); for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]);
     249                                for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]);
     250                                element->AddMaterialInput(MaterialsRheologyBEnum,&B[0],P1Enum);
     251                                break;
     252                        default: _error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
    264253                }
    265254        }
     
    271260        xDelete<IssmDouble>(values);
    272261        xDelete<IssmDouble>(pressure);
     262        xDelete<IssmDouble>(surface);
     263        xDelete<IssmDouble>(B);
    273264        xDelete<IssmDouble>(temperature);
    274265        xDelete<IssmDouble>(waterfraction);
  • issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r16729 r16745  
    119119        bool        converged;
    120120        int         i,rheology_law;
    121         IssmDouble  B_average,s_average,T_average=0.;
    122121        int        *doflist   = NULL;
    123122        IssmDouble *xyz_list  = NULL;
     
    130129        element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    131130        IssmDouble* values    = xNew<IssmDouble>(numnodes);
     131        IssmDouble* surface   = xNew<IssmDouble>(numnodes);
     132        IssmDouble* B         = xNew<IssmDouble>(numnodes);
    132133
    133134        /*Use the dof list to index into the solution vector: */
     
    144145        if(hack){
    145146                IssmDouble* pressure = xNew<IssmDouble>(numnodes);
    146                 element->GetInputListOnVertices(pressure,PressureEnum);
     147                element->GetInputListOnNodes(&pressure[0],PressureEnum);
    147148                for(i=0;i<numnodes;i++){
    148149                        if(values[i]>element->TMeltingPoint(pressure[i]))     values[i]=element->TMeltingPoint(pressure[i]);
     
    160161                 * otherwise the rheology could be negative*/
    161162                element->FindParam(&rheology_law,MaterialsRheologyLawEnum);
     163                element->GetInputListOnNodes(&surface[0],SurfaceEnum);
    162164                switch(rheology_law){
    163165                        case NoneEnum:
     
    165167                                break;
    166168                        case PatersonEnum:
    167                                 for(i=0;i<numnodes;i++) T_average+=values[i]/reCast<IssmDouble>(numnodes);
    168                                 B_average=Paterson(T_average);
    169                                 element->AddMaterialInput(MaterialsRheologyBEnum,&B_average,P0Enum);
     169                                for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]);
     170                                element->AddMaterialInput(MaterialsRheologyBEnum,&B[0],P1Enum);
    170171                                break;
    171172                        case ArrheniusEnum:{
    172                                 Input* surface_input=element->GetInput(SurfaceEnum); _assert_(surface_input);
    173                                 surface_input->GetInputAverage(&s_average);
    174173                                element->GetVerticesCoordinates(&xyz_list);
    175                                 for(i=0;i<numnodes;i++) T_average+=values[i]/reCast<IssmDouble>(numnodes);
    176                                 //B_average=Arrhenius(T_average,
    177                                                         //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),
    178                                                         //element->GetMaticeParameter(MaterialsRheologyNEnum));
    179                                 element->AddMaterialInput(MaterialsRheologyBEnum,&B_average,P0Enum);
     174                                for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],element->GetMaterialParameter(MaterialsRheologyNEnum));
     175                                element->AddMaterialInput(MaterialsRheologyBEnum,&B[0],P1Enum);
    180176                                break;
    181177                                }
    182178                        default:
    183179                                _error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
    184 
    185180                }
    186181        }
     
    191186        /*Free ressources:*/
    192187        xDelete<IssmDouble>(values);
     188        xDelete<IssmDouble>(surface);
     189        xDelete<IssmDouble>(B);
    193190        xDelete<IssmDouble>(xyz_list);
    194191        xDelete<int>(doflist);
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16743 r16745  
    49294929        IssmDouble waterfraction[numdof];
    49304930        IssmDouble B[numdof];
    4931         IssmDouble B_average,s_average;
    49324931        int*       doflist=NULL;
    49334932
     
    49644963                 * otherwise the rheology could be negative*/
    49654964                this->parameters->FindParam(&rheology_law,MaterialsRheologyLawEnum);
    4966                 GetInputListOnVertices(&surface[0],PressureEnum);
     4965                GetInputListOnVertices(&surface[0],SurfaceEnum);
    49674966                switch(rheology_law){
    49684967                        case NoneEnum:
Note: See TracChangeset for help on using the changeset viewer.