Ignore:
Timestamp:
11/15/19 16:28:40 (5 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added Inputs2, TODO: still AMR, GEMB and DC do not work, and need to delete current Inputs

File:
1 edited

Legend:

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

    r24221 r24335  
    659659        return numdofs;
    660660}/*}}}*/
    661 void StressbalanceAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     661void StressbalanceAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
    662662
    663663        /*Intermediaries*/
     
    730730                if(iomodel->my_elements[i]){
    731731                        Element* element=(Element*)elements->GetObjectByOffset(counter);
    732                         element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
     732                        element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
     733
     734                        /*Need to know the type of approximation for this element*/
     735                        if(iomodel->Data("md.flowequation.element_equation")){
     736                                inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
     737                        }
     738
    733739                        counter++;
    734740                }
     
    736742
    737743        /*Create inputs: */
    738         iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
    739         iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
    740         iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
    741         iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
    742         iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
    743         iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
    744         iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum,0.);
    745         iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum,0.);
    746         iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
    747         iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
     744        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
     745        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
     746        iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
     747        iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0);
     748        iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
     749        iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
     750        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.);
     751        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.);
     752        iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
     753        iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
    748754        #ifdef LATERALFRICTION
    749         iomodel->FetchDataToInput(elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
     755        iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
    750756        #endif
    751757
    752758        if(iomodel->domaintype!=Domain2DhorizontalEnum){
    753                 iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
    754                 iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
     759                iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
     760                iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
    755761        }
    756762        if(iomodel->domaintype==Domain3DEnum){
    757                 iomodel->FetchDataToInput(elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);
    758                 iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);
    759                 iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum,0.);
     763                iomodel->FetchDataToInput(inputs2,elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);
     764                iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);
     765                iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum,0.);
    760766        }
    761767        if(isFS){
    762                 iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum,0.);
     768                iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum,0.);
    763769
    764770                /*Add basal forcings to compute melt rate*/
     
    767773                switch(basalforcing_model){
    768774                        case FloatingMeltRateEnum:
    769                                 iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
     775                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
    770776                                break;
    771777                        case LinearFloatingMeltRateEnum:
     
    776782                                break;
    777783                        case SpatialLinearFloatingMeltRateEnum:
    778                                 iomodel->FetchDataToInput(elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
    779                                 iomodel->FetchDataToInput(elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
    780                                 iomodel->FetchDataToInput(elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
     784                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
     785                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
     786                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
    781787                                break;
    782788                        case BasalforcingsPicoEnum:
    783                                 iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
     789                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
    784790                                break;
    785791                        case BasalforcingsIsmip6Enum:
    786                                 iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
     792                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
    787793                                break;
    788794                        case BeckmannGoosseFloatingMeltRateEnum:
    789                                 iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
    790                                 iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
     795                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
     796                                iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
    791797                                break;
    792798                        default:
     
    797803        iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
    798804        if(fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){
    799                 InputUpdateFromConstantx(elements,0.,SigmaNNEnum);
     805                InputUpdateFromConstantx(inputs2,elements,0.,SigmaNNEnum);
    800806        }
    801807
     
    804810                case 1:
    805811                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
    806                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    807                         iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
    808                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
     812                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     813                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
     814                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
    809815                        if(FrictionCoupling==3){
    810                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     816                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
    811817                        else if(FrictionCoupling==4){
    812                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",EffectivePressureEnum);
     818                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
    813819                        }
    814820                        break;
    815821                case 2:
    816                         iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
    817                         iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
     822                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
     823                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
    818824                        break;
    819825                case 3:
    820826                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
    821                         iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
    822                         iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
    823                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
     827                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
     828                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum);
     829                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
    824830                        if(FrictionCoupling==3){
    825                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     831                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
    826832                        else if(FrictionCoupling==4){
    827                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",EffectivePressureEnum);
     833                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
    828834                        }
    829835                        break;
    830836                case 4:
    831                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    832                         iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
    833                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
    834                         iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
    835                         iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
     837                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     838                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
     839                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
     840                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
     841                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
    836842                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
    837843                        break;
    838844                case 5:
    839                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    840                         iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
    841                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
    842                         iomodel->FetchDataToInput(elements,"md.friction.water_layer",FrictionWaterLayerEnum);
     845                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     846                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
     847                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
     848                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
    843849                        break;
    844850                case 6:
    845                         iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
    846                         iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
    847                         iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
    848                         iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
     851                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
     852                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
     853                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
     854                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
    849855                        break;
    850856                case 7:
    851857                        iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
    852                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    853                         iomodel->FetchDataToInput(elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
    854                         iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
    855                         iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
     858                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     859                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
     860                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
     861                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
    856862                        if(FrictionCoupling==3){
    857                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
     863                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
    858864                        else if(FrictionCoupling==4){
    859                                 iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",EffectivePressureEnum);
     865                                iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
    860866
    861867                        }
    862868                        break;
    863869                case 9:
    864                         iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
    865                         iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
    866                         iomodel->FetchDataToInput(elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
    867                         InputUpdateFromConstantx(elements,1.,FrictionPEnum);
    868                         InputUpdateFromConstantx(elements,1.,FrictionQEnum);
     870                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
     871                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
     872                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
     873                        InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum);
     874                        InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum);
    869875                        break;
    870876                case 10:
    871                         iomodel->FetchDataToInput(elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
    872                         iomodel->FetchDataToInput(elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
    873                         iomodel->FetchDataToInput(elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
    874                         iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
     877                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
     878                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
     879                        iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
     880                        iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
    875881                        break;
    876882                case 11:
    877                         iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
    878                         iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
    879                         iomodel->FetchDataToInput(elements,"md.friction.Cmax",FrictionCmaxEnum);
     883                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
     884                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
     885                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.Cmax",FrictionCmaxEnum);
    880886                        break;
    881887                case 12:
    882                         iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
    883                         iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
    884                         iomodel->FetchDataToInput(elements,"md.friction.f",FrictionfEnum);
     888                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
     889                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
     890                        iomodel->FetchDataToInput(inputs2,elements,"md.friction.f",FrictionfEnum);
    885891                        break;
    886892                default:
     
    889895
    890896#ifdef _HAVE_ANDROID_
    891         elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
     897        inputs2->DuplicateInput(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
    892898#endif
    893899
     
    10591065
    10601066        int approximation;
    1061         element->GetInputValue(&approximation,ApproximationEnum);
     1067        element->GetInput2Value(&approximation,ApproximationEnum);
    10621068        switch(approximation){
    10631069                case FSApproximationEnum:
     
    10721078
    10731079        int approximation;
    1074         element->GetInputValue(&approximation,ApproximationEnum);
     1080        element->GetInput2Value(&approximation,ApproximationEnum);
    10751081        switch(approximation){
    10761082                case SSAApproximationEnum:
     
    10881094ElementMatrix* StressbalanceAnalysis::CreateKMatrix(Element* element){/*{{{*/
    10891095        int approximation;
    1090         element->GetInputValue(&approximation,ApproximationEnum);
     1096        element->GetInput2Value(&approximation,ApproximationEnum);
    10911097        switch(approximation){
    10921098                case SIAApproximationEnum:
     
    11151121
    11161122        int approximation;
    1117         element->GetInputValue(&approximation,ApproximationEnum);
     1123        element->GetInput2Value(&approximation,ApproximationEnum);
    11181124        switch(approximation){
    11191125                case SIAApproximationEnum:
     
    11421148
    11431149        int approximation;
    1144         element->GetInputValue(&approximation,ApproximationEnum);
     1150        element->GetInput2Value(&approximation,ApproximationEnum);
    11451151        switch(approximation){
    11461152                case FSApproximationEnum: case NoneApproximationEnum:
     
    11781184        int numnodes = element->GetNumberOfNodes();
    11791185        int numdof   = numnodes*dofpernode;
    1180         element->GetInputValue(&approximation,ApproximationEnum);
     1186        element->GetInput2Value(&approximation,ApproximationEnum);
    11811187
    11821188        /*Fetch dof list and allocate solution vector*/
     
    11851191
    11861192        /*Get inputs*/
    1187         Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
    1188         Input* vy_input=NULL;
    1189         if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput(VyEnum); _assert_(vy_input);}
     1193        Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
     1194        Input2* vy_input=NULL;
     1195        if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput2(VyEnum); _assert_(vy_input);}
    11901196
    11911197        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     
    12161222
    12171223        int approximation;
    1218         element->GetInputValue(&approximation,ApproximationEnum);
     1224        element->GetInput2Value(&approximation,ApproximationEnum);
    12191225        switch(approximation){
    12201226                case FSApproximationEnum: case NoneApproximationEnum:
     
    12871293        /*Retrieve all inputs and parameters*/
    12881294        element->GetVerticesCoordinates(&xyz_list);
    1289         Input* thickness_input = basalelement->GetInput(ThicknessEnum);_assert_(thickness_input);
    1290         Input* vx_input        = basalelement->GetInput(VxEnum);       _assert_(vx_input);
    1291         Input* vy_input        = basalelement->GetInput(VyEnum);       _assert_(vy_input);
     1295        Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);_assert_(thickness_input);
     1296        Input2* vx_input        = basalelement->GetInput2(VxEnum);       _assert_(vx_input);
     1297        Input2* vy_input        = basalelement->GetInput2(VyEnum);       _assert_(vy_input);
    12921298
    12931299        /* Start  looping on the number of gaussian points: */
     
    14061412        element->GetVerticesCoordinates(&xyz_list);
    14071413        element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
    1408         Input* surface_input    = element->GetInput(SurfaceEnum); _assert_(surface_input);
    1409         Input* gllevelset_input = NULL;
     1414        Input2* surface_input    = element->GetInput2(SurfaceEnum); _assert_(surface_input);
     1415        Input2* gllevelset_input = NULL;
    14101416
    14111417        /*build friction object, used later on: */
     
    14151421        if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list);
    14161422        if(friction_style==SubelementFriction2Enum){
    1417                 gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
     1423                gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
    14181424                element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
    14191425           gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
     
    15011507        element->GetVerticesCoordinates(&xyz_list);
    15021508        element->GetLevelCoordinates(&xyz_list_boundary,xyz_list,MeshVertexonboundaryEnum,1.);
    1503         Input* icelevelset_input = element->GetInput(MaskIceLevelsetEnum); _assert_(icelevelset_input);
     1509        Input2* icelevelset_input = element->GetInput2(MaskIceLevelsetEnum); _assert_(icelevelset_input);
    15041510
    15051511        /* Start  looping on the number of gaussian points: */
     
    15631569        /*Retrieve all inputs and parameters*/
    15641570        element->GetVerticesCoordinates(&xyz_list);
    1565         Input* thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
    1566         Input* vx_input=element->GetInput(VxEnum);               _assert_(vx_input);
    1567         Input* vy_input    = NULL;
     1571        Input2* thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
     1572        Input2* vx_input=element->GetInput2(VxEnum);               _assert_(vx_input);
     1573        Input2* vy_input    = NULL;
    15681574        if(dim==2){
    1569                 vy_input    = element->GetInput(VyEnum);       _assert_(vy_input);
     1575                vy_input    = element->GetInput2(VyEnum);       _assert_(vy_input);
    15701576        }
    15711577
     
    16801686        /*Retrieve all inputs and parameters*/
    16811687        element->GetVerticesCoordinates(&xyz_list);
    1682         Input*     thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
    1683         Input*     surface_input  =element->GetInput(SurfaceEnum);   _assert_(surface_input);
     1688        Input2*     thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
     1689        Input2*     surface_input  =element->GetInput2(SurfaceEnum);   _assert_(surface_input);
    16841690        IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
    16851691
     
    17441750
    17451751        /*Retrieve all inputs and parameters*/
    1746         Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
    1747         Input* base_input       = element->GetInput(BaseEnum);       _assert_(base_input);
    1748         Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     1752        Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
     1753        Input2* base_input       = element->GetInput2(BaseEnum);       _assert_(base_input);
     1754        Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
    17491755        IssmDouble rho_water   = element->FindParam(MaterialsRhoSeawaterEnum);
    17501756        IssmDouble rho_ice     = element->FindParam(MaterialsRhoIceEnum);
     
    19411947                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
    19421948        }
    1943         element->AddInput(PressureEnum,pressure,P1Enum);
     1949        element->AddInput2(PressureEnum,pressure,P1Enum);
    19441950        xDelete<IssmDouble>(pressure);
    19451951        xDelete<IssmDouble>(thickness);
     
    19641970        /*Fetch dof list and allocate solution vectors*/
    19651971        basalelement->GetDofListLocal(&doflist,SSAApproximationEnum,GsetEnum);
    1966         IssmDouble* values    = xNew<IssmDouble>(numdof);
    1967         IssmDouble* vx        = xNew<IssmDouble>(numnodes);
    1968         IssmDouble* vy        = xNew<IssmDouble>(numnodes);
    1969         IssmDouble* vz        = xNew<IssmDouble>(numnodes);
    1970         IssmDouble* vel       = xNew<IssmDouble>(numnodes);
     1972        IssmDouble* values = xNew<IssmDouble>(numdof);
     1973        IssmDouble* vx     = xNew<IssmDouble>(numnodes);
     1974        IssmDouble* vy     = xNew<IssmDouble>(numnodes);
     1975        IssmDouble* vz     = xNew<IssmDouble>(numnodes);
     1976        IssmDouble* vel    = xNew<IssmDouble>(numnodes);
    19711977
    19721978        /*Use the dof list to index into the solution vector: */
     
    20002006
    20012007        /*Add vx and vy as inputs to the tria element: */
    2002         element->AddBasalInput(VxEnum,vx,element->GetElementType());
    2003         if(dim==2)element->AddBasalInput(VyEnum,vy,element->GetElementType());
    2004         element->AddBasalInput(VelEnum,vel,element->GetElementType());
     2008        element->AddBasalInput2(VxEnum,vx,element->GetElementType());
     2009        if(dim==2)element->AddBasalInput2(VyEnum,vy,element->GetElementType());
     2010        element->AddBasalInput2(VelEnum,vel,element->GetElementType());
    20052011
    20062012        /*Free ressources:*/
     
    20622068        /*Retrieve all inputs and parameters*/
    20632069        element->GetVerticesCoordinates(&xyz_list);
    2064         Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);
    2065         Input* vx_input      = element->GetInput(VxEnum);      _assert_(vx_input);
    2066         Input* vy_input      = element->GetInput(VyEnum);      _assert_(vy_input);
     2070        Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input);
     2071        Input2* vx_input      = element->GetInput2(VxEnum);      _assert_(vx_input);
     2072        Input2* vy_input      = element->GetInput2(VyEnum);      _assert_(vy_input);
    20672073
    20682074        /* Start  looping on the number of gaussian points: */
     
    21492155        /*Retrieve all inputs and parameters*/
    21502156        element->GetVerticesCoordinates(&xyz_list);
    2151         Input*     thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
    2152         Input*     surface_input  =element->GetInput(SurfaceEnum);   _assert_(surface_input);
     2157        Input2*     thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
     2158        Input2*     surface_input  =element->GetInput2(SurfaceEnum);   _assert_(surface_input);
    21532159        IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
    21542160
     
    22002206
    22012207        /*Retrieve all inputs and parameters*/
    2202         Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
    2203         Input* base_input       = element->GetInput(BaseEnum);       _assert_(base_input);
    2204         Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     2208        Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
     2209        Input2* base_input       = element->GetInput2(BaseEnum);       _assert_(base_input);
     2210        Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
    22052211        IssmDouble rho_water   = element->FindParam(MaterialsRhoSeawaterEnum);
    22062212        IssmDouble rho_ice     = element->FindParam(MaterialsRhoIceEnum);
     
    22702276                for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
    22712277        }
    2272         element->AddInput(PressureEnum,pressure,P1Enum);
     2278        element->AddInput2(PressureEnum,pressure,P1Enum);
    22732279        xDelete<IssmDouble>(pressure);
    22742280        xDelete<IssmDouble>(thickness);
     
    23232329
    23242330        /*Add vx and vy as inputs to the tria element: */
    2325         element->AddBasalInput(VxEnum,vx,element->GetElementType());
    2326         element->AddBasalInput(VyEnum,vy,element->GetElementType());
    2327         element->AddBasalInput(VelEnum,vel,element->GetElementType());
     2331        element->AddBasalInput2(VxEnum,vx,element->GetElementType());
     2332        element->AddBasalInput2(VyEnum,vy,element->GetElementType());
     2333        element->AddBasalInput2(VelEnum,vel,element->GetElementType());
    23282334
    23292335        /*Free ressources:*/
     
    23592365        /*Retrieve all inputs and parameters*/
    23602366        element->GetVerticesCoordinates(&xyz_list);
    2361         Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
    2362         Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
     2367        Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
     2368        Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
    23632369
    23642370        /* Start  looping on the number of gaussian points: */
     
    24452451        element->GetVerticesCoordinatesBase(&xyz_list_base);
    24462452        element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
    2447         Input* gllevelset_input = NULL;
     2453        Input2* gllevelset_input = NULL;
    24482454
    24492455        /*build friction object, used later on: */
     
    24532459        if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list_base);
    24542460        if(friction_style==SubelementFriction2Enum){
    2455                 gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
     2461                gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
    24562462                element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
    24572463                gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
     
    25132519        /*Intermediaries*/
    25142520        int         dim,bsize;
    2515         IssmDouble  viscosity,thickness,Jdet;
     2521        IssmDouble  viscosity,Jdet;
    25162522        IssmDouble *xyz_list = NULL;
    25172523
     
    25292535        /*Retrieve all inputs and parameters*/
    25302536        element->GetVerticesCoordinates(&xyz_list);
    2531         Input* vx_input    = element->GetInput(VxEnum);       _assert_(vx_input);
    2532         Input* vy_input    = NULL;
     2537        Input2* vx_input    = element->GetInput2(VxEnum);       _assert_(vx_input);
     2538        Input2* vy_input    = NULL;
    25332539        if(dim==3){
    2534                 vy_input=element->GetInput(VyEnum);          _assert_(vy_input);
     2540                vy_input=element->GetInput2(VyEnum);          _assert_(vy_input);
    25352541        }
    25362542
     
    26772683        /*Retrieve all inputs and parameters*/
    26782684        element->GetVerticesCoordinates(&xyz_list);
    2679         Input*     surface_input = element->GetInput(SurfaceEnum);   _assert_(surface_input);
     2685        Input2*     surface_input = element->GetInput2(SurfaceEnum);   _assert_(surface_input);
    26802686        IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
    26812687
     
    27332739
    27342740        /*Retrieve all inputs and parameters*/
    2735         Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);
    2736         Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     2741        Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input);
     2742        Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
    27372743        IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
    27382744        IssmDouble rho_ice   = element->FindParam(MaterialsRhoIceEnum);
     
    29382944                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
    29392945        }
    2940         element->AddInput(PressureEnum,pressure,P1Enum);
     2946        element->AddInput2(PressureEnum,pressure,P1Enum);
    29412947        xDelete<IssmDouble>(pressure);
    29422948        xDelete<IssmDouble>(surface);
     
    29832989
    29842990        /*Add vx and vy as inputs to the element: */
    2985         element->AddInput(VxEnum,vx,element->GetElementType());
    2986         if(dim==3)element->AddInput(VyEnum,vy,element->GetElementType());
    2987         element->AddInput(VelEnum,vel,element->GetElementType());
     2991        element->AddInput2(VxEnum,vx,element->GetElementType());
     2992        if(dim==3)element->AddInput2(VyEnum,vy,element->GetElementType());
     2993        element->AddInput2(VelEnum,vel,element->GetElementType());
    29882994
    29892995        /*Free ressources:*/
     
    30513057        /*Retrieve all inputs and parameters*/
    30523058        element->GetVerticesCoordinates(&xyz_list);
    3053         Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
    3054         Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
    3055         Input* vz_input = element->GetInput(VzEnum); _assert_(vz_input);
     3059        Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
     3060        Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
     3061        Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input);
    30563062
    30573063        /* Start  looping on the number of gaussian points: */
     
    31413147        /*If on not water or not FS, skip stiffness: */
    31423148        int approximation,shelf_dampening;
    3143         element->GetInputValue(&approximation,ApproximationEnum);
     3149        element->GetInput2Value(&approximation,ApproximationEnum);
    31443150        if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
    31453151        element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum);
     
    31743180        IssmDouble  rho_water     = element->FindParam(MaterialsRhoSeawaterEnum);
    31753181        IssmDouble  gravity       = element->FindParam(ConstantsGEnum);
    3176         Input*      base_input = element->GetInput(BaseEnum); _assert_(base_input);
     3182        Input2*      base_input = element->GetInput2(BaseEnum); _assert_(base_input);
    31773183
    31783184        /* Start  looping on the number of gaussian points: */
     
    32323238        element->GetVerticesCoordinates(&xyz_list);
    32333239        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    3234         Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
    3235         Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
    3236         Input* vz_input = NULL;
    3237         if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     3240        Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
     3241        Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
     3242        Input2* vz_input = NULL;
     3243        if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    32383244
    32393245        /* Start  looping on the number of gaussian points: */
     
    33823388        element->GetVerticesCoordinates(&xyz_list);
    33833389        //element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    3384         Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
    3385         Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
    3386         Input* vz_input = NULL;
    3387         if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     3390        Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
     3391        Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
     3392        Input2* vz_input = NULL;
     3393        if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    33883394
    33893395
     
    34563462        /*Retrieve all inputs and parameters*/
    34573463        element->GetVerticesCoordinates(&xyz_list);
    3458         Input* vx_input = element->GetInput(VxEnum);     _assert_(vx_input);
    3459         Input* vy_input = element->GetInput(VyEnum);     _assert_(vy_input);
    3460         Input* vz_input = NULL;
    3461         if(dim==3){vz_input = element->GetInput(VzEnum); _assert_(vz_input);}
     3464        Input2* vx_input = element->GetInput2(VxEnum);     _assert_(vx_input);
     3465        Input2* vy_input = element->GetInput2(VyEnum);     _assert_(vy_input);
     3466        Input2* vz_input = NULL;
     3467        if(dim==3){vz_input = element->GetInput2(VzEnum); _assert_(vz_input);}
    34623468
    34633469        /* Start  looping on the number of gaussian points: */
     
    35813587        element->GetVerticesCoordinates(&xyz_list);
    35823588        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    3583         Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
    3584         Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
    3585         Input* vz_input;
    3586         if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     3589        Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
     3590        Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
     3591        Input2* vz_input;
     3592        if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    35873593
    35883594        /* Start  looping on the number of gaussian points: */
     
    36233629        /*If on water or not FS, skip stiffness: */
    36243630        int approximation;
    3625         element->GetInputValue(&approximation,ApproximationEnum);
     3631        element->GetInput2Value(&approximation,ApproximationEnum);
    36263632        if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
    36273633
     
    36503656        element->GetVerticesCoordinatesBase(&xyz_list_base);
    36513657        element->GetVerticesCoordinates(&xyz_list);
    3652         Input* vx_input         = element->GetInput(VxEnum);      _assert_(vx_input);
    3653         Input* vy_input         = element->GetInput(VyEnum);      _assert_(vy_input);
    3654         Input* vz_input         = NULL;
    3655         if(dim==3){    vz_input = element->GetInput(VzEnum);      _assert_(vz_input);}
     3658        Input2* vx_input         = element->GetInput2(VxEnum);      _assert_(vx_input);
     3659        Input2* vy_input         = element->GetInput2(VyEnum);      _assert_(vy_input);
     3660        Input2* vz_input         = NULL;
     3661        if(dim==3){    vz_input = element->GetInput2(VzEnum);      _assert_(vz_input);}
    36563662
    36573663        /* Start  looping on the number of gaussian points: */
     
    37283734        /*Retrieve all inputs and parameters*/
    37293735        element->GetVerticesCoordinatesBase(&xyz_list_base);
    3730         Input*  alpha2_input=element->GetInput(FrictionCoefficientEnum); _assert_(alpha2_input);
     3736        Input2*  alpha2_input=element->GetInput2(FrictionCoefficientEnum); _assert_(alpha2_input);
    37313737
    37323738        /* Start  looping on the number of gaussian points: */
     
    37823788        /*Retrieve all inputs and parameters*/
    37833789        element->GetVerticesCoordinatesBase(&xyz_list_base);
    3784         Input*  sigmann_input=element->GetInput(VzEnum); _assert_(sigmann_input);
    3785         Input*  sigmant_input=element->GetInput(TemperatureEnum); _assert_(sigmant_input);
    3786         Input*  bedslope_input=element->GetInput(BedSlopeXEnum);     _assert_(bedslope_input);
     3790        Input2*  sigmann_input=element->GetInput2(VzEnum); _assert_(sigmann_input);
     3791        Input2*  sigmant_input=element->GetInput2(TemperatureEnum); _assert_(sigmant_input);
     3792        Input2*  bedslope_input=element->GetInput2(BedSlopeXEnum);     _assert_(bedslope_input);
    37873793
    37883794        /* Start  looping on the number of gaussian points: */
     
    38993905        /*If on water or not FS, skip stiffness: */
    39003906        int approximation;
    3901         element->GetInputValue(&approximation,ApproximationEnum);
     3907        element->GetInput2Value(&approximation,ApproximationEnum);
    39023908        if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
    39033909
     
    39273933        element->GetVerticesCoordinatesBase(&xyz_list_base);
    39283934        element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
    3929         Input* gllevelset_input = NULL;
     3935        Input2* gllevelset_input = NULL;
    39303936
    39313937        /*build friction object, used later on: */
     
    39363942        if(friction_style==SubelementFriction2Enum){
    39373943                if(domaintype==Domain2DverticalEnum) _error_("Subelement Friction 2 not implemented yet for Flowline");
    3938                 gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
     3944                gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
    39393945                element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
    39403946                //gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
     
    40684074        IssmDouble  rho_ice =element->FindParam(MaterialsRhoIceEnum);
    40694075        IssmDouble  gravity =element->FindParam(ConstantsGEnum);
    4070         Input*      loadingforcex_input=element->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
    4071         Input*      loadingforcey_input=element->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
    4072         Input*      loadingforcez_input=NULL;
     4076        Input2*      loadingforcex_input=element->GetInput2(LoadingforceXEnum);  _assert_(loadingforcex_input);
     4077        Input2*      loadingforcey_input=element->GetInput2(LoadingforceYEnum);  _assert_(loadingforcey_input);
     4078        Input2*      loadingforcez_input=NULL;
    40734079        if(dim==3){
    4074                 loadingforcez_input=element->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
     4080                loadingforcez_input=element->GetInput2(LoadingforceZEnum);  _assert_(loadingforcez_input);
    40754081        }
    40764082
     
    41464152        element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
    41474153        element->NormalSection(&normal[0],xyz_list_front);
    4148         Input* surface_input  = element->GetInput(SurfaceEnum); _assert_(surface_input);
    4149         Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     4154        Input2* surface_input  = element->GetInput2(SurfaceEnum); _assert_(surface_input);
     4155        Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
    41504156        IssmDouble  rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
    41514157        IssmDouble  gravity   = element->FindParam(ConstantsGEnum);
     
    42154221        /*Retrieve all inputs and parameters*/
    42164222        element->GetVerticesCoordinatesBase(&xyz_list_base);
    4217         Input*      base_input=element->GetInput(BaseEnum); _assert_(base_input);
     4223        Input2*      base_input=element->GetInput2(BaseEnum); _assert_(base_input);
    42184224        IssmDouble  rho_water=element->FindParam(MaterialsRhoSeawaterEnum);
    42194225        IssmDouble  gravity  =element->FindParam(ConstantsGEnum);
     
    42394245        element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum);
    42404246        if(shelf_dampening) {
    4241                 Input*      mb_input=element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input);
     4247                Input2*      mb_input=element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input);
    42424248                IssmDouble  dt,mb;
    42434249                element->FindParam(&dt,TimesteppingTimeStepEnum);
     
    42904296
    42914297        /*Get pressure and sigmann*/
    4292         Input* pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);
    4293         Input* sigmann_input =element->GetInput(SigmaNNEnum);  _assert_(sigmann_input);
     4298        Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input);
     4299        Input2* sigmann_input =element->GetInput2(SigmaNNEnum);  _assert_(sigmann_input);
    42944300
    42954301        gauss=element->NewGauss(5);
     
    43834389
    43844390        /*Get d and tau*/
    4385         Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
    4386         Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
    4387         Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
    4388         Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
    4389         Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
    4390         Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
    4391         Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
    4392         Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
     4391        Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
     4392        Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
     4393        Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
     4394        Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
     4395        Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
     4396        Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
     4397        Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
     4398        Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
    43934399        if(dim==3){
    4394                 epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
    4395                 epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
    4396                 epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
    4397                 sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
    4398                 sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
    4399                 sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
     4400                epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
     4401                epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
     4402                epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
     4403                sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
     4404                sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
     4405                sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
    44004406        }
    44014407
     
    50595065        int*         vdoflist=NULL;
    50605066        int*         pdoflist=NULL;
    5061         Input*       vz_input=NULL;
     5067        Input2*       vz_input=NULL;
    50625068        int          dim;
    50635069        IssmDouble   vx,vy,vz,p;
     
    50815087        element->GetDofListVelocity(&vdoflist,GsetEnum);
    50825088        element->GetDofListPressure(&pdoflist,GsetEnum);
    5083         Input*     vx_input=element->GetInput(VxEnum);       _assert_(vx_input);
    5084         Input*     vy_input=element->GetInput(VyEnum);       _assert_(vy_input);
    5085         if(dim==3){vz_input=element->GetInput(VzEnum);       _assert_(vz_input);}
    5086         Input*     p_input =element->GetInput(PressureEnum); _assert_(p_input);
     5089        Input2*     vx_input=element->GetInput2(VxEnum);       _assert_(vx_input);
     5090        Input2*     vy_input=element->GetInput2(VyEnum);       _assert_(vy_input);
     5091        if(dim==3){vz_input=element->GetInput2(VzEnum);       _assert_(vz_input);}
     5092        Input2*     p_input =element->GetInput2(PressureEnum); _assert_(p_input);
    50875093
    50885094        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
     
    51425148                /*Get inputs and parameters*/
    51435149                element->GetVerticesCoordinates(&xyz_list);
    5144                 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
    5145                 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
    5146                 Input* vz_input;
    5147                 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     5150                Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
     5151                Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
     5152                Input2* vz_input;
     5153                if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    51485154
    51495155                /*Allocate new inputs*/
     
    51845190
    51855191                /*Add inputs*/
    5186                 element->AddInput(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput(DeviatoricStressxxEnum,sigmapxx,P1DGEnum);
    5187                 element->AddInput(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput(DeviatoricStressyyEnum,sigmapyy,P1DGEnum);
    5188                 element->AddInput(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput(DeviatoricStressxyEnum,sigmapxy,P1DGEnum);
     5192                element->AddInput2(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput2(DeviatoricStressxxEnum,sigmapxx,P1DGEnum);
     5193                element->AddInput2(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput2(DeviatoricStressyyEnum,sigmapyy,P1DGEnum);
     5194                element->AddInput2(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput2(DeviatoricStressxyEnum,sigmapxy,P1DGEnum);
    51895195                if(dim==3){
    5190                         element->AddInput(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput(DeviatoricStresszzEnum,sigmapzz,P1DGEnum);
    5191                         element->AddInput(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput(DeviatoricStressxzEnum,sigmapxz,P1DGEnum);
    5192                         element->AddInput(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput(DeviatoricStressyzEnum,sigmapyz,P1DGEnum);
     5196                        element->AddInput2(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput2(DeviatoricStresszzEnum,sigmapzz,P1DGEnum);
     5197                        element->AddInput2(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput2(DeviatoricStressxzEnum,sigmapxz,P1DGEnum);
     5198                        element->AddInput2(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput2(DeviatoricStressyzEnum,sigmapyz,P1DGEnum);
    51935199                }
    51945200
     
    52735279
    52745280        /*Add vx and vy as inputs to the tria element: */
    5275         int fe_v = element->VelocityInterpolation();
    5276         //if(fe_v == P1bubblecondensedEnum) fe_v = P1Enum;
    5277         //if(fe_v == P1bubbleEnum) fe_v = P1Enum;
    5278         element->AddInput(VxEnum, vx, fe_v);
    5279         element->AddInput(VyEnum, vy, fe_v);
    5280         element->AddInput(VelEnum,vel,fe_v);
    5281         if(pnumdof>0) element->AddInput(PressureEnum,pressure,element->PressureInterpolation());
    5282         if(dim==3) element->AddInput(VzEnum,vz, fe_v);
     5281        int v_interp = element->VelocityInterpolation();
     5282        if(v_interp==P1bubbleEnum) v_interp=P1Enum;
     5283        if(v_interp == P1bubblecondensedEnum) v_interp = P1Enum;
     5284        element->AddInput2(VxEnum, vx, v_interp);
     5285        element->AddInput2(VyEnum, vy, v_interp);
     5286        element->AddInput2(VelEnum,vel,v_interp);
     5287        if(pnumdof>0) element->AddInput2(PressureEnum,pressure,element->PressureInterpolation());
     5288        if(dim==3) element->AddInput2(VzEnum,vz,v_interp);
    52835289
    52845290        /*Free ressources:*/
     
    53145320                /*Get inputs and parameters*/
    53155321                element->GetVerticesCoordinates(&xyz_list);
    5316                 Input*  B_input=element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
    5317                 Input*  n_input=element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
    5318                 Input* vx_input=element->GetInput(VxEnum);                 _assert_(vx_input);
    5319                 Input* vy_input=element->GetInput(VyEnum);                 _assert_(vy_input);
    5320                 Input* vz_input;
    5321                 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     5322                Input2*  B_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
     5323                Input2*  n_input=element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
     5324                Input2* vx_input=element->GetInput2(VxEnum);                 _assert_(vx_input);
     5325                Input2* vy_input=element->GetInput2(VyEnum);                 _assert_(vy_input);
     5326                Input2* vz_input;
     5327                if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    53225328
    53235329                /*Fetch number of nodes and dof for this finite element*/
     
    53385344
    53395345                /*Get previous d*/
    5340                 Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
    5341                 Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
    5342                 Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
    5343                 Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
     5346                Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
     5347                Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
     5348                Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
     5349                Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
    53445350                if(dim==3){
    5345                         epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
    5346                         epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
    5347                         epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
     5351                        epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
     5352                        epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
     5353                        epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
    53485354                }
    53495355
    53505356                /*Get tau*/
    5351                 Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
    5352                 Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
    5353                 Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
    5354                 Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
     5357                Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
     5358                Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
     5359                Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
     5360                Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
    53555361                if(dim==3){
    5356                         sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
    5357                         sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
    5358                         sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
     5362                        sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
     5363                        sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
     5364                        sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
    53595365                }
    53605366
     
    54705476                        for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_yy[i]));
    54715477                        for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_xx[i]));
    5472                         element->AddInput(StrainRatexxEnum,d_xx,P1DGEnum);
    5473                         element->AddInput(StrainRateyyEnum,d_yy,P1DGEnum);
    5474                         element->AddInput(StrainRatexyEnum,d_xy,P1DGEnum);
     5478                        element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum);
     5479                        element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum);
     5480                        element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum);
    54755481                }
    54765482                else{
     
    54855491                        Matrix4x4Solve(&d_xz[0],Ke,pe_xz);
    54865492                        Matrix4x4Solve(&d_yz[0],Ke,pe_yz);
    5487                         element->AddInput(StrainRatexxEnum,d_xx,P1DGEnum);
    5488                         element->AddInput(StrainRateyyEnum,d_yy,P1DGEnum);
    5489                         element->AddInput(StrainRatexyEnum,d_xy,P1DGEnum);
    5490                         element->AddInput(StrainRatezzEnum,d_zz,P1DGEnum);
    5491                         element->AddInput(StrainRatexzEnum,d_xz,P1DGEnum);
    5492                         element->AddInput(StrainRateyzEnum,d_yz,P1DGEnum);
     5493                        element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum);
     5494                        element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum);
     5495                        element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum);
     5496                        element->AddInput2(StrainRatezzEnum,d_zz,P1DGEnum);
     5497                        element->AddInput2(StrainRatexzEnum,d_xz,P1DGEnum);
     5498                        element->AddInput2(StrainRateyzEnum,d_yz,P1DGEnum);
    54935499                }
    54945500
     
    55275533                /*Get inputs and parameters*/
    55285534                element->GetVerticesCoordinates(&xyz_list);
    5529                 Input* vx_input=element->GetInput(VxEnum);                 _assert_(vx_input);
    5530                 Input* vy_input=element->GetInput(VyEnum);                 _assert_(vy_input);
    5531                 Input* vz_input=NULL;
    5532                 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
     5535                Input2* vx_input=element->GetInput2(VxEnum);                 _assert_(vx_input);
     5536                Input2* vy_input=element->GetInput2(VyEnum);                 _assert_(vy_input);
     5537                Input2* vz_input=NULL;
     5538                if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
    55335539
    55345540                /*Get previous tau*/
    5535                 Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
    5536                 Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
    5537                 Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
    5538                 Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
     5541                Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
     5542                Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
     5543                Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
     5544                Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
    55395545                if(dim==3){
    5540                         sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
    5541                         sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
    5542                         sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
     5546                        sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
     5547                        sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
     5548                        sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
    55435549                }
    55445550
    55455551                /*Get NEW d*/
    5546                 Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
    5547                 Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
    5548                 Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
    5549                 Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
     5552                Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
     5553                Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
     5554                Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
     5555                Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
    55505556                if(dim==3){
    5551                         epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
    5552                         epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
    5553                         epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
     5557                        epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
     5558                        epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
     5559                        epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
    55545560                }
    55555561
     
    56205626
    56215627                /*Add inputs*/
    5622                 element->AddInput(DeviatoricStressxxEnum,tau_xx,P1DGEnum);
    5623                 element->AddInput(DeviatoricStressyyEnum,tau_yy,P1DGEnum);
    5624                 element->AddInput(DeviatoricStressxyEnum,tau_xy,P1DGEnum);
     5628                element->AddInput2(DeviatoricStressxxEnum,tau_xx,P1DGEnum);
     5629                element->AddInput2(DeviatoricStressyyEnum,tau_yy,P1DGEnum);
     5630                element->AddInput2(DeviatoricStressxyEnum,tau_xy,P1DGEnum);
    56255631                if(dim==3){
    5626                         element->AddInput(DeviatoricStresszzEnum,tau_zz,P1DGEnum);
    5627                         element->AddInput(DeviatoricStressxzEnum,tau_xz,P1DGEnum);
    5628                         element->AddInput(DeviatoricStressyzEnum,tau_yz,P1DGEnum);
     5632                        element->AddInput2(DeviatoricStresszzEnum,tau_zz,P1DGEnum);
     5633                        element->AddInput2(DeviatoricStressxzEnum,tau_xz,P1DGEnum);
     5634                        element->AddInput2(DeviatoricStressyzEnum,tau_yz,P1DGEnum);
    56295635                }
    56305636
     
    57525758
    57535759        /*If on water or not FS, skip stiffness: */
    5754         element->GetInputValue(&approximation,ApproximationEnum);
     5760        element->GetInput2Value(&approximation,ApproximationEnum);
    57555761        if(element->IsFloating() || !element->IsOnBase()) return NULL;
    57565762
     
    57845790        element->GetVerticesCoordinatesBase(&xyz_list_tria);
    57855791        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    5786         Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
    5787         Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
    5788         Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
     5792        Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
     5793        Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
     5794        Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
    57895795
    57905796        /*build friction object, used later on: */
     
    59055911        element->GetVerticesCoordinates(&xyz_list);
    59065912        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    5907         Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
    5908         Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
    5909         Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
     5913        Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
     5914        Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
     5915        Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
    59105916
    59115917        /* Start  looping on the number of gaussian points: */
     
    60926098        /* Get node coordinates and dof list: */
    60936099        element->GetVerticesCoordinates(&xyz_list);
    6094         Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
    6095         Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
     6100        Input2* vx_input   =element->GetInput2(VxEnum);       _assert_(vx_input);
     6101        Input2* vy_input   =element->GetInput2(VyEnum);       _assert_(vy_input);
    60966102
    60976103        /* Start  looping on the number of gaussian points: */
     
    62456251        /*Initialize Element matrix*/
    62466252        ElementMatrix* Ke=basaltria->NewElementMatrix(SSAApproximationEnum);
    6247         element->GetInputValue(&approximation,ApproximationEnum);
     6253        element->GetInput2Value(&approximation,ApproximationEnum);
    62486254
    62496255        /*Retrieve all inputs and parameters*/
    62506256        element->GetVerticesCoordinates(&xyz_list);
    6251         Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
    6252         Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
    6253         Input* vz_input   =element->GetInput(VzEnum);       _assert_(vz_input);
     6257        Input2* vx_input   =element->GetInput2(VxEnum);       _assert_(vx_input);
     6258        Input2* vy_input   =element->GetInput2(VyEnum);       _assert_(vy_input);
     6259        Input2* vz_input   =element->GetInput2(VzEnum);       _assert_(vz_input);
    62546260
    62556261        /* Start  looping on the number of gaussian points: */
     
    63266332        /*Initialize Element vector and return if necessary*/
    63276333        if(!element->IsOnBase() || element->IsFloating()) return NULL;
    6328         element->GetInputValue(&approximation,ApproximationEnum);
     6334        element->GetInput2Value(&approximation,ApproximationEnum);
    63296335        if(approximation!=HOFSApproximationEnum) return NULL;
    63306336
     
    63516357        element->GetVerticesCoordinatesBase(&xyz_list_tria);
    63526358        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    6353         Input* vx_input=  element->GetInput(VxEnum);   _assert_(vx_input);
    6354         Input* vy_input=  element->GetInput(VyEnum);   _assert_(vy_input);
    6355         Input* vz_input=  element->GetInput(VzEnum);   _assert_(vz_input);
    6356         Input* vzHO_input=element->GetInput(VzHOEnum); _assert_(vzHO_input);
     6359        Input2* vx_input=  element->GetInput2(VxEnum);   _assert_(vx_input);
     6360        Input2* vy_input=  element->GetInput2(VyEnum);   _assert_(vy_input);
     6361        Input2* vz_input=  element->GetInput2(VzEnum);   _assert_(vz_input);
     6362        Input2* vzHO_input=element->GetInput2(VzHOEnum); _assert_(vzHO_input);
    63576363
    63586364        /*build friction object, used later on: */
     
    64096415
    64106416        /*Initialize Element vector and return if necessary*/
    6411         element->GetInputValue(&approximation,ApproximationEnum);
     6417        element->GetInput2Value(&approximation,ApproximationEnum);
    64126418        if(approximation!=HOFSApproximationEnum) return NULL;
    64136419        int   vnumnodes = element->NumberofNodesVelocity();
     
    64306436        element->GetVerticesCoordinates(&xyz_list);
    64316437        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    6432         Input* vx_input   =element->GetInput(VxEnum);   _assert_(vx_input);
    6433         Input* vy_input   =element->GetInput(VyEnum);   _assert_(vy_input);
    6434         Input* vz_input   =element->GetInput(VzEnum);   _assert_(vz_input);
    6435         Input* vzHO_input=element->GetInput(VzHOEnum);  _assert_(vzHO_input);
     6438        Input2* vx_input   =element->GetInput2(VxEnum);   _assert_(vx_input);
     6439        Input2* vy_input   =element->GetInput2(VyEnum);   _assert_(vy_input);
     6440        Input2* vz_input   =element->GetInput2(VzEnum);   _assert_(vz_input);
     6441        Input2* vzHO_input=element->GetInput2(VzHOEnum);  _assert_(vzHO_input);
    64366442
    64376443        /* Start  looping on the number of gaussian points: */
     
    64966502        /*Initialize Element vector and return if necessary*/
    64976503        if(!element->IsOnBase() || element->IsFloating()) return NULL;
    6498         element->GetInputValue(&approximation,ApproximationEnum);
     6504        element->GetInput2Value(&approximation,ApproximationEnum);
    64996505        if(approximation!=SSAFSApproximationEnum) return NULL;
    65006506        int vnumnodes = element->NumberofNodesVelocity();
     
    65186524        element->GetVerticesCoordinatesBase(&xyz_list_tria);
    65196525        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    6520         Input* vx_input=   element->GetInput(VxEnum);    _assert_(vx_input);
    6521         Input* vy_input=   element->GetInput(VyEnum);    _assert_(vy_input);
    6522         Input* vz_input=   element->GetInput(VzEnum);    _assert_(vz_input);
    6523         Input* vzSSA_input=element->GetInput(VzSSAEnum); _assert_(vzSSA_input);
     6526        Input2* vx_input=   element->GetInput2(VxEnum);    _assert_(vx_input);
     6527        Input2* vy_input=   element->GetInput2(VyEnum);    _assert_(vy_input);
     6528        Input2* vz_input=   element->GetInput2(VzEnum);    _assert_(vz_input);
     6529        Input2* vzSSA_input=element->GetInput2(VzSSAEnum); _assert_(vzSSA_input);
    65246530
    65256531        /*build friction object, used later on: */
     
    65756581
    65766582        /*Initialize Element vector and return if necessary*/
    6577         element->GetInputValue(&approximation,ApproximationEnum);
     6583        element->GetInput2Value(&approximation,ApproximationEnum);
    65786584        if(approximation!=SSAFSApproximationEnum) return NULL;
    65796585        int vnumnodes = element->NumberofNodesVelocity();
     
    65966602        element->GetVerticesCoordinates(&xyz_list);
    65976603        element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    6598         Input* vx_input   =element->GetInput(VxEnum);      _assert_(vx_input);
    6599         Input* vy_input   =element->GetInput(VyEnum);      _assert_(vy_input);
    6600         Input* vz_input   =element->GetInput(VzEnum);      _assert_(vz_input);
    6601         Input* vzSSA_input=element->GetInput(VzSSAEnum);   _assert_(vzSSA_input);
     6604        Input2* vx_input   =element->GetInput2(VxEnum);      _assert_(vx_input);
     6605        Input2* vy_input   =element->GetInput2(VyEnum);      _assert_(vy_input);
     6606        Input2* vz_input   =element->GetInput2(VzEnum);      _assert_(vz_input);
     6607        Input2* vzSSA_input=element->GetInput2(VzSSAEnum);   _assert_(vzSSA_input);
    66026608
    66036609        /* Start  looping on the number of gaussian points: */
     
    71927198
    71937199        /*Add vx and vy as inputs to element: */
    7194         element->AddInput(VxEnum,vx,P1Enum);
    7195         element->AddInput(VyEnum,vy,P1Enum);
    7196         element->AddInput(VzEnum,vz,P1Enum);
    7197         element->AddInput(VzFSEnum,vzFS,P1Enum);
    7198         element->AddInput(VelEnum,vel,P1Enum);
    7199         element->AddInput(PressureEnum,pressure,P1Enum);
     7200        element->AddInput2(VxEnum,vx,P1Enum);
     7201        element->AddInput2(VyEnum,vy,P1Enum);
     7202        element->AddInput2(VzEnum,vz,P1Enum);
     7203        element->AddInput2(VzFSEnum,vzFS,P1Enum);
     7204        element->AddInput2(VelEnum,vel,P1Enum);
     7205        //element->AddInput2(PressureEnum,pressure,P1Enum);
    72007206
    72017207        /*Free ressources:*/
     
    72957301
    72967302        /*Add vx and vy as inputs to element: */
    7297         element->AddInput(VxEnum,vx,P1Enum);
    7298         element->AddInput(VyEnum,vy,P1Enum);
    7299         element->AddInput(VzEnum,vz,P1Enum);
    7300         element->AddInput(VzFSEnum,vzFS,P1Enum);
    7301         element->AddInput(VelEnum,vel,P1Enum);
    7302         element->AddInput(PressureEnum,pressure,P1Enum);
     7303        element->AddInput2(VxEnum,vx,P1Enum);
     7304        element->AddInput2(VyEnum,vy,P1Enum);
     7305        element->AddInput2(VzEnum,vz,P1Enum);
     7306        element->AddInput2(VzFSEnum,vzFS,P1Enum);
     7307        element->AddInput2(VelEnum,vel,P1Enum);
     7308        //element->AddInput2(PressureEnum,pressure,P1Enum);
    73037309
    73047310        /*Free ressources:*/
     
    73887394
    73897395        /*Add vx and vy as inputs to element: */
    7390         element->AddInput(VxEnum,vx,P1Enum);
    7391         element->AddInput(VyEnum,vy,P1Enum);
    7392         element->AddInput(VelEnum,vel,P1Enum);
    7393         element->AddInput(PressureEnum,pressure,P1Enum);
     7396        element->AddInput2(VxEnum,vx,P1Enum);
     7397        element->AddInput2(VyEnum,vy,P1Enum);
     7398        element->AddInput2(VelEnum,vel,P1Enum);
     7399        element->AddInput2(PressureEnum,pressure,P1Enum);
    73947400
    73957401        /*Free ressources:*/
Note: See TracChangeset for help on using the changeset viewer.