Changeset 8481


Ignore:
Timestamp:
Jul 27, 2012, 8:22:05 PM (13 years ago)
Author:
steve
Message:

Found bug for erosion_operator (optimize_dry_cells)

Location:
trunk/anuga_core/source/anuga/operators
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga/operators/erosion_operators.py

    r8480 r8481  
    2525    import inspect
    2626    return inspect.currentframe().f_back.f_back.f_lineno
    27 
    2827
    2928
     
    4443    stage_c = self.get_quantity('stage').centroid_values
    4544
    46     print 'elev_v\n', elev_v[ind]
    47     print 'stage_v\n', stage_v[ind]
    48 
    49     print 'elev_c\n', elev_c[ind]
    50     print 'elev_avg\n',num.mean(elev_v[ind],axis=1)
    51     print 'stage_c\n', stage_c[ind]
    52     print 'stage_avg\n',num.mean(stage_v[ind],axis=1)
     45    from pprint import pprint
     46    print 'elev_v, elev_c, elev_avg \n'
     47    pprint( num.concatenate( (elev_v[ind], (elev_c[ind]).reshape(16,1),
     48                               num.mean(elev_v[ind],axis=1).reshape(16,1)), axis = 1))
     49    print 'stage_v, stage_c, stage_avg \n'
     50    pprint( num.concatenate( (stage_v[ind], (stage_c[ind]).reshape(16,1),
     51                               num.mean(stage_v[ind],axis=1).reshape(16,1)), axis = 1))
     52
     53   
     54
    5355    print 80*"="
    5456
     
    8385
    8486
     87        #------------------------------------------
     88        # Find vertex nodes
     89        #------------------------------------------
     90        node_id = set()
     91
     92        for ind in self.indices:
     93            for k in [0,1,2]:
     94                node_id.add(self.domain.triangles[ind,k])
     95
     96        self.node_id = [ id for id in node_id ]
     97
     98
     99        node_index = num.zeros((self.domain.number_of_nodes)+1, dtype = num.int)
     100
     101        k = 0
     102        node_index[0] = self.domain.number_of_triangles_per_node[0]
     103        for i in range(self.domain.number_of_nodes):
     104            if i == 0:
     105                continue
     106
     107            node_index[i] = node_index[i-1] + self.domain.number_of_triangles_per_node[i]
     108
     109        n0 = self.node_id[0]
     110        i0 = node_index[n0]                                      # index of first vertex associated to node
     111        i1 = i0 + self.domain.number_of_triangles_per_node[i]    # index of last vertex associated to node
     112
     113        print node_index
     114        print n0,i0,i1
     115        print len(node_index),self.domain.number_of_nodes
     116
     117
     118        print self.node_id
     119
     120
    85121    def __call__(self):
    86122        """
     
    114150
    115151
    116 
     152        #print self.indices
     153       
    117154
    118155        self.elev_v  = self.domain.quantities['elevation'].vertex_values
     
    125162
    126163
    127         stage_elev_info(self.domain)
     164        #stage_elev_info(self.domain)
    128165        #--------------------------------------------
    129166        # Here we do the actual erosion
    130167        #--------------------------------------------
    131         if self.indices is None:
    132             self.elev_v[:] = self.elev_v + 0.0
    133         else:
    134             self.elev_v[self.indices] -= 0.1*dt
    135 
    136 
    137         stage_elev_info(self.domain)
     168
     169        if t < 15.0 and t > 10.0:
     170            if self.indices is None:
     171                self.elev_v[:] = self.elev_v + 0.0
     172            else:
     173                self.elev_v[self.indices] -= 0.1*dt
     174
     175
     176        for nid in self.node_id:
     177            print 'nid ', nid
     178            print 'vvi ', self.domain.vertex_value_indices[nid]
     179
     180
     181        #stage_elev_info(self.domain)
    138182       
    139183
     
    141185        # In future with discontinuous bed we will not need to do this.
    142186        self.domain.quantities['elevation'].smooth_vertex_values()
     187
     188        # Need to do this faster.
     189
     190        #stage_elev_info(self.domain)
     191
    143192        self.domain.quantities['elevation'].interpolate()
     193
     194        #stage_elev_info(self.domain)
    144195
    145196        #self.elev_c = self.domain.quantities['elevation'].centroid_values
     
    147198#        # Fix up water conservation
    148199        self.stage_c[:] = self.elev_c +  height_c
    149 #        self.domain.distribute_to_vertices_and_edges()
    150 
    151         print 'time in erosion ',self.get_time(), dt
     200
     201        #stage_elev_info(self.domain)
     202
     203
     204        old_flag = self.domain.optimise_dry_cells
     205        self.domain.optimise_dry_cells = 0
     206        self.domain.distribute_to_vertices_and_edges()
     207        self.domain.optimise_dry_cells = old_flag
     208
     209        #stage_elev_info(self.domain)
     210        #print 'time in erosion ',self.get_time(), dt
    152211
    153212
     
    169228
    170229        message  = indent + self.label + ': Erosion_operator'
    171         return 'test'
     230        return message
    172231
    173232
  • trunk/anuga_core/source/anuga/operators/run_polygon_erosion.py

    r8480 r8481  
    2828print domain.statistics()
    2929domain.set_quantities_to_be_stored({'elevation': 2,
    30                                     'stage': 2})
     30                                    'stage': 2,
     31                                    'xmomentum': 2,
     32                                    'ymomentum': 2})
    3133
    3234#------------------------------------------------------------------------------
     
    8284#------------------------------------------------------------------------------
    8385
    84 for t in domain.evolve(yieldstep=0.02, finaltime=0.02):
     86for t in domain.evolve(yieldstep=0.2, finaltime=20.0):
    8587    domain.print_timestepping_statistics()
    8688    domain.print_operator_timestepping_statistics()
Note: See TracChangeset for help on using the changeset viewer.