Changeset 15893


Ignore:
Timestamp:
08/23/13 07:26:55 (12 years ago)
Author:
jbondzio
Message:

ADD: Penta::DrainWaterfraction implements drainage of excess water fraction in enthalpy module.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r15877 r15893  
    52365236        /* Intermediaries */
    52375237        bool        isenthalpy;
    5238         int         i,j,analysis_type,numindices,numindicesup;
     5238        int         i,j,ig,analysis_type,numindices,numindicesup;
    52395239        IssmDouble  xyz_list[NUMVERTICES][3];
    52405240        IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
     
    52835283        _assert_(numindices==numindicesup);
    52845284
    5285         /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     5285        /*Ok, get meltrates now from basal conditions*/
    52865286        GaussPenta* gauss=new GaussPenta();
    52875287        GaussPenta* gaussup=new GaussPenta();
    5288         for(i=0;i<numindices;i++){
    5289                 gauss->GaussNode(this->element_type,indices[i]);
    5290                 gaussup->GaussNode(this->element_type,indicesup[i]);
     5288        for(ig=0;ig<numindices;ig++){
     5289                gauss->GaussNode(this->element_type,indices[ig]);
     5290                gaussup->GaussNode(this->element_type,indicesup[ig]);
    52915291
    52925292                watercolumn_input->GetInputValue(&watercolumn, gauss);
     
    53085308                pressure_input->GetInputValue(&pressureup, gaussup);   
    53095309                if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
    5310                 for(i=0;i<3;i++) vec_heatflux[i]=0.;
     5310            for(i=0;i<3;i++) vec_heatflux[i]=0.;
    53115311                }
    53125312                else{
     
    53465346        delete gauss;
    53475347        delete gaussup;
     5348}
     5349/*}}}*/
     5350/*FUNCTION Penta::DrainWaterfraction{{{*/
     5351void Penta::DrainWaterfraction(void){
     5352   
     5353// TODO: create vector to mark whether node has been drained already i.o. to not drain nodes multiple times
     5354
     5355    /*Intermediaries*/
     5356    const int numdof=NDOF1*NUMVERTICES;
     5357    int ig;
     5358    bool isenthalpy;
     5359    IssmDouble waterfraction, temperature;
     5360    IssmDouble enthalpy, pressure;
     5361    IssmDouble latentheat, dt;
     5362
     5363    Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
     5364        Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
     5365    Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
     5366   
     5367    /*Check wether enthalpy is activated*/
     5368        parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
     5369        if(!isenthalpy) return;       
     5370    this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     5371   
     5372    GaussPenta* gauss=new GaussPenta(2,3);
     5373    for(ig=gauss->begin();ig<gauss->end();ig++){
     5374        gauss->GaussPoint(ig);
     5375       
     5376        enthalpy_input->GetInputValue(&enthalpy, gauss);
     5377        pressure_input->GetInputValue(&pressure, gauss);
     5378        matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure);
     5379   
     5380        /*drain water fraction*/
     5381        waterfraction-=dt*DrainageFunctionWaterfraction(waterfraction);
     5382        if(waterfraction<0) waterfraction=0.;
     5383        /*update enthalpy*/
     5384        latentheat=matpar->GetLatentHeat();
     5385        matpar->ThermalToEnthalpy(&enthalpy, temperature, waterfraction, pressure);
     5386        //TODO feed result back into model
     5387    }
    53485388}
    53495389/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.