Changeset 26744 for issm/trunk/test/NightlyRun/test2004.py
- Timestamp:
- 12/22/21 10:39:44 (3 years ago)
- Location:
- issm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 25837-25866,25868-25993,25995-26330,26332-26733,26736-26739,26741
- Property svn:mergeinfo changed
-
issm/trunk/test
- Property svn:mergeinfo changed
-
issm/trunk/test/NightlyRun/test2004.py
r25836 r26744 114 114 hmin = hmin * 1000 115 115 hmax = hmax * 1000 116 tolerance = 100 116 tolerance = 100 # tolerance of 100m on Earth position when merging 3d meshes 117 117 threshold = 5 118 118 defaultoptions = [ … … 145 145 # Vertex connectivity 146 146 md.mesh.vertexconnectivity = NodeConnectivity(md.mesh.elements, md.mesh.numberofvertices) 147 147 148 # Add model to sl icecaps 148 149 sl.addicecap(md) … … 178 179 print(' reading bedrock') 179 180 md.geometry.bed = -np.ones((md.mesh.numberofvertices, )) 180 #}}} 181 182 # SLR #{{{ 181 md.geometry.base = md.geometry.bed 182 md.geometry.thickness = 1000 * np.ones((md.mesh.numberofvertices, )) 183 md.geometry.surface = md.geometry.bed + md.geometry.thickness 184 #}}} 185 186 # SLC #{{{ 183 187 if bas.iscontinentany('antarctica'): 184 188 if testagainst2002: 185 189 # TODO: Check if the following works as expected: 'pos' is empty, so nothing is assigned to 'md.solidearth.surfaceload.icethicknesschange[pos]' 186 md. solidearth.surfaceload.icethicknesschange = np.zeros((md.mesh.numberofelements, ))190 md.masstransport.spcthickness = np.zeros((md.mesh.numberofvertices, )) 187 191 # Antarctica 188 192 late = np.sum(md.mesh.lat[md.mesh.elements - 1], axis=1) / 3 … … 190 194 pos = np.where(late < -85)[0] 191 195 ratio = 0.225314032985172 / 0.193045366574523 192 md. solidearth.surfaceload.icethicknesschange[pos] = -100 * ratio196 md.masstransport.spcthickness[md.mesh.elements[pos]] = md.masstransport.spcthickness[md.mesh.elements[pos]] - 100 * ratio 193 197 else: 194 198 delH = np.loadtxt('../Data/AIS_delH_trend.txt') … … 201 205 pos = np.where(longe > 360)[0] 202 206 longe[pos] = longe[pos] - 360 203 delHAIS = InterpFromMesh2d(index, longAIS, latAIS, delHAIS, longe, late) 207 delHAIS = InterpFromMesh2d(index, longAIS, latAIS, delHAIS, longe, late) # NOTE: Compare to corresponding output under MATLAB to understand why we offset triangle indices by 1 (only caught because Triangle.cpp was producing triangles with negative areas) 204 208 northpole = find_point(md.mesh.long, md.mesh.lat, 0, 90) 205 209 delHAIS[northpole] = 0 206 md. solidearth.surfaceload.icethicknesschange = np.mean(delHAIS[md.mesh.elements - 1], axis=1)/ 100207 208 md. solidearth.initialsealevel = np.zeros((md.mesh.numberofvertices, ))209 210 md.dsl.global_average_thermost atic_sea_level_change= np.zeros((2, 1))211 md.dsl.sea_surface_height_ change_above_geoid = np.zeros((md.mesh.numberofvertices + 1, 1))212 md.dsl.sea_water_pressure_ change_at_sea_floor = np.zeros((md.mesh.numberofvertices + 1, 1))210 md.masstransport.spcthickness = delHAIS / 100 211 212 md.initialization.sealevel = np.zeros((md.mesh.numberofvertices, )) 213 214 md.dsl.global_average_thermosteric_sea_level = np.zeros((2, 1)) 215 md.dsl.sea_surface_height_above_geoid = np.zeros((md.mesh.numberofvertices + 1, 1)) 216 md.dsl.sea_water_pressure_at_sea_floor = np.zeros((md.mesh.numberofvertices + 1, 1)) 213 217 #}}} 214 218 … … 226 230 # Parameterize continents #{{{ 227 231 for ind in sl.basinindx('continent', ['hemisphereeast', 'hemispherewest']): 228 print( "Masks for basin {}".format(sl.icecaps[ind].miscellaneous.name))232 print('Masks for basin {}'.format(sl.icecaps[ind].miscellaneous.name)) 229 233 md = sl.icecaps[ind] 230 234 bas = sl.basins[ind] … … 283 287 #}}} 284 288 285 # SL Rloading/calibration #{{{286 md. solidearth.surfaceload.icethicknesschange = np.zeros((md.mesh.numberofelements, ))289 # SLC loading/calibration #{{{ 290 md.masstransport.spcthickness = np.zeros((md.mesh.numberofvertices, )) 287 291 288 292 if testagainst2002: … … 293 297 pos = np.where(np.logical_and.reduce((late > 70, late < 80, longe > -60, longe < -30)))[0] 294 298 ratio = .3823 / .262344 299 md.masstransport.spcthickness[md.mesh.elements[pos]] = md.masstransport.spcthickness[md.mesh.elements[pos]] - 100 * ratio 295 300 296 301 # Correct mask … … 307 312 pos = np.where(longe > 360)[0] 308 313 longe[pos] = longe[pos] - 360 309 delHGIS = InterpFromMeshToMesh2d(index, longGIS, latGIS, delHGIS, longe, late) # NOTE: Compare to corresponding ouptut under MATLAB to understand why we offset triangle indices by 1 (only caught because Triangle.cpp was producing triangles with negative areas) 310 delHGISe = np.mean(delHGIS[md.mesh.elements - 1], axis=1).flatten() 314 delHGIS = InterpFromMeshToMesh2d(index, longGIS, latGIS, delHGIS, longe, late) 311 315 312 316 delH = np.loadtxt('../Data/GLA_delH_trend_15regions.txt') … … 319 323 pos = np.where(longe > 360)[0] 320 324 longe[pos] = longe[pos] - 360 321 delHGLA = InterpFromMeshToMesh2d(index, longGLA, latGLA, delHGLA, longe, late) # NOTE: Compare to corresponding ouptut under MATLAB to understand why we offset triangle indices by 1 (only caught because Triangle.cpp was producing triangles with negative areas) 322 delHGLAe = np.mean(delHGLA[md.mesh.elements - 1], axis=1).flatten() 323 324 pos = np.nonzero(delHGISe)[0] 325 md.solidearth.surfaceload.icethicknesschange[pos] = delHGISe[pos] / 100 326 pos = np.nonzero(delHGLAe)[0] 327 md.solidearth.surfaceload.icethicknesschange[pos] = delHGLAe[pos] / 100 325 delHGLA = InterpFromMeshToMesh2d(index, longGLA, latGLA, delHGLA, longe, late) 326 327 # NOTE: For some reason, cannot apply pos to multiple arrays in a 328 # singlelike we might do in MATLAB. Instead, we iterate over 329 # elements of pos. 330 # 331 pos = np.nonzero(delHGIS)[0] 332 for p in pos: 333 md.masstransport.spcthickness[p] = md.masstransport.spcthickness[p] - delHGIS[p] / 100 334 pos = np.nonzero(delHGLA)[0] 335 for p in pos: 336 md.masstransport.spcthickness[p] = md.masstransport.spcthickness[p] - delHGLA[p] / 100 328 337 329 338 # Adjust mask accordingly 330 pos = np.nonzero(md.solidearth.surfaceload.icethicknesschange)[0] 331 flags = np.zeros((md.mesh.numberofvertices, )) 332 flags[md.mesh.elements[pos, :] - 1] = 1 333 pos = np.nonzero(flags)[0] 339 pos = np.nonzero(md.masstransport.spcthickness)[0] 334 340 md.mask.ice_levelset[pos] = -1 335 341 md.mask.ocean_levelset[pos] = 1 336 342 337 md.solidearth.initialsealevel = np.zeros((md.mesh.numberofvertices, )) 338 339 md.dsl.global_average_thermostatic_sea_level_change = np.zeros((2, 1)) 340 md.dsl.sea_surface_height_change_above_geoid = np.zeros((md.mesh.numberofvertices + 1, 1)) 341 md.dsl.sea_water_pressure_change_at_sea_floor = np.zeros((md.mesh.numberofvertices + 1, 1)) 342 #}}} 343 md.initialization.sealevel = np.zeros((md.mesh.numberofvertices, )) 344 345 md.dsl.global_average_thermosteric_sea_level = np.zeros((2, 1)) 346 md.dsl.sea_surface_height_above_geoid = np.zeros((md.mesh.numberofvertices + 1, 1)) 347 md.dsl.sea_water_pressure_at_sea_floor = np.zeros((md.mesh.numberofvertices + 1, 1)) 348 #}}} 349 343 350 # Geometry #{{{ 344 351 di = md.materials.rho_ice / md.materials.rho_water 345 352 md.geometry.bed = -np.ones((md.mesh.numberofvertices, )) 353 md.geometry.base = md.geometry.bed 354 md.geometry.thickness = 1000 * np.ones((md.mesh.numberofvertices, )) 355 md.geometry.surface = md.geometry.bed + md.geometry.thickness 346 356 #}}} 347 357 # Materials #{{{ … … 375 385 sl.transfer('mask.ocean_levelset') 376 386 sl.transfer('geometry.bed') 387 sl.transfer('geometry.surface') 388 sl.transfer('geometry.thickness') 389 sl.transfer('geometry.base') 377 390 sl.transfer('mesh.lat') 378 391 sl.transfer('mesh.long') 379 sl.transfer(' solidearth.surfaceload.icethicknesschange') #380 sl.transfer(' solidearth.initialsealevel')381 sl.transfer('dsl.sea_surface_height_ change_above_geoid')382 sl.transfer('dsl.sea_water_pressure_ change_at_sea_floor')392 sl.transfer('masstransport.spcthickness') # 393 sl.transfer('initialization.sealevel') 394 sl.transfer('dsl.sea_surface_height_above_geoid') 395 sl.transfer('dsl.sea_water_pressure_at_sea_floor') 383 396 384 397 # Radius … … 398 411 399 412 # Solve Sea-level equation on Earth only #{{{ 400 md = sl.earth # we don't do computations on ice sheets or land413 md = sl.earth # we don't do computations on ice sheets or land 401 414 402 415 #Materials 403 md.materials =materials('hydro')416 md.materials = materials('hydro') 404 417 405 418 # Elastic loading from love numbers … … 411 424 412 425 # New stuff 413 md.dsl.global_average_thermosteric_sea_level _change= np.array([[(1.1 + .38)], [0]]) # steric + water storage AR5426 md.dsl.global_average_thermosteric_sea_level = np.array([[(1.1 + .38)], [0]]) # steric + water storage AR5 414 427 415 428 # Solutuion parameters 416 429 md.solidearth.settings.reltol = np.nan 417 430 md.solidearth.settings.abstol = 1e-3 418 md.solidearth.settings.computesealevelchange = 1 431 md.solidearth.settings.sealevelloading = 1 432 md.solidearth.settings.isgrd = 1 433 md.solidearth.settings.ocean_area_scaling = 1 434 md.solidearth.settings.grdmodel = 1 419 435 md.timestepping.time_step = 1 436 437 # Physics 438 md.transient.issmb = 0 439 md.transient.isstressbalance = 0 440 md.transient.isthermal = 0 441 md.transient.ismasstransport = 1 442 md.transient.isslc = 1 443 444 # Initializations 445 md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,)) 446 md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices,)) 447 md.initialization.vx = np.zeros((md.mesh.numberofvertices,)) 448 md.initialization.vy = np.zeros((md.mesh.numberofvertices,)) 449 md.initialization.sealevel = np.zeros((md.mesh.numberofvertices,)) 450 md.initialization.bottompressure = np.zeros((md.mesh.numberofvertices,)) 451 md.initialization.dsl = np.zeros((md.mesh.numberofvertices,)) 452 md.initialization.str = 0 453 md.smb.mass_balance = np.zeros((md.mesh.numberofvertices,)) 420 454 421 455 # Max number of iterations reverted back to 10 (i.e. the original default value) … … 423 457 424 458 # Eustatic run: 425 md.solidearth.settings. rigid= 0459 md.solidearth.settings.selfattraction = 0 426 460 md.solidearth.settings.elastic = 0 427 461 md.solidearth.settings.rotation = 0 462 md.solidearth.settings.viscous = 0 428 463 md.solidearth.requested_outputs = [ 429 464 'default', 430 ' SurfaceloadIceThicknessChange',465 'DeltaIceThickness', 431 466 'Sealevel', 432 'SealevelRSLRate', 433 'SealevelriseCumDeltathickness', 434 'SealevelNEsaRate', 435 'SealevelUEsaRate', 436 'NGiaRate', 437 'UGiaRate', 438 'SealevelEustaticMask', 439 'SealevelEustaticOceanMask' 467 'SealevelUGrd', 468 'SealevelchangeBarystaticMask', 469 'SealevelchangeBarystaticOceanMask', 440 470 ] 441 md = solve(md, ' Sealevelrise')442 Seustatic = md.results. SealevelriseSolution.Sealevel443 444 # Eustatic + rigidrun445 md.solidearth.settings. rigid= 1471 md = solve(md, 'Transient') 472 Seustatic = md.results.TransientSolution.Sealevel 473 474 # Eustatic + selfattraction run 475 md.solidearth.settings.selfattraction = 1 446 476 md.solidearth.settings.elastic = 0 447 477 md.solidearth.settings.rotation = 0 448 md = solve(md, 'Sealevelrise') 449 Srigid = md.results.SealevelriseSolution.Sealevel 450 451 # Eustatic + rigid + elastic run 452 md.solidearth.settings.rigid = 1 478 md.solidearth.settings.viscous = 0 479 md = solve(md, 'Transient') 480 Sselfattraction = md.results.TransientSolution.Sealevel 481 482 # Eustatic + selfattraction + elastic run 483 md.solidearth.settings.selfattraction = 1 453 484 md.solidearth.settings.elastic = 1 454 485 md.solidearth.settings.rotation = 0 455 md = solve(md, 'Sealevelrise') 456 Selastic = md.results.SealevelriseSolution.Sealevel 457 458 # Eustatic + rigid + elastic + rotation run 459 md.solidearth.settings.rigid = 1 486 md.solidearth.settings.viscous = 0 487 md = solve(md, 'Transient') 488 Selastic = md.results.TransientSolution.Sealevel 489 490 # Eustatic + selfattraction + elastic + rotation run 491 md.solidearth.settings.selfattraction = 1 460 492 md.solidearth.settings.elastic = 1 461 493 md.solidearth.settings.rotation = 1 462 md = solve(md, 'Sealevelrise') 463 Srotation = md.results.SealevelriseSolution.Sealevel 494 md.solidearth.settings.viscous = 0 495 md = solve(md, 'Transient') 496 Srotation = md.results.TransientSolution.Sealevel 464 497 465 498 #Fields and tolerances to track changes 466 499 field_names = ['Eustatic', 'Rigid', 'Elastic', 'Rotation'] 467 500 field_tolerances = [1e-13, 1e-13, 1e-13, 1e-13] 468 field_values = [Seustatic, S rigid, Selastic, Srotation]501 field_values = [Seustatic, Sselfattraction, Selastic, Srotation]
Note:
See TracChangeset
for help on using the changeset viewer.