Ignore:
Timestamp:
Sep 16, 2010, 2:09:13 PM (13 years ago)
Author:
steve
Message:

Added logging to file for fractional step operators. There needs to an member function log_timestepping_statistics() implemented for each operator.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga/structures/structure_operator.py

    r8008 r8018  
    44import inlet
    55
     6from anuga.utilities.system_tools import log_to_file
     7
     8
    69class Structure_operator:
    710    """Structure Operator - transfer water from one rectangular box to another.
     
    1417    mannings_rougness,
    1518    """
     19
     20    counter = 0
    1621
    1722    def __init__(self,
     
    2530                 enquiry_gap,
    2631                 description,
     32                 label,
     33                 structure_type,
     34                 logging,
    2735                 verbose):
    2836       
     
    3038        self.domain.set_fractional_step_operator(self)
    3139        self.end_points = [end_point0, end_point1]
     40
     41       
    3242       
    3343        if height is None:
     
    4252        self.manning = manning
    4353        self.enquiry_gap = enquiry_gap
    44         self.description = description
     54
     55        if description == None:
     56            self.description = ' '
     57        else:
     58            self.description = description
     59       
     60
     61        if label == None:
     62            self.label = "structure_%g" % Structure_operator.counter
     63        else:
     64            self.label = label
     65        print label
     66
     67        if structure_type == None:
     68            self.structure_type = 'generic structure'
     69        else:
     70            self.structure_type = structure_type
     71           
    4572        self.verbose = verbose
    4673
     74       
     75       
     76        # Keep count of structures
     77        Structure_operator.counter += 1
     78
     79        # Slots for recording current statistics
    4780        self.discharge = 0.0
    4881        self.velocity = 0.0
     
    6396        self.inlets.append(inlet.Inlet(self.domain, polygon1, exchange_polygon1, outward_vector1))
    6497
     98        self.set_logging(logging)
    6599
    66100    def __call__(self):
     
    221255           
    222256
    223     def print_stats(self):
    224 
    225         print '====================================='
    226         print 'Generic Culvert Operator'
    227         print '====================================='
    228 
    229         print 'Culvert'
    230         print self.culvert
    231 
    232         print 'Culvert Routine'
    233         print self.routine
     257    def structure_statistics(self):
     258
     259
     260        message  = '=====================================\n'
     261        message += 'Structure Operator: %s\n' % self.label
     262        message += '=====================================\n'
     263
     264        message += 'Structure Type: %s\n' % self.structure_type
     265
     266        message += 'Description\n'
     267        message += '%s' % self.description
     268        message += '\n'
    234269       
    235270        for i, inlet in enumerate(self.inlets):
    236             print '-------------------------------------'
    237             print 'Inlet %i' % i
    238             print '-------------------------------------'
    239 
    240             print 'inlet triangle indices and centres'
    241             print inlet.triangle_indices
    242             print self.domain.get_centroid_coordinates()[inlet.triangle_indices]
    243        
    244             print 'polygon'
    245             print inlet.polygon
    246 
    247         print '====================================='
    248 
    249 
    250     def structure_statistics(self):
     271            message += '-------------------------------------\n'
     272            message +=  'Inlet %i\n' % i
     273            message += '-------------------------------------\n'
     274
     275            message += 'inlet triangle indices and centres\n'
     276            message += '%s' % inlet.triangle_indices
     277            message += '\n'
     278           
     279            message += '%s' % self.domain.get_centroid_coordinates()[inlet.triangle_indices]
     280            message += '\n'
     281
     282            message += 'polygon\n'
     283            message += '%s' % inlet.polygon
     284            message += '\n'
     285
     286        message += '=====================================\n'
     287
     288        return message
     289
     290
     291    def print_structure_statistics(self):
     292
     293        print self.structure_statistics()
     294
     295
     296    def print_timestepping_statistics(self):
    251297
    252298        message = '---------------------------\n'
    253         message += 'Structure report for structure %s:\n' % self.description
     299        message += 'Structure report for %s:\n' % self.label
    254300        message += '--------------------------\n'
     301        message += 'Type: %s\n' % self.structure_type
    255302        message += 'Discharge [m^3/s]: %.2f\n' % self.discharge
    256303        message += 'Velocity  [m/s]: %.2f\n' % self.velocity
     
    258305        message += 'delta total energy %.2f\n' % self.delta_total_energy
    259306
     307        print message
     308
     309
     310    def set_logging(self, flag=True):
     311
     312        self.logging = flag
     313
     314        # If flag is true open file with mode = "w" to form a clean file for logging
     315        if self.logging:
     316            self.log_filename = self.label + '.log'
     317            log_to_file(self.log_filename, self.structure_statistics(), mode='w')
     318            log_to_file(self.log_filename, 'time,discharge,velocity,driving_energy,delta_total_energy')
     319
     320            #log_to_file(self.log_filename, self.culvert_type)
     321
     322
     323    def timestepping_statistics(self):
     324
     325        message  = '%.5f, ' % self.domain.get_time()
     326        message += '%.5f, ' % self.discharge
     327        message += '%.5f, ' % self.velocity
     328        message += '%.5f, ' % self.driving_energy
     329        message += '%.5f' % self.delta_total_energy
     330
    260331        return message
    261332
     333    def log_timestepping_statistics(self):
     334
     335         if self.logging:
     336             log_to_file(self.log_filename, self.timestepping_statistics())
     337
    262338
    263339    def get_inlets(self):
Note: See TracChangeset for help on using the changeset viewer.