Changeset 25627
- Timestamp:
- 10/05/20 16:30:06 (4 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 1 added
- 1 deleted
- 40 edited
- 13 copied
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/m4/issm_options.m4
r25570 r25627 2475 2475 dnl optimization{{{ 2476 2476 dnl -- bypass standard optimization -g -O2 -fPIC -std=c++11? 2477 dnl NOTE: Added -Wno-deprecated-register flag to clear, 2478 dnl 2479 dnl externalpackages/dakota/install/include/MPIPackBuffer.hpp:301:8: warning: 2480 dnl 'register' storage class specifier is deprecated and incompatible with 2481 dnl C++17 [-Wdeprecated-register] 2482 dnl for (register typename ContainerT::size_type i=0; i<len; ++i) { 2483 dnl 2484 dnl when Dakota 6.2 is installed (may be an issue in other versions; likely 2485 dnl will not be needed at all in future versions) 2486 dnl 2477 2487 AC_ARG_WITH( 2478 2488 [cxxoptflags], 2479 AS_HELP_STRING([--with-cxxoptflags=CXXOPTFLAGS], [C++ optimization flags (i.e. --with-cxxoptflags="-march=opteron -O3 -std=c++11 "]),2489 AS_HELP_STRING([--with-cxxoptflags=CXXOPTFLAGS], [C++ optimization flags (i.e. --with-cxxoptflags="-march=opteron -O3 -std=c++11 -Wno-deprecated-register"]), 2480 2490 [CXXOPTFLAGS=${withval}], 2481 [CXXOPTFLAGS="-g -O2 -fPIC -std=c++11 "]2491 [CXXOPTFLAGS="-g -O2 -fPIC -std=c++11 -Wno-deprecated-register"] 2482 2492 ) 2483 2493 AC_MSG_CHECKING(for C++ optimization flags) -
issm/trunk-jpl/src/c/Makefile.am
r25530 r25627 352 352 ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp \ 353 353 ./modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp \ 354 ./modules/QmuStatisticsx/QmuStatisticsx.cpp \ 354 355 ./cores/dakota_core.cpp 355 356 endif … … 637 638 ./modules/NodeConnectivityx/NodeConnectivityx.cpp \ 638 639 ./modules/ElementConnectivityx/ElementConnectivityx.cpp \ 639 ./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp 640 ./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp 640 641 641 642 if CHACO … … 762 763 bin_PROGRAMS = 763 764 else 764 bin_PROGRAMS = issm issm_slr 765 bin_PROGRAMS = issm issm_slr issm_post 765 766 endif 766 767 endif … … 779 780 endif 780 781 781 issm_SOURCES = main/issm.cpp 782 issm_SOURCES = main/issm.cpp 782 783 issm_CXXFLAGS= $(CXXFLAGS) $(CXXOPTFLAGS) 783 784 784 785 issm_slr_SOURCES = main/issm_slr.cpp 785 786 issm_slr_CXXFLAGS= $(CXXFLAGS) $(CXXOPTFLAGS) 787 788 issm_post_SOURCES = main/issm_post.cpp 789 issm_post_CXXFLAGS= $(CXXFLAGS) $(CXXOPTFLAGS) 786 790 787 791 if OCEAN -
issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
r25539 r25627 175 175 IssmDouble planetradius=0; 176 176 IssmDouble planetarea=0; 177 bool elastic=false; 177 178 178 179 int numoutputs; … … 201 202 parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.settings.computesealevelchange",SolidearthSettingsComputesealevelchangeEnum)); 202 203 parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.planetradius",SolidearthPlanetRadiusEnum)); 204 parameters->AddObject(new DoubleParam(CumBslrEnum,0.0)); 205 parameters->AddObject(new DoubleParam(CumBslrIceEnum,0.0)); 206 parameters->AddObject(new DoubleParam(CumBslrHydroEnum,0.0)); 207 parameters->AddObject(new DoubleParam(CumGmtslrEnum,0.0)); 203 208 204 209 /*compute planet area and plug into parameters:*/ … … 226 231 } /*}}}*/ 227 232 /*Deal with elasticity {{{*/ 228 /*love numbers: */ 229 iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h"); 230 iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k"); 231 iomodel->FetchData(&love_l,&nl,NULL,"md.solidearth.lovenumbers.l"); 232 iomodel->FetchData(&love_th,&nl,NULL,"md.solidearth.lovenumbers.th"); 233 iomodel->FetchData(&love_tk,&nl,NULL,"md.solidearth.lovenumbers.tk"); 234 iomodel->FetchData(&love_tl,&nl,NULL,"md.solidearth.lovenumbers.tl"); 235 parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum)); 236 237 parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,nl,1)); 238 parameters->AddObject(new DoubleMatParam(LoadLoveKEnum,love_k,nl,1)); 239 parameters->AddObject(new DoubleMatParam(LoadLoveLEnum,love_l,nl,1)); 240 parameters->AddObject(new DoubleMatParam(TidalLoveHEnum,love_th,nl,1)); 241 parameters->AddObject(new DoubleMatParam(TidalLoveKEnum,love_tk,nl,1)); 242 parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,nl,1)); 243 244 /*compute elastic green function for a range of angles*/ 245 iomodel->FetchData(°acc,"md.solidearth.settings.degacc"); 246 M=reCast<int,IssmDouble>(180./degacc+1.); 247 248 // AD performance is sensitive to calls to ensurecontiguous. 249 // // Providing "t" will cause ensurecontiguous to be called. 250 #ifdef _HAVE_AD_ 251 G_rigid=xNew<IssmDouble>(M,"t"); 252 G_elastic=xNew<IssmDouble>(M,"t"); 253 U_elastic=xNew<IssmDouble>(M,"t"); 254 H_elastic=xNew<IssmDouble>(M,"t"); 255 #else 256 G_rigid=xNew<IssmDouble>(M); 257 G_elastic=xNew<IssmDouble>(M); 258 U_elastic=xNew<IssmDouble>(M); 259 H_elastic=xNew<IssmDouble>(M); 260 #endif 261 262 /*compute combined legendre + love number (elastic green function:*/ 263 m=DetermineLocalSize(M,IssmComm::GetComm()); 264 GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm()); 265 // AD performance is sensitive to calls to ensurecontiguous. 266 // // Providing "t" will cause ensurecontiguous to be called. 267 #ifdef _HAVE_AD_ 268 G_elastic_local=xNew<IssmDouble>(m,"t"); 269 G_rigid_local=xNew<IssmDouble>(m,"t"); 270 U_elastic_local=xNew<IssmDouble>(m,"t"); 271 H_elastic_local=xNew<IssmDouble>(m,"t"); 272 #else 273 G_elastic_local=xNew<IssmDouble>(m); 274 G_rigid_local=xNew<IssmDouble>(m); 275 U_elastic_local=xNew<IssmDouble>(m); 276 H_elastic_local=xNew<IssmDouble>(m); 277 #endif 278 279 for(int i=lower_row;i<upper_row;i++){ 280 IssmDouble alpha,x; 281 alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0; 282 283 G_rigid_local[i-lower_row]= .5/sin(alpha/2.0); 284 G_elastic_local[i-lower_row]= (love_k[nl-1]-love_h[nl-1])*G_rigid_local[i-lower_row]; 285 U_elastic_local[i-lower_row]= (love_h[nl-1])*G_rigid_local[i-lower_row]; 286 H_elastic_local[i-lower_row]= 0; 287 IssmDouble Pn = 0.; 288 IssmDouble Pn1 = 0.; 289 IssmDouble Pn2 = 0.; 290 IssmDouble Pn_p = 0.; 291 IssmDouble Pn_p1 = 0.; 292 IssmDouble Pn_p2 = 0.; 293 294 for (int n=0;n<nl;n++) { 295 IssmDouble deltalove_G; 296 IssmDouble deltalove_U; 297 298 deltalove_G = (love_k[n]-love_k[nl-1]-love_h[n]+love_h[nl-1]); 299 deltalove_U = (love_h[n]-love_h[nl-1]); 300 301 /*compute legendre polynomials: P_n(cos\theta) & d P_n(cos\theta)/ d\theta: */ 302 if(n==0){ 303 Pn=1; 304 Pn_p=0; 233 iomodel->FetchData(&elastic,"md.solidearth.settings.elastic"); 234 // if(elastic){ 235 /*love numbers: */ 236 iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h"); 237 iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k"); 238 iomodel->FetchData(&love_l,&nl,NULL,"md.solidearth.lovenumbers.l"); 239 iomodel->FetchData(&love_th,&nl,NULL,"md.solidearth.lovenumbers.th"); 240 iomodel->FetchData(&love_tk,&nl,NULL,"md.solidearth.lovenumbers.tk"); 241 iomodel->FetchData(&love_tl,&nl,NULL,"md.solidearth.lovenumbers.tl"); 242 parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.lovenumbers.tk2secular",TidalLoveK2SecularEnum)); 243 244 parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,nl,1)); 245 parameters->AddObject(new DoubleMatParam(LoadLoveKEnum,love_k,nl,1)); 246 parameters->AddObject(new DoubleMatParam(LoadLoveLEnum,love_l,nl,1)); 247 parameters->AddObject(new DoubleMatParam(TidalLoveHEnum,love_th,nl,1)); 248 parameters->AddObject(new DoubleMatParam(TidalLoveKEnum,love_tk,nl,1)); 249 parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,nl,1)); 250 251 /*compute elastic green function for a range of angles*/ 252 iomodel->FetchData(°acc,"md.solidearth.settings.degacc"); 253 M=reCast<int,IssmDouble>(180./degacc+1.); 254 255 // AD performance is sensitive to calls to ensurecontiguous. 256 // // Providing "t" will cause ensurecontiguous to be called. 257 #ifdef _HAVE_AD_ 258 G_rigid=xNew<IssmDouble>(M,"t"); 259 G_elastic=xNew<IssmDouble>(M,"t"); 260 U_elastic=xNew<IssmDouble>(M,"t"); 261 H_elastic=xNew<IssmDouble>(M,"t"); 262 #else 263 G_rigid=xNew<IssmDouble>(M); 264 G_elastic=xNew<IssmDouble>(M); 265 U_elastic=xNew<IssmDouble>(M); 266 H_elastic=xNew<IssmDouble>(M); 267 #endif 268 269 /*compute combined legendre + love number (elastic green function:*/ 270 m=DetermineLocalSize(M,IssmComm::GetComm()); 271 GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm()); 272 // AD performance is sensitive to calls to ensurecontiguous. 273 // // Providing "t" will cause ensurecontiguous to be called. 274 #ifdef _HAVE_AD_ 275 G_elastic_local=xNew<IssmDouble>(m,"t"); 276 G_rigid_local=xNew<IssmDouble>(m,"t"); 277 U_elastic_local=xNew<IssmDouble>(m,"t"); 278 H_elastic_local=xNew<IssmDouble>(m,"t"); 279 #else 280 G_elastic_local=xNew<IssmDouble>(m); 281 G_rigid_local=xNew<IssmDouble>(m); 282 U_elastic_local=xNew<IssmDouble>(m); 283 H_elastic_local=xNew<IssmDouble>(m); 284 #endif 285 286 for(int i=lower_row;i<upper_row;i++){ 287 IssmDouble alpha,x; 288 alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0; 289 290 G_rigid_local[i-lower_row]= .5/sin(alpha/2.0); 291 G_elastic_local[i-lower_row]= (love_k[nl-1]-love_h[nl-1])*G_rigid_local[i-lower_row]; 292 U_elastic_local[i-lower_row]= (love_h[nl-1])*G_rigid_local[i-lower_row]; 293 H_elastic_local[i-lower_row]= 0; 294 IssmDouble Pn = 0.; 295 IssmDouble Pn1 = 0.; 296 IssmDouble Pn2 = 0.; 297 IssmDouble Pn_p = 0.; 298 IssmDouble Pn_p1 = 0.; 299 IssmDouble Pn_p2 = 0.; 300 301 for (int n=0;n<nl;n++) { 302 IssmDouble deltalove_G; 303 IssmDouble deltalove_U; 304 305 deltalove_G = (love_k[n]-love_k[nl-1]-love_h[n]+love_h[nl-1]); 306 deltalove_U = (love_h[n]-love_h[nl-1]); 307 308 /*compute legendre polynomials: P_n(cos\theta) & d P_n(cos\theta)/ d\theta: */ 309 if(n==0){ 310 Pn=1; 311 Pn_p=0; 312 } 313 else if(n==1){ 314 Pn = cos(alpha); 315 Pn_p = 1; 316 } 317 else{ 318 Pn = ( (2*n-1)*cos(alpha)*Pn1 - (n-1)*Pn2 ) /n; 319 Pn_p = ( (2*n-1)*(Pn1+cos(alpha)*Pn_p1) - (n-1)*Pn_p2 ) /n; 320 } 321 Pn2=Pn1; Pn1=Pn; 322 Pn_p2=Pn_p1; Pn_p1=Pn_p; 323 324 G_elastic_local[i-lower_row] += deltalove_G*Pn; // gravitational potential 325 U_elastic_local[i-lower_row] += deltalove_U*Pn; // vertical (up) displacement 326 H_elastic_local[i-lower_row] += sin(alpha)*love_l[n]*Pn_p; // horizontal displacements 305 327 } 306 else if(n==1){ 307 Pn = cos(alpha); 308 Pn_p = 1; 309 } 310 else{ 311 Pn = ( (2*n-1)*cos(alpha)*Pn1 - (n-1)*Pn2 ) /n; 312 Pn_p = ( (2*n-1)*(Pn1+cos(alpha)*Pn_p1) - (n-1)*Pn_p2 ) /n; 313 } 314 Pn2=Pn1; Pn1=Pn; 315 Pn_p2=Pn_p1; Pn_p1=Pn_p; 316 317 G_elastic_local[i-lower_row] += deltalove_G*Pn; // gravitational potential 318 U_elastic_local[i-lower_row] += deltalove_U*Pn; // vertical (up) displacement 319 H_elastic_local[i-lower_row] += sin(alpha)*love_l[n]*Pn_p; // horizontal displacements 320 } 321 } 322 323 /*merge G_elastic_local into G_elastic; U_elastic_local into U_elastic; H_elastic_local to H_elastic:{{{*/ 324 int* recvcounts=xNew<int>(IssmComm::GetSize()); 325 int* displs=xNew<int>(IssmComm::GetSize()); 326 327 //recvcounts: 328 ISSM_MPI_Allgather(&m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,IssmComm::GetComm()); 329 330 /*displs: */ 331 ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,IssmComm::GetComm()); 332 333 /*All gather:*/ 334 ISSM_MPI_Allgatherv(G_rigid_local, m, ISSM_MPI_DOUBLE, G_rigid, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 335 ISSM_MPI_Allgatherv(G_elastic_local, m, ISSM_MPI_DOUBLE, G_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 336 ISSM_MPI_Allgatherv(U_elastic_local, m, ISSM_MPI_DOUBLE, U_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 337 ISSM_MPI_Allgatherv(H_elastic_local, m, ISSM_MPI_DOUBLE, H_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 338 /*free ressources: */ 339 xDelete<int>(recvcounts); 340 xDelete<int>(displs); 341 342 /*}}}*/ 343 344 /*Avoid singularity at 0: */ 345 G_rigid[0]=G_rigid[1]; 346 parameters->AddObject(new DoubleVecParam(SealevelriseGRigidEnum,G_rigid,M)); 347 G_elastic[0]=G_elastic[1]; 348 parameters->AddObject(new DoubleVecParam(SealevelriseGElasticEnum,G_elastic,M)); 349 U_elastic[0]=U_elastic[1]; 350 parameters->AddObject(new DoubleVecParam(SealevelriseUElasticEnum,U_elastic,M)); 351 H_elastic[0]=H_elastic[1]; 352 parameters->AddObject(new DoubleVecParam(SealevelriseHElasticEnum,H_elastic,M)); 353 354 /*free ressources: */ 355 xDelete<IssmDouble>(love_h); 356 xDelete<IssmDouble>(love_k); 357 xDelete<IssmDouble>(love_l); 358 xDelete<IssmDouble>(love_th); 359 xDelete<IssmDouble>(love_tk); 360 xDelete<IssmDouble>(love_tl); 361 xDelete<IssmDouble>(G_rigid); 362 xDelete<IssmDouble>(G_rigid_local); 363 xDelete<IssmDouble>(G_elastic); 364 xDelete<IssmDouble>(G_elastic_local); 365 xDelete<IssmDouble>(U_elastic); 366 xDelete<IssmDouble>(U_elastic_local); 367 xDelete<IssmDouble>(H_elastic); 368 xDelete<IssmDouble>(H_elastic_local); 328 } 329 330 /*merge G_elastic_local into G_elastic; U_elastic_local into U_elastic; H_elastic_local to H_elastic:{{{*/ 331 int* recvcounts=xNew<int>(IssmComm::GetSize()); 332 int* displs=xNew<int>(IssmComm::GetSize()); 333 334 //recvcounts: 335 ISSM_MPI_Allgather(&m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,IssmComm::GetComm()); 336 337 /*displs: */ 338 ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,IssmComm::GetComm()); 339 340 /*All gather:*/ 341 ISSM_MPI_Allgatherv(G_rigid_local, m, ISSM_MPI_DOUBLE, G_rigid, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 342 ISSM_MPI_Allgatherv(G_elastic_local, m, ISSM_MPI_DOUBLE, G_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 343 ISSM_MPI_Allgatherv(U_elastic_local, m, ISSM_MPI_DOUBLE, U_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 344 ISSM_MPI_Allgatherv(H_elastic_local, m, ISSM_MPI_DOUBLE, H_elastic, recvcounts, displs, ISSM_MPI_DOUBLE,IssmComm::GetComm()); 345 346 /*free resources: */ 347 xDelete<int>(recvcounts); 348 xDelete<int>(displs); 349 350 /*}}}*/ 351 352 /*Avoid singularity at 0: */ 353 G_rigid[0]=G_rigid[1]; 354 parameters->AddObject(new DoubleVecParam(SealevelriseGRigidEnum,G_rigid,M)); 355 G_elastic[0]=G_elastic[1]; 356 parameters->AddObject(new DoubleVecParam(SealevelriseGElasticEnum,G_elastic,M)); 357 U_elastic[0]=U_elastic[1]; 358 parameters->AddObject(new DoubleVecParam(SealevelriseUElasticEnum,U_elastic,M)); 359 H_elastic[0]=H_elastic[1]; 360 parameters->AddObject(new DoubleVecParam(SealevelriseHElasticEnum,H_elastic,M)); 361 362 /*free resources: */ 363 xDelete<IssmDouble>(love_h); 364 xDelete<IssmDouble>(love_k); 365 xDelete<IssmDouble>(love_l); 366 xDelete<IssmDouble>(love_th); 367 xDelete<IssmDouble>(love_tk); 368 xDelete<IssmDouble>(love_tl); 369 xDelete<IssmDouble>(G_rigid); 370 xDelete<IssmDouble>(G_rigid_local); 371 xDelete<IssmDouble>(G_elastic); 372 xDelete<IssmDouble>(G_elastic_local); 373 xDelete<IssmDouble>(U_elastic); 374 xDelete<IssmDouble>(U_elastic_local); 375 xDelete<IssmDouble>(H_elastic); 376 xDelete<IssmDouble>(H_elastic_local); 377 // } 369 378 370 379 /*Indicate we have not yet ran the Geometry Core module: */ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r25514 r25627 377 377 virtual IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks)=0; 378 378 virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks)=0; 379 virtual void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks,IssmDouble oceanarea)=0; 379 virtual IssmDouble SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks,IssmDouble oceanarea)=0; 380 virtual IssmDouble SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks,IssmDouble oceanarea)=0; 381 virtual void SealevelriseEustaticBottomPressure(IssmDouble* Sgi, SealevelMasks* masks)=0; 380 382 virtual void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz)=0; 381 383 virtual void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old,SealevelMasks* mask)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r25514 r25627 217 217 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 218 218 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 219 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble oceanarea){_error_("not implemented yet!");}; 219 IssmDouble SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 220 IssmDouble SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 221 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");}; 220 222 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 221 223 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r25508 r25627 173 173 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 174 174 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 175 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble oceanarea){_error_("not implemented yet!");}; 175 IssmDouble SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 176 IssmDouble SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 177 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");}; 176 178 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 177 179 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r25508 r25627 179 179 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 180 180 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 181 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble oceanarea){_error_("not implemented yet!");}; 181 IssmDouble SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 182 IssmDouble SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){_error_("not implemented yet!");}; 183 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){_error_("not implemented yet!");}; 182 184 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 183 185 void SealevelriseGeodetic(IssmDouble* Up ,IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r25598 r25627 5468 5468 this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum); 5469 5469 5470 /*compute area and add to inputs:*/ 5471 area=GetAreaSpherical(); 5472 this->inputs->SetDoubleInput(AreaEnum,this->lid,area); 5473 this->AddInput(SealevelAreaEnum,&area,P0Enum); 5474 if(!computerigid & !computeelastic)return; 5475 5470 5476 /*recover precomputed green function kernels:*/ 5471 5477 DoubleVecParam* parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseGRigidEnum)); _assert_(parameter); … … 5475 5481 parameter->GetParameterValueByPointer((IssmDouble**)&G_elastic_precomputed,&M); 5476 5482 5483 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(parameter); 5484 parameter->GetParameterValueByPointer((IssmDouble**)&U_elastic_precomputed,&M); 5485 5477 5486 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(parameter); 5478 5487 parameter->GetParameterValueByPointer((IssmDouble**)&H_elastic_precomputed,&M); 5479 5480 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(parameter);5481 parameter->GetParameterValueByPointer((IssmDouble**)&U_elastic_precomputed,&M);5482 5488 5483 5489 /*allocate indices:*/ … … 5490 5496 } 5491 5497 5492 /*compute area:*/ 5493 area=GetAreaSpherical(); 5494 5495 5498 5496 5499 /* Where is the centroid of this element:*/ 5497 5500 … … 5558 5561 this->inputs->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize); 5559 5562 } 5563 5564 /* NOTE: May need to remove these two lines (from merge) */ 5560 5565 this->inputs->SetDoubleInput(AreaEnum,this->lid,area); 5561 5566 this->AddInput(SealevelAreaEnum,&area,P0Enum); … … 5583 5588 } 5584 5589 /*}}}*/ 5585 void Tria::SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/ 5586 5587 int bp_compute_fingerprints= 0; 5588 5589 /*Compute bottom pressure contribution from ocean if requested:*/ 5590 this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum); 5591 if(bp_compute_fingerprints)this->SealevelriseBottomPressure(Sgi,masks); 5592 5593 /*Compute eustatic ice contribution to sea level rise: */ 5594 this->SealevelriseEustaticIce(Sgi,peustatic,masks, oceanarea); 5595 5596 /*Compute hydrological contribution to sea level rise: */ 5597 this->SealevelriseEustaticHydro(Sgi,peustatic,masks, oceanarea); 5598 5599 5600 } 5601 /*}}}*/ 5602 void Tria::SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/ 5590 IssmDouble Tria::SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/ 5603 5591 5604 5592 /*diverse:*/ … … 5609 5597 bool notfullygrounded=false; 5610 5598 bool scaleoceanarea= false; 5599 bool computeelastic= true; 5600 5601 /*output: */ 5602 IssmDouble bslrice=0; 5611 5603 5612 5604 /*elastic green function:*/ … … 5618 5610 /*constants:*/ 5619 5611 IssmDouble constant=0; 5620 5621 /*Initialize eustatic component: do not skip this step :):*/5622 IssmDouble eustatic = 0.;5623 5612 5624 5613 /*early return if we are not on an ice cap:*/ … … 5627 5616 constant=0; this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum); 5628 5617 #endif 5629 *peustatic=0; //do not forget to assign this pointer, otherwise, global eustatic will be garbage!5630 return ;5618 bslrice=0; 5619 return bslrice; 5631 5620 } 5632 5621 … … 5637 5626 this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum); 5638 5627 #endif 5639 *peustatic=0; //do not forget to assign this pointer, otherwise, global eustatic will be garbage!5640 return ;5628 bslrice=0; 5629 return bslrice; 5641 5630 } 5642 5631 … … 5650 5639 #endif 5651 5640 5652 /*recover material parameters:*/5641 /*recover some parameters:*/ 5653 5642 rho_ice=FindParam(MaterialsRhoIceEnum); 5654 5643 rho_water=FindParam(MaterialsRhoSeawaterEnum); 5655 5656 /*recover ocean area scaling: */ 5644 this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum); 5657 5645 this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum); 5658 5646 5659 5647 /*retrieve precomputed G:*/ 5660 this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5648 5649 /* NOTE: May need to remove condition here (from merge) */ 5650 if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5661 5651 5662 5652 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/ … … 5702 5692 /*}}}*/ 5703 5693 5704 /*Compute eustatic component:*/5694 /*Compute barystatic contribution:*/ 5705 5695 _assert_(oceanarea>0.); 5706 5696 if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2 5707 eustatic += rho_ice*area*phi*I/(oceanarea*rho_water); 5708 5709 /*convert from m to kg/m^2:*/ 5710 I=I*rho_ice*phi; 5711 5712 /*convolve:*/ 5713 for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*I; 5714 5715 /*Assign output pointer:*/ 5716 _assert_(!xIsNan<IssmDouble>(eustatic)); 5717 *peustatic=eustatic; 5718 return; 5719 } 5720 /*}}}*/ 5721 void Tria::SealevelriseEustaticHydro(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/ 5697 bslrice = rho_ice*area*phi*I/(oceanarea*rho_water); 5698 _assert_(!xIsNan<IssmDouble>(bslrice)); 5699 5700 if(computeelastic){ 5701 /*convert from m to kg/m^2:*/ 5702 I=I*rho_ice*phi; 5703 5704 /*convolve:*/ 5705 for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*I; 5706 } 5707 5708 /*return :*/ 5709 return bslrice; 5710 } 5711 /*}}}*/ 5712 IssmDouble Tria::SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea){ /*{{{*/ 5722 5713 5723 5714 /*diverse:*/ 5724 5715 int gsize; 5725 5716 IssmDouble area; 5726 IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes eustatic5717 IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes barystatic 5727 5718 IssmDouble W; //change in water height thickness (Farrel and Clarke, Equ. 4) 5728 5719 bool notfullygrounded=false; 5729 5720 bool scaleoceanarea= false; 5721 bool computeelastic= true; 5730 5722 5731 5723 /*elastic green function:*/ … … 5736 5728 IssmDouble rho_freshwater; 5737 5729 5738 5739 /*Initialize eustatic component: grab from the previous eustatic core!:*/ 5740 IssmDouble eustatic = *peustatic; 5730 /*output:*/ 5731 IssmDouble bslrhydro = 0; 5741 5732 5742 5733 /*early return if we are on an ice cap:*/ 5743 if(masks->isiceonly[this->lid]){ return; } 5734 if(masks->isiceonly[this->lid]){ 5735 bslrhydro=0; 5736 return bslrhydro; 5737 } 5744 5738 5745 5739 /*early return if we are fully floating:*/ 5746 if (masks->isfullyfloating[this->lid]){ return; } 5740 if (masks->isfullyfloating[this->lid]){ 5741 bslrhydro=0; 5742 return bslrhydro; 5743 } 5747 5744 5748 5745 /*If we are here, we are on earth, not on ice: */ 5749 5746 5750 /*recover materialparameters: */5747 /*recover parameters: */ 5751 5748 rho_water=FindParam(MaterialsRhoSeawaterEnum); 5752 5749 rho_freshwater=FindParam(MaterialsRhoFreshwaterEnum); 5753 5754 /*recover ocean area scaling: */ 5750 this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum); 5755 5751 this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum); 5756 5752 5757 5753 /*retrieve precomputed G:*/ 5758 this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5754 5755 /* NOTE: May need to remove condition here (from merge) */ 5756 if(computeelastic)this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize); 5759 5757 5760 5758 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/ … … 5766 5764 deltathickness_input->GetInputAverage(&W); 5767 5765 5768 /*Compute eustatic component:*/5766 /*Compute barystatic component:*/ 5769 5767 _assert_(oceanarea>0.); 5770 5768 if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2 5771 eustatic += rho_freshwater*area*phi*W/(oceanarea*rho_water); 5772 5773 /*convert from m to kg/m^2:*/ 5774 W=W*rho_freshwater*phi; 5775 5776 /*convolve:*/ 5777 for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*W; 5778 5779 /*Assign output pointer:*/ 5780 _assert_(!xIsNan<IssmDouble>(eustatic)); 5781 *peustatic=eustatic; //do not forget the +, otherwise, you'll wipe out previous eustatic contributions! 5782 return; 5783 } 5784 /*}}}*/ 5785 void Tria::SealevelriseBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){ /*{{{*/ 5769 bslrhydro = rho_freshwater*area*phi*W/(oceanarea*rho_water); 5770 _assert_(!xIsNan<IssmDouble>(bslrhydro)); 5771 5772 if(computeelastic){ 5773 /*convert from m to kg/m^2:*/ 5774 W=W*rho_freshwater*phi; 5775 5776 /*convolve:*/ 5777 for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*W; 5778 } 5779 5780 /*output:*/ 5781 return bslrhydro; 5782 } 5783 /*}}}*/ 5784 void Tria::SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks){ /*{{{*/ 5786 5785 5787 5786 /*diverse:*/ … … 5790 5789 IssmDouble BP; //change in bottom pressure (Farrel and Clarke, Equ. 4) 5791 5790 IssmDouble constant; 5791 bool computeelastic= true; 5792 5792 5793 5793 /*elastic green function:*/ … … 5796 5796 /*water properties: */ 5797 5797 IssmDouble rho_water; 5798 5799 /*exit now?:*/ 5800 this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum); 5801 if(!computeelastic)return; 5798 5802 5799 5803 /*we are here to compute fingerprints originating fromn bottom pressure changes:*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r25508 r25627 165 165 void SetSealevelMasks(SealevelMasks* masks); 166 166 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 167 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble oceanarea); 168 void SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble oceanarea); 169 void SealevelriseEustaticHydro(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble oceanarea); 170 void SealevelriseBottomPressure(IssmDouble* Sgi,SealevelMasks* masks); 167 IssmDouble SealevelriseEustaticIce(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea); 168 IssmDouble SealevelriseEustaticHydro(IssmDouble* Sgi, SealevelMasks* masks, IssmDouble oceanarea); 169 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi,SealevelMasks* masks); 171 170 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old,SealevelMasks* masks); 172 171 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r25610 r25627 53 53 54 54 /*Object constructors and destructor*/ 55 FemModel::FemModel(void){ /*{{{*/ 56 /*do nothing:*/ 57 } /*}}}*/ 55 58 FemModel::FemModel(int argc,char** argv,ISSM_MPI_Comm incomm,bool trace){/*{{{*/ 56 59 … … 66 69 char *restartfilename = NULL; 67 70 char *rootpath = NULL; 71 char *modelname = NULL; 68 72 69 73 /*First things first, store the communicator, and set it as a global variable: */ … … 81 85 82 86 /*From command line arguments, retrieve different filenames needed to create the FemModel: */ 83 ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&restartfilename,&rootpath, argc,argv);87 ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&restartfilename,&rootpath,&modelname,argc,argv); 84 88 85 89 /*Create femmodel from input files: */ 86 90 profiler->Start(MPROCESSOR); 87 this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,restartfilename, solution_type,trace,NULL);91 this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,restartfilename, modelname, solution_type,trace,NULL); 88 92 profiler->Stop(MPROCESSOR); 89 93 … … 149 153 } 150 154 /*}}}*/ 151 FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, ISSM_MPI_Comm incomm, int solution_type,IssmPDouble* X){ /*{{{*/155 FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, char* modelname, ISSM_MPI_Comm incomm, int solution_type,IssmPDouble* X){ /*{{{*/ 152 156 153 157 bool traceon=true; … … 160 164 /*Create femmodel from input files, with trace activated: */ 161 165 profiler->Start(MPROCESSOR); 162 this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, solution_type,traceon,X);166 this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, modelname,solution_type,traceon,X); 163 167 profiler->Stop(MPROCESSOR); 164 168 … … 418 422 } 419 423 /*}}}*/ 420 void FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, c onst int in_solution_type,bool trace,IssmPDouble* X){/*{{{*/424 void FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, char* modelname, const int in_solution_type,bool trace,IssmPDouble* X){/*{{{*/ 421 425 422 426 /*intermediary*/ … … 442 446 /*Now save all of these file names into parameters, you never know when you might need them: */ 443 447 this->parameters->AddObject(new StringParam(ToolkitsFileNameEnum,toolkitsfilename)); 448 this->parameters->AddObject(new StringParam(ModelnameEnum,modelname)); 444 449 this->parameters->AddObject(new StringParam(RootPathEnum,rootpath)); 445 450 this->parameters->AddObject(new StringParam(InputFileNameEnum,inputfilename)); … … 4742 4747 #endif 4743 4748 #ifdef _HAVE_SEALEVELRISE_ 4744 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* p eustatic, SealevelMasks* masks) { /*{{{*/4749 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, SealevelMasks* masks) { /*{{{*/ 4745 4750 4746 4751 /*serialized vectors:*/ 4747 IssmDouble eustatic = 0.; 4748 IssmDouble eustatic_cpu = 0.; 4749 IssmDouble eustatic_cpu_e = 0.; 4752 IssmDouble bslrice = 0.; 4753 IssmDouble bslrice_cpu = 0.; 4754 IssmDouble bslrhydro = 0.; 4755 IssmDouble bslrhydro_cpu = 0.; 4750 4756 IssmDouble area = 0.; 4751 4757 IssmDouble oceanarea = 0.; 4752 4758 IssmDouble oceanarea_cpu = 0.; 4759 int bp_compute_fingerprints= 0; 4753 4760 4754 4761 /*Initialize temporary vector that will be used to sum eustatic components … … 4771 4778 _assert_(oceanarea>0.); 4772 4779 4773 /*Call the sea level rise core: */ 4780 /*Call the sea level rise core for ice : */ 4781 bslrice_cpu=0; 4774 4782 for(Object* & object : this->elements->objects){ 4775 4783 Element* element = xDynamicCast<Element*>(object); 4776 element->SealevelriseEustatic(RSLgi,&eustatic_cpu_e,masks, oceanarea); 4777 eustatic_cpu+=eustatic_cpu_e; 4784 bslrice_cpu+=element->SealevelriseEustaticIce(RSLgi,masks, oceanarea); 4785 } 4786 4787 /*Call the sea level rise core for hydro: */ 4788 bslrhydro_cpu=0; 4789 for(int i=0;i<elements->Size();i++){ 4790 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4791 bslrhydro_cpu+=element->SealevelriseEustaticHydro(RSLgi,masks, oceanarea); 4792 } 4793 4794 /*Call the sea level rise core for bottom pressures: */ 4795 this->parameters->FindParam(&bp_compute_fingerprints,DslComputeFingerprintsEnum); 4796 if(bp_compute_fingerprints){ 4797 for(int i=0;i<elements->Size();i++){ 4798 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4799 element->SealevelriseEustaticBottomPressure(RSLgi,masks); 4800 } 4778 4801 } 4779 4802 … … 4783 4806 4784 4807 /*Sum all eustatic components from all cpus:*/ 4785 ISSM_MPI_Reduce (&eustatic_cpu,&eustatic,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); 4786 ISSM_MPI_Bcast(&eustatic,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 4787 _assert_(!xIsNan<IssmDouble>(eustatic)); 4808 ISSM_MPI_Reduce (&bslrice_cpu,&bslrice,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); 4809 ISSM_MPI_Bcast(&bslrice,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 4810 _assert_(!xIsNan<IssmDouble>(bslrice)); 4811 4812 ISSM_MPI_Reduce (&bslrhydro_cpu,&bslrhydro,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); 4813 ISSM_MPI_Bcast(&bslrhydro,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 4814 _assert_(!xIsNan<IssmDouble>(bslrhydro)); 4788 4815 4789 4816 /*Free ressources:*/ … … 4793 4820 /*Assign output pointers:*/ 4794 4821 *poceanarea = oceanarea; 4795 *peustatic = eustatic; 4822 *pbslrice = bslrice; 4823 *pbslrhydro = bslrhydro; 4824 *pbslr=bslrhydro+bslrice; 4796 4825 4797 4826 } -
issm/trunk-jpl/src/c/classes/FemModel.h
r25508 r25627 67 67 68 68 /*constructors, destructors: */ 69 FemModel(void); 69 70 FemModel(int argc,char** argv,ISSM_MPI_Comm comm_init,bool trace=false); 70 FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, ISSM_MPI_Comm incomm, int solution_type,IssmPDouble* X);71 FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, char* modelname, ISSM_MPI_Comm incomm, int solution_type,IssmPDouble* X); 71 72 ~FemModel(); 72 73 … … 79 80 void Echo(); 80 81 int GetElementsWidth(){return 3;};//just tria elements in this first version 81 void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, char* restartfilename, c onst int solution_type,bool trace,IssmPDouble* X=NULL);82 void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, char* restartfilename, char* modelname, const int solution_type,bool trace,IssmPDouble* X=NULL); 82 83 void InitFromFids(char* rootpath, FILE* IOMODEL, FILE* toolkitsoptionsfid, int in_solution_type, bool trace, IssmPDouble* X=NULL); 83 84 void Marshall(MarshallHandle* marshallhandle); … … 165 166 #endif 166 167 #ifdef _HAVE_SEALEVELRISE_ 167 void SealevelriseEustatic(Vector<IssmDouble>* p Sgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks);168 void SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* pbslr,IssmDouble* pbslrice, IssmDouble* pbslrhydro, SealevelMasks* masks); 168 169 void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, SealevelMasks* masks,bool verboseconvolution); 169 170 void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks); -
issm/trunk-jpl/src/c/cores/ProcessArguments.cpp
r20939 r25627 8 8 #include "../shared/shared.h" 9 9 10 void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ptoolkitsfilename,char** plockfilename,char** prestartfilename, char** prootpath, int argc,char **argv){10 void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ptoolkitsfilename,char** plockfilename,char** prestartfilename, char** prootpath, char** pmodelname, int argc,char **argv){ 11 11 12 12 /*Check input arguments*/ … … 18 18 *solution_type = StringToEnumx(argv[1]); 19 19 char* rootpatharg = argv[2]; 20 char* modelname = argv[3]; 20 char* modelname = xNew<char>(strlen(argv[3])+1); 21 xMemCpy<char>(modelname,argv[3],strlen(argv[3])+1); 21 22 22 23 /*Recover myrank and length of string "my_rank" */ … … 42 43 *prestartfilename=restartfilename; 43 44 *prootpath=rootpath; 45 *pmodelname=modelname; 44 46 45 47 } -
issm/trunk-jpl/src/c/cores/cores.h
r25465 r25627 73 73 74 74 //diverse 75 void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ptoolkitsname,char** plockname,char** prestartname, char** prootpath, int argc,char **argv);75 void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ptoolkitsname,char** plockname,char** prestartname, char** prootpath,char** pmodelname, int argc,char **argv); 76 76 void WriteLockFile(char* filename); 77 77 void ResetBoundaryConditions(FemModel* femmodel, int analysis_type); -
issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
r25539 r25627 268 268 IssmDouble dt; 269 269 int geodetic=0; 270 int step; 271 IssmDouble time; 272 IssmDouble cumgmtslr=0; 273 IssmDouble cumbslr=0; 274 IssmDouble cumgmslr=0; 275 IssmDouble gmtslr=0; 270 276 271 277 /*Retrieve parameters:*/ … … 274 280 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 275 281 femmodel->parameters->FindParam(&geodetic,SolidearthSettingsComputesealevelchangeEnum); 282 femmodel->parameters->FindParam(&cumgmtslr,CumGmtslrEnum); 283 femmodel->parameters->FindParam(&cumbslr,CumBslrEnum); 284 femmodel->parameters->FindParam(&step,StepEnum); 285 femmodel->parameters->FindParam(&time,TimeEnum); 276 286 277 287 /*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/ … … 296 306 } 297 307 308 /*Save steric rate, and cumulate it through time, cumulate with barystatic sea level rise, and cumulate through time:*/ 309 gmtslr=steric_rate_g->Max()*dt; 310 cumgmtslr+=gmtslr; 311 cumgmslr=cumbslr+cumgmtslr; 312 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,GmtslrEnum,gmtslr,step,time)); 313 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumGmtslrEnum,cumgmtslr,step,time)); 314 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumGmslrEnum,cumgmslr,step,time)); 315 femmodel->parameters->SetParam(cumgmtslr,CumGmtslrEnum); 316 298 317 /*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate) * dt + steric_rate + dynamic_rate dt*/ 299 318 if(geodetic){ … … 376 395 377 396 378 /*Run sealevelri e geometry routine in elements:*/397 /*Run sealevelrise geometry routine in elements:*/ 379 398 for(Object* & object : femmodel->elements->objects){ 380 399 Element* element=xDynamicCast<Element*>(object); … … 410 429 IssmDouble time; 411 430 412 /*outputs:*/ 413 IssmDouble eustatic; 431 /*barystatic contribution:*/ 432 IssmDouble bslr; 433 IssmDouble bslrice; 434 IssmDouble bslrhydro; 435 IssmDouble cumbslr; 436 IssmDouble cumbslrice; 437 IssmDouble cumbslrhydro; 414 438 415 if(VerboseSolution()) _printf0_(" computing eustatic components on ice\n"); 416 417 439 if(VerboseSolution()) _printf0_(" computing bslr components on ice\n"); 440 418 441 /*Figure out size of g-set deflection vector and allocate solution vector: */ 419 442 gsize = femmodel->nodes->NumberOfDofs(GsetEnum); … … 422 445 femmodel->parameters->FindParam(&step,StepEnum); 423 446 femmodel->parameters->FindParam(&time,TimeEnum); 447 femmodel->parameters->FindParam(&cumbslr,CumBslrEnum); 448 femmodel->parameters->FindParam(&cumbslrice,CumBslrIceEnum); 449 femmodel->parameters->FindParam(&cumbslrhydro,CumBslrHydroEnum); 424 450 425 451 /*Initialize:*/ 426 452 RSLgi = new Vector<IssmDouble>(gsize); 427 453 428 /*call the eustaticmain module: */429 femmodel->SealevelriseEustatic(RSLgi,&oceanarea,& eustatic, masks); //this computes454 /*call the bslr main module: */ 455 femmodel->SealevelriseEustatic(RSLgi,&oceanarea,&bslr, &bslrice, &bslrhydro, masks); //this computes 430 456 431 457 /*we need to average RSLgi over the ocean: RHS term 4 in Eq.4 of Farrel and clarke. Only the elements can do that: */ 432 458 RSLgi_oceanaverage=femmodel->SealevelriseOceanAverage(RSLgi,masks, oceanarea); 433 459 434 /*RSLg is the sum of the pure eustaticcomponent (term 3) and the contribution from the perturbation to the graviation potential due to the460 /*RSLg is the sum of the pure bslr component (term 3) and the contribution from the perturbation to the graviation potential due to the 435 461 * presence of ice (terms 1 and 4 in Eq.4 of Farrel and Clarke):*/ 436 RSLgi->Shift(-eustatic-RSLgi_oceanaverage); 437 438 /*save eustatic value for results: */ 439 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,SealevelRSLEustaticEnum,-eustatic,step,time)); 440 462 RSLgi->Shift(-bslr-RSLgi_oceanaverage); 463 464 /*save bslr and cumulated bslr value for results:{{{ */ 465 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,BslrEnum,-bslr,step,time)); 466 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,BslrIceEnum,-bslrice,step,time)); 467 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,BslrHydroEnum,-bslrhydro,step,time)); 468 469 cumbslr=cumbslr-bslr; 470 cumbslrice=cumbslrice-bslrice; 471 cumbslrhydro=cumbslrhydro-bslrhydro; 472 femmodel->parameters->SetParam(cumbslr,CumBslrEnum); 473 femmodel->parameters->SetParam(cumbslrice,CumBslrIceEnum); 474 femmodel->parameters->SetParam(cumbslrhydro,CumBslrHydroEnum); 475 476 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumBslrEnum,cumbslr,step,time)); 477 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumBslrIceEnum,cumbslrice,step,time)); 478 femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,CumBslrHydroEnum,cumbslrhydro,step,time)); 479 /*}}}*/ 480 441 481 /*Assign output pointers and return: */ 442 482 *poceanarea=oceanarea; … … 465 505 IssmDouble eps_rel; 466 506 IssmDouble eps_abs; 467 IssmDouble eustatic;468 507 IssmDouble Ixz, Iyz, Izz; 469 508 -
issm/trunk-jpl/src/c/main/issm_dakota.cpp
r23066 r25627 14 14 #endif 15 15 16 int main(int argc,char **argv){ 16 int main(int argc,char **argv){ /*{{{*/ 17 17 18 18 #if defined(_HAVE_DAKOTA_) && _DAKOTA_MAJOR_ >= 6 … … 22 22 char* dakota_output_file = NULL; 23 23 char* dakota_error_file = NULL; 24 bool statistics=false; 24 25 25 26 /*Define MPI_DEBUG in dakota_global_defs.cpp to cause a hold here*/ … … 38 39 dakota_error_file=xNew<char>((strlen(argv[2])+strlen(argv[3])+strlen(".qmu.err")+2)); 39 40 sprintf(dakota_error_file,"%s/%s%s",argv[2],argv[3],".qmu.err"); 41 42 /*Create directory structure for model outputs:*/ 43 statistics=DakotaDirStructure(argc,argv); 40 44 41 45 /* Parse input and construct Dakota LibraryEnvironment, performing input data checks*/ … … 83 87 env.execute(); 84 88 89 /* Run statistics if requested:*/ 90 if(statistics)DakotaStatistics(argc,argv); 91 92 /*free allocations:*/ 85 93 xDelete<char>(dakota_input_file); 86 94 xDelete<char>(dakota_output_file); … … 94 102 #endif 95 103 96 } 104 } /*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r25539 r25627 8 8 #include "./ModelProcessorx.h" 9 9 10 #define MAXCONNECTIVITY 510 #define MAXCONNECTIVITY 15 11 11 12 12 bool IsVertexInRank(int* vertices_ranks,int* vertices_proc_count,int vid,int rank){/*{{{*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
r25514 r25627 9 9 #include "./ModelProcessorx.h" 10 10 11 #define MAXCONNECTIVITY 511 #define MAXCONNECTIVITY 15 12 12 13 13 bool IsNodeInRank(int* nodes_ranks,int* nodes_proc_count,int nid,int rank){/*{{{*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
r25257 r25627 41 41 int M,N; 42 42 43 //qmu statistics 44 bool statistics = false; 45 int numdirectories = 0; 46 int nfilesperdirectory = 0; 47 43 48 /*recover parameters: */ 44 49 iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota"); … … 72 77 /*Ok, we have all the response descriptors. Build a parameter with it: */ 73 78 parameters->AddObject(new StringArrayParam(QmuResponsedescriptorsEnum,responsedescriptors,numresponsedescriptors)); 79 80 /*Deal with statistics: */ 81 iomodel->FindConstant(&statistics,"md.qmu.statistics"); 82 parameters->AddObject(new BoolParam(QmuStatisticsEnum,statistics)); 83 if(statistics){ 84 iomodel->FindConstant(&numdirectories,"md.qmu.statistics.ndirectories"); 85 parameters->AddObject(new IntParam(QmuNdirectoriesEnum,numdirectories)); 86 87 iomodel->FindConstant(&nfilesperdirectory,"md.qmu.statistics.nfiles_per_directory"); 88 parameters->AddObject(new IntParam(QmuNfilesPerDirectoryEnum,nfilesperdirectory)); 89 } 74 90 75 91 /*Load partitioning vectors specific to variables:*/ … … 109 125 /*}}}*/ 110 126 111 112 127 /*Deal with data needed because of qmu variables*/ 113 128 DataSet* dataset_variable_descriptors = new DataSet(QmuVariableDescriptorsEnum); … … 143 158 delete dataset_variable_descriptors; 144 159 145 /*clean-up */160 /*clean-up {{{*/ 146 161 for(i=0;i<numresponsedescriptors;i++){ 147 162 descriptor=responsedescriptors[i]; … … 157 172 xDelete<char>(qmuerrname); 158 173 xDelete<char>(qmuoutname); 159 160 161 174 xDelete<char>(name); 175 /*}}}*/ 162 176 } 163 177 164 /*Free data*/165 xDelete<char>(name);166 178 } -
issm/trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.cpp
r14999 r25627 19 19 20 20 int i,j,n; 21 const int maxels= 50;21 const int maxels=100; 22 22 const int width=maxels+1; 23 23 -
issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
r25334 r25627 63 63 else{ 64 64 if(my_rank==0){ 65 /*a little bit complicated. Either statistic computations are requested, which means we 66 * put our outbin files in subidirectories with numbers, or we don't, and we dump our 67 * outbins directly in the current directory:*/ 65 68 int currEvalId ; 69 int nfilesperdirectory; 70 bool statistics=false; 71 char* root=NULL; 72 char* modelname=NULL; 73 66 74 femmodel->parameters->FindParam(&currEvalId,QmuCurrEvalIdEnum); 67 sprintf(outputfilename2,"%s.%i",outputfilename,currEvalId); 75 femmodel->parameters->FindParam(&statistics,QmuStatisticsEnum); 76 77 if(statistics){ 78 femmodel->parameters->FindParam(&nfilesperdirectory,QmuNfilesPerDirectoryEnum); 79 femmodel->parameters->FindParam(&root,RootPathEnum); 80 femmodel->parameters->FindParam(&modelname,ModelnameEnum); 81 sprintf(outputfilename2,"%s/%i/%s.outbin.%i",root,(int)(floor((currEvalId-1)/nfilesperdirectory)+1),modelname,currEvalId); 82 } 83 else{ 84 sprintf(outputfilename2,"%s.%i",outputfilename,currEvalId); 85 } 68 86 fid=pfopen0(outputfilename2,"ab+"); 69 87 } -
issm/trunk-jpl/src/c/modules/modules.h
r23992 r25627 81 81 #include "./PointCloudFindNeighborsx/PointCloudFindNeighborsx.h" 82 82 #include "./PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h" 83 #include "./QmuStatisticsx/QmuStatisticsx.h" 83 84 #include "./Reduceloadx/Reduceloadx.h" 84 85 #include "./Reducevectorgtofx/Reducevectorgtofx.h" -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r25609 r25627 112 112 syn keyword cConstant ControlInputSizeNEnum 113 113 syn keyword cConstant ControlInputInterpolationEnum 114 syn keyword cConstant CumBslrEnum 115 syn keyword cConstant CumBslrIceEnum 116 syn keyword cConstant CumBslrHydroEnum 117 syn keyword cConstant CumGmtslrEnum 118 syn keyword cConstant CumGmslrEnum 114 119 syn keyword cConstant DamageC1Enum 115 120 syn keyword cConstant DamageC2Enum … … 142 147 syn keyword cConstant ExtrapolationVariableEnum 143 148 syn keyword cConstant FemModelCommEnum 149 syn keyword cConstant FieldsEnum 144 150 syn keyword cConstant FlowequationFeFSEnum 145 151 syn keyword cConstant FlowequationIsFSEnum … … 211 217 syn keyword cConstant IndexEnum 212 218 syn keyword cConstant InputFileNameEnum 219 syn keyword cConstant DirectoryNameEnum 220 syn keyword cConstant IndicesEnum 213 221 syn keyword cConstant InputToDepthaverageInEnum 214 222 syn keyword cConstant InputToDepthaverageOutEnum … … 283 291 syn keyword cConstant MeshNumberofverticesEnum 284 292 syn keyword cConstant ModelIdEnum 293 syn keyword cConstant NbinsEnum 285 294 syn keyword cConstant NodesEnum 286 295 syn keyword cConstant NumModelsEnum … … 300 309 syn keyword cConstant QmuOutputEnum 301 310 syn keyword cConstant QmuCurrEvalIdEnum 311 syn keyword cConstant QmuNsampleEnum 302 312 syn keyword cConstant QmuResponsedescriptorsEnum 303 313 syn keyword cConstant QmuVariableDescriptorsEnum … … 307 317 syn keyword cConstant QmuResponsePartitionsEnum 308 318 syn keyword cConstant QmuResponsePartitionsNpartEnum 319 syn keyword cConstant QmuStatisticsEnum 320 syn keyword cConstant QmuNumstatisticsEnum 321 syn keyword cConstant QmuNdirectoriesEnum 322 syn keyword cConstant QmuNfilesPerDirectoryEnum 323 syn keyword cConstant QmuStatisticsMethodEnum 324 syn keyword cConstant QmuMethodsEnum 309 325 syn keyword cConstant RestartFileNameEnum 310 326 syn keyword cConstant ResultsEnum 311 327 syn keyword cConstant RootPathEnum 328 syn keyword cConstant ModelnameEnum 312 329 syn keyword cConstant SaveResultsEnum 313 330 syn keyword cConstant SolidearthPlanetRadiusEnum 314 331 syn keyword cConstant SolidearthPlanetAreaEnum 315 syn keyword cConstant SealevelEustaticEnum316 332 syn keyword cConstant SolidearthSettingsAbstolEnum 317 333 syn keyword cConstant RotationalAngularVelocityEnum … … 412 428 syn keyword cConstant SteadystateRequestedOutputsEnum 413 429 syn keyword cConstant StepEnum 430 syn keyword cConstant StepsEnum 414 431 syn keyword cConstant StressbalanceAbstolEnum 415 432 syn keyword cConstant StressbalanceFSreconditioningEnum … … 688 705 syn keyword cConstant SealevelNEsaRateEnum 689 706 syn keyword cConstant SealevelRSLEnum 707 syn keyword cConstant BslrEnum 708 syn keyword cConstant BslrIceEnum 709 syn keyword cConstant BslrHydroEnum 710 syn keyword cConstant BslrRateEnum 711 syn keyword cConstant GmtslrEnum 690 712 syn keyword cConstant SealevelRSLEustaticEnum 691 713 syn keyword cConstant SealevelRSLEustaticRateEnum … … 1282 1304 syn keyword cConstant SpcTransientEnum 1283 1305 syn keyword cConstant SsetEnum 1306 syn keyword cConstant StatisticsSolutionEnum 1284 1307 syn keyword cConstant SteadystateSolutionEnum 1285 1308 syn keyword cConstant StressIntensityFactorEnum … … 1360 1383 syn keyword cType Cfsurfacesquare 1361 1384 syn keyword cType Channel 1362 syn keyword cType classes1363 1385 syn keyword cType Constraint 1364 1386 syn keyword cType Constraints … … 1367 1389 syn keyword cType ControlInput 1368 1390 syn keyword cType Covertree 1391 syn keyword cType DataSetParam 1369 1392 syn keyword cType DatasetInput 1370 syn keyword cType DataSetParam1371 1393 syn keyword cType Definition 1372 1394 syn keyword cType DependentObject … … 1381 1403 syn keyword cType ElementInput 1382 1404 syn keyword cType ElementMatrix 1405 syn keyword cType ElementVector 1383 1406 syn keyword cType Elements 1384 syn keyword cType ElementVector1385 1407 syn keyword cType ExponentialVariogram 1386 1408 syn keyword cType ExternalResult … … 1389 1411 syn keyword cType Friction 1390 1412 syn keyword cType Gauss 1391 syn keyword cType GaussianVariogram1392 syn keyword cType gaussobjects1393 1413 syn keyword cType GaussPenta 1394 1414 syn keyword cType GaussSeg 1395 1415 syn keyword cType GaussTetra 1396 1416 syn keyword cType GaussTria 1417 syn keyword cType GaussianVariogram 1397 1418 syn keyword cType GenericExternalResult 1398 1419 syn keyword cType GenericOption … … 1409 1430 syn keyword cType IssmDirectApplicInterface 1410 1431 syn keyword cType IssmParallelDirectApplicInterface 1411 syn keyword cType krigingobjects1412 1432 syn keyword cType Load 1413 1433 syn keyword cType Loads … … 1420 1440 syn keyword cType Matice 1421 1441 syn keyword cType Matlitho 1422 syn keyword cType matrixobjects1423 1442 syn keyword cType MatrixParam 1424 1443 syn keyword cType Misfit … … 1433 1452 syn keyword cType Observations 1434 1453 syn keyword cType Option 1454 syn keyword cType OptionUtilities 1435 1455 syn keyword cType Options 1436 syn keyword cType OptionUtilities1437 1456 syn keyword cType Param 1438 1457 syn keyword cType Parameters … … 1448 1467 syn keyword cType Regionaloutput 1449 1468 syn keyword cType Results 1469 syn keyword cType RiftStruct 1450 1470 syn keyword cType Riftfront 1451 syn keyword cType RiftStruct1452 1471 syn keyword cType SealevelMasks 1453 1472 syn keyword cType Seg 1454 1473 syn keyword cType SegInput 1474 syn keyword cType SegRef 1455 1475 syn keyword cType Segment 1456 syn keyword cType SegRef1457 1476 syn keyword cType SpcDynamic 1458 1477 syn keyword cType SpcStatic … … 1473 1492 syn keyword cType Vertex 1474 1493 syn keyword cType Vertices 1494 syn keyword cType classes 1495 syn keyword cType gaussobjects 1496 syn keyword cType krigingobjects 1497 syn keyword cType matrixobjects 1475 1498 syn keyword cType AdjointBalancethickness2Analysis 1476 1499 syn keyword cType AdjointBalancethicknessAnalysis … … 1491 1514 syn keyword cType FreeSurfaceBaseAnalysis 1492 1515 syn keyword cType FreeSurfaceTopAnalysis 1516 syn keyword cType GLheightadvectionAnalysis 1493 1517 syn keyword cType GiaAnalysis 1494 syn keyword cType GLheightadvectionAnalysis1495 1518 syn keyword cType HydrologyDCEfficientAnalysis 1496 1519 syn keyword cType HydrologyDCInefficientAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r25609 r25627 106 106 ControlInputSizeNEnum, 107 107 ControlInputInterpolationEnum, 108 CumBslrEnum, 109 CumBslrIceEnum, 110 CumBslrHydroEnum, 111 CumGmtslrEnum, 112 CumGmslrEnum, 108 113 DamageC1Enum, 109 114 DamageC2Enum, … … 136 141 ExtrapolationVariableEnum, 137 142 FemModelCommEnum, 143 FieldsEnum, 138 144 FlowequationFeFSEnum, 139 145 FlowequationIsFSEnum, … … 205 211 IndexEnum, 206 212 InputFileNameEnum, 213 DirectoryNameEnum, 214 IndicesEnum, 207 215 InputToDepthaverageInEnum, 208 216 InputToDepthaverageOutEnum, … … 277 285 MeshNumberofverticesEnum, 278 286 ModelIdEnum, 287 NbinsEnum, 279 288 NodesEnum, 280 289 NumModelsEnum, … … 294 303 QmuOutputEnum, 295 304 QmuCurrEvalIdEnum, 305 QmuNsampleEnum, 296 306 QmuResponsedescriptorsEnum, 297 307 QmuVariableDescriptorsEnum, … … 301 311 QmuResponsePartitionsEnum, 302 312 QmuResponsePartitionsNpartEnum, 313 QmuStatisticsEnum, 314 QmuNumstatisticsEnum, 315 QmuNdirectoriesEnum, 316 QmuNfilesPerDirectoryEnum, 317 QmuStatisticsMethodEnum, 318 QmuMethodsEnum, 303 319 RestartFileNameEnum, 304 320 ResultsEnum, 305 321 RootPathEnum, 322 ModelnameEnum, 306 323 SaveResultsEnum, 307 324 SolidearthPlanetRadiusEnum, 308 325 SolidearthPlanetAreaEnum, 309 SealevelEustaticEnum,310 326 SolidearthSettingsAbstolEnum, 311 327 RotationalAngularVelocityEnum, … … 406 422 SteadystateRequestedOutputsEnum, 407 423 StepEnum, 424 StepsEnum, 408 425 StressbalanceAbstolEnum, 409 426 StressbalanceFSreconditioningEnum, … … 684 701 SealevelNEsaRateEnum, 685 702 SealevelRSLEnum, 703 BslrEnum, 704 BslrIceEnum, 705 BslrHydroEnum, 706 BslrRateEnum, 707 GmtslrEnum, 686 708 SealevelRSLEustaticEnum, 687 709 SealevelRSLEustaticRateEnum, … … 1281 1303 SpcTransientEnum, 1282 1304 SsetEnum, 1305 StatisticsSolutionEnum, 1283 1306 SteadystateSolutionEnum, 1284 1307 StressIntensityFactorEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r25609 r25627 114 114 case ControlInputSizeNEnum : return "ControlInputSizeN"; 115 115 case ControlInputInterpolationEnum : return "ControlInputInterpolation"; 116 case CumBslrEnum : return "CumBslr"; 117 case CumBslrIceEnum : return "CumBslrIce"; 118 case CumBslrHydroEnum : return "CumBslrHydro"; 119 case CumGmtslrEnum : return "CumGmtslr"; 120 case CumGmslrEnum : return "CumGmslr"; 116 121 case DamageC1Enum : return "DamageC1"; 117 122 case DamageC2Enum : return "DamageC2"; … … 144 149 case ExtrapolationVariableEnum : return "ExtrapolationVariable"; 145 150 case FemModelCommEnum : return "FemModelComm"; 151 case FieldsEnum : return "Fields"; 146 152 case FlowequationFeFSEnum : return "FlowequationFeFS"; 147 153 case FlowequationIsFSEnum : return "FlowequationIsFS"; … … 213 219 case IndexEnum : return "Index"; 214 220 case InputFileNameEnum : return "InputFileName"; 221 case DirectoryNameEnum : return "DirectoryName"; 222 case IndicesEnum : return "Indices"; 215 223 case InputToDepthaverageInEnum : return "InputToDepthaverageIn"; 216 224 case InputToDepthaverageOutEnum : return "InputToDepthaverageOut"; … … 285 293 case MeshNumberofverticesEnum : return "MeshNumberofvertices"; 286 294 case ModelIdEnum : return "ModelId"; 295 case NbinsEnum : return "Nbins"; 287 296 case NodesEnum : return "Nodes"; 288 297 case NumModelsEnum : return "NumModels"; … … 302 311 case QmuOutputEnum : return "QmuOutput"; 303 312 case QmuCurrEvalIdEnum : return "QmuCurrEvalId"; 313 case QmuNsampleEnum : return "QmuNsample"; 304 314 case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors"; 305 315 case QmuVariableDescriptorsEnum : return "QmuVariableDescriptors"; … … 309 319 case QmuResponsePartitionsEnum : return "QmuResponsePartitions"; 310 320 case QmuResponsePartitionsNpartEnum : return "QmuResponsePartitionsNpart"; 321 case QmuStatisticsEnum : return "QmuStatistics"; 322 case QmuNumstatisticsEnum : return "QmuNumstatistics"; 323 case QmuNdirectoriesEnum : return "QmuNdirectories"; 324 case QmuNfilesPerDirectoryEnum : return "QmuNfilesPerDirectory"; 325 case QmuStatisticsMethodEnum : return "QmuStatisticsMethod"; 326 case QmuMethodsEnum : return "QmuMethods"; 311 327 case RestartFileNameEnum : return "RestartFileName"; 312 328 case ResultsEnum : return "Results"; 313 329 case RootPathEnum : return "RootPath"; 330 case ModelnameEnum : return "Modelname"; 314 331 case SaveResultsEnum : return "SaveResults"; 315 332 case SolidearthPlanetRadiusEnum : return "SolidearthPlanetRadius"; 316 333 case SolidearthPlanetAreaEnum : return "SolidearthPlanetArea"; 317 case SealevelEustaticEnum : return "SealevelEustatic";318 334 case SolidearthSettingsAbstolEnum : return "SolidearthSettingsAbstol"; 319 335 case RotationalAngularVelocityEnum : return "RotationalAngularVelocity"; … … 414 430 case SteadystateRequestedOutputsEnum : return "SteadystateRequestedOutputs"; 415 431 case StepEnum : return "Step"; 432 case StepsEnum : return "Steps"; 416 433 case StressbalanceAbstolEnum : return "StressbalanceAbstol"; 417 434 case StressbalanceFSreconditioningEnum : return "StressbalanceFSreconditioning"; … … 690 707 case SealevelNEsaRateEnum : return "SealevelNEsaRate"; 691 708 case SealevelRSLEnum : return "SealevelRSL"; 709 case BslrEnum : return "Bslr"; 710 case BslrIceEnum : return "BslrIce"; 711 case BslrHydroEnum : return "BslrHydro"; 712 case BslrRateEnum : return "BslrRate"; 713 case GmtslrEnum : return "Gmtslr"; 692 714 case SealevelRSLEustaticEnum : return "SealevelRSLEustatic"; 693 715 case SealevelRSLEustaticRateEnum : return "SealevelRSLEustaticRate"; … … 1284 1306 case SpcTransientEnum : return "SpcTransient"; 1285 1307 case SsetEnum : return "Sset"; 1308 case StatisticsSolutionEnum : return "StatisticsSolution"; 1286 1309 case SteadystateSolutionEnum : return "SteadystateSolution"; 1287 1310 case StressIntensityFactorEnum : return "StressIntensityFactor"; -
issm/trunk-jpl/src/c/shared/Enum/README
r21074 r25627 1 2 1 DO NOT MODIFY the following files: 3 2 - StringToEnumx.cpp … … 6 5 7 6 TO ADD AN ENUM: 8 add the corresponding lines to EnumDefinitions.h 9 and execute synchronizing script. 7 - add the desired, new Enums to EnumDefinitions.h 8 - execute `./Synchronize.sh` 9 10 NOTE: Even when Synchronize.sh is run from this directory, ISSM_DIR must be 11 defined correctly -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r25609 r25627 114 114 else if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum; 115 115 else if (strcmp(name,"ControlInputInterpolation")==0) return ControlInputInterpolationEnum; 116 else if (strcmp(name,"CumBslr")==0) return CumBslrEnum; 117 else if (strcmp(name,"CumBslrIce")==0) return CumBslrIceEnum; 118 else if (strcmp(name,"CumBslrHydro")==0) return CumBslrHydroEnum; 119 else if (strcmp(name,"CumGmtslr")==0) return CumGmtslrEnum; 120 else if (strcmp(name,"CumGmslr")==0) return CumGmslrEnum; 116 121 else if (strcmp(name,"DamageC1")==0) return DamageC1Enum; 117 122 else if (strcmp(name,"DamageC2")==0) return DamageC2Enum; … … 132 137 else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum; 133 138 else if (strcmp(name,"DomainType")==0) return DomainTypeEnum; 134 else if (strcmp(name,"DslModel")==0) return DslModelEnum; 139 else stage=2; 140 } 141 if(stage==2){ 142 if (strcmp(name,"DslModel")==0) return DslModelEnum; 135 143 else if (strcmp(name,"DslModelid")==0) return DslModelidEnum; 136 144 else if (strcmp(name,"DslNummodels")==0) return DslNummodelsEnum; 137 145 else if (strcmp(name,"DslComputeFingerprints")==0) return DslComputeFingerprintsEnum; 138 146 else if (strcmp(name,"EarthId")==0) return EarthIdEnum; 139 else stage=2; 140 } 141 if(stage==2){ 142 if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum; 147 else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum; 143 148 else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum; 144 149 else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum; … … 147 152 else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum; 148 153 else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum; 154 else if (strcmp(name,"Fields")==0) return FieldsEnum; 149 155 else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum; 150 156 else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum; … … 216 222 else if (strcmp(name,"Index")==0) return IndexEnum; 217 223 else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum; 224 else if (strcmp(name,"DirectoryName")==0) return DirectoryNameEnum; 225 else if (strcmp(name,"Indices")==0) return IndicesEnum; 218 226 else if (strcmp(name,"InputToDepthaverageIn")==0) return InputToDepthaverageInEnum; 219 227 else if (strcmp(name,"InputToDepthaverageOut")==0) return InputToDepthaverageOutEnum; … … 252 260 else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum; 253 261 else if (strcmp(name,"LoveR0")==0) return LoveR0Enum; 254 else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum; 255 266 else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum; 256 267 else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum; … … 260 271 else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum; 261 272 else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum; 273 else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum; 266 274 else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum; 267 275 else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum; … … 291 299 else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum; 292 300 else if (strcmp(name,"ModelId")==0) return ModelIdEnum; 301 else if (strcmp(name,"Nbins")==0) return NbinsEnum; 293 302 else if (strcmp(name,"Nodes")==0) return NodesEnum; 294 303 else if (strcmp(name,"NumModels")==0) return NumModelsEnum; … … 308 317 else if (strcmp(name,"QmuOutput")==0) return QmuOutputEnum; 309 318 else if (strcmp(name,"QmuCurrEvalId")==0) return QmuCurrEvalIdEnum; 319 else if (strcmp(name,"QmuNsample")==0) return QmuNsampleEnum; 310 320 else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum; 311 321 else if (strcmp(name,"QmuVariableDescriptors")==0) return QmuVariableDescriptorsEnum; … … 315 325 else if (strcmp(name,"QmuResponsePartitions")==0) return QmuResponsePartitionsEnum; 316 326 else if (strcmp(name,"QmuResponsePartitionsNpart")==0) return QmuResponsePartitionsNpartEnum; 327 else if (strcmp(name,"QmuStatistics")==0) return QmuStatisticsEnum; 328 else if (strcmp(name,"QmuNumstatistics")==0) return QmuNumstatisticsEnum; 329 else if (strcmp(name,"QmuNdirectories")==0) return QmuNdirectoriesEnum; 330 else if (strcmp(name,"QmuNfilesPerDirectory")==0) return QmuNfilesPerDirectoryEnum; 331 else if (strcmp(name,"QmuStatisticsMethod")==0) return QmuStatisticsMethodEnum; 332 else if (strcmp(name,"QmuMethods")==0) return QmuMethodsEnum; 317 333 else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum; 318 334 else if (strcmp(name,"Results")==0) return ResultsEnum; 319 335 else if (strcmp(name,"RootPath")==0) return RootPathEnum; 336 else if (strcmp(name,"Modelname")==0) return ModelnameEnum; 320 337 else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum; 321 338 else if (strcmp(name,"SolidearthPlanetRadius")==0) return SolidearthPlanetRadiusEnum; 322 339 else if (strcmp(name,"SolidearthPlanetArea")==0) return SolidearthPlanetAreaEnum; 323 else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;324 340 else if (strcmp(name,"SolidearthSettingsAbstol")==0) return SolidearthSettingsAbstolEnum; 325 341 else if (strcmp(name,"RotationalAngularVelocity")==0) return RotationalAngularVelocityEnum; … … 367 383 else if (strcmp(name,"SmbAveraging")==0) return SmbAveragingEnum; 368 384 else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum; 369 else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum; 370 389 else if (strcmp(name,"SmbDsnowIdx")==0) return SmbDsnowIdxEnum; 371 390 else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum; … … 383 402 else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum; 384 403 else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum; 404 else if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum; 389 405 else if (strcmp(name,"SmbIsfirnwarming")==0) return SmbIsfirnwarmingEnum; 390 406 else if (strcmp(name,"SmbIsgraingrowth")==0) return SmbIsgraingrowthEnum; … … 423 439 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 424 440 else if (strcmp(name,"Step")==0) return StepEnum; 441 else if (strcmp(name,"Steps")==0) return StepsEnum; 425 442 else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum; 426 443 else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum; … … 489 506 else if (strcmp(name,"Approximation")==0) return ApproximationEnum; 490 507 else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum; 491 else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum; 492 512 else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum; 493 513 else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum; … … 506 526 else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum; 507 527 else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum; 528 else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum; 512 529 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum; 513 530 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; … … 612 629 else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum; 613 630 else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum; 614 else if (strcmp(name,"NGia")==0) return NGiaEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"NGia")==0) return NGiaEnum; 615 635 else if (strcmp(name,"NGiaRate")==0) return NGiaRateEnum; 616 636 else if (strcmp(name,"UGia")==0) return UGiaEnum; … … 629 649 else if (strcmp(name,"HydrologydcEplThicknessTransient")==0) return HydrologydcEplThicknessTransientEnum; 630 650 else if (strcmp(name,"HydrologydcMaskEplactiveElt")==0) return HydrologydcMaskEplactiveEltEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum; 651 else if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum; 635 652 else if (strcmp(name,"HydrologydcMaskThawedElt")==0) return HydrologydcMaskThawedEltEnum; 636 653 else if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum; … … 705 722 else if (strcmp(name,"SealevelNEsaRate")==0) return SealevelNEsaRateEnum; 706 723 else if (strcmp(name,"SealevelRSL")==0) return SealevelRSLEnum; 724 else if (strcmp(name,"Bslr")==0) return BslrEnum; 725 else if (strcmp(name,"BslrIce")==0) return BslrIceEnum; 726 else if (strcmp(name,"BslrHydro")==0) return BslrHydroEnum; 727 else if (strcmp(name,"BslrRate")==0) return BslrRateEnum; 728 else if (strcmp(name,"Gmtslr")==0) return GmtslrEnum; 707 729 else if (strcmp(name,"SealevelRSLEustatic")==0) return SealevelRSLEustaticEnum; 708 730 else if (strcmp(name,"SealevelRSLEustaticRate")==0) return SealevelRSLEustaticRateEnum; … … 730 752 else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum; 731 753 else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum; 732 else if (strcmp(name,"SmbA")==0) return SmbAEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"SmbA")==0) return SmbAEnum; 733 758 else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum; 734 759 else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum; … … 752 777 else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum; 753 778 else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum; 779 else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum; 758 780 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 759 781 else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum; … … 853 875 else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum; 854 876 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 855 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 856 881 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 857 882 else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; … … 875 900 else if (strcmp(name,"Vx")==0) return VxEnum; 876 901 else if (strcmp(name,"VxMesh")==0) return VxMeshEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"VxObs")==0) return VxObsEnum; 902 else if (strcmp(name,"VxObs")==0) return VxObsEnum; 881 903 else if (strcmp(name,"VyAverage")==0) return VyAverageEnum; 882 904 else if (strcmp(name,"Vy")==0) return VyEnum; … … 976 998 else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum; 977 999 else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum; 978 else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum; 979 1004 else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum; 980 1005 else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum; … … 998 1023 else if (strcmp(name,"Absolute")==0) return AbsoluteEnum; 999 1024 else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum; 1025 else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum; 1004 1026 else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum; 1005 1027 else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum; … … 1099 1121 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 1100 1122 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 1101 else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum; 1102 1127 else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum; 1103 1128 else if (strcmp(name,"Fset")==0) return FsetEnum; … … 1121 1146 else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum; 1122 1147 else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Gset")==0) return GsetEnum; 1148 else if (strcmp(name,"Gset")==0) return GsetEnum; 1127 1149 else if (strcmp(name,"Gsl")==0) return GslEnum; 1128 1150 else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum; … … 1222 1244 else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum; 1223 1245 else if (strcmp(name,"Mpi")==0) return MpiEnum; 1224 else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 1225 1250 else if (strcmp(name,"Mumps")==0) return MumpsEnum; 1226 1251 else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; … … 1244 1269 else if (strcmp(name,"P0DG")==0) return P0DGEnum; 1245 1270 else if (strcmp(name,"P1DG")==0) return P1DGEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"P1P1")==0) return P1P1Enum; 1271 else if (strcmp(name,"P1P1")==0) return P1P1Enum; 1250 1272 else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum; 1251 1273 else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum; … … 1314 1336 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; 1315 1337 else if (strcmp(name,"Sset")==0) return SsetEnum; 1338 else if (strcmp(name,"StatisticsSolution")==0) return StatisticsSolutionEnum; 1316 1339 else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum; 1317 1340 else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum; … … 1344 1367 else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum; 1345 1368 else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum; 1346 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1347 1373 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum; 1348 1374 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; … … 1367 1393 else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum; 1368 1394 else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum; 1395 else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum; 1373 1396 else if (strcmp(name,"MeshZ")==0) return MeshZEnum; 1374 1397 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; -
issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh
r25556 r25627 1 1 #!/bin/bash 2 #Synchronize EnumToStringx.cpp and StringToEnumx.cpp and matlab Enums 3 4 #Get all lines of EnumDefinitions2.h which hold Enum | remove all commas > put everything in file temp 2 ################################################################################ 3 # Synchronize EnumToStringx.cpp and StringToEnumx.cpp and MATLAB Enums 4 # 5 # Get all lines of EnumDefinitions.h which hold Enum | remove all commas > put everything in file temp 6 # 7 # NOTE: Even when run from this directory, ISSM_DIR must be defined correctly. 8 # 5 9 cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," -e "MaximumNumberOfDefinitionsEnum" | grep -v include | sed -e "s/,/ /g" | awk '{print $1}' > temp 6 10 -
issm/trunk-jpl/src/m/classes/qmu.m
r25090 r25627 13 13 method = struct(); 14 14 params = struct(); 15 statistics = qmustatistics(); 15 16 results = struct(); 16 17 numberofresponses = 0; … … 225 226 return; 226 227 end 228 WriteData(fid,prefix,'data',self.method.params.samples,'name','md.qmu.method.params.samples','format','Integer'); 227 229 WriteData(fid,prefix,'object',self,'fieldname','numberofresponses','format','Integer'); 228 230 WriteData(fid,prefix,'object',self,'fieldname','variabledescriptors','format','StringArray'); … … 240 242 end 241 243 WriteData(fid,prefix,'data',flag,'name','md.qmu.mass_flux_segments_present','format','Boolean'); 244 self.statistics.marshall(prefix,md,fid); 245 242 246 end % }}} 243 247 function savemodeljs(self,fid,modelname) % {{{ -
issm/trunk-jpl/src/m/contrib/larour/glacier_inventory.m
r24880 r25627 149 149 errornotfound=getfieldvalue(options,'errornotfound',1); 150 150 plotr=getfieldvalue(options,'plot',0); 151 plotr=1; 151 152 152 153 %The way we run this is through the O2 zones defined in boxes. We go through … … 203 204 switch i, 204 205 case 4, radius=40; 206 case 8, radius=60; 205 207 case 12, radius=25; 208 case 19, radius=60; 209 case 32, radius=60; 206 210 case 33, radius=5; 207 211 case 41, radius=75; 208 212 case 42, radius=45; 213 case 61, radius=66; 209 214 case 68, radius=10; 210 215 case 82, radius=30; -
issm/trunk-jpl/src/m/contrib/larour/oceanmip.m
r25326 r25627 46 46 pos=find(diff(time)<0); 47 47 if isempty(pos), 48 pos=(length(time)-12*100+1):length(time); 48 %pos=(length(time)-12*100+1):length(time); 49 pos=1:length(time); 49 50 else 50 51 pos=[(pos+1):length(time)]; … … 75 76 zostogam(year)=mean(zostoga(i-11:i)); 76 77 end 78 %control against 2006: 79 zostogam=zostogam-zostogam(1); 77 80 self.zostoga{end+1}=zostogam; clear zostoga; 78 81 … … 109 112 disp(['interpolating model ' self.model{i} ' onto model mesh']); 110 113 114 %If we have 182 cells in long, trim by 1 on each side: 115 if size(self.pbo{i},1)==182, 116 self.pbo{i}=self.pbo{i}(2:181,:,:); 117 self.zos{i}=self.zos{i}(2:181,:,:); 118 self.long{i}=self.long{i}(2:181,:,:); 119 self.lat{i}=self.lat{i}(2:181,:,:); 120 end 121 122 111 123 %triangulation: 112 long=double(self.long{i}); long=long(:); 124 long=double(self.long{i}); long=long(:); 125 pos=find(long<0); long(pos)=long(pos)+360; 113 126 lat=double(self.lat{i}); lat=lat(:); 114 127 [newl,uniqpos]=unique([lat,long],'rows','stable'); … … 122 135 ind=find(areas<1e-8); index(ind,:)=[]; 123 136 137 %fix if we have orphans 138 [index long lat dummy newpos]=FixMesh(index,long,lat,1:length(long)); 139 124 140 time=self.time{i}; 125 141 %retrieve fields: … … 133 149 134 150 parfor j=1:length(time), 151 %for j=1:length(time), 135 152 if mod(j,10)==0, 136 153 s=sprintf(' progress: %.2g ',j/length(time)*100); … … 138 155 end 139 156 140 pbo=omip_pbo(:,:,j); pbo=pbo(:); pbo=pbo(uniqpos); 157 pbo=omip_pbo(:,:,j); pbo=pbo(:); pbo=pbo(uniqpos); 141 158 zos=omip_zos(:,:,j); zos=zos(:); zos=zos(uniqpos); 142 159 143 mesh_pbo(:,j)=InterpFromMeshToMesh2d(index,long,lat,pbo,meshlong,meshlat); 144 mesh_zos(:,j)=InterpFromMeshToMesh2d(index,long,lat,zos,meshlong,meshlat); 160 pboj= InterpFromMeshToMesh2d(index,long,lat,pbo(newpos),meshlong,meshlat); 161 pos=find(abs(pboj)>1e4); pboj(pos)=0; 162 mesh_pbo(:,j)=pboj; 163 164 zosj=InterpFromMeshToMesh2d(index,long,lat,zos(newpos),meshlong,meshlat); 165 pos=find(abs(zosj)>1e5); zosj(pos)=0; 166 mesh_zos(:,j)=zosj; 145 167 end 146 168 self.mesh_pbo{end+1}=mesh_pbo; … … 200 222 pbo=self.mesh_pbo{i}; pbo=pbo/1000; %in meters 201 223 end 202 time=self.time{i}; 203 array=[pbo;time]; 224 array=pbo; 204 225 break; 205 226 end -
issm/trunk-jpl/src/m/plot/plot_coastlines.m
r25325 r25627 2 2 3 3 %define coastline: {{{ 4 coast=[-83.83 -180 ;... 4 coast=[-90 -180; ... 5 -83.83 -180 ;... 5 6 -84.33 -178 ;... 6 7 -84.5 -174 ;... … … 614 615 -83.5 176 ;... 615 616 -83.83 180 ;... 617 -85 180 ;... 618 -87 180 ;... 619 -90 180 ;... 616 620 NaN NaN ;... 617 621 -77.58 166.33 ;... … … 9866 9870 19.77 -156.05 ;... 9867 9871 19.95 -155.87 ;... 9868 20.27 -155.88 ]; 9872 20.27 -155.88 ;... 9873 NaN NaN]; 9869 9874 9870 coastlat= coast(:,1);9871 coastlon= coast(:,2);9875 coastlat=[coast(:,1); coast(:,1)]; 9876 coastlon=[coast(:,2); coast(:,2)-360]; 9872 9877 9873 9878 %}}} … … 9902 9907 p=polyshape(coastlon,coastlat); 9903 9908 plot(p,'FaceColor','w','FaceAlpha',1); 9909 if strcmpi(getfieldvalue(options,'coordcent','atlantic'),'pacific'), 9910 xlim(getfieldvalue(options,'xlim',[-360 0])); 9911 else 9912 xlim(getfieldvalue(options,'xlim',[-180 180])); 9913 end 9904 9914 %p=plot(coastlon,coastlat,'k-'); 9905 9915 end -
issm/trunk-jpl/src/m/plot/processdata.m
r25622 r25627 42 42 end 43 43 44 %special case for coord latlong: 45 if strcmpi(getfieldvalue(options,'coord','xy'),'latlon') | strcmpi(getfieldvalue(options,'coord','xy'),'latlong'), 46 [data datatype] = processdatalatlong(md,data,options); 47 return; 48 end 49 44 50 %needed later on 45 51 if isprop(md.mesh,'numberofvertices2d'), -
issm/trunk-jpl/src/m/plot/processmesh.m
r25621 r25627 24 24 if strcmp(domaintype(md.mesh),'3Dsurface'), 25 25 [x y z elements is2d isplanet] = processmesh(md.mesh,options); 26 if strcmpi(getfieldvalue(options,'coord','xy'),'latlon'), 27 x=md.mesh.long; 28 y=md.mesh.lat; 26 if strcmpi(getfieldvalue(options,'coord','xy'),'latlon') | strcmpi(getfieldvalue(options,'coord','xy'),'latlong'), 27 x0=md.mesh.long; 28 y0=md.mesh.lat; 29 %add row at lat=90 and lat=-90 30 add=[(-180:.1:-1e-5)';(1e-5:.1:180)']; 31 nadd=length(add); 32 xextra=[add;add]; 33 yextra=[90*ones(nadd,1); -90*ones(nadd,1)]; 34 x=[x0;xextra]; 35 y=[y0;yextra]; 36 37 if strcmpi(getfieldvalue(options,'coordcent','atlantic'),'pacific'), 38 pos=find(x>0); x(pos)=-360+x(pos); 39 end 29 40 elements=delaunay(x,y); 30 z= md.mesh.lat; z(:)=0;41 z=x; z(:)=0; 31 42 end 32 43 return; … … 42 53 else 43 54 elements=md.mesh.elements; 44 if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon') ,55 if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon') & ~strcmpi(getfieldvalue(options,'coord','xy'),'latlong') , 45 56 x=md.mesh.x; 46 57 if isprop(md.mesh,'x2d'), x2d=md.mesh.x2d; end … … 50 61 x=md.mesh.long; 51 62 y=md.mesh.lat; 63 if strcmpi(getfieldvalue(options,'coordcent','atlantic'),'pacific'), 64 pos=find(x>0); x(pos)-360+x(pos); 65 end 52 66 end 53 67 end -
issm/trunk-jpl/src/m/plot/subplotmodel.m
r23108 r25627 25 25 ymin = 1-vmargin(2)-height; 26 26 27 box=getfieldvalue(options,'box','off'); 28 if strcmpi(box,'on'), 29 visible='on'; 30 else 31 visible='off'; 32 end 33 27 34 for i = 1:nlines 28 35 xmin = hmargin(1); … … 30 37 if(((i-1)*ncols+j)==num) 31 38 ha = axes('Units','normalized', ... 32 'Position',[xmin ymin width height],'XTickLabel','','YTickLabel','','Visible','off'); 39 'Position',[xmin ymin width height],'XTickLabel','','YTickLabel','',... 40 'Visible',visible,'box',box); 33 41 return 34 42 end -
issm/trunk-jpl/src/m/qmu/postqmu.m
r25163 r25627 36 36 end 37 37 38 if md.qmu.output ,38 if md.qmu.output & strcmpi(md.qmu.statistics.method(1).name,'None'), 39 39 if strcmpi(md.qmu.method.method,'nond_sampling'), 40 40 dakotaresults.modelresults={}; … … 46 46 end 47 47 end 48 end 49 if ~strcmpi(md.qmu.statistics.method(1).name,'None'), 50 md.qmu.isdakota=0; 51 md=loadresultsfromdisk(md,[md.miscellaneous.name,'.stats']); 52 md.qmu.isdakota=1; 48 53 end 49 54 -
issm/trunk-jpl/src/m/solve/loadresultsfromcluster.m
r24541 r25627 30 30 end 31 31 end 32 if md.qmu.output ,32 if md.qmu.output & strcmpi(md.qmu.statistics.method(1).name,'None'), 33 33 if strcmpi(md.qmu.method.method,'nond_sampling'), 34 34 for i=1:md.qmu.method.params.samples … … 36 36 end 37 37 end 38 end 39 if ~strcmpi(md.qmu.statistics.method(1).name,'None'), 40 filelist{end+1}=[md.miscellaneous.name '.stats']; 38 41 end 39 42 else -
issm/trunk-jpl/src/m/solve/loadresultsfromdisk.m
r24538 r25627 35 35 error(['No result found in binary file ' filename '. Check for solution crash.']); 36 36 end 37 if isempty(structure(1).SolutionType), 38 if ~isempty(structure(end).SolutionType), 39 structure(1).SolutionType=structure(end).SolutionType; 40 else 41 warning(['Cannot find a solution type in the results! Ascribing one: ''NoneSolution''.']); 42 structure(1).SolutionType='NoneSolution'; 43 end 44 end 37 45 md.results.(structure(1).SolutionType)=structure; 38 46 … … 40 48 md.private.solution=structure(1).SolutionType; 41 49 42 %read log files onto 50 %read log files onto fields 43 51 if exist([md.miscellaneous.name '.errlog'],'file'), 44 52 md.results.(structure(1).SolutionType)(1).errlog=char(textread([md.miscellaneous.name '.errlog'],'%s','delimiter','\n')); -
issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m
r25561 r25627 5 5 else 6 6 results=parseresultsfromdiskioserial(md,filename); 7 end 8 7 %results=parseresultsfromdiskioserialsequential(md,filename); 8 end 9 10 function results=parseresultsfromdiskioserialsequential(md,filename) % {{{ 11 12 %Open file 13 fid=fopen(filename,'rb'); 14 if(fid==-1), 15 error(['loadresultsfromdisk error message: could not open ',filename,' for binary reading']); 16 end 17 18 %first pass to figure out the steps we have: 19 steps=[]; 20 while 1, 21 result = ReadDataDimensions(fid); 22 if isempty(result), 23 break; 24 end 25 if result.step~=-9999, 26 steps=[steps result.step]; 27 end 28 end 29 30 steps=unique(steps); 31 32 %create structure: 33 results=struct('step',num2cell(steps)); 34 35 %second pass to fill the steps we have: 36 fseek(fid,0,-1); %rewind 37 while 1, 38 result = ReadData(fid,md); 39 if isempty(result), 40 break; 41 end 42 if result.step==-9999, 43 result.step=1; 44 result.time=0; 45 end 46 %find where we are putting this step: 47 ind=find(steps==result.step); 48 if isempty(ind), 49 error('could not find a step in our pre-structure! Something is very off!'); 50 end 51 52 %plug: 53 results(ind).time=result.time; 54 results(ind).(result.fieldname)=result.field; 55 end 56 fclose(fid); 57 % }}} 9 58 function results=parseresultsfromdiskioserial(md,filename) % {{{ 10 59 -
issm/trunk-jpl/test/NightlyRun/test2004.m
r25516 r25627 394 394 395 395 %eustatic run: 396 md.solidearth.settings.rigid=0; md.solidearth.settings.elastic=0;md.solidearth.settings.rotation=0; 396 md.solidearth.settings.rigid=0; 397 md.solidearth.settings.elastic=0; 398 md.solidearth.settings.rotation=0; 397 399 md.solidearth.requested_outputs= {'default',... 398 399 400 'SurfaceloadIceThicknessChange','Sealevel','SealevelRSLRate','SealevelriseCumDeltathickness',... 401 'SealevelNEsaRate', 'SealevelUEsaRate', 'NGiaRate', 'UGiaRate','SealevelEustaticMask','SealevelEustaticOceanMask'}; 400 402 md=solve(md,'Sealevelrise'); 401 403 Seustatic=md.results.SealevelriseSolution.Sealevel; 402 404 403 405 %eustatic + rigid run: 404 md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=0;md.solidearth.settings.rotation=0; 406 md.solidearth.settings.rigid=1; 407 md.solidearth.settings.elastic=0; 408 md.solidearth.settings.rotation=0; 405 409 md=solve(md,'Sealevelrise'); 406 410 Srigid=md.results.SealevelriseSolution.Sealevel; 407 411 408 412 %eustatic + rigid + elastic run: 409 md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=1;md.solidearth.settings.rotation=0; 413 md.solidearth.settings.rigid=1; 414 md.solidearth.settings.elastic=1; 415 md.solidearth.settings.rotation=0; 410 416 md=solve(md,'Sealevelrise'); 411 417 Selastic=md.results.SealevelriseSolution.Sealevel; 412 418 413 419 %eustatic + rigid + elastic + rotation run: 414 md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=1; md.solidearth.settings.rotation=1; 420 md.solidearth.settings.rigid=1; 421 md.solidearth.settings.elastic=1; 422 md.solidearth.settings.rotation=1; 415 423 md=solve(md,'Sealevelrise'); 416 424 Srotation=md.results.SealevelriseSolution.Sealevel; -
issm/trunk-jpl/test/NightlyRun/test2010.m
r25168 r25627 75 75 % uncomment following 2 lines for 76 76 md=solve(md,'Sealevelrise'); 77 eus=md.results.SealevelriseSolution. SealevelRSLEustatic;77 eus=md.results.SealevelriseSolution.Bslr; 78 78 slr=md.results.SealevelriseSolution.Sealevel; 79 79 moixz=md.results.SealevelriseSolution.SealevelInertiaTensorXZ;
Note:
See TracChangeset
for help on using the changeset viewer.