# Parallel computation

The computationally most intense functions qProb.3d(), n.sim.cond.3d() and reproduce.track.3d() of the package are also implemented in a parallel version. On Unix systems this is done using a fork cluster. On Windows systems PSOCK cluster is used.

Definition of start conditions and parameters:

Get movement characteristics (P) from the example trajectory and simulate a Unconditional Eprircal Random Walk (UERW) in order to extract the attraction term (Q):

P <- get.track.densities.3d(niclas, heightDistEllipsoid = TRUE, DEM = dem)
uerw <- sim.uncond.3d(sim.locs*f, start = c(niclas$x, niclas$y, niclas\$z),
a0 = a0, g0 = g0, densities = P)

The parallel version of the qProb.3d() function can be accessed by setting the parameter parallel = TRUE:

Q <- qProb.3d(uerw, sim.locs, parallel = TRUE)
cerwList <- reproduce.track.3d(n.sim = 100, niclas, DEM = dem, parallel = TRUE)

And also for n.sim.uncond.3d():

cerwList <- n.sim.cond.3d(n.sim = 100, sim.locs, start=start, end=end,a0 = a0, g0 = g0,
densities=P, qProbs=Q, DEM = dem, parallel = TRUE)

Alternativly the number of nodes in the cluster can be specified by passing a number to the function: parallel = 4. In this case a fork or PSOCK cluster with 4 nodes will be used. The maximum number of nodes is not allowed to be larger than the number of available cores (Hyper Threading included).

cerwList <- n.sim.cond.3d(n.sim = 100, sim.locs, start=start, end=end,a0 = a0, g0 = g0,
densities=P, qProbs=Q, DEM = dem, parallel = 4)

Note: If only a few tracks are simulated and the track length is short sim.locs < 30, then it is faster in many cases to stay with the single core version of the function, especially on Windows systems, where setting up clusters takes some time.