R/FuncParallel.R

#' @title Analytical Model of Fick's Second Law Diffusion on a Parallel Plane
#'
#' @description This package contains several functions for determining the flux of diffusion, estimating the coefficient of diffusion, and basically performing analytical modelization of nonsteady state of diffusion based on Fick's second law of diffusion FOR parallelepipedic plane.
#'
#' @return NULL
#'
#' @examples
#'
#' @export
Flux_exp_val = function(DATA){
  F_val=(DATA$Mass-DATA$Mass[1])/(DATA$Mass[nrow(DATA)]-DATA$Mass[1])
  return(F_val)
}

Flux_par = function(l,D,t){
  val_cor = function(x){
    ifelse(x >0, x, 0.000000000001)
  }
  T = val_cor(t)
  K = val_cor(D)
  F_val = as.numeric(-l*NORMT3::erf(l/sqrt(4*K*T))-(sqrt(4*K*T)*(exp(-l^2/(4*K*T))-1))/(sqrt(pi))+l)/l
  return(F_val)
}

Flux_par_val = function(l,D,T){
  temp_val = c()
  for(x in T){
    temp_val = c(temp_val, Flux_par(l=l,
                                    D=D,
                                    t=x))
  }
  return(temp_val)
}

DiffCoeffPar = function(DATA,l){
  sum_temp = summary(minpack.lm::nlsLM(formula = F~Flux_par_val(l=l,
                                                    T=t,
                                                    D=K),
                           data = DATA,
                           control = nls.lm.control(maxiter=1024),
                           start = list(K=0.1)))
  DiffCoef_Par = as.numeric(sum_temp$coefficients[1])
  return(DiffCoef_Par)
}

Flux_num_val = function(DATA,D,l){
  return(Flux_par_val(l=l,
                      D=D,
                      T=DATA$t))
}
ahmad-alkadri/AnalyticDiffusion documentation built on May 5, 2019, 4:49 p.m.