Changeset 24486


Ignore:
Timestamp:
12/19/19 15:26:13 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: making enthalpy work with HO elements

File:
1 edited

Legend:

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

    r24335 r24486  
    502502
    503503        /*feed updated variables back into model*/
     504        int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
    504505        if(dt!=0.){
    505                 element->AddInput2(enthalpy_enum,enthalpies,P1DGEnum);
    506                 element->AddInput2(WatercolumnEnum,watercolumns,P1DGEnum);
    507         }
    508         element->AddInput2(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,P1DGEnum);
     506                element->AddInput2(enthalpy_enum,enthalpies,finite_element);
     507                element->AddInput2(WatercolumnEnum,watercolumns,finite_element);
     508        }
     509        element->AddInput2(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,finite_element);
    509510
    510511        /*Clean up and return*/
     
    10881089                        drainage[k]=DrainageFunctionWaterfraction(waterfractions[k], dt);
    10891090                }
    1090                 element->AddInput2(WaterfractionDrainageEnum,drainage,P1DGEnum);
     1091                int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
     1092                element->AddInput2(WaterfractionDrainageEnum,drainage,finite_element);
    10911093
    10921094                xDelete<IssmDouble>(waterfractions);
     
    11211123                        drainage_int[k]*=thicknesses[k];
    11221124                }
    1123                 element->AddInput2(WaterfractionDrainageIntegratedEnum, drainage_int, P1DGEnum);
     1125                int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
     1126                element->AddInput2(WaterfractionDrainageIntegratedEnum, drainage_int,finite_element);
    11241127
    11251128                xDelete<IssmDouble>(drainage_int);
     
    11441147                        watercolumn[basalnodeindices[k]]+=dt*drainage_int[basalnodeindices[k]];
    11451148                }
    1146                 element->AddInput2(WatercolumnEnum, watercolumn,P1DGEnum);
     1149                int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
     1150                element->AddInput2(WatercolumnEnum, watercolumn,finite_element);
    11471151
    11481152                xDelete<IssmDouble>(watercolumn);
     
    11801184                        element->ThermalToEnthalpy(&enthalpies[k], temperatures[k], waterfractions[k], pressures[k]);
    11811185                }
    1182                 element->AddInput2(WaterfractionEnum,waterfractions,P1DGEnum);
    1183                 element->AddInput2(EnthalpyEnum,enthalpies,P1DGEnum);
     1186                int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
     1187                element->AddInput2(WaterfractionEnum,waterfractions,finite_element);
     1188                element->AddInput2(EnthalpyEnum,enthalpies,finite_element);
    11841189
    11851190                xDelete<IssmDouble>(enthalpies);
     
    16021607        element->GetInputValue(&converged,ConvergedEnum);
    16031608        element->GetInputListOnNodes(&pressure[0],PressureEnum);
     1609        int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
    16041610        if(converged){
    16051611                for(i=0;i<numnodes;i++){
     
    16081614                        //if(waterfraction[i]>1.) _error_("Water fraction >1 found in solution vector");
    16091615                }
    1610                 _assert_(element->GetElementType()==P1Enum);
    1611                 element->AddInput2(EnthalpyEnum,values,P1DGEnum);
    1612                 element->AddInput2(WaterfractionEnum,waterfraction,P1DGEnum);
    1613                 element->AddInput2(TemperatureEnum,temperature,P1DGEnum);
     1616                element->AddInput2(EnthalpyEnum,values,finite_element);
     1617                element->AddInput2(WaterfractionEnum,waterfraction,finite_element);
     1618                element->AddInput2(TemperatureEnum,temperature,finite_element);
    16141619
    16151620                IssmDouble* n = xNew<IssmDouble>(numnodes);
     
    16311636                        case BuddJackaEnum:
    16321637                                for(i=0;i<numnodes;i++) B[i]=BuddJacka(temperature[i]);
    1633                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1638                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16341639                                break;
    16351640                        case CuffeyEnum:
    16361641                                for(i=0;i<numnodes;i++) B[i]=Cuffey(temperature[i]);
    1637                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1642                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16381643                                break;
    16391644                        case CuffeyTemperateEnum:
    16401645                                for(i=0;i<numnodes;i++) B[i]=CuffeyTemperate(temperature[i], waterfraction[i],n[i]);
    1641                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1646                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16421647                                break;
    16431648                        case PatersonEnum:
    16441649                                for(i=0;i<numnodes;i++) B[i]=Paterson(temperature[i]);
    1645                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1650                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16461651                                break;
    16471652                        case NyeH2OEnum:
    16481653                                for(i=0;i<numnodes;i++) B[i]=NyeH2O(values[i]);
    1649                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1654                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16501655                                break;
    16511656                        case NyeCO2Enum:
    16521657                                for(i=0;i<numnodes;i++) B[i]=NyeCO2(values[i]);
    1653                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1658                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16541659                                break;
    16551660                        case ArrheniusEnum:{
    16561661                                element->GetVerticesCoordinates(&xyz_list);
    16571662                                for(i=0;i<numnodes;i++) B[i]=Arrhenius(temperature[i],surface[i]-xyz_list[i*3+2],n[i]);
    1658                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1663                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16591664                                break;
    16601665                                }
    16611666                        case LliboutryDuvalEnum:{
    16621667                                for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum));
    1663                                 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum);
     1668                                element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
    16641669                                break;
    16651670                                }
     
    16691674        }
    16701675        else{
    1671                 element->AddInput2(EnthalpyPicardEnum,values,P1DGEnum);
     1676                element->AddInput2(EnthalpyPicardEnum,values,finite_element);
    16721677        }
    16731678
Note: See TracChangeset for help on using the changeset viewer.