Changeset 21329


Ignore:
Timestamp:
10/30/16 22:36:56 (8 years ago)
Author:
Eric.Larour
Message:

CHG: run_frequency variable in slr class, to run transient only incrementally.

Location:
issm/branches/trunk-larour-NatGeoScience2016/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/analyses/SealevelriseAnalysis.cpp

    r21327 r21329  
    1919}/*}}}*/
    2020void SealevelriseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
     21
    2122
    2223        /*Update elements: */
     
    3839        iomodel->FetchDataToInput(elements,"md.slr.spcthickness",SealevelriseSpcthicknessEnum);
    3940        iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
    40 
     41       
     42        /*Initialize cumdeltalthickness input: unfortunately, we don't have femmodel, so we need to iterate on
     43         *elements, otherwise we would have used InputUpdateFromConstantx: */
     44        for(int i=0;i<iomodel->numberofelements;i++){
     45                if(iomodel->my_elements[i]){
     46                        Element* element=(Element*)elements->GetObjectByOffset(counter);
     47                        element->InputUpdateFromConstant(0,SealevelriseCumDeltathicknessEnum);
     48                        counter++;
     49                }
     50        }
     51       
    4152}/*}}}*/
    4253void SealevelriseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
     
    7485        parameters->AddObject(iomodel->CopyConstantObject("md.slr.ocean_area_scaling",SealevelriseOceanAreaScalingEnum));
    7586        parameters->AddObject(iomodel->CopyConstantObject("md.slr.steric_rate",SealevelriseStericRateEnum));
     87        parameters->AddObject(iomodel->CopyConstantObject("md.slr.run_frequency",SealevelriseRunFrequencyEnum));
     88        parameters->SetParam(1,SealevelriseRunCountEnum);
    7689
    7790        iomodel->FetchData(&elastic,"md.slr.elastic");
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/cores.h

    r21311 r21329  
    6565void TransferSealevel(FemModel* femmodel,int forcingenum);
    6666void EarthMassTransport(FemModel* femmodel);
     67bool SlrAccumulateDeltaThickness(FemModel* femmodel);
    6768
    6869//solution configuration
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/sealevelrise_core.cpp

    r21326 r21329  
    8888
    8989        /*call sea-level rise sub cores:*/
    90         if(isslr){
     90        if(isslr && !SlrAccumulateDeltaThickness(femmodel)){
     91
    9192                Sg_eustatic=sealevelrise_core_eustatic(femmodel); //generalized eustatic (Farrel and Clark, Eq 4, 1st, 3rd and 4rd terms on the RHS.
    9293
     
    412413
    413414} /*}}}*/
     415bool SlrAccumulateDeltaThickness(FemModel* femmodel){ /*{{{*/
     416
     417        Vector<IssmDouble>* deltathickness=NULL;
     418        Vector<IssmDouble>* cumdeltathickness=NULL;
     419        IssmDouble frequency=1;
     420        int count;
     421       
     422        femmodel->parameters->FindParam(&frequency,SealevelriseRunFrequencyEnum);
     423        femmodel->parameters->FindParam(&count,SealevelriseRunCountEnum);
     424
     425        if (count==frequency){
     426                femmodel->parameters->SetParam(1,SealevelriseRunCountEnum); //reset counter.
     427               
     428                /*increment delta thickness load: */
     429                GetVectorFromInputsx(&cumdeltathickness,femmodel,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
     430                GetVectorFromInputsx(&deltathickness,femmodel,SealevelriseDeltathicknessEnum,VertexSIdEnum);
     431
     432                cumdeltathickness->AXPY(deltathickness,1);
     433
     434                /*update deltathickness with the final cumulated thickness: */
     435                InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelriseDeltathicknessEnum,VertexSIdEnum);
     436               
     437                /*reset cumulative thickness to 0: */
     438                cumdeltathickness->Set(0);
     439                InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
     440               
     441                delete deltathickness;
     442                delete cumdeltathickness;
     443
     444                return false;
     445        }
     446        else{
     447                count++;
     448                femmodel->parameters->SetParam(count,SealevelriseRunCountEnum); //increment counter
     449               
     450                /*increment cumulative delta thickness load: */
     451                GetVectorFromInputsx(&cumdeltathickness,femmodel,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
     452                GetVectorFromInputsx(&deltathickness,femmodel,SealevelriseDeltathicknessEnum,VertexSIdEnum);
     453
     454                cumdeltathickness->AXPY(deltathickness,1);
     455                InputUpdateFromVectorx(femmodel,cumdeltathickness,SealevelriseCumDeltathicknessEnum,VertexSIdEnum);
     456               
     457                delete deltathickness;
     458                delete cumdeltathickness;
     459
     460                return true;
     461        }
     462
     463} /*}}}*/
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp

    r20690 r21329  
    1717                iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum);
    1818        }
     19       
    1920}
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumDefinitions.h

    r21326 r21329  
    767767        SealevelEustaticEnum,
    768768        SealevelriseDeltathicknessEnum,
     769        SealevelriseCumDeltathicknessEnum,
    769770        SealevelriseSpcthicknessEnum,
    770771        SealevelriseMaxiterEnum,
     
    775776        SealevelriseOceanAreaScalingEnum,
    776777        SealevelriseStericRateEnum,
     778        SealevelriseRunFrequencyEnum,
     779        SealevelriseRunCountEnum,
    777780        SealevelriseGElasticEnum,
    778781        SealevelriseUElasticEnum,
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumToStringx.cpp

    r21326 r21329  
    748748                case SealevelEustaticEnum : return "SealevelEustatic";
    749749                case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
     750                case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness";
    750751                case SealevelriseSpcthicknessEnum : return "SealevelriseSpcthickness";
    751752                case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
     
    756757                case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
    757758                case SealevelriseStericRateEnum : return "SealevelriseStericRate";
     759                case SealevelriseRunFrequencyEnum : return "SealevelriseRunFrequency";
     760                case SealevelriseRunCountEnum : return "SealevelriseRunCount";
    758761                case SealevelriseGElasticEnum : return "SealevelriseGElastic";
    759762                case SealevelriseUElasticEnum : return "SealevelriseUElastic";
  • issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/StringToEnumx.cpp

    r21326 r21329  
    766766              else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
    767767              else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
     768              else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum;
    768769              else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum;
    769770              else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
     
    774775              else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
    775776              else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
     777              else if (strcmp(name,"SealevelriseRunFrequency")==0) return SealevelriseRunFrequencyEnum;
     778              else if (strcmp(name,"SealevelriseRunCount")==0) return SealevelriseRunCountEnum;
    776779              else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
    777780              else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
     
    872875              else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
    873876              else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
    874               else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
    875               else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
    876               else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
     880              if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
     881              else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
     882              else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
     883              else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
    881884              else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
    882885              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
  • issm/branches/trunk-larour-NatGeoScience2016/src/m/classes/slr.m

    r21328 r21329  
    2222                ocean_area_scaling = 0;
    2323                steric_rate    = 0; %rate of ocean expansion from steric effects.
     24                run_frequency  = 1; %how many time steps we skip before we run SLR solver during transient
    2425                degacc         = 0;
    2526                requested_outputs      = {};
     
    5960                %steric:
    6061                self.steric_rate=0;
    61                
     62       
     63                %how many time steps we skip before we run SLR solver during transient
     64                self.run_frequency=1;
     65       
    6266                %output default:
    6367                self.requested_outputs={'default'};
     
    8286                        md = checkfield(md,'fieldname','slr.maxiter','size',[1 1],'>=',1);
    8387                        md = checkfield(md,'fieldname','slr.steric_rate','size',[1 1]);
     88                        md = checkfield(md,'fieldname','slr.run_frequency','size',[1 1],'>=',1);
    8489                        md = checkfield(md,'fieldname','slr.degacc','size',[1 1],'>=',1e-10);
    8590                        md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
     
    119124                        fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]');
    120125                        fielddisplay(self,'steric_rate','rate of steric ocean expansion (in mm/yr)');
     126                        fielddisplay(self,'run_frequency','how many time steps we skip before we run SLR solver during transient (default: 1)');
    121127                        fielddisplay(self,'rigid','rigid earth graviational potential perturbation');
    122128                        fielddisplay(self,'elastic','elastic earth graviational potential perturbation');
     
    143149                        WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean');
    144150                        WriteData(fid,prefix,'object',self,'fieldname','steric_rate','format','Double','scale',1e-3/md.constants.yts);
     151                        WriteData(fid,prefix,'object',self,'fieldname','run_frequency','format','Integer');
    145152                        WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
    146153                        WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
     
    173180                        writejsdouble(fid,[modelname '.slr.ocean_area_scaling'],self.ocean_area_scaling);
    174181                        writejsdouble(fid,[modelname '.slr.steric_rate'],self.steric_rate);
     182                        writejsdouble(fid,[modelname '.slr.run_frequency'],self.run_frequency);
    175183                        writejsdouble(fid,[modelname '.slr.elastic'],self.elastic);
    176184                        writejsdouble(fid,[modelname '.slr.degacc'],self.degacc);
  • issm/branches/trunk-larour-NatGeoScience2016/src/m/plot/plot_contour.m

    r16592 r21329  
    247247        else
    248248                %clabel(c,h,'color',color,'FontSize',10,'labelspacing',20000);
    249                 clabel(c,h,'FontSize',10,'labelspacing',20000);
    250         end
    251 end
     249                %clabel(c,h,'FontSize',10,'labelspacing',20000);
     250        end
     251end
Note: See TracChangeset for help on using the changeset viewer.