@@ -97,6 +97,15 @@ write_segmented_configs.SIPNET <- function(settings, input_design = NULL, ...) {
9797 by = " ens_num" ,
9898 relationship = " many-to-one" )
9999 }
100+ # Use a custom job.sh template with no model2netcdf step;
101+ # we convert all segments together at the end of the timeseries instead.
102+ # ...unless user provided their own template, in which case use it as-is
103+ if (is.null(settings $ model $ jobtemplate ) || ! file.exists(settings $ model $ jobtemplate )) {
104+ settings $ model $ jobtemplate <- system.file(
105+ " template_singlesegment.job" ,
106+ package = " PEcAn.SIPNET"
107+ )
108+ }
100109
101110 new_jobfiles <- character ()
102111
@@ -218,6 +227,7 @@ write_segment_configs <- function(
218227 )
219228
220229 jobsh_files <- character ()
230+ job_logfiles <- character ()
221231
222232 for (isegment in seq_len(nrow(segments ))) {
223233 segment <- segments [isegment , ]
@@ -259,6 +269,18 @@ write_segment_configs <- function(
259269 segment_settings [[" outdir" ]] <- segment_outdir
260270 segment_settings [[" modeloutdir" ]] <- segment_outdir
261271 segment_settings [[" rundir" ]] <- segment_rundir
272+ segment_settings [[c(" host" , " rundir" )]] <- sub(
273+ pattern = settings $ rundir ,
274+ replacement = settings $ host $ rundir ,
275+ x = segment_rundir ,
276+ fixed = TRUE
277+ )
278+ segment_settings [[c(" host" , " outdir" )]] <- sub(
279+ pattern = settings $ modeloutdir ,
280+ replacement = settings $ host $ outdir ,
281+ x = segment_outdir ,
282+ fixed = TRUE
283+ )
262284 segment_settings [[c(" run" , " start.date" )]] <- dstart
263285 segment_settings [[c(" run" , " end.date" )]] <- dend
264286 segment_settings [[c(" run" , " inputs" )]] <- segment_inputs
@@ -291,12 +313,19 @@ write_segment_configs <- function(
291313 run.id = runid_dummy
292314 )
293315
316+ segment_log <- file.path(segment_settings $ modeloutdir ,
317+ runid_dummy ,
318+ " logfile.txt" )
294319 segment_jobsh <- file.path(segment_settings $ rundir , runid_dummy , " job.sh" )
295320 stopifnot(file.exists(segment_jobsh ))
321+ job_logfiles <- c(job_logfiles , segment_log )
296322 jobsh_files <- c(jobsh_files , segment_jobsh )
297323 }
298324
299325 # Now, get the run's jobsh file
326+ # NB this doesn't do any path expansion or @TEMPLATE@ string replacement --
327+ # those are done in the per-segment job.sh.
328+ # Note especially that means no @HOST_SETUP@ / @HOST_TEARDOWN@ in this script
300329 run_jobsh <- file.path(run_dir , " job.sh" )
301330 target_sipnet_out <- file.path(run_modeloutdir , " sipnet.out" )
302331 segmented_jobsh_file <- file.path(run_dir , " job_segmented.sh" )
@@ -326,10 +355,31 @@ write_segment_configs <- function(
326355 sprintf(" sitelon = %s" , as.character(settings $ run $ site $ lon )),
327356 sprintf(" start_date = %s" , shQuote(settings $ run $ start.date )),
328357 sprintf(" end_date = %s" , shQuote(settings $ run $ end.date )),
358+ sprintf(" delete.raw = %s" , shQuote(settings $ model $ delete.raw )),
329359 sprintf(" revision = %s" , shQuote(settings $ model $ revision )),
330360 sep = " , "
331361 )
332- )
362+ ),
363+ " " ,
364+ " # copy readme with specs to output" ,
365+ paste(" cp" , file.path(run_dir , " README.txt" ), file.path(run_modeloutdir , " README.txt" )),
366+ paste(" cp" , file.path(run_dir , " segments.csv" ), file.path(run_modeloutdir , " segments.csv" )),
367+ " " ,
368+ " # Concatenate segment log files" ,
369+ paste(" echo \"\n --> contents of" , job_logfiles , " :\" && cat" , job_logfiles ),
370+ " " ,
371+ if (isTRUE(as.logical(settings $ model $ delete.raw ))) {
372+ # Removing all outputs that have been safely copied to the outdir
373+ c(
374+ " # Remove per-segment outputs & logs after concatenating to job outdir" ,
375+ sprintf(" find %s -name sipnet.out -delete" , segment_rootdir ),
376+ sprintf(" find %s -name logfile.txt -delete" , segment_rootdir ),
377+ sprintf(" rm %s/README.txt" , run_dir ),
378+ sprintf(" rm %s/segments.csv" , run_dir )
379+ )
380+ },
381+ " " ,
382+ " echo -e \" MODEL FINISHED\n Logfile is located at '${OUTDIR}/logfile.txt'\" >&3"
333383 )
334384 writeLines(segmented_jobsh_lines , segmented_jobsh_file )
335385 if (replace_and_link ) {
0 commit comments