Ignore:
Timestamp:
Oct 11, 2008, 12:38:18 PM (16 years ago)
Author:
steve
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_work/development/anuga_1d/domain.py

    r5742 r5832  
    77   Geoscience Australia
    88"""
     9
    910from generic_boundary_conditions import *
    10 #from coordinate_transforms.geo_reference import Geo_reference
     11
    1112
    1213class Domain:
    1314
    14     def __init__(self, coordinates, boundary = None,
    15                  conserved_quantities = None, other_quantities = None,
     15    def __init__(self,
     16                 coordinates,
     17                 boundary = None,
     18                 conserved_quantities = None,
     19                 evolved_quantities = None,
     20                 other_quantities = None,
    1621                 tagged_elements = None):
    1722        """
     
    2328        from config import timestepping_method
    2429        from config import CFL
    25 
    26 
    2730       
    2831        #Store Points
    2932        self.coordinates = array(coordinates)
    3033
    31 # #        if geo_reference is None:
    32 # #            self. = Geo_reference() #Use defaults
    33 # #        else:
    34 # #            self.geo_reference = geo_reference
    3534
    3635        #Register number of Elements
     
    3837
    3938        self.beta = 1.0
    40         self.limiter = "minmod_kurganov"
    41         self.CFL = CFL
     39        self.set_limiter("minmod_kurganov")
     40        self.set_CFL(CFL)
    4241        self.set_timestepping_method(timestepping_method)
    4342
     
    124123            self.conserved_quantities = conserved_quantities
    125124
     125        if evolved_quantities is None:
     126            self.evolved_quantities = self.conserved_quantities
     127        else:
     128            self.evolved_quantities = evolved_quantities
     129
    126130        if other_quantities is None:
    127131            self.other_quantities = []
     
    133137        self.quantities = {}
    134138
     139        #print self.conserved_quantities
     140        #print self.evolved_quantities
     141       
     142
    135143        #FIXME: remove later - maybe OK, though....
    136         for name in self.conserved_quantities:
     144        for name in self.evolved_quantities:
    137145            self.quantities[name] = Quantity(self)
    138146        for name in self.other_quantities:
     
    160168        self.number_of_steps = 0
    161169        self.number_of_first_order_steps = 0
    162         self.CFL = CFL
    163170
    164171        #Model time
     
    169176        #Checkpointing and storage
    170177        from config import default_datadir
    171         self.datadir = default_datadir
     178        self.set_datadir(default_datadir)
    172179        self.filename = 'domain'
    173180        self.checkpoint = False
     
    490497
    491498        return q
     499
     500
     501    def get_evolved_quantities(self, vol_id, vertex=None):#, edge=None):
     502        """Get evolved quantities at volume vol_id
     503
     504        If vertex is specified use it as index for vertex values
     505        If edge is specified use it as index for edge values
     506        If neither are specified use centroid values
     507        If both are specified an exeception is raised
     508
     509        Return value: Vector of length == number_of_evolved quantities
     510
     511        """
     512
     513        from Numeric import zeros, Float
     514
     515        #if not (vertex is None):# or edge is None):
     516        #    msg = 'Values for both vertex and edge was specified.'
     517        #    msg += 'Only one (or none) is allowed.'
     518       #     raise msg
     519
     520        q = zeros( len(self.evolved_quantities), Float)
     521
     522        for i, name in enumerate(self.evolved_quantities):
     523            Q = self.quantities[name]
     524            if vertex is not None:
     525                q[i] = Q.vertex_values[vol_id, vertex]
     526            #elif edge is not None:
     527            #    q[i] = Q.edge_values[vol_id, edge]
     528            else:
     529                q[i] = Q.centroid_values[vol_id]
     530
     531        return q
    492532       
    493533
     
    677717    def check_integrity(self):
    678718        #Mesh.check_integrity(self)
     719
     720        #print self.quantities
     721        #print self.conserved_quantities
    679722       
    680723        for quantity in self.conserved_quantities:
    681724            msg = 'Conserved quantities must be a subset of all quantities'
    682725            assert quantity in self.quantities, msg
     726
     727        for quantity in self.evolved_quantities:
     728            msg = 'Evolved quantities must be a subset of all quantities'
     729            assert quantity in self.quantities, msg           
    683730
    684731        # #assert hasattr(self, 'boundary_objects')
     
    720767        self.datadir = name
    721768
    722 
     769    def set_CFL(self, cfl):
     770        if cfl > 1.0:
     771            print 'WARNING: Setting CFL condition to %f which is greater than 1' % cfl
     772        self.CFL = cfl
     773
     774    def get_CFL(self):
     775        return self.CFL
     776   
     777    def set_filename(self, name):
     778        self.filename = name
     779
     780    def get_filename(self):
     781        return self.filename
     782
     783    def get_limiter(self):
     784        return self.limiter
     785
     786    def set_limiter(self,limiter):
     787
     788        possible_limiters = \
     789        ['pyvolution', 'steve_minmod', 'minmod', 'minmod_kurganov', 'superbee', 'vanleer', 'vanalbada']
     790
     791        if limiter in possible_limiters:
     792            self.limiter = limiter
     793            return
     794
     795        msg = '%s is an incorrect limiter type.\n'% limiter
     796        msg += 'Possible types are: '+ ", ".join(["%s" % el for el in possible_limiters])
     797        raise Exception, msg
     798
     799       
    723800    #--------------------------
    724801    # Main components of evolve
     
    915992        """
    916993
    917         # Save initial initial conserved quantities values
     994        # Save initial conserved quantities values
    918995        self.backup_conserved_quantities()           
    919996
     
    13821459            q = B.evaluate(vol_id, vertex_id)
    13831460
    1384             for j, name in enumerate(self.conserved_quantities):
     1461            for j, name in enumerate(self.evolved_quantities):
    13851462                Q = self.quantities[name]
    13861463                Q.boundary_values[i] = q[j]
Note: See TracChangeset for help on using the changeset viewer.