Changeset 1133


Ignore:
Timestamp:
Mar 23, 2005, 10:54:19 AM (20 years ago)
Author:
prow
Message:

testing sww2domain.

Location:
inundation/ga/storm_surge/pyvolution
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/pyvolution/_test_sww2domain.py

    r1089 r1133  
    5555#Evolution
    5656for t in domain.evolve(yieldstep = 1, finaltime = 2.0):
    57     domain.write_time()
     57#    domain.write_time()
     58    pass
    5859
    5960
     
    6364from Numeric import allclose
    6465
    65 filename = domain.filename+'.sww'
     66filename = domain.datadir+'\\'+domain.filename+'.sww'
    6667
    67 domain2 = sww2domain(filename,fail_if_NaN=False)
     68domain2 = sww2domain(filename,fail_if_NaN=False,verbose = False)
    6869
    6970
     
    7475
    7576for bit in bits:
    76     print 'testing that domain.'+bit+' has been restored'
     77#    print 'testing that domain.'+bit+' has been restored'
    7778    assert allclose(eval('domain.'+bit),eval('domain2.'+bit))
    7879
    79 print 'passed'
     80#print 'passed'
  • inundation/ga/storm_surge/pyvolution/_test_sww2domain2.py

    r1090 r1133  
    2323domain.filename = 'bedslope'
    2424domain.default_order=2
     25domain.quantities_to_be_stored=['stage']
    2526
    2627#######################
     
    4950
    5051domain.check_integrity()
    51 dir(domain)
    52 
    5352######################
    5453#Evolution
    5554for t in domain.evolve(yieldstep = 1, finaltime = 2.0):
    56     domain.write_time()
     55    pass
     56    #domain.write_time()
    5757
    5858
     
    6262from Numeric import allclose
    6363
    64 filename = domain.filename+'.sww'
     64filename = domain.datadir+'\\'+domain.filename+'.sww'
    6565
    6666try:
    67     domain2 = sww2domain(filename)
     67    domain2 = sww2domain(filename,verbose=False)
    6868    assert True == False
    6969except:
    70     domain2 = sww2domain(filename,fail_if_NaN=False)
     70    filler = 0
     71    domain2 = sww2domain(filename,fail_if_NaN=False,NaN_filler = filler,verbose=False)
    7172
    7273bits = ['xllcorner','yllcorner','vertex_coordinates','time','starttime']
     
    7677
    7778for bit in bits:
    78     print 'testing that domain.'+bit+' has been restored'
     79#    print 'testing that domain.'+bit+' has been restored'
    7980    assert allclose(eval('domain.'+bit),eval('domain2.'+bit))
    8081
    81 print max(max(domain2.get_quantity('xmomentum')))
    82 print min(min(domain2.get_quantity('xmomentum')))
    83 print max(max(domain2.get_quantity('ymomentum')))
    84 print min(min(domain2.get_quantity('ymomentum')))
     82#print max(max(domain2.get_quantity('xmomentum')))
     83#print min(min(domain2.get_quantity('xmomentum')))
     84#print max(max(domain2.get_quantity('ymomentum')))
     85#print min(min(domain2.get_quantity('ymomentum')))
    8586
    86 assert max(max(domain2.get_quantity('xmomentum')))==0
    87 assert min(min(domain2.get_quantity('xmomentum')))==0
    88 assert max(max(domain2.get_quantity('ymomentum')))==0
    89 assert min(min(domain2.get_quantity('ymomentum')))==0
     87assert max(max(domain2.get_quantity('xmomentum')))==filler
     88assert min(min(domain2.get_quantity('xmomentum')))==filler
     89assert max(max(domain2.get_quantity('ymomentum')))==filler
     90assert min(min(domain2.get_quantity('ymomentum')))==filler
    9091
    91 print 'passed'
     92#print 'passed'
     93
     94#cleanup
     95#import os
     96#os.remove(domain.datadir+'/'+domain.filename+'.sww')
  • inundation/ga/storm_surge/pyvolution/data_manager.py

    r1120 r1133  
    16231623
    16241624
    1625 def sww2domain(filename,t=None,fail_if_NaN=True,NaN_filler=0):
    1626     """Read sww Net CDF file containing Shallow Water Wave simulation
    1627 
    1628     Quantities stage, elevation, xmomentum and ymomentum.
    1629 
    1630     The momentum is not always stored.
    1631 
     1625def sww2domain(filename,t=None,fail_if_NaN=True,NaN_filler=0,verbose = True):
     1626    """
     1627    Usage: domain = sww2domain('file.sww',t=time (default = last time in file))
     1628
     1629    If the sww has stages, but not
    16321630    """
    16331631    NaN=9.969209968386869e+036
     1632    #initialise NaN.
     1633
    16341634    from Scientific.IO.NetCDF import NetCDFFile
    16351635    from domain import Domain
    16361636    from Numeric import asarray, transpose
    1637     #print 'Reading from ', filename
     1637
     1638    if verbose: print 'Reading from ', filename
    16381639    fid = NetCDFFile(filename, 'r')    #Open existing file for read
    16391640    time = fid.variables['time']       #Timesteps
     
    16411642        t = time[-1]
    16421643    time_interp = get_time_interp(time,t)
    1643 ################################
    1644 ########################################   
     1644
    16451645    # Get the variables as Numeric arrays
    16461646    x = fid.variables['x'][:]             #x-coordinates of vertices
     
    16491649    stage = fid.variables['stage']     #Water level
    16501650    xmomentum = fid.variables['xmomentum']   #Momentum in the x-direction
    1651     ymomentum = fid.variables['ymomentum']   #Momentum in the y-direction   
    1652 #################################
     1651    ymomentum = fid.variables['ymomentum']   #Momentum in the y-direction
     1652
    16531653    xllcorner = fid.xllcorner[0]
    16541654    yllcorner = fid.yllcorner[0]
     
    16571657    volumes = fid.variables['volumes'][:] #Connectivity
    16581658    coordinates=transpose(asarray([x.tolist(),y.tolist()]))
    1659 #
     1659
    16601660    conserved_quantities = []
    16611661    interpolated_quantities = {}
    16621662    other_quantities = []
    1663 #
    1664     #print '    interpolating quantities'
     1663
     1664    if verbose: print '    interpolating quantities'
    16651665    for quantity in fid.variables.keys():
    16661666        dimensions = fid.variables[quantity].dimensions
     
    16701670                  interpolated_quantity(fid.variables[quantity][:],time_interp)
    16711671        else: other_quantities.append(quantity)
    1672 #
     1672
    16731673    other_quantities.remove('x')
    16741674    other_quantities.remove('y')
    16751675    other_quantities.remove('z')
    16761676    other_quantities.remove('volumes')
    1677 #
     1677
    16781678    conserved_quantities.remove('time')
    1679 #
    1680     #print other_quantities
    1681     #print conserved_quantities
    1682     #print '    building domain'
     1679
     1680    if verbose: print '    building domain'
    16831681    domain = Domain(coordinates, volumes,\
    16841682                    conserved_quantities = conserved_quantities,\
     
    16881686    domain.time=t
    16891687    for quantity in other_quantities:
     1688        try:
     1689            NaN = fid.variables[quantity].missing_value
     1690        except:
     1691            pass #quantity has no missing_value number
    16901692        X = fid.variables[quantity][:]
    1691         #print quantity
    1692         #print 'max(X)'
    1693         #print max(X)
    1694         #print 'max(X)==NaN'
    1695         #print max(X)==NaN
     1693        if verbose:
     1694            print '       ',quantity
     1695            print '        NaN =',NaN
     1696            print '        max(X)'
     1697            print '       ',max(X)
     1698            print '        max(X)==NaN'
     1699            print '       ',max(X)==NaN
     1700            print ''
    16961701        if (max(X)==NaN) or (min(X)==NaN):
    16971702            if fail_if_NaN:
    1698                 msg = 'quantity %s contains no_data entry'%quantity
     1703                msg = 'quantity "%s" contains no_data entry'%quantity
    16991704                raise msg
    17001705            else:
     
    17041709#
    17051710    for quantity in conserved_quantities:
     1711        try:
     1712            NaN = fid.variables[quantity].missing_value
     1713        except:
     1714            pass #quantity has no missing_value number
    17061715        X = interpolated_quantities[quantity]
    1707         #print quantity
    1708         #print 'max(X)'
    1709         #print max(X)
    1710         #print 'max(X)==NaN'
    1711         #print max(X)==NaN
     1716        if verbose:
     1717            print '       ',quantity
     1718            print '        NaN =',NaN
     1719            print '        max(X)'
     1720            print '       ',max(X)
     1721            print '        max(X)==NaN'
     1722            print '       ',max(X)==NaN
     1723            print ''
    17121724        if (max(X)==NaN) or (min(X)==NaN):
    17131725            if fail_if_NaN:
    1714                 msg = 'quantity %s contains no_data entry'%quantity
     1726                msg = 'quantity "%s" contains no_data entry'%quantity
    17151727                raise msg
    17161728            else:
     
    17181730                X = (X*data)+(data==0)*NaN_filler
    17191731        domain.set_quantity(quantity,X)
     1732    fid.close()
    17201733    return domain
    17211734
Note: See TracChangeset for help on using the changeset viewer.