Changeset 2639


Ignore:
Timestamp:
Mar 31, 2006, 12:38:27 PM (18 years ago)
Author:
ole
Message:

Added new test for ferret generated NetCDF. This test breaks deliberately, since the code has yet to be written.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inundation/pyvolution/test_data_manager.py

    r2555 r2639  
    22132213        long_name = 'LON'
    22142214        lat_name = 'LAT'
     2215        time_name = 'TIME'       
    22152216
    22162217        nx = 3
     
    22302231            fid.variables[lat_name].assignValue(h2_list)
    22312232
    2232             fid.createDimension('TIME',2)
    2233             fid.createVariable('TIME','d',('TIME',))
    2234             fid.variables['TIME'].point_spacing='uneven'
    2235             fid.variables['TIME'].units='seconds'
    2236             fid.variables['TIME'].assignValue([0.,1.])
     2233            fid.createDimension(time_name,2)
     2234            fid.createVariable(time_name,'d',(time_name,))
     2235            fid.variables[time_name].point_spacing='uneven'
     2236            fid.variables[time_name].units='seconds'
     2237            fid.variables[time_name].assignValue([0.,1.])
    22372238            if fid == fid3: break
    22382239
     
    22702271
    22712272        for fid in [fid1,fid2,fid3]:
    2272           fid.createVariable(name[fid],'d',('TIME',lat_name,long_name))
     2273          fid.createVariable(name[fid],'d',(time_name,lat_name,long_name))
     2274          fid.variables[name[fid]].point_spacing='uneven'
     2275          fid.variables[name[fid]].units=units[fid]
     2276          fid.variables[name[fid]].assignValue(values[fid])
     2277          fid.variables[name[fid]].missing_value = -99999999.
     2278          if fid == fid3: break
     2279
     2280        for fid in [fid4]:
     2281            fid.createVariable(name[fid],'d',(lat_name,long_name))
     2282            fid.variables[name[fid]].point_spacing='uneven'
     2283            fid.variables[name[fid]].units=units[fid]
     2284            fid.variables[name[fid]].assignValue(values[fid])
     2285            fid.variables[name[fid]].missing_value = -99999999.
     2286
     2287
     2288        fid1.sync(); fid1.close()
     2289        fid2.sync(); fid2.close()
     2290        fid3.sync(); fid3.close()
     2291        fid4.sync(); fid4.close()
     2292
     2293        fid1 = NetCDFFile('test_ha.nc','r')
     2294        fid2 = NetCDFFile('test_e.nc','r')
     2295        fid3 = NetCDFFile('test_va.nc','r')
     2296
     2297
     2298        first_amp = fid1.variables['HA'][:][0,0,0]
     2299        third_amp = fid1.variables['HA'][:][0,0,2]
     2300        first_elevation = fid2.variables['ELEVATION'][0,0]
     2301        third_elevation= fid2.variables['ELEVATION'][:][0,2]
     2302        first_speed = fid3.variables['VA'][0,0,0]
     2303        third_speed = fid3.variables['VA'][:][0,0,2]
     2304
     2305        fid1.close()
     2306        fid2.close()
     2307        fid3.close()
     2308
     2309        #Call conversion (with zero origin)
     2310        ferret2sww('test', verbose=False,
     2311                   origin = (56, 0, 0))
     2312
     2313        os.remove('test_va.nc')
     2314        os.remove('test_ua.nc')
     2315        os.remove('test_ha.nc')
     2316        os.remove('test_e.nc')
     2317
     2318        #Read output file 'test.sww'
     2319        fid = NetCDFFile('test.sww')
     2320
     2321
     2322        #Check first value
     2323        elevation = fid.variables['elevation'][:]
     2324        stage = fid.variables['stage'][:]
     2325        xmomentum = fid.variables['xmomentum'][:]
     2326        ymomentum = fid.variables['ymomentum'][:]
     2327
     2328        #print ymomentum
     2329        first_height = first_amp/100 - first_elevation
     2330        third_height = third_amp/100 - third_elevation
     2331        first_momentum=first_speed*first_height/100
     2332        third_momentum=third_speed*third_height/100
     2333
     2334        assert allclose(ymomentum[0][0],first_momentum)  #Meters
     2335        assert allclose(ymomentum[0][2],third_momentum)  #Meters
     2336
     2337        fid.close()
     2338
     2339        #Cleanup
     2340        os.remove('test.sww')
     2341
     2342
     2343
     2344    def test_ferret2sww4(self):
     2345        """Like previous but with augmented variable names as
     2346        in files produced by ferret as opposed to MOST
     2347        """
     2348        from Scientific.IO.NetCDF import NetCDFFile
     2349
     2350        #The test file has
     2351        # LON = 150.66667, 150.83334, 151, 151.16667
     2352        # LAT = -34.5, -34.33333, -34.16667, -34 ;
     2353        # ELEVATION = [-1 -2 -3 -4
     2354        #             -5 -6 -7 -8
     2355        #              ...
     2356        #              ...      -16]
     2357        # where the top left corner is -1m,
     2358        # and the ll corner is -13.0m
     2359        #
     2360        # First value (index=0) in small_ha.nc is 0.3400644 cm,
     2361        # Fourth value (index==3) is -6.50198 cm
     2362
     2363        from coordinate_transforms.redfearn import redfearn
     2364        import os
     2365        fid1 = NetCDFFile('test_ha.nc','w')
     2366        fid2 = NetCDFFile('test_ua.nc','w')
     2367        fid3 = NetCDFFile('test_va.nc','w')
     2368        fid4 = NetCDFFile('test_e.nc','w')
     2369
     2370        h1_list = [150.66667,150.83334,151.]
     2371        h2_list = [-34.5,-34.33333]
     2372
     2373        long_name = 'LON961_1261'
     2374        lat_name = 'LAT481_841'
     2375        time_name = 'TIME1'
     2376
     2377        nx = 3
     2378        ny = 2
     2379
     2380        for fid in [fid1,fid2,fid3]:
     2381            fid.createDimension(long_name,nx)
     2382            fid.createVariable(long_name,'d',(long_name,))
     2383            fid.variables[long_name].point_spacing='uneven'
     2384            fid.variables[long_name].units='degrees_east'
     2385            fid.variables[long_name].assignValue(h1_list)
     2386
     2387            fid.createDimension(lat_name,ny)
     2388            fid.createVariable(lat_name,'d',(lat_name,))
     2389            fid.variables[lat_name].point_spacing='uneven'
     2390            fid.variables[lat_name].units='degrees_north'
     2391            fid.variables[lat_name].assignValue(h2_list)
     2392
     2393            fid.createDimension(time_name,2)
     2394            fid.createVariable(time_name,'d',(time_name,))
     2395            fid.variables[time_name].point_spacing='uneven'
     2396            fid.variables[time_name].units='seconds'
     2397            fid.variables[time_name].assignValue([0.,1.])
     2398            if fid == fid3: break
     2399
     2400
     2401        for fid in [fid4]:
     2402            fid.createDimension(long_name,nx)
     2403            fid.createVariable(long_name,'d',(long_name,))
     2404            fid.variables[long_name].point_spacing='uneven'
     2405            fid.variables[long_name].units='degrees_east'
     2406            fid.variables[long_name].assignValue(h1_list)
     2407
     2408            fid.createDimension(lat_name,ny)
     2409            fid.createVariable(lat_name,'d',(lat_name,))
     2410            fid.variables[lat_name].point_spacing='uneven'
     2411            fid.variables[lat_name].units='degrees_north'
     2412            fid.variables[lat_name].assignValue(h2_list)
     2413
     2414        name = {}
     2415        name[fid1]='HA'
     2416        name[fid2]='UA'
     2417        name[fid3]='VA'
     2418        name[fid4]='ELEVATION'
     2419
     2420        units = {}
     2421        units[fid1]='cm'
     2422        units[fid2]='cm/s'
     2423        units[fid3]='cm/s'
     2424        units[fid4]='m'
     2425
     2426        values = {}
     2427        values[fid1]=[[[5., 10.,15.], [13.,18.,23.]],[[50.,100.,150.],[130.,180.,230.]]]
     2428        values[fid2]=[[[1., 2.,3.], [4.,5.,6.]],[[7.,8.,9.],[10.,11.,12.]]]
     2429        values[fid3]=[[[13., 12.,11.], [10.,9.,8.]],[[7.,6.,5.],[4.,3.,2.]]]
     2430        values[fid4]=[[-3000,-3100,-3200],[-4000,-5000,-6000]]
     2431
     2432        for fid in [fid1,fid2,fid3]:
     2433          fid.createVariable(name[fid],'d',(time_name,lat_name,long_name))
    22732434          fid.variables[name[fid]].point_spacing='uneven'
    22742435          fid.variables[name[fid]].units=units[fid]
Note: See TracChangeset for help on using the changeset viewer.