Changeset 24583
- Timestamp:
- 02/25/20 16:34:56 (5 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r24579 r24583 82 82 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum); 83 83 if(isdelta18o || ismungsm){ 84 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum);85 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);86 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);87 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum);84 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum); 85 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 86 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 87 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum); 88 88 }else{ 89 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum);90 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);89 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum); 90 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum); 91 91 } 92 92 break; … … 111 111 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum); 112 112 if(isd18opd){ 113 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);114 iomodel->FetchDataTo Input(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);113 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 114 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 115 115 if(!istemperaturescaled){ 116 116 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_reconstructed",SmbTemperaturesReconstructedEnum); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r24579 r24583 455 455 IssmDouble time_yr=floor(time/yts)*yts; 456 456 457 /*Recover present day temperature and precipitation*/ 458 DatasetInput2* dinput1=this->GetDatasetInput2(SmbTemperaturesPresentdayEnum); _assert_(dinput1); 459 DatasetInput2* dinput2=this->GetDatasetInput2(SmbTemperaturesLgmEnum); _assert_(dinput2); 460 DatasetInput2* dinput3=this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput3); 461 457 462 /*loop over vertices: */ 458 463 Gauss* gauss=this->NewGauss(); 459 464 for(int month=0;month<12;month++){ 460 461 /*Recover present day temperature and precipitation*/462 Input2* input1=this->GetInput2(SmbTemperaturesPresentdayEnum,month/12.*yts); _assert_(input1);463 Input2* input2=this->GetInput2(SmbTemperaturesLgmEnum,month/12.*yts); _assert_(input2);464 Input2* input3=this->GetInput2(SmbPrecipitationsPresentdayEnum,month/12.*yts); _assert_(input3);465 466 465 for(int iv=0;iv<NUM_VERTICES;iv++){ 467 466 gauss->GaussVertex(iv); 468 input1->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss);469 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss);470 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss);467 dinput1->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,month); 468 dinput2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss,month); 469 dinput3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,month); 471 470 472 471 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; … … 537 536 const int NUM_VERTICES_MONTHS_PER_YEAR = NUM_VERTICES * 12; 538 537 539 int i ;538 int i,offset; 540 539 int* vertexlids=xNew<int>(NUM_VERTICES); 541 540 IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); … … 547 546 IssmDouble* tmp=xNew<IssmDouble>(NUM_VERTICES); 548 547 IssmDouble Delta18oTime; 549 IssmDouble dpermil,f; 550 IssmDouble time,yts,time_yr,month,time_clim,time_climt,time_climp,del_clim; 551 bool isTemperatureScaled=true; 552 bool isPrecipScaled=true; 548 IssmDouble f; 549 IssmDouble time,yts,time_yr,month,time_climt,time_climp,del_clim; 553 550 this->parameters->FindParam(&time,TimeEnum); 554 551 this->parameters->FindParam(&yts,ConstantsYtsEnum); … … 556 553 this->GetVerticesLidList(vertexlids); 557 554 time_yr=floor(time/yts)*yts; 558 time_clim =ceil(time/yts + 1e-10)*yts;559 555 time_climt=ceil(time/yts + 1e-10)*yts; 560 556 time_climp=ceil(time/yts + 1e-10)*yts; 561 557 562 558 /*Get some pdd parameters*/ 563 dpermil=this->FindParam(SmbDpermilEnum);564 559 bool isTemperatureScaled,isPrecipScaled; 560 IssmDouble dpermil=this->FindParam(SmbDpermilEnum); 565 561 this->parameters->FindParam(&isTemperatureScaled,SmbIstemperaturescaledEnum); 566 562 this->parameters->FindParam(&isPrecipScaled,SmbIsprecipscaledEnum); 567 563 568 564 /*Recover present day temperature and precipitation*/ 569 TransientInput2 *tinput = this->inputs2->GetTransientInput(SmbTemperaturesPresentdayEnum); _assert_(tinput);570 TransientInput2 *tinput2 = this->inputs2->GetTransientInput(SmbPrecipitationsPresentdayEnum); _assert_(tinput2);571 565 TransientInput2 *tinput3 = NULL; 572 566 TransientInput2 *tinput4 = NULL; 573 int offset;574 575 offset = tinput->GetTimeInputOffset(time_clim);576 time_clim = tinput->GetTimeByOffset(offset-11-fmod(offset-11,12.));577 578 567 if(!isTemperatureScaled){ 579 568 tinput3=this->inputs2->GetTransientInput(SmbTemperaturesReconstructedEnum); _assert_(tinput3); … … 587 576 } 588 577 578 /*Get present day temp and precip (monthly)*/ 579 DatasetInput2 *dinput1 = this->GetDatasetInput2(SmbTemperaturesPresentdayEnum); _assert_(dinput1); 580 DatasetInput2 *dinput2 = this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput2); 581 589 582 /*loop over vertices: */ 590 583 Gauss* gauss=this->NewGauss(); 591 584 for(int month=0;month<12;month++) { 592 Input2 *input = this->GetInput2(SmbTemperaturesPresentdayEnum,time_clim+month/12.*yts); _assert_(input); 593 Input2 *input2 = this->GetInput2(SmbPrecipitationsPresentdayEnum,time_clim+month/12.*yts); _assert_(input2); 585 594 586 Input2 *input3 = NULL; 595 587 Input2 *input4 = NULL; … … 602 594 for(int iv=0;iv<NUM_VERTICES;iv++) { 603 595 gauss->GaussVertex(iv); 604 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss);605 input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss);596 dinput1->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,month); 597 dinput2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,month); 606 598 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; 607 599 … … 2439 2431 time_yr=floor(time/yts)*yts; 2440 2432 2433 /*Recover present day temperature and precipitation*/ 2434 DatasetInput2* dinput1=this->GetDatasetInput2(SmbTemperaturesPresentdayEnum); _assert_(dinput1); 2435 DatasetInput2* dinput2=this->GetDatasetInput2(SmbTemperaturesLgmEnum); _assert_(dinput2); 2436 DatasetInput2* dinput3=this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput3); 2437 DatasetInput2* dinput4=this->GetDatasetInput2(SmbPrecipitationsLgmEnum); _assert_(dinput4); 2438 2441 2439 /*loop over vertices: */ 2442 2440 Gauss* gauss=this->NewGauss(); 2443 2441 for(int month=0;month<12;month++) { 2444 /*Recover present day temperature and precipitation*/2445 Input2* input =this->GetInput2(SmbTemperaturesPresentdayEnum,month/12.*yts); _assert_(input);2446 Input2* input2=this->GetInput2(SmbTemperaturesLgmEnum,month/12.*yts); _assert_(input2);2447 Input2* input3=this->GetInput2(SmbPrecipitationsPresentdayEnum,month/12.*yts); _assert_(input3);2448 Input2* input4=this->GetInput2(SmbPrecipitationsLgmEnum,month/12.*yts); _assert_(input4);2449 2442 for(int iv=0;iv<NUM_VERTICES;iv++) { 2450 2443 gauss->GaussVertex(iv); 2451 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss);2452 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss);2453 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss);2454 input4->GetInputValue(&PrecipitationsLgm[iv*12+month],gauss);2444 dinput1->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,month); 2445 dinput2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss,month); 2446 dinput3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,month); 2447 dinput4->GetInputValue(&PrecipitationsLgm[iv*12+month],gauss,month); 2455 2448 2456 2449 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r24578 r24583 228 228 void Penta::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){/*{{{*/ 229 229 230 _error_("Look at Tria :)"); 230 /*Intermediaries*/ 231 int vertexsids[NUMVERTICES]; 232 int vertexlids[NUMVERTICES]; 233 IssmDouble nodeinputs[NUMVERTICES]; 234 235 /*Some sanity checks*/ 236 if(num_inputs<1) _error_("Cannot create a DatasetInput of size <1"); 237 if(M!=iomodel->numberofvertices) _error_("Input size not supported yet"); 238 if(N!=num_inputs) _error_("Sizes are not consistent"); 239 240 /*Get indices*/ 241 _assert_(iomodel->elements); 242 for(int i=0;i<NUMVERTICES;i++){ 243 vertexsids[i] = reCast<int>(iomodel->elements[NUMVERTICES*this->Sid()+i])-1; 244 vertexlids[i] = iomodel->my_vertices_lids[vertexsids[i]]; 245 } 246 247 /*Create inputs and add to DataSetInput*/ 248 for(int i=0;i<num_inputs;i++){ 249 for(int j=0;j<NUMVERTICES;j++) nodeinputs[j]=array[vertexsids[j]*N+i]; 250 inputs2->SetPentaDatasetInput(input_enum,individual_enums[i],P1Enum,NUMVERTICES,vertexlids,nodeinputs); 251 } 231 252 } 232 253 /*}}}*/ -
issm/trunk-jpl/src/m/classes/SMBd18opdd.m
r24240 r24583 93 93 94 94 if(self.isd18opd==1) 95 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1,'Inf',1,'timeseries',1); 96 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1,'Inf',1,'timeseries',1); 97 %cross check that time stamp values are between 0 and 1: 98 i=find(self.temperatures_presentday(end,:)-self.precipitations_presentday(end,:)~=0); 99 if length(i), 100 error('Smb checkconsistency fail: timestamp (last row of matrix) for present day temp and precip must be equal!'); 101 end 102 j=find(self.temperatures_presentday(end,:)<0 | self.temperatures_presentday(end,:)>1); 103 if length(j), 104 error('Smb checkconsistency fail: timestamp (last row of matrix) for present day temp and precip must be between 0 and 1!'); 105 end 106 95 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 96 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 107 97 md = checkfield(md,'fieldname','smb.delta18o','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 108 98 md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',1); -
issm/trunk-jpl/src/m/classes/SMBd18opdd.py
r24240 r24583 141 141 multt = np.ceil(lent / 12.) * 12. 142 142 multp = np.ceil(lenp / 12.) * 12. 143 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)144 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)143 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 144 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 145 145 146 146 if self.istemperaturescaled == 0: -
issm/trunk-jpl/src/m/classes/SMBpdd.m
r24240 r24583 90 90 md = checkfield(md,'fieldname','smb.delta18o','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 91 91 md = checkfield(md,'fieldname','smb.delta18o_surface','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 92 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);93 md = checkfield(md,'fieldname','smb.temperatures_lgm','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);94 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);95 md = checkfield(md,'fieldname','smb.precipitations_lgm','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);92 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 93 md = checkfield(md,'fieldname','smb.temperatures_lgm','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 94 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 95 md = checkfield(md,'fieldname','smb.precipitations_lgm','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 96 96 md = checkfield(md,'fieldname','smb.Tdiff','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 97 97 md = checkfield(md,'fieldname','smb.sealev','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 98 98 elseif(self.ismungsm==1) 99 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);100 md = checkfield(md,'fieldname','smb.temperatures_lgm','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);101 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);102 md = checkfield(md,'fieldname','smb.precipitations_lgm','size',[md.mesh.numberofvertices +112],'NaN',1,'Inf',1,'timeseries',1);99 md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 100 md = checkfield(md,'fieldname','smb.temperatures_lgm','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 101 md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 102 md = checkfield(md,'fieldname','smb.precipitations_lgm','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1,'timeseries',1); 103 103 md = checkfield(md,'fieldname','smb.Pfac','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); 104 104 md = checkfield(md,'fieldname','smb.Tdiff','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1); -
issm/trunk-jpl/src/m/classes/SMBpdd.py
r24240 r24583 143 143 md = checkfield(md, 'fieldname', 'smb.delta18o', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 144 144 md = checkfield(md, 'fieldname', 'smb.delta18o_surface', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 145 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)146 md = checkfield(md, 'fieldname', 'smb.temperatures_lgm', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)147 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)148 md = checkfield(md, 'fieldname', 'smb.precipitations_lgm', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)145 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 146 md = checkfield(md, 'fieldname', 'smb.temperatures_lgm', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 147 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 148 md = checkfield(md, 'fieldname', 'smb.precipitations_lgm', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 149 149 md = checkfield(md, 'fieldname', 'smb.Tdiff', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 150 150 md = checkfield(md, 'fieldname', 'smb.sealev', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 151 151 elif self.ismungsm: 152 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)153 md = checkfield(md, 'fieldname', 'smb.temperatures_lgm', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)154 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)155 md = checkfield(md, 'fieldname', 'smb.precipitations_lgm', 'size', [md.mesh.numberofvertices + 1, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1)152 md = checkfield(md, 'fieldname', 'smb.temperatures_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 153 md = checkfield(md, 'fieldname', 'smb.temperatures_lgm', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 154 md = checkfield(md, 'fieldname', 'smb.precipitations_presentday', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 155 md = checkfield(md, 'fieldname', 'smb.precipitations_lgm', 'size', [md.mesh.numberofvertices, 12], 'NaN', 1, 'Inf', 1, 'timeseries', 1) 156 156 md = checkfield(md, 'fieldname', 'smb.Pfac', 'NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 157 md = checkfield(md, 'fieldname', 'smb.Tdiff', 158 md = checkfield(md, 'fieldname', 'smb.sealev', 'NaN',1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1)157 md = checkfield(md, 'fieldname', 'smb.Tdiff','NaN', 1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 158 md = checkfield(md, 'fieldname', 'smb.sealev','NaN',1, 'Inf', 1, 'size', [2, np.nan], 'singletimeseries', 1) 159 159 160 160 md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
Note:
See TracChangeset
for help on using the changeset viewer.