How does SMOKE consider leap year?


#1

How does SMOKE consider leap year? Is there any controlling parameter that users should set for treating a leap year?

In my case, I have an inventory file that has daily emissions data for 365 days and I changed the inventory year to a leap year, and Smkinven does not show any message about whether it is treating a leap year or not.

Thanks,
–Ehsan


#2

One consideration is the #YEAR header in the inventories read by Smkinven – the YEAR typically corresponds to the year you are modeling. If the #YEAR is a leap year, then SMOKE will handle some of its internal calculations differently. This should affect both monthly and annual inventories. The overall impact of this is small, though (about 0.3% in terms of annual emissions), so it’s not really a problem to use a #YEAR 2014 inventory in a 2016 case, for instance.

Otherwise, the only parameters that need to be changed with respect to the modeling year are BASE_YEAR, EPI_STDATE_TIME/EPI_ENDATE_TIME, and optionally, the merge date files (MRGDATE_FILES). The set_days_v5.csh helper script uses those parameters and takes leap year into account when determining which dates to run for each sector. With respect to daily FF10 inventories and daily temporal profiles (TPRO_DAILY), it is up to the user to ensure that values for February 29 are either filled in or not filled in, whichever is appropriate for the year that you’re running.


#3

Internally, this is controlled by I/O API subroutine ISDSTIME(JDATE) which computes whether the date
JDATE (julian date, formatted YYYYDDD) is daylight savings time, allowing for the change of definitions over the years. See

https://cjcoats.github.io/ioapi/ISDSTIME.html