tests/testthat/test-stoch_crm.R

test_that("stoch_crm without stochasticity is same as band_crm",{
  set.seed(999)
  b_dens <- data.frame(
    month = month.abb,
    mean = runif(12, 0.8, 1.5),
    sd = runif(12, 0, 0)
  )

  # Generic FHD bootstraps from Johnson et al (2014)
  fhd_boots <- generic_fhd_bootstraps[[1]][,1:2]

  # wind speed vs rotation speed vs blade pitch
  wind_rtn_ptch <- data.frame(
    wind_speed = seq_len(30),
    rtn_speed = 10/(30:1),
    bld_pitch = c(rep(90, 4), rep(0, 8), 5:22)
  )

  # wind availability
  windavb <- data.frame(
    month = month.abb,
    pctg = runif(12, 85, 98)
  )

  # maintenance downtime
  dwntm <- data.frame(
    month = month.abb,
    mean = runif(12, 6, 10),
    sd = rep(0, 12))

  # ----------------------------------------------------------
  # Run stochastic CRM, treating rotor radius, air gap and
  # blade width as fixed parameters (i.e. not stochastic)
  stoch_output <- stoch_crm(
    model_options = c(1, 2, 3),
    n_iter = 1000,
    flt_speed_pars = data.frame(mean = 13.1, sd = 0),
    body_lt_pars = data.frame(mean = 0.85, sd = 0),
    wing_span_pars = data.frame(mean = 1.01, sd = 0),
    avoid_bsc_pars = data.frame(mean = 0, sd = 0),
    avoid_ext_pars = data.frame(mean = 0, sd = 0),
    noct_act_pars = data.frame(mean = 0.5, sd = 0),
    prop_crh_pars = data.frame(mean = 0.01, sd = 0),
    bird_dens_opt = "tnorm",
    bird_dens_dt = b_dens,
    flight_type = "flapping",
    prop_upwind = 0.5,
    gen_fhd_boots = fhd_boots,
    n_blades = 3,
    bld_pitch_pars = data.frame(mean = 15, sd = 0),
    rtn_speed_pars = data.frame(mean = 15, sd = 0),
    rtr_radius_pars = data.frame(mean = 120, sd = 0), # sd = 0, rotor radius is fixed
    air_gap_pars = data.frame(mean = 30, sd = 0),    # sd = 0, air gap is fixed
    bld_width_pars = data.frame(mean = 5, sd = 0),   # sd = 0, blade width is fixed
    rtn_pitch_opt = "probDist",
    windspd_pars = data.frame(mean = 7.74, sd = 0),
    rtn_pitch_windspd_dt = wind_rtn_ptch,
    trb_wind_avbl = windavb,
    trb_downtime_pars = dwntm,
    wf_n_trbs = 100,
    wf_width = 52,
    wf_latitude = 56.9,
    tidal_offset = 2.5,
    lrg_arr_corr = TRUE,
    verbose = TRUE,
    seed = 1234,
    out_format = "summaries",
    out_sampled_pars = TRUE,
    out_period = "months"
  )

  expect_equal(length(stoch_output$collisions),3)
  expect_equal(dim(stoch_output$collisions$opt1),c(12,9))
  expect_equal(dim(stoch_output$collisions$opt2),c(12,9))
  expect_equal(dim(stoch_output$collisions$opt3),c(12,9))
  expect_equal(class(stoch_output$collisions$opt1),c("tbl_df","tbl","data.frame"))
  expect_equal(class(stoch_output$collisions$opt2),c("tbl_df","tbl","data.frame"))
  expect_equal(class(stoch_output$collisions$opt3),c("tbl_df","tbl","data.frame"))

  expect_equal(names(stoch_output$collisions$opt1),
               c("period","mean","sd","median",
                "pctl_2.5", "pctl_25", "pctl_75",
                "pctl_97.5", "pctl_99")
               )
  expect_equal(class(stoch_output$collisions$opt1$period),"character")
  expect_equal(class(stoch_output$collisions$opt1$mean),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$sd),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$median),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$pctl_2.5),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$pctl_25),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$pctl_75),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$pctl_97.5),"numeric")
  expect_equal(class(stoch_output$collisions$opt1$pctl_99),"numeric")





  # Run Band model ----------------------------------------------------------


  bd_dens <- data.frame(
    month = month.abb,
    dens = b_dens$mean
  )

  gen_fhd <- fhd_boots[,c(1:2)]
  names(gen_fhd)[2] <- "prop"

  prop_oper <- data.frame(
    month = month.abb,
    prop_oper = stoch_output$sampled_pars$prop_oper_mth$mean)


  band_output <- band_crm(
    model_options = c(1,2,3),
    flight_speed = stoch_output$sampled_pars$flt_speed$mean,
    body_lt = stoch_output$sampled_pars$body_lt$mean,
    wing_span = stoch_output$sampled_pars$wing_span$mean,
    flight_type = "flapping",
    avoid_rt_basic = 0,
    avoid_rt_ext = 0,
    noct_activity = stoch_output$sampled_pars$noct_actv$mean,
    prop_crh_surv = stoch_output$sampled_pars$prop_crh$mean,
    dens_month = bd_dens,
    prop_upwind = 0.5,
    gen_fhd = gen_fhd,
    rotor_speed = stoch_output$sampled_pars$rtn_speed$mean,
    rotor_radius = stoch_output$sampled_pars$rtr_radius$mean,
    blade_width = stoch_output$sampled_pars$bld_width$mean,
    blade_pitch = stoch_output$sampled_pars$bld_pitch$mean,
    n_blades = 3,
    hub_height = 150,
    chord_prof = chord_prof_5MW,
    n_turbines = 100,
    turb_oper_month = prop_oper,
    wf_width = 52,
    wf_latitude = 56.9,
    tidal_offset = 2.5,
    lrg_arr_corr = TRUE,
    xinc=0.05,
    yinc=0.05
  )

  expect_equal(as.numeric(stoch_output$collisions$opt1$mean),expected=band_output$opt1)
  expect_equal(as.numeric(stoch_output$collisions$opt2$mean),expected=band_output$opt2)
  expect_equal(as.numeric(stoch_output$collisions$opt3$mean),expected=band_output$opt3)

})
HiDef-Aerial-Surveying/stochLAB documentation built on March 16, 2023, 8:13 a.m.