CNPDIAfunctions: Utility functions for use with the CNPDIA and MPBDIA model.

Description Usage Arguments Details Value Author(s) Examples

Description

PeriodicFunction generates a periodic function that is a truncated sine wave.

StepFunction generates a periodic step function

Usage

1
2
3
4
5
6
7
8
PeriodicFunction (avg = 1, max = NULL, period = 1, fraction = 0.5, 
                  phase = 0, min = 0, pow = 1,
                  times = seq(0, 5, length.out = 100))

StepFunction (value = 1, avg = NULL, period = 1, 
              fraction = 0.5, phase = 0,
              times = seq(0, 5, length.out = 100))
  

Arguments

avg, max

mean and maximum function-value, only one of those should be specified.

value

function-value when not 0, only one of avg, value should be specified.

period

periodicity, in [days].

fraction

fraction of period in which the function value is not 0, dimensionless.

phase

time offset, in [days].

min

minimum y-value.

pow

power to which the function value is raised

times

time values for which the function needs to be applied, in [days]

Details

StepFunction creates a periodic on-off function, where the non-0 (on)-value as given by value occurs fraction*period of the time, and the 0-value (1-fraction)*period of the time. For example, this can be used to mimic tides, swiching between inundated and dry.

PeriodicFunction creates a periodic sinusoidal function with a give periodicity, and where the fraction of time that the function is nonzero can be specified. For instance to generate light within a day or within a year.

Value

A matrix with two columns, the times and the calculated function value.

Author(s)

Karline Soetaert

Examples

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#=====================================
# Tides
#=====================================

# tides with a periodicity of 12.4 hours, inundated half of the time.
# inundated 1/4 of the time

 times     <- seq(0, 5, length.out = 1000)
 Tides     <- StepFunction(period = 12.4/24, fraction = 0.5, 
                           times = times)
 Tides2    <- StepFunction(period = 12.4/24, fraction = 0.25, 
                           times = times, value = 2)
 matplot(x = times, y = cbind(Tides[,2], Tides2[,2]), type = "l", lty = 1)
 c(mean(Tides[,2]), mean(Tides2[,2]))

#=====================================
# Light within a day - 
# different daylength
#=====================================
 
 times     <- seq(0, 5, length.out = 1000)

# daylength = 6, 12, 18 hours (fraction = 6/24, 0.5, 18/24) 
 LightDay  <- PeriodicFunction(period = 1, fraction = 6/24, 
                       times = times, avg = NULL, max = 200)
 LightDay2 <- PeriodicFunction(period = 1, fraction = 0.5, 
                       times = times, avg = NULL, max = 200)
 LightDay3 <- PeriodicFunction(period = 1, fraction = 18/24, 
                       times = times, avg = NULL, max = 200)

 matplot(x = times, y = cbind(LightDay[,2], LightDay2[,2], LightDay3[,2]), 
         type = "l", lty = 1)
 c(mean(LightDay[,2]), mean(LightDay2[,2]), mean(LightDay3[,2]))


#=====================================
# Light within a day 
# sharpness of the peak
#=====================================
 
 times     <- seq(0, 5, length.out = 1000)

# daylength = 12 hours (fraction = 0.5) 
 LightDay  <- PeriodicFunction(period = 1, fraction = 0.5, 
                       times = times, avg = 200)
 LightDay2 <- PeriodicFunction(period = 1, fraction = 0.5, 
                       times = times, avg = 200, pow = 2)

 LightDay3 <- PeriodicFunction(period = 1, fraction = 0.5, 
                       times = times, avg = 200, pow = 0.5)

 matplot(x = times, y = cbind(LightDay[,2], LightDay2[,2], LightDay3[,2]), 
         type = "l", lty = 1)
 c(mean(LightDay[,2]), mean(LightDay2[,2]), mean(LightDay3[,2]))


#=====================================
# Yearly light variations
#=====================================

 LightYear <- PeriodicFunction(period = 365, fraction = 1, times = 1:365, 
                          max = 600, avg = NULL, min = 10, phase = 100)
 plot(LightYear, type = "l")
 
 mean(LightYear[,2])

#=====================================
# Year + daily light variations
# constant daylength
#=====================================

 times <- seq(0, 365, length.out = 10000)
 LightYear <- PeriodicFunction(period = 365, fraction = 1, times = times, 
                          max = 600, avg = NULL, min = 10, phase = 100)
 Dayvar    <- PeriodicFunction(period = 1, fraction = 0.5, times = times, 
                          max = 1, avg = NULL, phase = 0.5)
 LightDay  <- cbind(times, LightYear[,2]*Dayvar[,2])                          

 plot(LightDay, type = "l")
 plot(LightDay[1:1000,], type = "l")
 

#=====================================
# Year + daily light variations
# variable daylength
#=====================================

 times <- seq(0, 365, length.out = 10000)
 LightYear <- PeriodicFunction(period = 365, fraction = 1, times = times, 
                          max = 600, avg = NULL, min = 10, phase = 100)
                          
 Daylength <- PeriodicFunction(period = 365, fraction = 1, times = 0:365, 
                          max = 18, avg = NULL, min = 10, phase = 100)


 Dayvar    <- NULL
 for (i in 1:nrow(Daylength)){
   Dayvar <- rbind( Dayvar, 
      PeriodicFunction(period = 1,  
                       times = times[trunc(times) == Daylength[i,1]], 
                       max = 1, avg = NULL, fraction = Daylength[i,2]/24)
                  )
 } 
 
 LightDay  <- cbind(times, LightYear[,2]*Dayvar[,2])                          

 mf <- par (mfrow = c(2,2))
 plot(Daylength, type = "l", main = "Daylength")
 plot(LightDay, type = "l", main = "Light")
 plot(LightDay[1:100,], type = "l", main = "light")
 plot(LightDay[5000:5100,], type = "l", main = "light")
 
 par(mfrow = mf)

CNPDIA documentation built on April 15, 2021, 3 p.m.