Ignore:
Timestamp:
03/04/15 11:09:39 (10 years ago)
Author:
lemorzad
Message:

new method to interpolate present day temp and prec from delta O18

File:
1 edited

Legend:

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

    r19137 r19172  
    713713        this->inputs->AddInput(NewPrecipitationInput);
    714714       
     715        this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1);
     716        this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1);
     717
     718        /*clean-up*/
     719        delete gauss;
     720}
     721/*}}}*/
     722void       Penta::Delta18opdParameterization(void){/*{{{*/
     723        /*Are we on the base? If not, return*/
     724        if(!IsOnBase()) return;
     725
     726        int        i;
     727        IssmDouble monthlytemperatures[NUMVERTICES][12],monthlyprec[NUMVERTICES][12];
     728        IssmDouble TemperaturesPresentday[NUMVERTICES][12];
     729        IssmDouble PrecipitationsPresentday[NUMVERTICES][12];
     730        IssmDouble tmp[NUMVERTICES];
     731        IssmDouble Delta18oTime;
     732        IssmDouble dpermil;
     733        IssmDouble time,yts;
     734        this->parameters->FindParam(&time,TimeEnum);
     735        this->parameters->FindParam(&yts,ConstantsYtsEnum);
     736
     737        /*Get some pdd parameters*/
     738        dpermil=matpar-> GetMaterialParameter(SurfaceforcingsDpermilEnum);
     739
     740        /*Recover present day temperature and precipitation*/
     741        Input*     input=inputs->GetInput(SurfaceforcingsTemperaturesPresentdayEnum);    _assert_(input);
     742        Input*     input2=inputs->GetInput(SurfaceforcingsPrecipitationsPresentdayEnum); _assert_(input2);
     743        GaussPenta* gauss=new GaussPenta();
     744        for(int month=0;month<12;month++) {
     745                for(int iv=0;iv<NUMVERTICES;iv++) {
     746                        gauss->GaussVertex(iv);
     747                        input->GetInputValue(&TemperaturesPresentday[iv][month],gauss,month/12.*yts);
     748                        input2->GetInputValue(&PrecipitationsPresentday[iv][month],gauss,month/12.*yts);
     749                }
     750        }
     751
     752        /*Recover interpolation parameters at time t*/
     753        this->parameters->FindParam(&Delta18oTime,SurfaceforcingsDelta18oEnum,time);
     754
     755        /*Compute the temperature and precipitation*/
     756        for(int iv=0;iv<NUMVERTICES;iv++){
     757          ComputeD18OTemperaturePrecipitationFromPD(Delta18oTime,dpermil,
     758                                        &PrecipitationsPresentday[iv][0], &TemperaturesPresentday[iv][0],
     759                                        &monthlytemperatures[iv][0], &monthlyprec[iv][0]);
     760        }
     761
     762        /*Update inputs*/
     763        TransientInput* NewTemperatureInput = new TransientInput(SurfaceforcingsMonthlytemperaturesEnum);
     764        TransientInput* NewPrecipitationInput = new TransientInput(SurfaceforcingsPrecipitationEnum);
     765        for (int imonth=0;imonth<12;imonth++) {
     766                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlytemperatures[i][imonth];
     767                PentaInput* newmonthinput1 = new PentaInput(SurfaceforcingsMonthlytemperaturesEnum,&tmp[0],P1Enum);
     768                NewTemperatureInput->AddTimeInput(newmonthinput1,time+imonth/12.*yts);
     769
     770                for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlyprec[i][imonth];
     771                PentaInput* newmonthinput2 = new PentaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
     772                NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
     773        }
     774        NewTemperatureInput->Configure(this->parameters);
     775        NewPrecipitationInput->Configure(this->parameters);
     776
     777        this->inputs->AddInput(NewTemperatureInput);
     778        this->inputs->AddInput(NewPrecipitationInput);
     779
    715780        this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1);
    716781        this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1);
Note: See TracChangeset for help on using the changeset viewer.