Dear Bärring, This seems sensible but there always seems to be a gotcha with calendars. The only thing I've learned that I hold to is to avoid reinventing anything when it comes to them.
I would be interested to hear Jon Blower's perspective on this discussion (do you still watch this space, Jon?). He is the source of the logic I outlined that was implemented in the NetCDF-Java CDM. I think the logic implemented there <http://reading-escience-centre.github.io/edal-java/apidocs/uk/ac/rdg/resc/edal/util/chronologies/ThreeSixtyDayChronology.html> is in line with what's being proposed? For a 360 day chronology: > "a year has a fixed number of milliseconds (1000*60*60*24*360)." - Dave > On Oct 18, 2018, at 8:31 AM, Bärring Lars <lars.barr...@smhi.se> wrote: > > Dear Martin, David, all, > > As Klaus points out, the aim of my suggestion is to make software using CF > aware of the fact that the unit "year" is different depending on which > calendar the model is implementing. To give an example: > If I want to know when the global average temperature has increased by 1.5C, > or 4C, above pre-industrial time in the CMIP5 ensemble I will get answers as > a timedelta in days. As this is not really helpful I might feel inclined to > convert this to years, but now UDUNITS definition of year is not helpful for > those models having a 360_day or 365_day calendar. However, with the > calendar-aware definition of year such a calculation would be supported > without having to deal with it manually. > > Now, on to the discussion about months. Before my previous post I quickly > read through extensive exchange on this list back in 2011, so I really > appreciate David's comment that it is a complex subject. And that is the > reason for why I suggested is always month is always a year / 12. So, here is > an attempt to summarise the suggestion in a different way: > > * standard and proleptic_gregorian calendars (status quo): > o the number of days in a month is not an integer > o same issue with respect to ordinary (western) world months. > > * 365_day calendar: > + the number of seconds in a month would change from being "ill-defined > (?)" as 84600 * 365.242198781 / 12 = 2574957.50141, to more properly 84600 * > 365 / 12 = 2573250 > o same issue with respect to ordinary (western) world months. > > * 360_calendar: > + the number of seconds in a month would change from being "very > ill-defined (?)" as 84600 * 365.242198781 / 12 =2574957.50141, to more > properly 84600 * 360 / 12 = 2538000 > + the number of days in a month is an integer; 12 * 30 * 84600 = 2538000 > + the definition of a month is consistent with what is expected in the > "360_day world" > o same issue with respect to ordinary (western) world months. > > That is, even though the suggestion certainly do not solve everything (of > course!), the only argument against it, that I can see, is the work to tease > out the details and implement it in software packages. As was extensively > discussed in the 2011 threads, the real problem is the varying length of the > western world calendar months. But that is the topic for another thread. > > > Kind regards, > Lars > > Från: CF-metadata [cf-metadata-boun...@cgd.ucar.edu > <mailto:cf-metadata-boun...@cgd.ucar.edu>] för David Blodgett > [dblodg...@usgs.gov <mailto:dblodg...@usgs.gov>] > Skickat: den 18 oktober 2018 13:58 > Till: Ryan Abernathey > Kopia: cf-metadata@cgd.ucar.edu > Ämne: Re: [CF-metadata] 'months since' and 'years since' time units > > Dear Ryan, All, > > I hesitate to chime in on this thread as I know just how fraught this topic > can be, but then I think I know how fraught it can be so may have something > to offer. My experience is at the intersection of climatological models and > landscape models that are calibrated with "real" data. I've worked with daily > and monthly time series model output and interpolated weather products that > needs to match up to observations but uses a noleap or 360 calendar. It's an > enormous pain and we as a community should do better. -- so the business case > for taking this complexity head on is there! > > One resource I've found useful over the years is the [CDM > implementation](https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/CDM/CalendarDateTime.html > > <https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/CDM/CalendarDateTime.html>) > > > There are two factors at play. > > 1) Adding "calendar" to a udunits string avoids conversion to a number of > shorter time increments for long time increments (e.g. seconds per month). It > keeps things in the declared time units so you hit the precise date > boundaries you would expect. > 2) The "calendar" attribute gets you to how to interpret the datum of the > time axis. > > Especially relevant to this thread is: > uniform30day or 360_day = All years are 360 days divided into 30 day months. > With these two, I think the problems here are solved. However, inevitably, > people will omit the addition attribute for calendar or fall back on normal > "months since ..." when they actually mean "calendar months since ..." and > tell us 'why would you interpret my data that way it makes no sense?!?' This > is perfectly parallel to spatial coordinates where people don't declare a > datum for their latitude/longidute coordinates. Without that information one > can not use the information with a level of precision that some use cases > require. > > What I'm getting at is that CF should probably: > 1) adopt enough attribute precision to fully describe what we are trying to > convey > 2) make said attributes required or declare sensible defaults that reduce > ambiguity when users come knocking. > > That said, I've had no success pushing the community to accept that there > should be a default lat/lon datum for software developers to go on and I > would not doubt that the same will be true here as ambiguity and uncertainty > is better than dead wrong in many cases. My stance is that we should all be > dead wrong for the same reason rather than each implementor making an > arbitrary decision so we all get different answers (more ambiguity) from our > software du-jour. > > All the best, > > Dave > > >> On Oct 18, 2018, at 6:08 AM, Martin Juckes - UKRI STFC >> <martin.juc...@stfc.ac.uk <mailto:martin.juc...@stfc.ac.uk>> wrote: >> >> Hello All, >> >> >> I think the UNIDATA pull request referenced Jeff >> (https://github.com/Unidata/cftime/pull/69 >> <https://github.com/Unidata/cftime/pull/69>) is mis-quoting the CF >> Convention. As far as I can see, Unidata says that a month is exactly one >> 12th of a year, and CF inherits this -- with the statement "For similar >> reasons the unit month, which is defined in >> udunits.dat<http://www.unidata.ucar.edu/software/udunits/ >> <http://www.unidata.ucar.edu/software/udunits/>> to be exactly year/12, >> should also be used with caution." >> >> >> I can't see the difference between Lars's suggestion and the status quo. In >> UNIDATA a day is clearly defined as "period of time equal to 24 hours", >> which gives 84600 seconds. >> >> regards, >> Martin >> >> >> >> ________________________________ >> From: CF-metadata <cf-metadata-boun...@cgd.ucar.edu >> <mailto:cf-metadata-boun...@cgd.ucar.edu>> on behalf of Bärring Lars >> <lars.barr...@smhi.se <mailto:lars.barr...@smhi.se>> >> Sent: 18 October 2018 09:29:50 >> To: Ryan Abernathey; whitaker.jeff...@gmail.com >> <mailto:whitaker.jeff...@gmail.com>; cf-metadata@cgd.ucar.edu >> <mailto:cf-metadata@cgd.ucar.edu> >> Subject: Re: [CF-metadata] 'months since' and 'years since' time units >> >> Hi, >> >> I have have come to think about this from a somewhat different perspective. >> For some analyses, as well as when calculating certain derived >> climatological statistics (aka climate indices), using datasets based on >> different calendars the problem becomes obvious. >> >> In the model world of a 365-day GCM one year _is_ 365 days, and in a 360_day >> GCM a year _is_ 360 days. In the case of a gregorian/standard calendar GCM I >> am not sure whether it is 365.25 or 365.242198781 but this is in practice >> less of a problem. >> >> For datasets based non-standard calendars imposing the current UDUNITS >> definition of a year leads to complications that require workarounds if one >> is interested in for example the time elapsed until something happens or the >> duration of some (long-lasting) events. One way to partly mitigate these >> issues would be to use the time unit of years_since_START or >> months_since_START, but this is warned against in the CF Conventions and may >> software tools do not support it . >> >> The fundamental issue is the inconsistency between the GCM year and the >> UDUNITS year. So I would like to call on the wisdom of this list to see >> whether the CF Convention could include a modification to the definition of >> a year and month: >> >> * standard calendar (no change) >> 1 day = 84600 seconds >> 1 year = 365.242198781 days >> 1 month = 365.242198781 / 12 days >> >> * 365_day calendar >> 1 day = 84600 seconds >> 1 year = 365 days >> 1 month = 365 / 12 days >> >> * 360_day calendar >> 1 day = 84600 seconds >> 1 year = 360 days >> 1 month = 360 / 12 days >> >> That is, the seconds per day ratio is not changed thus maintaining the >> consistency to other SI units. And, for the 360_day calendar month follows >> the suggestion by Ryan and Jeffrey. >> >> >> Kind regards, >> Lars >> >> -- >> Lars Bärring >> >> FDr, Forskare >> PhD, Research Scientist >> >> SMHI / Swedish Meteorological and Hydrological Institute >> Rossby Centre >> SE - 601 76 NORRKÖPING >> Tel / Phone: +46 (0)11 495 8604 >> Fax: +46 (0)11 495 8001 >> Besöksadress / Visiting address: Folkborgsvägen 17 >> ________________________________ >> Från: CF-metadata [cf-metadata-boun...@cgd.ucar.edu >> <mailto:cf-metadata-boun...@cgd.ucar.edu>] för Ryan Abernathey >> [ryan.abernat...@gmail.com <mailto:ryan.abernat...@gmail.com>] >> Skickat: den 17 oktober 2018 21:22 >> Till: whitaker.jeff...@gmail.com <mailto:whitaker.jeff...@gmail.com> >> Kopia: cf-metadata@cgd.ucar.edu <mailto:cf-metadata@cgd.ucar.edu> >> Ämne: Re: [CF-metadata] 'months since' and 'years since' time units >> >> Hi everyone, >> >> I am that user, and I'm new to this mailing list. Thank you all for your >> work on CF conventions. It's such a valuable effort! >> >> I want to note that this was inspired by the proliferation of datasets in >> the wild that use "month" as their units. For example, nearly all of the IRI >> Data Library does this, in conjunction with a 3"60_day" calendar (example: >> https://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NCEP-NCAR/.CDAS-1/.MONTHLY/.Diagnostic/.surface/.temp/ >> >> <https://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NCEP-NCAR/.CDAS-1/.MONTHLY/.Diagnostic/.surface/.temp/>). >> >> My impression from talking to data providers is that no one is using >> "360_day" calendar and "months" as units, and then expecting "months" to be >> interpreted as 365.242198781/12 days. They all expect it to be interpreted >> as 30 days. While there are various workarounds that can be used at >> different levels of the software stack, the best solution, IMHO, is to >> explicitly allow in CF conventions what Jeff proposed: "months and years be >> interpreted as calendar months and years for those calendars where they have >> a fixed length". I don't think this will break existing applications. >> >> Thanks, >> Ryan >> >> On Wed, Oct 17, 2018 at 3:06 PM Jeffrey Whitaker <whitaker.jeff...@gmail.com >> <mailto:whitaker.jeff...@gmail.com><mailto:whitaker.jeff...@gmail.com >> <mailto:whitaker.jeff...@gmail.com>>> wrote: >> Hi: I'm a developer of the 'cftime' python package >> (https://github.com/Unidata/cftime <https://github.com/Unidata/cftime>). A >> user submitted a pull request (https://github.com/Unidata/cftime/pull/69 >> <https://github.com/Unidata/cftime/pull/69>) that implements support for a >> 30-day calendar month time unit for the '360_day' CF calendar. Although >> using a 'month' time unit is a tricky proposition in general, for this >> calendar it seems straightforward since every month has the same length. >> However, in the discussion of the pull request it was pointed out that CF >> expects that "the value of the units attribute is a string that can be >> recognized by UNIDATA’s Udunits package", and that UDUNITS defines a month >> as 365.242198781/12 days. My question is this - is it reasonable for our >> python package to make an exception to this rule for the 360_day calendar? >> More generally, can months and years be interpreted as calendar months and >> years for those calendars where they have a fixed length, or will this >> deviate from the existing CF conventions and break existing applications? >> >> Regards, Jeff >> >> -- >> Jeffrey S. Whitaker >> NOAA/OAR/PSD R/PSD1 >> 325 Broadway, Boulder, CO, 80305-3328 >> Phone: (303)497-6313 >> FAX: (303)497-6449 >> >> _______________________________________________ >> CF-metadata mailing list >> CF-metadata@cgd.ucar.edu >> <mailto:CF-metadata@cgd.ucar.edu><mailto:CF-metadata@cgd.ucar.edu >> <mailto:CF-metadata@cgd.ucar.edu>> >> http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata >> <http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata> >> _______________________________________________ >> CF-metadata mailing list >> CF-metadata@cgd.ucar.edu <mailto:CF-metadata@cgd.ucar.edu> >> http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata >> <http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata>
_______________________________________________ CF-metadata mailing list CF-metadata@cgd.ucar.edu http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata