Changeset 2814


Ignore:
Timestamp:
May 5, 2006, 9:26:06 PM (19 years ago)
Author:
steve
Message:

Resolving conflicts between Ole's new cache argument and the ghost and full dictionary for domain

Location:
inundation
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • inundation/parallel/run_parallel_sw_rectangle.py

    r2813 r2814  
    3939processor_name = pypar.Get_processor_name()
    4040
    41 M = 20
     41M = 22
    4242N = M*numprocs
    4343
  • inundation/pyvolution/domain.py

    r2813 r2814  
    2121
    2222
    23     def __init__(self, source=None,
     23    def __init__(self,
     24                 source=None,
    2425                 triangles=None,
    2526                 boundary=None,
    26                  conserved_quantities=None, other_quantities=None,
    27                  tagged_elements=None, geo_reference=None,
     27                 conserved_quantities=None,
     28                 other_quantities=None,
     29                 tagged_elements=None,
     30                 geo_reference=None,
    2831                 use_inscribed_circle=False,
    2932                 mesh_filename=None,
    3033                 use_cache=False,
    31                  verbose=False
    32                  ):
    33        
     34                 verbose=False,
     35                 full_send_dict=None,
     36                 ghost_recv_dict=None,
     37                 processor=0,
     38                 numproc=1):
     39
     40
    3441        """Instantiate generic computational Domain.
    35        
     42
    3643        Input:
    3744          source:    Either a mesh filename or coordinates of mesh vertices.
     
    4855          ...
    4956
    50          
     57
    5158        """
    5259
     
    5865
    5966
    60         # In case a filename has been specified, extract content   
     67        # In case a filename has been specified, extract content
    6168        if mesh_filename is not None:
    6269            coordinates, triangles, boundary, vertex_quantity_dict, \
     
    6673                                         verbose=verbose)
    6774
    68            
    69         # Initialise underlying mesh structure   
     75
     76        # Initialise underlying mesh structure
    7077        Mesh.__init__(self, coordinates, triangles, boundary,
    7178                      tagged_elements, geo_reference, use_inscribed_circle)
     
    100107        self.forcing_terms = []
    101108
     109        #Setup the ghost cell communication
     110        if full_send_dict is None:
     111            self.full_send_dict = {}
     112        else:
     113            self.full_send_dict  = full_send_dict
     114
     115        # List of other quantity names
     116        if ghost_recv_dict  is None:
     117            self.ghost_recv_dict  = []
     118        else:
     119            self.ghost_recv_dict  = ghost_recv_dict
     120
     121        self.processor = processor
     122        self.numproc   = numproc
     123
     124        # Setup Communication Buffers
     125        self.nsys = len(self.conserved_quantities)
     126        for key in self.full_send_dict:
     127            buffer_shape = self.full_send_dict[key][0].shape[0]
     128            self.full_send_dict[key].append(zeros( (buffer_shape,self.nsys) ,Float))
     129
     130
     131        for key in self.ghost_recv_dict:
     132            buffer_shape = self.ghost_recv_dict[key][0].shape[0]
     133            self.ghost_recv_dict[key].append(zeros( (buffer_shape,self.nsys) ,Float))
    102134
    103135        #Defaults
     
    247279        #Assign values
    248280        self.quantities[name].set_values(*args, **kwargs)
    249        
     281
    250282
    251283    def get_quantity(self, name, location='vertices', indices = None):
     
    662694            #Yield results
    663695            if finaltime is not None and abs(self.time - finaltime) < epsilon:
    664             #FIXME (Ole): I don't like the the epsilon test, finaltime may not 
     696            #FIXME (Ole): I don't like the the epsilon test, finaltime may not
    665697            #be reached, as evolve will stop within one epsilon from finaltime
    666698            #if finaltime is not None and self.time >= finaltime:
    667            
     699
    668700                #FIXME: There is a rare situation where the
    669701                #final time step is stored twice. Can we make a test?
    670702                #FIXME (Ole, 30 April 2006): This is an attempt to fix that
    671                
     703
    672704                #if self.time > finaltime:
    673705                #    #FIXME (Ole, 30 April 2006): Do we need this check?
    674706                #    print 'WARNING (domain.py): time overshot finaltime'
    675707                #    self.time = finaltime
    676                
     708
    677709                # Yield final time and stop
    678710                #print 'finaltime %.18f' %self.time
     
    684716            #if self.yieldtime >= yieldstep:
    685717                # Yield (intermediate) time and allow inspection of domain
    686                
     718
    687719                #if self.yieldtime > yieldstep:
    688720                #    #FIXME (Ole, 30 April 2006): Do we need this check?
    689721                #    print 'WARNING (domain.py): yieldtime overshot yielstep'
    690                 #    self.yieldtime = yieldstep         
     722                #    self.yieldtime = yieldstep
    691723
    692724                if self.checkpoint is True:
     
    695727
    696728                #Pass control on to outer loop for more specific actions
    697                 #print 'yieldtime %.18f' %self.time             
     729                #print 'yieldtime %.18f' %self.time
    698730                yield(self.time)
    699                
    700                 if finaltime is not None and abs(self.time - finaltime) < epsilon:             
    701                     # FIXME (Ole, 30 April 2006): Maybe this will remove 
    702                     # duplicate final timesteps?               
     731
     732                if finaltime is not None and abs(self.time - finaltime) < epsilon:
     733                    # FIXME (Ole, 30 April 2006): Maybe this will remove
     734                    # duplicate final timesteps?
    703735                    # What we really need is to go back to conditions like
    704736                    # if finaltime is not None and self.time >= finaltime:
    705                     # as above and then understand fully 
     737                    # as above and then understand fully
    706738                    # the two tests that break as a consequence
    707739                    break
    708                    
     740
    709741                # Reinitialise
    710742                self.yieldtime = 0.0
  • inundation/pyvolution/shallow_water.py

    r2812 r2814  
    6969class Domain(Generic_Domain):
    7070
    71     def __init__(self, coordinates=None, vertices=None, boundary=None,
    72                  tagged_elements=None, geo_reference=None,
     71    def __init__(self,
     72                 coordinates=None,
     73                 vertices=None,
     74                 boundary=None,
     75                 tagged_elements=None,
     76                 geo_reference=None,
    7377                 use_inscribed_circle=False,
    7478                 mesh_filename=None,
    7579                 use_cache=False,
    76                  verbose=False):                 
     80                 verbose=False,
     81                 full_send_dict=None,
     82                 ghost_recv_dict=None,
     83                 processor=0,
     84                 numproc=1):
     85
    7786
    7887        conserved_quantities = ['stage', 'xmomentum', 'ymomentum']
    7988        other_quantities = ['elevation', 'friction']
    80         Generic_Domain.__init__(self, coordinates, vertices, boundary,
    81                                 conserved_quantities, other_quantities,
    82                                 tagged_elements, geo_reference,
    83                                 use_inscribed_circle, mesh_filename,
    84                                 use_cache, verbose)
     89        Generic_Domain.__init__(self,
     90                                coordinates,
     91                                vertices,
     92                                boundary,
     93                                conserved_quantities,
     94                                other_quantities,
     95                                tagged_elements,
     96                                geo_reference,
     97                                use_inscribed_circle,
     98                                mesh_filename,
     99                                use_cache,
     100                                verbose,
     101                                full_send_dict,
     102                                ghost_recv_dict,
     103                                processor,
     104                                numproc)
     105
    85106
    86107        from config import minimum_allowed_height, maximum_allowed_speed, g
     
    107128
    108129        self.quantities_to_be_stored = ['stage','xmomentum','ymomentum']
    109        
     130
    110131
    111132    def set_store_vertices_uniquely(self, flag, reduction=None):
    112133        """Decide whether vertex values should be stored uniquely as
    113134        computed in the model or whether they should be reduced to one
    114         value per vertex using self.reduction. 
     135        value per vertex using self.reduction.
    115136        """
    116137        self.smooth = not flag
     
    120141            self.reduction = mean
    121142            #self.reduction = min  #Looks better near steep slopes
    122        
    123        
    124        
     143
     144
     145
    125146
    126147    def set_quantities_to_be_stored(self, q):
Note: See TracChangeset for help on using the changeset viewer.