Ignore:
Timestamp:
Nov 19, 2009, 5:23:52 PM (14 years ago)
Author:
steve
Message:

Updating the balanced and parallel code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/shallow_water/data_manager.py

    r7520 r7562  
    644644            fid.close()
    645645
     646
     647##
     648# @brief Class to open an sww file so that domain can be populated with quantity values
     649class Read_sww:
     650
     651    def __init__(self, source):
     652        """The source parameter is assumed to be a NetCDF sww file.
     653        """
     654
     655        self.source = source
     656
     657        self.frame_number = 0
     658
     659        fin = NetCDFFile(self.source, 'r')
     660
     661        self.time = num.array(fin.variables['time'], num.float)
     662        self.last_frame_number = self.time.shape[0] - 1
     663
     664        self.frames = num.arange(self.last_frame_number+1)
     665
     666        fin.close()
     667       
     668        self.read_mesh()
     669
     670        self.quantities = {}
     671
     672        self.read_quantities()
     673
     674
     675    def read_mesh(self):
     676        fin = NetCDFFile(self.source, 'r')
     677
     678        self.vertices = num.array(fin.variables['volumes'], num.int)
     679       
     680        self.x = x = num.array(fin.variables['x'], num.float)
     681        self.y = y = num.array(fin.variables['y'], num.float)
     682
     683        assert len(self.x) == len(self.y)
     684       
     685        self.xmin = num.min(x)
     686        self.xmax = num.max(x)
     687        self.ymin = num.min(y)
     688        self.ymax = num.max(y)
     689
     690
     691
     692        fin.close()
     693       
     694    def read_quantities(self, frame_number=0):
     695
     696        assert frame_number >= 0 and frame_number <= self.last_frame_number
     697
     698        self.frame_number = frame_number
     699
     700        M = len(self.x)/3
     701       
     702        fin = NetCDFFile(self.source, 'r')
     703       
     704        for q in filter(lambda n:n != 'x' and n != 'y' and n != 'z' and n != 'time' and n != 'volumes' and \
     705                        '_range' not in n, \
     706                        fin.variables.keys()):
     707            if len(fin.variables[q].shape) == 1: # Not a time-varying quantity
     708                self.quantities[q] = num.ravel(num.array(fin.variables[q], num.float)).reshape(M,3)
     709            else: # Time-varying, get the current timestep data
     710                self.quantities[q] = num.array(fin.variables[q][self.frame_number], num.float).reshape(M,3)
     711        fin.close()
     712        return self.quantities
     713
     714    def get_bounds(self):
     715        return [self.xmin, self.xmax, self.ymin, self.ymax]
     716
     717    def get_last_frame_number(self):
     718        return self.last_frame_number
     719
     720    def get_time(self):
     721        return self.time[self.frame_number]
    646722
    647723
     
    25302606            verbose = False,
    25312607            origin = None):
     2608   
    25322609    log.critical('sww2asc will soon be obsoleted - please use sww2dem')
    25332610    sww2dem(basename_in,
     
    25402617            verbose = verbose,
    25412618            origin = origin,
    2542         datum = 'WGS84',
    2543         format = 'asc')
     2619            datum = 'WGS84',
     2620            format = 'asc')
    25442621
    25452622
     
    63796456
    63806457
     6458
     6459
    63816460##
    63826461# @brief A class to write STS files.
Note: See TracChangeset for help on using the changeset viewer.