You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the Software Requirement Specifications (SRS) document for FloPy 4, also called *the product*.
21
+
This is the Software Requirement Specifications (SRS) document for the FloPy 4 minimum viable product, called the MVP.
22
22
23
23
### Product scope
24
24
25
-
The product will be able to run MODFLOW simulations.
26
-
27
-
The product will support pre- and post-processing MODFLOW-based model input and output.
28
-
29
-
Pre-processing includes tasks like preparing model input and mesh generation.
30
-
31
-
Post-processing includes tasks like loading model output, plotting/visualiation, rudimentary statistical analysis, and interop with 3rd party formats/tools.
32
-
25
+
The MVP will be able to load, write, and run MODFLOW 6 simulations.
33
26
34
27
### Product value
35
28
36
-
The product allows reproducible, versionable Python workflows for MODFLOW modeling applications.
37
-
38
-
The product wraps MODFLOW and other programs and provide a Pythonic interface to their functionality and input and output files.
39
-
40
-
The product is essential to the MODFLOW development process for testing existing and newly developed functionality.
29
+
The MVP delivers a basic set of functionality which will become the core of FloPy 4.
41
30
42
31
### Intended audience
43
32
44
-
The product is for hydrologic scientists, engineers, and students who are familiar with the Python ecosystem and want to use MODFLOW for their hydrologic applications.
45
-
46
-
Another key audience is the MODFLOW development team.
33
+
The MVP is an internal product for use by the MODFLOW 6 and FloPy development team, as well as external collaborators.
47
34
48
35
### Intended use
49
36
50
-
The product should be compatible with all major operating systems and hardware ranging from laptops to HPC systems.
51
-
52
-
The product may be used in standalone scripts, inside applications, from interactive notebooks, and any other common Python runtime.
53
-
54
-
Other libraries and tools may build upon the product to offer more advanced, domain-specific, or application-specific functionality.
55
-
56
-
### Use cases
57
-
58
-
- A hydrologist needs to determine an optimal pumping rate for a well field...
59
-
60
-
- A student wants to simulate salt water intrusion in a coastal aquifer and visualize results...
61
-
62
-
- A professor is teaching a groundwater modeling class...
63
-
64
-
- A hydrologic institute maintains their own suite of advanced pre- and post-processing utilities that can rely on flopy4 as a component for its core capabilities...
65
-
66
-
- A MODFLOW developer is debugging an issue in the UZF package and wants to create a complicated test with many cells and stress periods...
37
+
The MVP is a developer-facing library supporting the core functionality describe above.
67
38
68
-
- A MODFLOW developer is setting up a worked example to demonstrate how to use a new feature...
69
-
70
-
- A MODFLOW 6 developer writes a new component specification and corresponding module, generates a compatible Python interface, and uses it to write integration tests for the new component...
71
-
72
-
```mermaid
73
-
C4Context
74
-
title [Context] Product use cases
75
-
76
-
Person(hydrologist, "Hydrologist", "determines optimal pumping rate for well field")
77
-
Person(student, "Student", "simulates salt water intrusion in coastal aquifer")
Other libraries and tools may build upon the MVP to offer more advanced, domain-specific, or application-specific functionality.
135
40
136
41
## Requirements
137
42
138
-
Broadly, the product should
139
-
140
-
- preserve existing `flopy.mf6` functionality
141
-
- be consistent, user-friendly and pythonic
142
-
- be easy to read, debug, diagnose and test
143
-
- be memory-efficient and provide fast IO
144
-
- separate concerns of users/developers
145
-
- impose a minimal maintenance burden
146
-
147
-
Specific requirements are based on stakeholder interviews and internal research.
148
-
149
43
Requirements are prioritized according to the [MoSCoW method](https://en.wikipedia.org/wiki/MoSCoW_method), indicating which requirements Must, Should, Could, and Won't be included in the first iteration.
150
44
151
45
### Functional requirements
@@ -157,36 +51,30 @@ Requirements are prioritized according to the [MoSCoW method](https://en.wikiped
157
51
| FUNC-3 | The product can run MODFLOW 6 simulations and provide access to their results. | M |
158
52
| FUNC-4 | The product can programmatically create, access, and manipulate MODFLOW 6 simulations. | M |
159
53
| FUNC-5 | The product supports existing MODFLOW 6 discretization types and can be extended to support new ones. | M |
160
-
| FUNC-6 | The product supports parallel MODFLOW 6 simulations, including requisite pre-processing e.g. model splitting. | M |
161
-
| FUNC-7 | The product can plot simulation results with extensible plotting APIs building on popular visualization libraries. | M |
162
-
| FUNC-9 | The product can export data to popular data storage/interchange formats (e.g. NetCDF, VTK, geospatial standards. | M |
163
-
| FUNC-10 | The product can validate simulations (i.e. check invariants) and warn the user of potential problems before running a simulation. | S |
164
-
| FUNC-11 | The product supports extensible/user-defined validations. | C |
165
-
| FUNC-12 | The product allows simulation subcomponents to be created independently of parent context, then combined programmatically. | M |
166
-
| FUNC-14 | The product can round-trip (i.e. load, write, and run) an existing simulation and give identical results to previous runs. | C |
167
-
| FUNC-15 | The product can manage larger-than-memory models and datasets. E.g., the product can be used to create an example model of the United States with a **?1 km?** grid resolution. | M |
168
-
| FUNC-16 | The product can determine and report whether it is compatible with a given MODFLOW 6 version (and corresponding specification). | M |
169
-
| FUNC-17 | The product is compatible with a wide range of MODFLOW 6 versions (and corresponding specifications) | S |
170
-
| FUNC-18 | The product understands and can manage/convert spatial units. | C |
171
-
| FUNC-19 | The product understands and can manage/convert temporal units (date and time). | C |
172
-
| FUNC-20 | The product can generate a MODFLOW 6 interface layer (i.e. source code) from definition files. | M |
173
-
| FUNC-21 | The product's MF6 interface layer can be inspected at runtime, e.g. to discover component attributes and variables. | M |
174
-
| FUNC-22 | The product's MF6 interface layer can reproduce the specification used to generate it. | S |
175
-
| FUNC-23 | The product provides appropriate, informative string dumps for simulation components. | M |
176
-
| FUNC-24 | The product provides programmatic access from any component to any other component registered with the simulation. | S |
54
+
| FUNC-6 | The product allows simulation subcomponents to be created independently of parent context, then combined programmatically. | M |
55
+
| FUNC-7 | The product can round-trip (i.e. load, write, and run) an existing simulation and give identical results to previous runs. | C |
56
+
| FUNC-8 | The product can manage larger-than-memory models and datasets. E.g., the product can be used to create an example model of the United States with a **?1 km?** grid resolution. | M |
57
+
| FUNC-9 | The product can determine and report whether it is compatible with a given MODFLOW 6 version (and corresponding specification). | M |
58
+
| FUNC-10 | The product is compatible with a wide range of MODFLOW 6 versions (and corresponding specifications) | S |
59
+
| FUNC-11 | The product supports spatial and temporal units to the extent that MODFLOW 6 does. | C |
60
+
| FUNC-12 | The product can generate a MODFLOW 6 interface layer (i.e. source code) from definition files. | M |
61
+
| FUNC-13 | The product's MF6 interface layer can be inspected at runtime, e.g. to discover component attributes and variables. | M |
62
+
| FUNC-14 | The product's MF6 interface layer can reproduce the specification used to generate it. | S |
63
+
| FUNC-15 | The product provides appropriate, informative string dumps for simulation components. | M |
64
+
| FUNC-16 | The product provides programmatic access from any component to any other component registered with the simulation. | S |
65
+
| FUNC-17 | The product allows specifying the precision with which values are written to input files. | M |
177
66
178
67
### Non-functional requirements
179
68
180
69
| ID | Description | MoSCoW |
181
70
| ------- | ----------- | ------ |
182
71
| NFR-1 | The product's documentation makes a clear distinction between public and internal APIs. | M |
183
-
| NFR-2 | The product's documentation provides a complete overview of the definition file specification. | M |
184
-
| NFR-3 | The product behaves unsurprisingly, with reasonable defaults for common APIs and use cases. | M |
185
-
| NFR-4 | The product provides clear and informative error messages to the user when an error occurs. | M |
186
-
| NFR-5 | The product has consistent APIs for MODFLOW 6 and older MODFLOW programs. | S |
187
-
| NFR-6 | The product can be easily extended e.g. to support new input/output file formats. | S |
188
-
| NFR-7 | The product provides a well-documented, type-hinted public API. | S |
189
-
| NFR-8 | The product consolidates entry points and emphasizes API discoverability. | S |
72
+
| NFR-2 | The product behaves unsurprisingly, with reasonable defaults for common APIs and use cases. | M |
73
+
| NFR-3 | The product provides clear and informative error messages to the user when an error occurs. | M |
74
+
| NFR-4 | The product has consistent APIs for MODFLOW 6 and older MODFLOW programs. | S |
75
+
| NFR-5 | The product can be easily extended e.g. to support new input/output file formats. | S |
76
+
| NFR-6 | The product provides a well-documented, type-hinted public API. | S |
77
+
| NFR-7 | The product consolidates entry points and emphasizes API discoverability. | S |
0 commit comments