Changeset 5536
- Timestamp:
- Jul 18, 2008, 4:37:03 PM (15 years ago)
- Location:
- anuga_work/development/anuga_1d
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_work/development/anuga_1d/domain.py
r5535 r5536 34 34 self.beta = 1.0 35 35 self.limiter = "minmod_kurganov" 36 self.split = False37 36 self.wet_nodes = zeros((N,2), Int) # should this be here 38 37 … … 125 124 #FIXME: remove later - maybe OK, though.... 126 125 for name in self.conserved_quantities: 127 self.quantities[name] = Conserved_quantity(self)126 self.quantities[name] = Quantity(self) 128 127 for name in self.other_quantities: 129 128 self.quantities[name] = Quantity(self) -
anuga_work/development/anuga_1d/dry_dam_sudi.py
r5535 r5536 1 1 import os 2 2 from math import sqrt, pi 3 from shallow_water_ 1dimport *3 from shallow_water_domain import * 4 4 from Numeric import allclose, array, zeros, ones, Float, take, sqrt 5 5 from config import g, epsilon -
anuga_work/development/anuga_1d/quantity.py
r5535 r5536 22 22 #from domain import Domain 23 23 #from domain_order2 import Domain 24 from domain _t2import Domain24 from domain import Domain 25 25 from Numeric import array, zeros, Float 26 26 … … 56 56 #Intialise centroid values 57 57 self.interpolate() 58 59 60 from Numeric import zeros, Float 61 62 #Allocate space for boundary values 63 #L = len(domain.boundary) 64 self.boundary_values = zeros(2, Float) #assumes no parrellism 65 66 #Allocate space for updates of conserved quantities by 67 #flux calculations and forcing functions 68 69 N = domain.number_of_elements 70 self.explicit_update = zeros(N, Float ) 71 self.semi_implicit_update = zeros(N, Float ) 72 73 self.gradients = zeros(N, Float) 74 self.qmax = zeros(self.centroid_values.shape, Float) 75 self.qmin = zeros(self.centroid_values.shape, Float) 76 77 self.beta = domain.beta 58 78 59 79 #Methods for operator overloading … … 381 401 return integral 382 402 383 class Conserved_quantity(Quantity):384 """Class conserved quantity adds to Quantity:385 386 storage and method for updating, and387 methods for extrapolation from centropid to vertices inluding388 gradients and limiters389 """390 391 def __init__(self, domain, vertex_values=None):392 Quantity.__init__(self, domain, vertex_values)393 394 from Numeric import zeros, Float395 396 #Allocate space for boundary values397 #L = len(domain.boundary)398 self.boundary_values = zeros(2, Float) #assumes no parrellism399 400 #Allocate space for updates of conserved quantities by401 #flux calculations and forcing functions402 403 N = domain.number_of_elements404 self.explicit_update = zeros(N, Float )405 self.semi_implicit_update = zeros(N, Float )406 407 self.gradients = zeros(N, Float)408 self.qmax = zeros(self.centroid_values.shape, Float)409 self.qmin = zeros(self.centroid_values.shape, Float)410 411 self.beta = domain.beta412 403 413 404 def update(self, timestep): … … 863 854 else: 864 855 qv[k,i] = qc[k] 856 857 858 class Conserved_quantity(Quantity): 859 """Class conserved quantity adds to Quantity: 860 861 storage and method for updating, and 862 methods for extrapolation from centropid to vertices inluding 863 gradients and limiters 864 """ 865 866 def __init__(self, domain, vertex_values=None): 867 Quantity.__init__(self, domain, vertex_values) 868 869 print "Use Quantity instead of Conserved_quantity" 870 865 871 866 872 … … 884 890 if __name__ == "__main__": 885 891 #from domain import Domain 886 from shallow_water_ 1dimport Domain892 from shallow_water_domain import Domain 887 893 from Numeric import arange 888 894 … … 892 898 D1 = Domain(points1) 893 899 894 Q1 = Conserved_quantity(D1, vertex_values)900 Q1 = Quantity(D1, vertex_values) 895 901 896 902 print Q1.vertex_values … … 941 947 D2 = Domain(points2) 942 948 943 Q2 = Conserved_quantity(D2)949 Q2 = Quantity(D2) 944 950 Q2.set_values(fun,'vertices') 945 951 Xc = Q2.domain.vertices -
anuga_work/development/anuga_1d/shallow_water_domain.py
r5535 r5536 45 45 #from domain import * 46 46 #from domain_order2 import * 47 from domain _t2import *47 from domain import * 48 48 Generic_Domain = Domain #Rename 49 49 … … 388 388 389 389 390 def flux_function_split(normal, ql, qr, zl, zr): 391 from config import g, epsilon 392 from math import sqrt 393 from Numeric import array 394 395 #print 'ql',ql 396 397 #Align momentums with x-axis 398 #q_left = rotate(ql, normal, direction = 1) 399 #q_right = rotate(qr, normal, direction = 1) 400 q_left = ql 401 q_left[1] = q_left[1]*normal 402 q_right = qr 403 q_right[1] = q_right[1]*normal 404 405 #z = (zl+zr)/2 #Take average of field values 406 z = 0.5*(zl+zr) #Take average of field values 407 408 w_left = q_left[0] #w=h+z 409 h_left = w_left-z 410 uh_left = q_left[1] 411 412 if h_left < epsilon: 413 u_left = 0.0 #Could have been negative 414 h_left = 0.0 415 else: 416 u_left = uh_left/h_left 417 418 419 w_right = q_right[0] #w=h+z 420 h_right = w_right-z 421 uh_right = q_right[1] 422 423 424 if h_right < epsilon: 425 u_right = 0.0 #Could have been negative 426 h_right = 0.0 427 else: 428 u_right = uh_right/h_right 429 430 #vh_left = q_left[2] 431 #vh_right = q_right[2] 432 433 #soundspeed_left = sqrt(g*h_left) 434 #soundspeed_right = sqrt(g*h_right) 435 436 #Maximal wave speed 437 #s_max = max(u_left+soundspeed_left, u_right+soundspeed_right, 0) 438 s_max = max(u_left, u_right, 0) 439 440 #Minimal wave speed 441 #s_min = min(u_left-soundspeed_left, u_right-soundspeed_right, 0) 442 s_min = min(u_left, u_right, 0) 443 444 #Flux computation 445 446 #flux_left = array([u_left*h_left, 447 # u_left*uh_left + 0.5*g*h_left*h_left]) 448 #flux_right = array([u_right*h_right, 449 # u_right*uh_right + 0.5*g*h_right*h_right]) 450 flux_left = array([u_left*h_left, 451 u_left*uh_left])# + 0.5*g*h_left*h_left]) 452 flux_right = array([u_right*h_right, 453 u_right*uh_right])# + 0.5*g*h_right*h_right]) 454 455 denom = s_max-s_min 456 if denom == 0.0: 457 edgeflux = array([0.0, 0.0]) 458 max_speed = 0.0 459 else: 460 edgeflux = (s_max*flux_left - s_min*flux_right)/denom 461 edgeflux += s_max*s_min*(q_right-q_left)/denom 462 463 edgeflux[1] = edgeflux[1]*normal 464 465 max_speed = max(abs(s_max), abs(s_min)) 466 467 return edgeflux, max_speed 390 468 391 469 392 def compute_timestep(domain): … … 518 441 normal = domain.normals[k, i] 519 442 520 if domain.split == False: 521 edgeflux, max_speed = flux_function(normal, ql, qr, zl, zr) 522 elif domain.split == True: 523 edgeflux, max_speed = flux_function_split(normal, ql, qr, zl, zr) 443 edgeflux, max_speed = flux_function(normal, ql, qr, zl, zr) 444 524 445 #Update optimal_timestep 525 446 try: … … 612 533 #qr = [stage[n, m], xmom[n, m], ymom[n, m]] 613 534 qr[0] = stage[n, m] 614 qr[1] = 535 qr[1] = xmom[n, m] 615 536 zr = bed[n, m] 616 537 … … 625 546 626 547 627 if domain.split == False: 628 edgeflux, max_speed = flux_function(normal, ql, qr, zl, zr) 629 elif domain.split == True: 630 edgeflux, max_speed = flux_function_split(normal, ql, qr, zl, zr) 548 edgeflux, max_speed = flux_function(normal, ql, qr, zl, zr) 549 631 550 #print 'edgeflux', edgeflux 632 551 … … 646 565 647 566 Stage.explicit_update[k] = flux[0] 648 Xmom.explicit_update[k] = flux[1]567 Xmom.explicit_update[k] = flux[1] 649 568 #Ymom.explicit_update[k] = flux[2] 650 569 #print "flux cell",k,flux[0] … … 1054 973 1055 974 #Update momentum (explicit update is reset to source values) 1056 if domain.split == False: 1057 xmom[k] += -g*bx*avg_h 1058 #xmom[k] = -g*bx*avg_h 1059 #stage[k] = 0.0 1060 elif domain.split == True: 1061 xmom[k] += -g*wx*avg_h 1062 #xmom[k] = -g*wx*avg_h 1063 #ymom[k] += -g*zy*avg_h 975 xmom[k] += -g*bx*avg_h 976 #xmom[k] = -g*bx*avg_h 977 #stage[k] = 0.0 978 1064 979 1065 980 def manning_friction(domain):
Note: See TracChangeset
for help on using the changeset viewer.