#' 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))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.