Changeset 17375


Ignore:
Timestamp:
03/03/14 15:36:12 (11 years ago)
Author:
bdef
Message:

CHG: change input managment in Hydro

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

Legend:

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

    r17372 r17375  
    156156        basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
    157157        Input* thickness_input = basalelement->GetInput(HydrologydcEplThicknessEnum);          _assert_(thickness_input);
     158        Input* sed_head_input  = basalelement->GetInput(SedimentHeadEnum);
     159        Input* epl_head_input  = basalelement->GetInput(EplHeadEnum);
     160        Input* sed_trans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum);
     161        Input* residual_input  = basalelement->GetInput(SedimentHeadResidualEnum);
     162
    158163        IssmDouble epl_specificstoring   = EplSpecificStoring(basalelement);
    159164        IssmDouble epl_conductivity      = basalelement->GetMaterialParameter(HydrologydcEplConductivityEnum);
     
    187192                       
    188193                        /*Transfer EPL part*/
    189                         transfer=GetHydrologyKMatrixTransfer(basalelement,gauss);
     194                        transfer=GetHydrologyKMatrixTransfer(basalelement,gauss,thickness_input,sed_head_input,epl_head_input,sed_trans_input,residual_input);
    190195                        D_scalar=transfer*gauss->weight*Jdet*dt;
    191196                        TripleMultiply(basis,numnodes,1,0,
     
    258263        basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 
    259264
     265        Input* thickness_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness_input);
     266        Input* sed_head_input  = basalelement->GetInput(SedimentHeadEnum);
     267        Input* epl_head_input  = basalelement->GetInput(EplHeadEnum);
     268        Input* sed_trans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum);
    260269        Input* residual_input  = basalelement->GetInput(SedimentHeadResidualEnum);    _assert_(residual_input);
    261         Input* thickness_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness_input);
    262270        if(dt!= 0.){old_wh_input = basalelement->GetInput(EplHeadOldEnum);            _assert_(old_wh_input);}
    263271
     
    278286                       
    279287                        /*Dealing with the sediment part of the transfer term*/
    280                         transfer=GetHydrologyPVectorTransfer(basalelement,gauss);
     288                        transfer=GetHydrologyPVectorTransfer(basalelement,gauss,thickness_input,sed_head_input,epl_head_input,sed_trans_input,residual_input);
    281289                        scalar = Jdet*gauss->weight*((water_head*epl_specificstoring*epl_thickness)+(transfer*dt));
    282290                        for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
     
    367375        return rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));               
    368376}/*}}}*/
    369 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss){/*{{{*/
     377IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* residual_input){/*{{{*/
    370378       
    371379        int transfermethod;
     
    387395                break;
    388396        case 1:
    389                 /* _assert_(input) */
     397                _assert_(epl_thick_input);
     398                _assert_(sed_head_input);
     399                _assert_(epl_head_input);
     400                _assert_(sed_trans_input);
     401                _assert_(residual_input);
    390402                /* get input */
    391 
    392                 element->GetInputValue(&epl_thickness,gauss,HydrologydcEplThicknessEnum);
    393                 element->GetInputValue(&sed_head,gauss,SedimentHeadEnum);
    394                 element->GetInputValue(&epl_head,gauss,EplHeadEnum);
    395                 element->GetInputValue(&sediment_transmitivity,gauss,HydrologydcSedimentTransmitivityEnum);
    396                 element->GetInputValue(&residual,gauss,SedimentHeadResidualEnum);
     403                epl_thick_input->GetInputValue(&epl_thickness,gauss);
     404                sed_head_input->GetInputValue(&sed_head,gauss);
     405                epl_head_input->GetInputValue(&epl_head,gauss);
     406                sed_trans_input->GetInputValue(&sediment_transmitivity,gauss);
     407                residual_input->GetInputValue(&residual,gauss);
    397408                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
    398409
     
    415426        return transfer;
    416427}/*}}}*/
    417 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss){/*{{{*/
     428IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* residual_input){/*{{{*/
    418429
    419430        int transfermethod;
     
    435446                break;
    436447        case 1:
    437 
    438                 element->GetInputValue(&epl_thickness,gauss,HydrologydcEplThicknessEnum);
    439                 element->GetInputValue(&sediment_head,gauss,SedimentHeadEnum);
    440                 element->GetInputValue(&epl_head,gauss,EplHeadEnum);
    441                 element->GetInputValue(&sediment_transmitivity,gauss,HydrologydcSedimentTransmitivityEnum);
    442                 element->GetInputValue(&residual,gauss,SedimentHeadResidualEnum);
     448                _assert_(epl_thick_input);
     449                _assert_(sed_head_input);
     450                _assert_(epl_head_input);
     451                _assert_(sed_trans_input);
     452                _assert_(residual_input);
     453                /* get input */
     454                epl_thick_input->GetInputValue(&epl_thickness,gauss);
     455                sed_head_input->GetInputValue(&sediment_head,gauss);
     456                epl_head_input->GetInputValue(&epl_head,gauss);
     457                sed_trans_input->GetInputValue(&sediment_transmitivity,gauss);
     458                residual_input->GetInputValue(&residual,gauss);
    443459                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
    444460               
     
    618634
    619635        basalelement-> GetInputListOnVertices(&old_active[0],HydrologydcMaskEplactiveNodeEnum);
    620         basalelement->  GetInputListOnVertices(&epl_thickness[0],HydrologydcEplThicknessEnum); 
    621         basalelement->  GetInputListOnVertices(&sedhead[0],SedimentHeadEnum);
    622         basalelement->  GetInputListOnVertices(&eplhead[0],EplHeadEnum);
    623         basalelement->  GetInputListOnVertices(&residual[0],SedimentHeadResidualEnum);
     636        basalelement-> GetInputListOnVertices(&epl_thickness[0],HydrologydcEplThicknessEnum);   
     637        basalelement-> GetInputListOnVertices(&sedhead[0],SedimentHeadEnum);
     638        basalelement-> GetInputListOnVertices(&eplhead[0],EplHeadEnum);
     639        basalelement-> GetInputListOnVertices(&residual[0],SedimentHeadResidualEnum);
    624640
    625641        /*Get minimum sediment head of the element*/
     
    703719}
    704720
    705 void  HydrologyDCEfficientAnalysis::GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode){/*{{{*/
     721void HydrologyDCEfficientAnalysis::GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode){/*{{{*/
    706722       
    707723        int        hmax_flag;
     
    724740                rho_water = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
    725741                rho_ice   = element->GetMaterialParameter(MaterialsRhoIceEnum);
    726                 element->GetInputValue(&thickness,innode,ThicknessEnum);
    727                 element->GetInputValue(&bed,innode,BedEnum);
     742                element-> GetInputValue(&thickness,innode,ThicknessEnum);
     743                element-> GetInputValue(&bed,innode,BedEnum);
    728744                h_max=((rho_ice*thickness)/rho_water)+bed;
    729745                break;
  • issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h

    r17372 r17375  
    88/*Headers*/
    99#include "./Analysis.h"
    10 class Node;
     10class Node;
     11class Input;
    1112class HydrologyDCEfficientAnalysis: public Analysis{
    1213
     
    3435                IssmDouble EplSpecificStoring(Element* element);
    3536                IssmDouble SedimentStoring(Element* element);
    36                 IssmDouble GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss);
    37                 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss);
     37                IssmDouble GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* residual_input);
     38                IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* residual_input);
    3839                void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask,Element* element);
    3940                void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element);
  • issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp

    r17372 r17375  
    195195        basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    196196
    197         Input* SedTrans_input       = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
     197        Input* epl_thick_input   = basalelement->GetInput(HydrologydcEplThicknessEnum);
     198        Input* sed_head_input    = basalelement->GetInput(SedimentHeadEnum);
     199        Input* epl_head_input    = basalelement->GetInput(EplHeadEnum);
     200        Input* thickness_input   = basalelement->GetInput(ThicknessEnum);
     201        Input* bed_input         = basalelement->GetInput(BedEnum);
     202        Input* SedTrans_input    = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
    198203        IssmDouble sediment_storing = SedimentStoring(basalelement);
    199204        /*Transfer related Inputs*/
     
    233238                                active_element_input->GetInputValue(&active_element);
    234239                                if(active_element){
    235                                         transfer=GetHydrologyKMatrixTransfer(basalelement,gauss);
     240                                        transfer=GetHydrologyKMatrixTransfer(basalelement,gauss,epl_thick_input,sed_head_input,epl_head_input,SedTrans_input,thickness_input,bed_input);
    236241                                        basalelement->NodalFunctions(&basis[0],gauss);
    237242                                        D_scalar=transfer*gauss->weight*Jdet*dt;
     
    293298        basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    294299
     300        Input* epl_thick_input   = basalelement->GetInput(HydrologydcEplThicknessEnum);
     301        Input* sed_head_input    = basalelement->GetInput(SedimentHeadEnum);
     302        Input* epl_head_input    = basalelement->GetInput(EplHeadEnum);
     303        Input* sed_trans_input   = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum);
     304        Input* thickness_input   = basalelement->GetInput(ThicknessEnum);
     305        Input* bed_input         = basalelement->GetInput(BedEnum);
    295306        Input* water_input       = basalelement->GetInput(BasalforcingsMeltingRateEnum); _assert_(water_input);
    296307        if(dt!= 0.){old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);          _assert_(old_wh_input);}
     
    327338                                active_element_input->GetInputValue(&active_element);
    328339                                if(active_element){
    329                                         transfer=GetHydrologyPVectorTransfer(basalelement,gauss);
     340                                        transfer=GetHydrologyPVectorTransfer(basalelement,gauss,epl_thick_input,sed_head_input,epl_head_input,sed_trans_input,thickness_input,bed_input);
    330341                                }
    331342                                else{
     
    461472}/*}}}*/
    462473
    463 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss){/*{{{*/
     474IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss, Input* thick_input, Input* bed_input){/*{{{*/
    464475        int        hmax_flag;
    465476        IssmDouble h_max;
     
    482493                rho_ice   = element->GetMaterialParameter(MaterialsRhoIceEnum);
    483494
     495                _assert_(thick_input);
     496                _assert_(bed_input);
     497
    484498                /*Compute max*/
    485                 /* thick_input->GetInputValue(&thickness,gauss); */
    486                 /* bed_input->GetInputValue(&bed,gauss); */
    487                 element->GetInputValue(&thickness,gauss,ThicknessEnum);
    488                 element->GetInputValue(&bed,gauss,BedEnum);
     499                thick_input->GetInputValue(&thickness,gauss);
     500                bed_input->GetInputValue(&bed,gauss);
    489501                h_max=((rho_ice*thickness)/rho_water)+bed;
    490502                break;
     
    532544}
    533545/*}}}*/
    534 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss){/*{{{*/
     546IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* thickness_input, Input* bed_input){/*{{{*/
    535547
    536548        int transfermethod;
     
    552564                break;
    553565        case 1:
    554 
    555                 element->GetInputValue(&epl_thickness,gauss,HydrologydcEplThicknessEnum);
    556                 element->GetInputValue(&sed_head,gauss,SedimentHeadEnum);
    557                 element->GetInputValue(&epl_head,gauss,EplHeadEnum);
    558                 element->GetInputValue(&sediment_transmitivity,gauss,HydrologydcSedimentTransmitivityEnum);
    559566               
     567                _assert_(epl_thick_input);
     568                _assert_(sed_head_input);
     569                _assert_(epl_head_input);
     570                _assert_(sed_trans_input);
     571                _assert_(thickness_input);
     572                _assert_(bed_input);
     573
     574                epl_thick_input->GetInputValue(&epl_thickness,gauss);
     575                sed_head_input->GetInputValue(&sed_head,gauss);
     576                epl_head_input->GetInputValue(&epl_head,gauss);
     577                sed_trans_input->GetInputValue(&sediment_transmitivity,gauss);
    560578                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
    561579       
    562580                if(epl_head>sed_head){
    563                         h_max=GetHydrologyDCInefficientHmax(element,gauss);
     581                        h_max=GetHydrologyDCInefficientHmax(element,gauss,thickness_input,bed_input);
    564582                        if(sed_head>=h_max){
    565583                                transfer=0.0;
     
    580598}/*}}}*/
    581599
    582 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss){/*{{{*/
     600IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* thickness_input, Input* bed_input){/*{{{*/
    583601
    584602        int transfermethod;
     
    600618                break;
    601619        case 1:
    602 
    603                 element->GetInputValue(&epl_thickness,gauss,HydrologydcEplThicknessEnum);
    604                 element->GetInputValue(&sediment_head,gauss,SedimentHeadEnum);
    605                 element->GetInputValue(&epl_head,gauss,EplHeadEnum);
    606                 element->GetInputValue(&sediment_transmitivity,gauss,HydrologydcSedimentTransmitivityEnum);
    607620               
     621                _assert_(epl_thick_input);
     622                _assert_(sed_head_input);
     623                _assert_(epl_head_input);
     624                _assert_(sed_trans_input);
     625                _assert_(thickness_input);
     626                _assert_(bed_input);
     627
     628                epl_thick_input->GetInputValue(&epl_thickness,gauss);
     629                sed_head_input->GetInputValue(&sediment_head,gauss);
     630                epl_head_input->GetInputValue(&epl_head,gauss);
     631                sed_trans_input->GetInputValue(&sediment_transmitivity,gauss);
     632
    608633                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
     634
    609635                if(epl_head>sediment_head){
    610                         h_max=GetHydrologyDCInefficientHmax(element,gauss);
     636                        h_max=GetHydrologyDCInefficientHmax(element,gauss,thickness_input,bed_input);
    611637                        if(sediment_head>=h_max){
    612638                                transfer=0.0;
  • issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h

    r17372 r17375  
    99#include "./Analysis.h"
    1010class Node;
     11class Input;
    1112class HydrologyDCInefficientAnalysis: public Analysis{
    1213
     
    3435                IssmDouble SedimentStoring(Element* element);
    3536                IssmDouble EplSpecificStoring(Element* element);
    36                 IssmDouble GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss);
     37                IssmDouble GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss, Input* thickness_input, Input* bed_input);
    3738                void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode);
    38                 IssmDouble GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss);
    39                 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss);
     39                IssmDouble GetHydrologyKMatrixTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* thickness_input, Input* bed_input);
     40                IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_thick_input, Input* sed_head_input, Input* epl_head_input, Input* sed_trans_input, Input* thickness_input, Input* bed_input);
    4041                void ElementizeEplMask(FemModel* femmodel);
    4142};
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r17372 r17375  
    150150                void        GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");};
    151151
    152                 //void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){_error_("not implemented yet");};
    153                 //void    HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){_error_("not implemented yet");};
    154                 //void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask){_error_("not implemented yet");};
    155                 //              void    ComputeEPLThickness(void){_error_("not implemented yet");};
    156                
    157152                void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
    158153                void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
Note: See TracChangeset for help on using the changeset viewer.