source: inundation/wiki/future_directions.txt @ 1842

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

Comment about LFS in NetCDF

File size: 8.6 KB
Line 
1ANUGA Future Directions (2005-2006)
2
3
4--------------------------------------------------
5Draft of known issues regarding the ANUGA software
6--------------------------------------------------
7
8
9----------------
10Numerical issues
11
12CFL condition (centroid-midpt distances versus inscribed circle ? or error estimator)
13Gradient limiters
14Forcing terms:
15    Friction of Mud
16    Viscosity
17
18
19
20--------------------
21Functionality issues
22
23Mesh generation: (Duncan)
24    Through graphical generator
25    Through scripts
26    Alternative triangulators (Strang, ?.)
27    alpha-shapes
28   
29
30   refactoring triangle interface
31   outputting a "triangle" readable file (from pmesh?)
32   
33   simple method in mesh factory that will convert regularly gridded data to mesh using
34   points as vertices
35
36Pmesh (Duncan)
37    - from pmesh issues file:
38        Main issues  (TBA) 
39     
40- Better API for handling (scripted) meshes:
41        *Error messages
42        *Refined regions should be specified easily
43        *Ways of handling different point sets (e.g. 10m, 100m, 250m)
44         and populate according to refinement of mesh
45         (wavelets or other adaptive method)
46         
47     
48Georeferencing
49  Code works in UTM coordinates. Zone boundaries cannot be crossed:
50  Introduce nonstandard central meridians if necessary
51 
52  Could code be cast in terms of lat/lons?
53  make sure that georeferencing is used consistently (domain, pmesh, sww files, ...) (Duncan) 
54  Test that least_squares (and elsewhere) correctly reconciles different georefs. (See Karratha)
55
56Least_squares, (Duncan)
57        use of quad-tree may not use all datapoints
58        (currently fixed by expand search, need algorithm for searching neighbouring treenodes) (TRAC)
59
60        Give feedback when
61                points outside mesh
62                mesh outside points boundary  !
63                if mesh is corrupted (see lwru2.py and create_mesh.py in debug dir)
64                if segments are repeated (maybe in mesh.check_integrity) (TRAC)   
65
66        use sparse matrix (CSR) format in "build_interpolation_matrix_A" (TRAC)
67       
68        simplify geo-referencing (make sure that coordinate changes 'change_points' are
69        used everywhere) (TRAC)
70       
71        memory issue: !  (TRAC)
72                If LS is used for fitting
73                    compute self.Atz and self AtA directly and avoid self.A.
74                    need alpha
75                If LS is to be used for interpolation
76                    compute self.A
77                    no alpha needed
78               
79               
80               
81refactor interpolate_sww in terms of Interpolation_function (Ole or Duncan)
82
83               
84Checkpointing (largely done but needs to be revisited)
85
86
87Ability to create additional quantities and initialise arbitrarily
88 
89FIXMEs (TBA)
90
91
92File management (msh, pts, dem, ..) - introduce the notion of a project
93
94Reduce # of methods that read/write sww files (Yes)
95
96 
97-----------------
98Efficiency issues
99
100Parallelisation (First cut is done)
101
102Edgefluxes are currently computed twice (f01 = -f10)
103(This has been fixed by Matt Hardy in June 2005)
104
105Increase Timesteps (Implicit techniques?)
106
107Optimise creation and importing of domains (C-code and caching)  (Ole)
108Caching needs optional arguments: bypass_args and bypass_kwargs.
109These should be passed onto the function when it is evaluated but not participate in the hashing.
110Rationale: Some arguments such as classes change their signature at every run and thus cause the functin to be evaluated every time, defeating the purpose of caching.
111
112
113NetCDF can't deal with files > 2GB except on cyclone.
114It is possible to write netCDF files that exceed 2 GiByte on platforms that have "Large File Support" (LFS). Such files are platform-independent to other LFS platforms, but trying to open them on an older platform without LFS yields a "file too large" error.
115
116
117
118------------
119Architecture
120
121Settle dataflows and formats (pts, dem, msh, sww, etc) (Ole)
122 
123finaltime to be renamed duration
124
125
126----
127API:
128
129Suggestion for set_quantity
130      set_quantity(name, X, location, region)
131      where
132      name: Name of quantity
133      X:
134              -Compatible list,
135                -compatible list or numeric array,
136                -constant
137                -list of points or array with attribute values (use LS) (How to distinguish this from a numeric array? - perhaps use keyword arguments for everything)
138                -callable object (f: x, y -> z) where x,y,z are arrays
139                        - inline
140                        - file functions
141                        - polygon functions
142                -another quantity Q or an expression of the form
143                   a*Q+b*R+c, where       
144                   a,b,c are scalars, arrays or quantities
145                   Q,R are quantities (or 1?)
146                - pts filename (use LS and caching) (how to select attribute?)
147                - general expression to be parsed   
148
149        location: Where values are to be stored.
150                Permissible options are: vertices, edges, centroid, unique_vertices
151        region: Identify subset of triangles. Permissible values are
152                  - tag name (refers to tagged region)
153                    - indices (refers to specific triangles)
154                    - polygon (identifies region)
155                (incorporate uniqueness/non-uniqueness)
156           
157
158        IDEA for set_quantity:
159              Use keywords and call underlying specific method, e.g.
160             
161              if filename is not None:
162                 vertex_values = caching( fitfunc, filename, dependencies = ...)
163                 set_quantity(..., ..., vertex_values)
164              elif:
165             
166        Largely done.
167        Should create class Point_set representing points and attribute(s)
168        Include filename too? Yep (and selected attributes)
169        This could also facilitate use of multiple point sources
170        (e.g. at different resolutions)
171       
172        (IN TRAC now)
173       
174             
175           
176Making methods private, using _private
177Or write the API in a separate module.
178
179
180Introduce create_quantity in domain.py: (Ole)
181  It will make a new named instance and populate it by calling set_quantity
182  if desired.
183  Create_quantity would be called automatically by shallow_water.         
184 
185
186Make stage appear as any other quantity:
187Either
188   1: Make stage a subclass of quantity having knowledge of elevation and a special 
189       limiter (or more limiters)
190Or
191   2: Equip each quantity with a limiter class
192      (Con: A limiter for stage should never be applied to any other quantity)
193
194
195Also, investigate if Quantity and Conserved_quantity should be one class (Steve).
196
197Finally, reconcile the optimised gradient limiter of Matt's with the more general framework
198
199
200
201
202Boundary (Dirichlet): Think about specifying values by quantity name (and having defaults)
203     Dirichlet(stage = 1.0, ymomentum = 0.2)
204     
205Finish MOST2SWW with bathymetry(Trevor)     
206
207Make Steve's new boundary spatially dependent (Ole)
208
209Look at matplotlib's verbosity object.
210
211
212------
213Other:
214
215Should we remove Python code superseded by C-extensions?
216  Pros:   Leaner code and no risk
217  Cons:  Less readable algorithms
218
219Move py code into files such as quantity_ext.py and have python wrappers with doc strings for all functions. Name the code in extensions _ext and conditional import as usual.
220
221Generally separate file_format stuff from functionality (and work with a small number of formats)
222
223
224Have a .tms format for straight timeseries, use sww for f(t,x,y).
225Modify Interpolation function and file_function accordingly. (Use lwru2.py as test bed) (Ole)
226
227
228-------------
229Visualisation
230
231Swollen:
232        Export to movie
233        Use maps
234        Colourcoding
235        z-scale
236
237Matplotlib:
238        Realtime and 'post mortem' generation of colour coded maps with         contourlines.
239        Also useful for graphs
240
241Visual Python:
242        Steves new and improved tool
243
244
245       
246-----------
247Installation and setup
248
249- Assume that root dir for AnuGA is on Pythonpath. That way the same code can work with
250  sandpits and final installation
251- need installers for all modules       
252- pmesh needs a compile.py that will compile triangle whan used from a sandpit.
253  Currently it seems one needs a full setup to use pmesh
254
255 
256-----------
257Development
258
259Restructuring and moving svn repository (Ole)
260
261Flatten directory structure (Ole or DUncan)
262
263Apply buildbot
264
265Use real bugtracking/project management tool
266(see http://www.generalconcepts.com/resources/tracking, plone, basecamp,?
267Try out TRAC which integrates into subversion (Ole and Kat 27/7/5) - Done
268
269Zeus?
270
271Install Matplotlib on nautilus
272
273
274
275--------------
276Documentation
277
278Hire technical writer to produce
279- Getting started
280- User guide
281- Reference manual - semi automated
282
283Mathematical model description  (Steve & Chris)
284
285
286-----------------
287Validation and QA
288
289Merimbula (Steve & Chris)
290PNG Landslide study or watertank data (Adrian?)
291BOM
292SMEC (Lex)
293CSIRO (Kathy)
294Watertank study (Okushiri) (Ole) Done
295Macca...
296
297
298--------
299Naming
300
301The collection as well as individual modules may benefit from better names.
302
303
304--------
305Release
306
307Search for appropriate procedure for OSS release (Ole is onto that with AGIMO)
308
309
310
Note: See TracBrowser for help on using the repository browser.