R/RESP_ecto.R

Defines functions RESP_ecto

Documented in RESP_ecto

#' RESP_ecto
#'
#' R version of Fortran RESP.f (ectotherm model) for calculating respiratory heat and water exchange.
#'
#' @encoding UTF-8
#' @param XTRY current guess of lung temperature (°C)
#' @param AMASS body mass, kg
#' @param TC current guess of core body temperature (°C)
#' @param QMETAB metabolic rate calculated with MET_ecto (W)
#' @param EXTREF oxygen extraction efficiency (\%)
#' @param PANT multiplier on breathing rate, for respiratory water loss via panting
#' @param RQ respiratory quotient (fractional, 0-1)
#' @param TA air temperature (°C)
#' @param RELHUM relative humidity (\%)
#' @param BP air pressure (Pa)
#' @param O2GAS oxygen concentration of atmosphere (\%)
#' @param CO2GAS carbon dioxide concentration of atmosphere (\%)
#' @param N2GAS nitrogen concentration of atmosphere (\%)
#' @param DELTAR temperature difference (°C) between expired and inspired air
#' @export
RESP_ecto <- function(
    XTRY = 23,
    AMASS = 0.04,
    TC = 25,
    QMETAB = 0.01241022,
    EXTREF = 20,
    PANT = 1,
    RQ = 0.8,
    TA = 20,
    RELHUM = 50,
    BP = 101325,
    O2GAS = 20.95,
    CO2GAS = 0.03,
    N2GAS= 79.02,
    DELTAR=0.1){

  # C     NICHEMAPR: SOFTWARE FOR BIOPHYSICAL MECHANISTIC NICHE MODELLING
  #
  # C     COPYRIGHT (C) 2018 MICHAEL R. KEARNEY AND WARREN P. PORTER
  #
  # C     THIS PROGRAM IS FREE SOFTWARE: YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  # C     IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
  # C     THE FREE SOFTWARE FOUNDATION, EITHER VERSION 3 OF THE LICENSE, OR (AT
  # C     YOUR OPTION) ANY LATER VERSION.
  #
  # C     THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
  # C     WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
  # C     MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
  # C     GENERAL PUBLIC LICENSE FOR MORE DETAILS.
  #
  # C     YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
  # C     ALONG WITH THIS PROGRAM. IF NOT, SEE HTTP://WWW.GNU.ORG/LICENSES/.
  #
  # C     COMPUTES RESPIRATORY HEAT AND WATER LOSS VIA MASS FLOW THROUGH THE LUNGS,
  # C     GIVEN GAS CONCENTRATIONS, PRESSURE, RESPIRATION RATE AND HUMIDITY
  #
  # C     NOTE THAT THERE IS NO RECOVERY OF HEAT OR MOISTURE ASSUMED IN THE NOSE

  TAIR <- TA
  #C     KLUGE FOR THE MOMENT TO DECIDE BODY-AIR TEMPERATURE GRADIENT AND CHECK FOR
  #C     STABILITY BEFORE DOING TLUNG - TAIR,LOCAL
  #DELTAR <- 1.0

  # C     DEFINING VARIABLES
  # C     BP <- BAROMETRIC PRESSURE (PA)
  # C     EXTREF <- EXTRACTION EFFICIENCY (PER CENT)
  # C     GEVAP <- GRAMS OF WATER EVAPORATED FROM RESPIRATORY TRACT/S
  # C     QRESP <- HEAT LOSS DUE TO RESPIRATORY EVAPORATION (W)
  # C     RGC <- UNIVERSAL GAS CONSTANT (PA-M3/MOL-K) <- (J/MOL-K)
  # C     RELHUM <- RELATIVE HUMIDITY (PER CENT)
  # C     RQ <- RESPIRATORY QUOTIENT (MOL CO2 / MOL O2)
  # C     TC <- ANIMAL CORE TEMPERATURE(C)
  # C     TMAXPR <- PREFERRED MAX. TCORE
  # C     TMINPR <- PREFERRED MIN. TCORE

  # C     ASSIGNING REFERENCE VALUES TO VARIABLES
  # C     AIR FRACTIONS FROM SCHMIDT-NIELSEN, 2ND ED. ANIMAL PHYSIOLOGY CITING
  # C     OTIS, 1964

  RPCTO2 <- 0.2095
  RPCTN2 <- 0.7902
  RPCTCO2 <- 0.0003
  PCTO2 <- RPCTO2
  PCTN2 <- RPCTN2
  PCTCO2 <- RPCTCO2
  #C     ALLOWING USER TO MODIFY GAS VALUES FOR BURROW, ETC. CONDITIONS
  if(PCTO2 != O2GAS / 100){
    PCTO2 <- O2GAS / 100
  }else{
    PCTO2 <- RPCTO2
  }
  if(PCTN2 != N2GAS / 100){
    PCTN2 <- N2GAS / 100
  }else{
    PCTN2 <- RPCTN2
  }
  if(PCTCO2 != CO2GAS / 100){
    PCTCO2 <- CO2GAS / 100
  }else{
    PCTCO2 <- RPCTCO2
  }

  #C     ERROR CHECKING for % of each air constituent summing to 1
  TOTGAS <- PCTO2 + PCTN2 + PCTCO2
  if(TOTGAS  >  1){
    PCTO2 <- 1 - (PCTN2 + PCTCO2)
  }
  if(TOTGAS  <  1){
    PCTO2 <- 1 - (PCTN2 + PCTCO2)
  }

  #C     UNIVERSAL GAS CONSTANT (PA - LITERS)/(MOL - K)
  RGC <- 8314.46
  #C     INITIALIZING FOR SUB. WETAIR
  WB <- 0.0
  DP <- 999

  PO2 <- BP * PCTO2
  REFPO2 <- 101325 * RPCTO2
  #C     OXYGEN CONSUMPTION OF LIZARDS (BENNETT & DAWSON, 1976) (M3/S)
  GMASS <- AMASS * 1000

  XCALC <- XTRY

  #C     CHECK FOR TOO LARGE OR SMALL CORE TEMP
  if(TC > 50){
    XCALC <- 50
  }else{
    if(TC < 0.0000){
      XCALC <- 0.01
    }
  }
  # 20.1J/ml, energy dissipated per ml O2 consumed at STP (enthalpy of combustion)
  O2STP <- QMETAB / 20.1 / 1000

  #C     CONVERTING STP -> VOL. OF O2 AT ANIMAL TCORE, ATM. PRESS.
  TLUNG <- XCALC
  #C      VO2CON <- (O2STP*REFPO2/273.15)*((TLUNG+273.15)/PO2) ! V2 <- (V1*P1/T1) * (T2/P2), VOLUME OF O2 AT TLUNG
  VO2CON <- (O2STP * PO2 / 273.15) * ((TLUNG + 273.15) / PO2) #! CHANGE FROM WPP 16/10/2021
  #C     N <- PV/RT (IDEAL GAS LAW: NUMBER OF MOLES FROM PRESS,VOL,TEMP)
  O2MOLC <- BP * VO2CON / (RGC * (XCALC + 273.15)) #! MOL OXYGEN CONSUMED
  #C     MOLES/S O2,N2, & DRY AIR AT 1: (ENTRANCE) (AIR FLOW <- F(O2 CONSUMPTION)
  O2MOL1 <- O2MOLC / (EXTREF / 100) #! ACTUAL OXYGEN FLOW IN (MOLES/S), ACCOUNTING FOR EFFICIENCY OF EXTRACTION
  N2MOL1 <- O2MOL1 * (PCTN2 / PCTO2) #! ACTUAL NITROGEN FLOW IN (MOLES/S), ACCOUNTING FOR EFFICIENCY OF EXTRACTION
  VAIR <- VO2CON / PCTO2 #! CHANGE FROM WPP 16/10/2021
  VCO2 <- PCTCO2 * VAIR #! CHANGE FROM WPP 16/10/2021
  CO2MOL1 <- BP * VCO2 / (RGC * (TLUNG + 273.15)) #! CHANGE FROM WPP 16/10/2021
  # C     DEMAND FOR AIR <- F(%O2 IN THE AIR AND ELEVATION)
  # C     NOTE THAT AS LONG AS ALL 3 PERCENTAGES ADD TO 100%, NO CHANGE IN AIR FLOW,
  # C     UNLESS YOU CORRECT FOR CHANGE IN %O2 IN THE AIR AND ELEVATION CHANGES
  # C     RELATIVE TO SEA LEVEL.
  # C      AIRATO=(PCTN2+PCTO2+PCTCO2)/PCTO2
  # C      AIRML1=O2MOL1*AIRATO*(RPCTO2/PCTO2)*(REFPO2/PO2)*PANT
  AIRML1 <- (O2MOL1 + N2MOL1 + CO2MOL1) * PANT #! CHANGE FROM WPP 16/10/2021
  #C     AIR VOLUME @ STP (LITERS/S)
  AIRVOL <- (AIRML1 * RGC * 273.15 / 101325)

  # C     COMPUTING THE VAPOR PRESSURE AT SATURATION FOR THE SUBSEQUENT
  # C     CALCULATION OF ACTUAL MOLES OF WATER BASED ON ACTUAL RELATIVE
  # C     HUMIDITY.
  WETAIR.out <- WETAIR(TAIR, WB, RELHUM, DP, BP)
  ESAT <- WETAIR.out$esat
  WMOL1 <- AIRML1 * (ESAT * (RELHUM / 100)) / (BP - ESAT * (RELHUM / 100))

  #C     MOLES AT 2: (EXIT)
  O2MOL2 <- O2MOL1 - O2MOLC #! REMOVE CONSUMED OXYGEN FROM THE TOTAL
  N2MOL2 <- N2MOL1
  #C      CO2MOL2=RQ*O2MOLC
  CO2MOL2 <- RQ * O2MOLC + CO2MOL1 #! CHANGE FROM WPP 16/10/2021
  # C     TOTAL MOLES OF AIR AT 2 (EXIT) WILL BE APPROXIMATELY THE SAME
  # C     AS AT 1, SINCE THE MOLES OF O2 REMOVED <- APPROX. THE # MOLES OF CO2
  # C     ADDED.  AVOGADRO'S # SPECIFIES THE # MOLECULES/MOLE.
  # C      AIRML2=(O2MOL2+CO2MOL)*((PCTN2+PCTO2)/PCTO2)*(RPCTO2/PCTO2)*
  # C     & (REFPO2/PO2)*PANT
  AIRML2 <- (O2MOL2 + N2MOL2 + CO2MOL2) * PANT #! CHANGE FROM WPP 16/10/2021

  #C     SETTING UP CALL TO WETAIR; TEMP. OF EXHALED AIR AT BODY TEMP.
  DB <- XCALC
  #C     ASSUMING SATURATED AIR AT EXHALATION
  RELXIT <- 100
  WETAIR.out <- WETAIR(DB, WB, RELXIT, DP, BP)
  E <- WETAIR.out$e
  ESAT <- WETAIR.out$esat
  #VD <- WETAIR.out$vd
  #RW <- WETAIR.out$rw
  #TVIR <- WETAIR.out$tvir
  #TVINC <- WETAIR.out$tvinc
  #DENAIR <- WETAIR.out$denair
  #CP <- WETAIR.out$cp
  #WTRPOT <- WETAIR.out$wtrpot
  WMOL2 <- AIRML2 * (ESAT / (BP - ESAT))
  # C     ENTHALPY <- U2-U1, INTERNAL ENERGY ONLY, I.E. LAT. HEAT OF VAP.
  # C     ONLY INVOLVED, SINCE ASSUME P,V,T CONSTANT, SO NOT SIGNIFICANT
  # C     FLOW ENERGY, PV. (H <- U + PV)

  #C     MOLES/S LOST BY BREATHING:
  EVPMOL <- WMOL2-WMOL1
  #C     GRAMS/S LOST BY BREATHING <- MOLES LOST * GRAM MOLECULAR WEIGHT OF WATER:
  GEVAP <- EVPMOL * 18

  KGEVAP <- GEVAP / 1000
  #C     LATENT HEAT OF VAPORIZATION FROM SUB. DRYAIR
  HTOVPR <- 2.5012E+06 - 2.3787E+03 * TLUNG
  #C     HEAT LOSS BY BREATHING (J/S)=(J/KG)*(KG/S)
  QRESP <- HTOVPR * KGEVAP
  return(list(QRESP = QRESP, GEVAP = GEVAP, AIRML1 = AIRML1, AIRML2 = AIRML2, WMOL1 = WMOL1, WMOL2 = WMOL2, O2MOL1 = O2MOL1, O2MOL2 = O2MOL2, CO2MOL1 = CO2MOL1, CO2MOL2 = CO2MOL2))
}
mrke/NicheMapR documentation built on April 3, 2024, 10:05 a.m.