This addresses #81, and also could be considered to address #66.
Basically, there were 2 really small errors that made the logic of running backwards dispersion models not work.
For starters, the run_model function has a hardcoded 'forward' parameter, so no matter the direction specified in add_dispersion_params, the hysplit_dispersion function always received 'forward' as the parameter. This is fixed
in commit caead2f.
Second, the add_dispersion_params function has no duration parameter. The value of duration that is passed onto hysplit_dispersion is computed by the difference in hours between start_time and end_time:
In a backwards model, the end_time is before the start_time, so this variable takes negative values.
When writing the CONTROL file, however, there is an ifelse clause that prepends a '-' to the duration value. In the case of an already negative value, this writes a line with --duration, leading to a faulty CONTROL file that HYSPLIT doesn't accept and it just doesn't run. Removing the ifelse clause seems to work and is what I did in d4ca419.
It would be also nice to add some examples on how to run backward dispersion models, as there is none as of now.
I think that without this PR, a hacky way of running backward dispersion models is to simply use an end_time that is earlier than the start_time by as many hours as is desired, and then simply input forward in the direction parameter. This will write a negative duration value to the CONTROL file and HYSPLIT will read it and run it in backward mode anyway.
I am rather unfamiliar on R package development as I am mainly a python developer, so I am pretty sure this PR might need several extra steps to make it workable.
This addresses #81, and also could be considered to address #66.
Basically, there were 2 really small errors that made the logic of running backwards dispersion models not work.
For starters, the
run_model
function has a hardcoded 'forward' parameter, so no matter the direction specified inadd_dispersion_params
, thehysplit_dispersion
function always received 'forward' as the parameter. This is fixed in commit caead2f.Second, the
add_dispersion_params
function has noduration
parameter. The value ofduration
that is passed ontohysplit_dispersion
is computed by the difference in hours between start_time and end_time:https://github.com/rich-iannone/splitr/blob/44851122514e1296291f0e9b082326717549715f/R/run_model.R#L51
In a backwards model, the
end_time
is before thestart_time
, so this variable takes negative values.When writing the CONTROL file, however, there is an ifelse clause that prepends a '-' to the duration value. In the case of an already negative value, this writes a line with --duration, leading to a faulty CONTROL file that HYSPLIT doesn't accept and it just doesn't run. Removing the ifelse clause seems to work and is what I did in d4ca419.
It would be also nice to add some examples on how to run backward dispersion models, as there is none as of now.
I think that without this PR, a hacky way of running backward dispersion models is to simply use an
end_time
that is earlier than thestart_time
by as many hours as is desired, and then simply inputforward
in the direction parameter. This will write a negative duration value to the CONTROL file and HYSPLIT will read it and run it in backward mode anyway.I am rather unfamiliar on R package development as I am mainly a python developer, so I am pretty sure this PR might need several extra steps to make it workable.