postprocessing_fcn.R 3.45 KiB
library(caTools)
read.solute.out <- function(filename){
  # lecture du fichier ligne par ligne
  conn <- file(filename,open="r")
  linn = readLines(conn)
  close(conn)
  # fonction permettant de régler le problème de la délimitation entre colonnes (des fois un espace, des fois deux ou trois ...)
  dummy.white.space = function(char.line){
    temp = unlist(strsplit(char.line," ",fixed = TRUE))
    test.temp = (temp =="")
    result.vector = temp[!test.temp]
    return(result.vector)
  start.line <- 6 # première ligne avec des données
  end.line <- length(linn)-1 # le fichier finissant par un 'end', la dernière ligne de valeurs se situe juste à la ligne au-dessus.
  nb.line <- end.line-(start.line-1) # nombre total de ligne
  boundary.data <- data.frame(time = rep(0,nb.line), cum.seep.flux = rep(0,nb.line), cum.inj.flux = rep(0,nb.line), tot.seep.flux = rep(0,nb.line), tot.inj.flux = rep(0,nb.line), conc.seep = rep(0,nb.line), conc.inj = rep(0,nb.line)) # preallocation de la data.frame avec les résultats.
  k <- 1 # compteur
  # boucle sur les lignes avec des données
  for (i in start.line:end.line){
    current.line <- as.numeric(dummy.white.space(linn[i])) # transformation de la ligne en vecteur numérique
    boundary.data$time[k] <- current.line[1] # time (h)
    boundary.data$cum.seep.flux[k] <- -current.line[5] # ChemS2 [M L-1] cummulative solute flux across seepage face
    boundary.data$cum.inj.flux[k] <- current.line[4] # ChemS3 [M L-1] cummulative solute flux injected
    boundary.data$seep.flux[k] <- -current.line[3] # SMean2 [M T-1 L-1] total solute flux across seepage 
    boundary.data$inj.flux[k] <- current.line[2] # SMean3 [M T-1 L-1] total solute flux injected
    boundary.data$conc.seep[k] <- current.line[10] # cMean [M L-3] concentration seepage face
    boundary.data$conc.inj[k] <- current.line[8] # cMean [M L-3] concentration injected 
    k <- k+1 # incrementation du compteur
  return(boundary.data)
recovered.ratio <- function(solute.data){
  # injected mass
  inj.mass <- solute.data$cum.inj.flux[dim(solute.data)[1]]
  # recovered mass
  recover.mass <- solute.data$cum.seep.flux[dim(solute.data)[1]]
  recover.ratio <- recover.mass/inj.mass
  return(recover.ratio)
plot.cum.break <- function(solute.data, t.inj, reference = "recovered"){
  if (reference == "recovered"){
    total.mass <- solute.data$cum.seep.flux[dim(solute.data)[1]]
  } else if (reference == "injected") {
    total.mass <- solute.data$cum.inj.flux[dim(solute.data)[1]]
  } else {
    stop("invalid argument value in reference")
  plot(solute.data$time[solute.data$time > t.inj], solute.data$cum.seep.flux[solute.data$time > t.inj]/total.mass)
percentile.break <- function(solute.data, t.inj, level, reference = "recovered"){
  if (reference == "recovered"){
    total.mass <- solute.data$cum.seep.flux[dim(solute.data)[1]]
  } else if (reference == "injected") {
    total.mass <- solute.data$cum.inj.flux[dim(solute.data)[1]]
  } else {
    stop("invalid argument value in reference")
  rel.cum.seep.flux <- solute.data$cum.seep.flux/total.mass
  if (level > solute.data$cum.seep.flux[dim(solute.data)[1]]/total.mass){
    rt <- NA
  } else {
    rt <- solute.data$time[which.min((rel.cum.seep.flux-level)^2)] - t.inj 
7172737475767778
return(rt) } residence.time <- function(solute.data, t.inj){ inj.mass <- solute.data$cum.seep.flux[dim(solute.data)[1]] rt.moy <- 1/inj.mass*trapz(solute.data$time,solute.data$time*solute.data$seep.flux) - t.inj return(rt.moy) }