Skip to content

Motivation for the package #5

@jwblin

Description

@jwblin

Let me start out with my thoughts about motivation (in no particular order):

(1) There are many meteorological, climatological, and oceanographic quantities that have standardized definitions. This includes constants (e.g., dry gas constant) as well as derived quantities (e.g., saturation vapor pressure, isentropic potential vorticity, potential temperature). It doesn't make sense that every person/research group writes their own routines to make such calculations as that leads to duplicated effort, routines whose results are not invertible between one another (e.g., routines using different numbers of significant figures for constants), and uneven levels of testing of each group's individual routines.

(2) A number of existing and developing projects (e.g., cdms, PyClimate, Iris) provide well-tested routines to calculate some of these quantities but not many of them. Creating a standardized suite would also mean the still-developing projects would not have to write their own version if they did not want to.

(3) While existing projects provide very powerful OOP structured interfaces and data structures that leverage metadata, there is still a need for a suite of procedures that primarily act on just arrays. For many if not most of the standardized quanities described, metadata does not play a substantial role. Additionally, these algorithms can
be readily adapted to other planetary environments if they are just quantities that are calculated from arrays. Finally, such a suite of array-based procedures would be a halfway-house for people making the transition from Matlab/IDL to OOP. For such users, using an OOP-centric package with many dependencies can be cognitively daunting, when all they want to do is calculate potential temperature for an array.

(4) Many of these routines exist in Fortran form and, while not having been tested formally using software engineering best-practices, nonetheless have been substantially tested via use over several decades (e.g., the AWIPS I routines). Making use of these routines in some way would be an easy first-cut at creating a standardized library.

Thoughts? Responses? What motivations do y'all think should be included? I figure with a list of motivations, this will give us a goals list.

Towards that end, let me make one comment regarding goals/scope: My own view of this package is that it should calculate basically any AOS quantity you would want, and in that way is very broad, but that it should do little more than that, and in that way is very narrow. I don't think it should duplicate what cdms, Iris, pandas, or other more sophisticated data/object structures are capable of doing as someone who wants that capability, it seems to me, would be better served using cdms, Iris, etc. utilities. It also introduces more dependencies to the package. I think it's fine for routines in the package to accept cdms, Iris, pandas, etc. objects to operate on, but the output would still be an array (or maybe a pandas dataframe). This is just my $0.02; am happy to be convinced otherwise :). One problem I see is what about quantities that require manipulation of the time axis? Do we accept only input where time has been adequately processed? Or not calculate those quantities and leave those to cdms, Iris, etc.?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions