Changeset 24626
- Timestamp:
- 03/03/20 11:37:10 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r24583 r24626 114 114 iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 115 115 if(!istemperaturescaled){ 116 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_reconstructed",SmbTemperaturesReconstructedEnum); 116 /*Fetch array*/ 117 IssmDouble* doublearray = NULL; 118 int M,N; 119 iomodel->FetchData(&doublearray,&M,&N,"md.smb.temperatures_reconstructed"); 120 if(M!=iomodel->numberofvertices+1) _error_("md.smb.temperatures_reconstructed should have nbv+1 rows"); 121 if(N%12!=0) _error_("md.smb.temperatures_reconstructed should have a multiple of 12 columns (since it is monthly)"); 122 123 /*Build indices*/ 124 int* ids = xNew<int>(N); for(int i=0;i<N;i++) ids[i] = i; 125 126 for(int i=0;i<elements->Size();i++){ 127 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 128 element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs2,iomodel,SmbTemperaturesReconstructedEnum); 129 } 130 xDelete<int>(ids); 131 iomodel->DeleteData(doublearray,"md.smb.temperatures_reconstructed"); 117 132 } 118 133 if(!isprecipscaled){ 119 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitations_reconstructed",SmbPrecipitationsReconstructedEnum); 134 /*Fetch array*/ 135 IssmDouble* doublearray = NULL; 136 int M,N; 137 iomodel->FetchData(&doublearray,&M,&N,"md.smb.precipitations_reconstructed"); 138 if(M!=iomodel->numberofvertices+1) _error_("md.smb.precipitations_reconstructed should have nbv+1 rows"); 139 if(N%12!=0) _error_("md.smb.precipitations_reconstructed should have a multiple of 12 columns (since it is monthly)"); 140 141 /*Build indices*/ 142 int* ids = xNew<int>(N); for(int i=0;i<N;i++) ids[i] = i; 143 144 for(int i=0;i<elements->Size();i++){ 145 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 146 element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs2,iomodel,SmbPrecipitationsReconstructedEnum); 147 } 148 xDelete<int>(ids); 149 iomodel->DeleteData(doublearray,"md.smb.precipitations_reconstructed"); 120 150 } 121 151 } … … 248 278 iomodel->DeleteData(temp,"md.smb.delta18o_surface"); 249 279 } 280 250 281 break; 251 282 case SMBpddSicopolisEnum: … … 266 297 parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M)); 267 298 iomodel->DeleteData(temp,"md.smb.delta18o"); 268 } 299 300 IssmDouble yts; 301 bool istemperaturescaled,isprecipscaled; 302 iomodel->FindConstant(&yts,"md.constants.yts"); 303 iomodel->FindConstant(&istemperaturescaled,"md.smb.istemperaturescaled"); 304 iomodel->FindConstant(&isprecipscaled,"md.smb.isprecipscaled"); 305 if(!istemperaturescaled){ 306 /*Fetch array*/ 307 IssmDouble* doublearray = NULL; 308 int M,N; 309 iomodel->FetchData(&doublearray,&M,&N,"md.smb.temperatures_reconstructed"); 310 if(M!=iomodel->numberofvertices+1) _error_("md.smb.temperatures_reconstructed should have nbv+1 rows"); 311 if(N%12!=0) _error_("md.smb.temperatures_reconstructed should have a multiple of 12 columns (since it is monthly)"); 312 int numyears = N/12; _assert_(numyears*12==N); 313 314 /*Check times*/ 315 #ifdef _ISSM_DEBUG_ 316 for(int i=0;i<numyears;i++){ 317 for(int j=1;j<12;j++){ 318 //_assert_(floor(doublearray[(M-1)*N+i*12+j]/yts)==floor(doublearray[(M-1)*N+i*12]/yts)); 319 _assert_(doublearray[(M-1)*N+i*12+j]>doublearray[(M-1)*N+i*12+j-1]); 320 } 321 } 322 #endif 323 324 /*Build time*/ 325 IssmDouble* times = xNew<IssmDouble>(numyears); for(int i=0;i<numyears;i++) times[i] = doublearray[(M-1)*N+i*12]; 326 parameters->AddObject(new DoubleVecParam(SmbTemperaturesReconstructedYearsEnum,times,numyears)); 327 xDelete<IssmDouble>(times); 328 iomodel->DeleteData(doublearray,"md.smb.temperatures_reconstructed"); 329 } 330 if(!isprecipscaled){ 331 /*Fetch array*/ 332 IssmDouble* doublearray = NULL; 333 int M,N; 334 iomodel->FetchData(&doublearray,&M,&N,"md.smb.precipitations_reconstructed"); 335 if(M!=iomodel->numberofvertices+1) _error_("md.smb.precipitations_reconstructed should have nbv+1 rows"); 336 if(N%12!=0) _error_("md.smb.precipitations_reconstructed should have a multiple of 12 columns (since it is monthly)"); 337 int numyears = N/12; _assert_(numyears*12==N); 338 339 /*Check times*/ 340 #ifdef _ISSM_DEBUG_ 341 for(int i=0;i<numyears;i++){ 342 for(int j=1;j<12;j++){ 343 //_assert_(floor(doublearray[(M-1)*N+i*12+j]/yts)==floor(doublearray[(M-1)*N+i*12]/yts)); 344 _assert_(doublearray[(M-1)*N+i*12+j]>doublearray[(M-1)*N+i*12+j-1]); 345 } 346 } 347 #endif 348 349 /*Build time*/ 350 IssmDouble* times = xNew<IssmDouble>(numyears); for(int i=0;i<numyears;i++) times[i] = doublearray[(M-1)*N+i*12]; 351 parameters->AddObject(new DoubleVecParam(SmbPrecipitationsReconstructedYearsEnum,times,numyears)); 352 xDelete<IssmDouble>(times); 353 iomodel->DeleteData(doublearray,"md.smb.precipitations_reconstructed"); 354 } 355 } 356 269 357 break; 270 358 case SMBgradientsEnum: -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r24583 r24626 563 563 564 564 /*Recover present day temperature and precipitation*/ 565 TransientInput2 *tinput3 = NULL; 566 TransientInput2 *tinput4 = NULL; 565 DatasetInput2 *dinput3 = NULL; 566 DatasetInput2 *dinput4 = NULL; 567 int offset_t,offset_p,N; 567 568 if(!isTemperatureScaled){ 568 tinput3=this->inputs2->GetTransientInput(SmbTemperaturesReconstructedEnum); _assert_(tinput3); 569 offset = tinput3->GetTimeInputOffset(time_climt); 570 time_climt = tinput3->GetTimeByOffset(offset-11-fmod(offset-11,12.)); 569 IssmDouble* time_temp_scaled = NULL; 570 parameters->FindParam(&time_temp_scaled,&N,SmbTemperaturesReconstructedYearsEnum); 571 if(!binary_search(&offset_t,time_climt,time_temp_scaled,N)) _error_("time not sorted?"); 572 xDelete<IssmDouble>(time_temp_scaled); 573 dinput3=this->GetDatasetInput2(SmbTemperaturesReconstructedEnum); _assert_(dinput3); 571 574 } 572 575 if(!isPrecipScaled){ 573 tinput4=this->inputs2->GetTransientInput(SmbPrecipitationsReconstructedEnum); _assert_(tinput4); 574 offset = tinput4->GetTimeInputOffset(time_climp); 575 time_climp = tinput4->GetTimeByOffset(offset-11-fmod(offset-11,12.)); 576 IssmDouble* time_precip_scaled = NULL; 577 parameters->FindParam(&time_precip_scaled,&N,SmbPrecipitationsReconstructedYearsEnum); 578 if(!binary_search(&offset_t,time_climt,time_precip_scaled,N)) _error_("time not sorted?"); 579 xDelete<IssmDouble>(time_precip_scaled); 580 dinput4=this->GetDatasetInput2(SmbPrecipitationsReconstructedEnum); _assert_(dinput4); 576 581 } 577 582 … … 583 588 Gauss* gauss=this->NewGauss(); 584 589 for(int month=0;month<12;month++) { 585 586 Input2 *input3 = NULL;587 Input2 *input4 = NULL;588 if(!isTemperatureScaled){589 input3=this->GetInput2(SmbTemperaturesReconstructedEnum,time_climt+month/12.*yts); _assert_(input3);590 }591 if(!isPrecipScaled){592 input4=this->GetInput2(SmbPrecipitationsReconstructedEnum,time_climp+month/12.*yts);593 }594 590 for(int iv=0;iv<NUM_VERTICES;iv++) { 595 591 gauss->GaussVertex(iv); … … 599 595 600 596 if(!isTemperatureScaled){ 601 input3->GetInputValue(&TemperaturesReconstructed[iv*12+month],gauss);597 dinput3->GetInputValue(&TemperaturesReconstructed[iv*12+month],gauss,offset_t*12+month); 602 598 } 603 599 if(!isPrecipScaled){ 604 input4->GetInputValue(&PrecipitationsReconstructed[iv*12+month],gauss);600 dinput4->GetInputValue(&PrecipitationsReconstructed[iv*12+month],gauss,offset_p*12+month); 605 601 PrecipitationsReconstructed[iv*12+month]=PrecipitationsReconstructed[iv*12+month]*yts; 606 602 } -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r24548 r24626 383 383 syn keyword cConstant SmbTdiffEnum 384 384 syn keyword cConstant SmbThermoDeltaTScalingEnum 385 syn keyword cConstant SmbTemperaturesReconstructedYearsEnum 386 syn keyword cConstant SmbPrecipitationsReconstructedYearsEnum 385 387 syn keyword cConstant SmoothThicknessMultiplierEnum 386 388 syn keyword cConstant SolutionTypeEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r24548 r24626 377 377 SmbTdiffEnum, 378 378 SmbThermoDeltaTScalingEnum, 379 SmbTemperaturesReconstructedYearsEnum, 380 SmbPrecipitationsReconstructedYearsEnum, 379 381 SmoothThicknessMultiplierEnum, 380 382 SolutionTypeEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r24548 r24626 385 385 case SmbTdiffEnum : return "SmbTdiff"; 386 386 case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling"; 387 case SmbTemperaturesReconstructedYearsEnum : return "SmbTemperaturesReconstructedYears"; 388 case SmbPrecipitationsReconstructedYearsEnum : return "SmbPrecipitationsReconstructedYears"; 387 389 case SmoothThicknessMultiplierEnum : return "SmoothThicknessMultiplier"; 388 390 case SolutionTypeEnum : return "SolutionType"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r24548 r24626 394 394 else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum; 395 395 else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum; 396 else if (strcmp(name,"SmbTemperaturesReconstructedYears")==0) return SmbTemperaturesReconstructedYearsEnum; 397 else if (strcmp(name,"SmbPrecipitationsReconstructedYears")==0) return SmbPrecipitationsReconstructedYearsEnum; 396 398 else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum; 397 399 else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum; … … 504 506 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; 505 507 else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum; 506 else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;507 else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum; 511 if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum; 512 else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum; 513 else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum; 512 514 else if (strcmp(name,"CalvingFluxLevelset")==0) return CalvingFluxLevelsetEnum; 513 515 else if (strcmp(name,"CalvingMeltingFluxLevelset")==0) return CalvingMeltingFluxLevelsetEnum; … … 627 629 else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum; 628 630 else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum; 629 else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;630 else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum; 634 if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum; 635 else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum; 636 else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum; 635 637 else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum; 636 638 else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum; … … 750 752 else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum; 751 753 else if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum; 752 else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;753 else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum; 757 if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum; 758 else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum; 759 else if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum; 758 760 else if (strcmp(name,"SmbNetSW")==0) return SmbNetSWEnum; 759 761 else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum; … … 873 875 else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum; 874 876 else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum; 875 else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;876 else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 880 if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum; 881 else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 882 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 881 883 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; 882 884 else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; … … 996 998 else if (strcmp(name,"Boundary")==0) return BoundaryEnum; 997 999 else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; 998 else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;999 else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum; 1003 if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum; 1004 else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum; 1005 else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum; 1004 1006 else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum; 1005 1007 else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum; … … 1119 1121 else if (strcmp(name,"Indexed")==0) return IndexedEnum; 1120 1122 else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; 1121 else if (strcmp(name,"IntInput")==0) return IntInputEnum;1122 else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"SegInput2")==0) return SegInput2Enum; 1126 if (strcmp(name,"IntInput")==0) return IntInputEnum; 1127 else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum; 1128 else if (strcmp(name,"SegInput2")==0) return SegInput2Enum; 1127 1129 else if (strcmp(name,"TriaInput2")==0) return TriaInput2Enum; 1128 1130 else if (strcmp(name,"PentaInput2")==0) return PentaInput2Enum; … … 1242 1244 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum; 1243 1245 else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum; 1244 else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;1245 else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 1249 if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum; 1250 else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum; 1251 else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 1250 1252 else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum; 1251 1253 else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
Note:
See TracChangeset
for help on using the changeset viewer.