source: development/stochastic_study/extract_timeseries.py @ 2465

Last change on this file since 2465 was 2425, checked in by ole, 19 years ago

Work on stochastic_study and okushiri_2005

File size: 2.5 KB
Line 
1"""Read in tms file, interpolate at specified locations (ch 5,7,9) and compare
2"""
3
4import sys
5from os import sep
6from caching import cache
7import project
8
9sys.path.append('..'+sep+'..'+sep)
10
11
12gauges = [[0.000, 1.696]]  #Boundary
13gauges += [[4.521, 1.196],  [4.521, 1.696],  [4.521, 2.196]] #Ch 5-7-9
14
15gauge_names = ['Boundary', 'ch5', 'ch7', 'ch9']
16
17
18finaltime = 22.5
19timestep = 0.05
20
21#Read reference data
22
23#Input wave
24filename = 'input_wave.tms'
25print 'Reading', filename
26from Scientific.IO.NetCDF import NetCDFFile
27from Numeric import allclose
28fid = NetCDFFile(filename, 'r')#
29
30input_time = fid.variables['time'][:]
31input_stage = fid.variables['stage'][:]
32
33
34#gauges
35reference_time = []
36ch5 = []
37ch7 = []
38ch9 = []
39filename = 'output_ch5-7-9.txt'
40fid = open(filename)
41lines = fid.readlines()
42fid.close()
43for i, line in enumerate(lines[1:]):
44    if i == len(input_time): break
45
46    fields = line.split()
47
48    reference_time.append(float(fields[0]))
49    ch5.append(float(fields[1])/100)   #cm2m
50    ch7.append(float(fields[2])/100)   #cm2m
51    ch9.append(float(fields[3])/100)   #cm2m
52
53
54from pyvolution.util import file_function, ensure_numeric
55gauge_values = [ensure_numeric(input_stage),
56                ensure_numeric(ch5),
57                ensure_numeric(ch7),
58                ensure_numeric(ch9)] #Reference values
59
60
61
62#Read model output
63filename = project.basename + '.sww'
64
65f = cache(file_function, filename,
66          {'quantities': 'stage',
67           'interpolation_points': gauges,
68           'verbose': True},
69          #evaluate = True,
70          dependencies = [filename],
71          verbose = True)
72
73
74
75
76#Checks
77#print reference_time
78#print input_time
79assert reference_time[0] == 0.0
80assert reference_time[-1] == finaltime
81assert allclose(reference_time, input_time)
82
83
84
85#Validation
86
87
88for k, name in enumerate(gauge_names):
89    sqsum = 0
90    denom = 0
91    model = []
92    print 'Validating ' + name
93    for i, t in enumerate(reference_time):
94        ref = gauge_values[k][i]
95        val = f(t, point_id = k)[0]
96        model.append(val)
97
98        sqsum += (ref - val)**2
99        denom += ref**2
100
101    print sqsum
102    print sqsum/denom
103
104    from pylab import *
105    ion()
106    hold(False)
107    plot(reference_time, gauge_values[k], 'r.-',
108         reference_time, model, 'k-')
109    title('Gauge %s' %name)
110    xlabel('time(s)')
111    ylabel('stage (m)')   
112    legend(('Observed', 'Modelled'), shadow=True, loc='upper left')
113    savefig(name, dpi = 300)
114
115    raw_input('Next')
116show()
117
118
119
120#from pylab import *
121#plot(time, stage)
122#show()
Note: See TracBrowser for help on using the repository browser.