ConSciR × SaltsR |預防性保存整合教材
↖ 課程總站
R packages for preventive conservation

用 ConSciR 與 SaltsR
做預防性保存決策

兩個套件、四個情境、一條決策鏈:從溫濕度紀錄與離子層析數據出發, 算出黴菌、化學劣化、鹽結晶與能耗四種風險,最後收斂成一個可以寫進管理計畫的設定點。 每個情境都有可執行的 R、即時互動實驗與情境測驗。

2R 套件
4保存情境
7互動實驗室
52測驗題(前測/情境/後測)
4能力雷達維度
Part 0 |起點

0. 為什麼把 ConSciR 和 SaltsR 放在一起教

預防性保存(preventive conservation)的核心工作不是修復單一件文物,而是管理讓文物劣化的環境。 在實務上,這件事會分裂成兩套看起來不相干的資料:

環境端

溫濕度記錄器的時間序列

每 15 分鐘一筆的 T 與 RH,一年三萬多筆。要回答的是:會不會長黴?紙會不會加速黃化?木頭會不會開裂?空調要花多少電? → 這是 ConSciR 的地盤。

材料端

牆體取樣的離子層析數據

幾毫克的粉末、七個離子濃度。要回答的是:牆裡有哪些鹽?在哪一個相對濕度會結晶、把磚推爆? → 這是 SaltsR 的地盤。

這兩條線平常各自寫報告、各自開會,但它們最後會撞在同一個數字上:相對濕度的設定值。 黴菌希望 RH 低、化學劣化希望 RH 低、鹽害希望 RH 穩定(而且要避開結晶點)、 會計希望空調電費低——四個目標會給出四個不同的 RH,而館方只能設一個。

這份教材的主軸 四個情境分開學工具,最後在 第 6 章把四條風險曲線畫在同一根 RH 軸上, 找出「共同可行區間」。你會發現:多數時候真正的答案不是「哪個數字最好」,而是「哪些數字全都不可行」。

0.1 兩個套件在做什麼

面向ConSciRSaltsR
作者Bhavesh ShahBhavesh Shah、Sebastiaan Godts、Amber Orr
輸入資料T / RH 時間序列(Meaco、Hanwell 等記錄器)離子層析(IC)七離子濃度、樣品乾重、萃取水量
核心問題這個環境對物件有多友善?牆裡的鹽在哪個 RH 會結晶?
代表函式calcDPcalcAHcalcMould_VTTcalcMould_ZengcalcPIcalcLMcalcEMC_woodcalcCoolingPowerfun_salt_balancetidyRunsaltgraph_salt_balance
是否自己算熱力學是(經驗式與動力學模型)否——它只負責把 IC 數據整理成 ECOS/RUNSALT 吃得下的輸入,再把 RUNSALT 的輸出畫成圖
輸出加在資料框上的風險欄位、圖表、Shiny appECOS 輸入檔、平衡診斷、結晶曲線圖、Shiny app
先分清楚一件事 ConSciR 會給你「數值答案」(露點 9.26 °C);SaltsR 大部分時候只給你「可以送進別的軟體的乾淨輸入」。 把 SaltsR 當成計算鹽結晶點的引擎,是初學者最常犯的錯。真正算熱力學平衡的是 ECOS 模型 / RUNSALT 程式

0.2 這份教材用到的資料

教材刻意混用兩種資料,因為它們的教學功能不同:

(一)套件內建資料集——用來確認「我有沒有把函式用對」

資料來源內容本教材用途
ConSciR::mydataConSciR倫敦某室內空間 2024 全年、15 分鐘一筆,35,136 筆,欄位 Site / Sensor / Date / Temp / RH溫帶對照組;示範各 calc 函式
ConSciR::TRHdataConSciR同上見下方提醒
SaltsR::salt_testSaltsR單一測試樣品的七離子濃度驗證 fun_salt_balance 的輸出
SaltsR::mol_wtssalt_charges_zSaltsR七離子的分子量與絕對電荷手算驗算式 1、式 2
SaltsR::ECOS_PhasesSaltsR75 種 ECOS 鹽相的代號與名稱對照讀 RUNSALT 輸出時查表
第一個「自己動手查證」的機會 文件把 mydataTRHdata 寫成兩個示範資料集,但實際上 identical(as.data.frame(mydata), as.data.frame(TRHdata)) 回傳 TRUE—— 兩者是同一份資料,都只有一個站點(London)、一個感測器(Room 1)。 這不影響學習,但它是本教材反覆要求你養成的習慣:先看資料,再相信文件

(二)模擬資料集——用來製造「內建資料裡沒有的情境」

倫敦的資料很乾淨:全年 RH 中位數 45.4%、最高 76%、氣溫 16–26 °C,一年下來幾乎不會長黴。 拿它當台灣南部的教材會得到錯誤的安全感。因此本教材另外模擬了一組亞熱帶資料:

模擬資料規模設計意圖
南部沿海外氣(2025 全年逐時)8,760 筆年均 24.4 °C、夏季 RH 常態 80% 以上,含降雨事件
情境 1:展廳 + 展櫃逐時2,928 筆(6–9 月)週一休館停機、夜間停機、8 月連續 7 天冰水機故障;展櫃以一階遞延模擬調濕劑緩衝
情境 2:離子層析 8 樣品8 筆刻意涵蓋 Pathway 1/2、石膏由 Ca 或 SO₄ 限制、以及同一均質樣以 10 mL 與 100 mL 兩種萃取比
情境 3:紙質庫房四種控制策略4 × 8,760 筆恆溫恆濕/只除濕/只降溫/無空調
情境 4:設定點網格21 × 36 = 756 組T 18–28 °C × RH 40–75%,每組算全年冷卻能耗與四項風險
誠實聲明(請和學生一起讀一次) 上表所有資料都是以文獻與物理模型產生的模擬資料,不是量測值,隨機種子 20260810。 它們的用途是讓函式跑出「有教學張力」的結果,不可以引用為實驗證據。 凡是模擬產生的圖表,本教材都會標上「模擬」。 另外,第 3 章的 RUNSALT 結晶曲線是依文獻潮解濕度值建立的示意曲線,不是 ECOS 的實際計算輸出—— 這一點在該章會再說明一次。

0.3 怎麼用這份教材

  1. 先看情境背景,再看資料。每一章都從「館方問了什麼問題」開始,而不是從函式開始。
  2. 跑 R 區塊。每個 R 區塊都可以直接改參數重跑;瀏覽器內建 R(webR)會在你第一次按「執行」時載入(約 10–30 秒)。 若無法連網,區塊下方一律附有預先算好的輸出,內容與 R 執行結果相同,不影響閱讀。
  3. 玩互動實驗室。拉動滑桿觀察四項風險怎麼互相打架,這是本教材最重要的部分。
  4. 做測驗。先做前測(10 題,只是診斷不計成績),每章結束做情境測,最後做後測並看能力雷達圖。
數據判讀會不會從 T/RH 或 IC 數字讀出狀態
風險診斷會不會判斷哪一種劣化正在發生
措施決策會不會選出正確的預防性措施
工具操作會不會正確使用套件函式與參數

後測結束時會依這四個維度畫出能力雷達圖,並指出應該回去複習哪一節。

前測:你現在在哪裡?

10 題,約 5 分鐘。不計成績,目的是讓你(和老師)知道哪些概念已經有了、哪些還沒有。 作答後會立刻顯示解析,並標出對應章節。後測結束時會把前後測放在一起比較。

Part 1 |工具層

1. 三個函式家族,一次看懂

ConSciR 的四十多個函式其實只有三群,SaltsR 只有一條流程。先把地圖畫出來,後面四個情境就只是在這張地圖上挑路走。

1.1 濕度家族:把一組 (T, RH) 翻譯成六種語言

同一團空氣,量測到的是溫度與相對濕度,但不同的劣化機制關心的是不同的量:

函式回傳單位什麼時候真正需要它
calcPws(T)飽和水氣壓hPa所有其他式子的基礎;預設 Buck 式,另有 IAPWS/Magnus/VAISALA
calcPw(T, RH)實際水氣壓hPa判斷水分擴散驅動力(牆體乾燥、封裝內外)
calcDP(T, RH)露點°C冷凝風險:外牆內表面、玻璃展櫃、冷藏庫、運輸箱開箱
calcAH(T, RH)絕對濕度g/m³判斷「RH 上升是因為加濕還是因為降溫」——AH 不變就是降溫造成的
calcMRcalcSH混合比/比濕g/kg做空氣質量平衡、換氣量計算
calcEnthalpy(T, RH)kJ/kg算空調要移除多少能量(第 5 章的能耗全靠它)
最實用的一條:AH 是「量」,RH 是「比例」 展櫃夜間 RH 從 55% 衝到 75%,看起來像進了水氣;但若同時 T 從 24 °C 掉到 19 °C, 用 calcAH 一算就會發現 AH 完全沒變(實驗室 1 的預設值就是這一組)——問題出在空調停機造成的降溫, 對策是穩定溫度而不是加除濕機。這個判斷每年可以幫館方省下不少誤買的設備。
🔬 實驗室 1|濕度換算盤拉動 T 與 RH,看六個量同時怎麼變
飽和曲線 Pws 目前狀態點 等 AH 線(降溫路徑) 露點
露點 DP (°C)
絕對濕度 AH (g/m³)
水氣壓 Pw (hPa)
焓 h (kJ/kg)
木材平衡含水率 (%)
降到 T₂ 後的 RH (%)

R 練習 1:一次算完整張表

1.2 風險家族:四個指標,四種劣化機制

生物劣化

calcMould_Zeng(T, RH)

回傳「在這個溫度下,開始長黴所需的最低 RH(%)」。是一條門檻線,不是累積量。 用法:RH > calcMould_Zeng(T, RH) 為真 → 此刻具備長黴條件。 加 LIM = 1 可改成「每天長 1 mm」的門檻。

生物劣化

calcMould_VTT(T, RH, M_prev)

芬蘭 VTT 黴菌指數 M(0–6)。是累積量:0 = 無菌絲、1 = 顯微可見、3 = 肉眼可見、6 = 全面覆蓋。 必須把上一時刻的 M 餵回 M_prev 才會累積(見 1.4 節的陷阱)。

化學劣化

calcPI(T, RH)

Preservation Index(IPI):以醋酸纖維片基的降解動力學推估「還可以撐幾年」。 20 °C/50% 約 41.8 年。用途是把環境換算成「年」這個管理者聽得懂的單位。

化學劣化

calcLM(T, RH)

Lifetime Multiplier(Michalski):相對於 20 °C/50% 的壽命倍數。 1 = 一樣、2 = 壽命加倍、0.5 = 只剩一半。本教材主要用它做策略比較——但要先修正(見 1.4 節)。

機械劣化

calcEMC_wood(T, RH)

木材平衡含水率(%)。真正造成木器、油畫基底、家具開裂的不是 EMC 的絕對值, 而是 EMC 的擺幅。看這個欄位的 max − min,比看 RH 的 max − min 更貼近材料實際受力。

能耗

calcCoolingPower(T₁,T₂,RH₁,RH₂,V̇)

把體積流量 V̇(m³/s)的空氣從狀態 1 調到狀態 2 所需的冷卻功率(kW), 用焓差乘以質量流量。第 5 章用它把「設定點」翻譯成「電費」。

三個指標,三種時間觀 calcMould_Zeng 問「此刻有沒有條件」;calcMould_VTT 問「累積到什麼程度」; calcPIcalcLM 問「長期還能撐多久」。 一份報告若只寫「RH 曾達 82%」,三個問題一個都沒回答。

R 練習 2:把風險欄位加到資料上

1.3 SaltsR 的一條流程:從 IC 數據到 ECOS 輸入

fun_salt_balance() 看起來是一個巨大的函式,但它就是論文(Godts et al. 2022, Scientific Data)裡的 11 條式子按順序做完:

  1. 式 1 濃度 → 重量分率。w = (c × V) / (m_s × 10⁶)。輸入是 ppm(mg/L)、萃取水量(mL)、樣品乾重(g)。
  2. 式 2 重量分率 → 毫當量。e = w × z / M × 10⁶換成當量才能比較電荷,這是整條流程的關鍵一步。
  3. 式 3 電荷平衡診斷。算陰離子總當量 eani 與陽離子總當量 ecat 的差 Δe,決定走哪一條校正路徑。
    Pathway 1:Δe ≤ 最大值的 2%,陰離子過剩 → 兩邊各自等比例縮放到中點。 Pathway 2:陽離子過剩且 Δe > 2% → 依「最不可溶者優先」順序 Ca → Mg → Na → K 逐一扣除,直到平衡。
  4. 式 6–7 扣除石膏。ECOS 模型不含 CaSO₄,所以要先把 min(SO₄, Ca) 這麼多的當量拿掉。
  5. 式 8 轉成莫耳分率——這就是 ECOS 輸入檔的七個數字。
  6. 式 9–11 診斷指標。校正幅度佔原始陽離子總量的比例、石膏含量、以及石膏在該水/樣比下的飽和度 S。
Pathway 2 是「假設」,不是「量測」 把 Ca 歸零等於假設「多出來的鈣以碳酸鈣形式存在、不參與可溶鹽平衡」。 這在石灰砂漿牆體上通常合理,但它是模型假設。學生報告裡若寫「樣品不含鈣」,就是把假設當成結果。

R 練習 3:跑套件內建的 salt_test

1.4 誠實的極限:五個「文件與程式碼不一致」的地方

這一節不是要批評套件——ConSciR 與 SaltsR 都是免費、開源、且填補了保存科學長期沒有工具的空缺。 但如果你要拿計算結果去支持一個要花錢的決策,就必須先確認函式真的在算它宣稱的東西。 以下五點都可以在下面的 R 區塊裡自己驗證。

calcLM():溫度項幾乎失效,而且方向相反

說明文件寫的式子是

LM = (50 / RH)1.3 · exp[ (Ea/R) · (1/TK − 1/293) ]

程式碼寫的是 (50/RH)^(1/3) * exp((-EA/8.314) * (1/TempK - 1/293.15)),且預設 EA = 100(單位標為 J/mol)。 三處差異:指數 1.3 變成 1/3、指數項符號相反、活化能少了三個數量級(Michalski 用的是約 100 kJ/mol)。後果:

條件ConSciR calcLM文件式子(Ea=100 kJ/mol)對不對得上 Michalski 的口訣
20 °C / 50%(基準)1.00001.0000✓ 兩者皆為 1
15 °C / 50%(降 5 °C)0.99932.0380「每降 5 °C 壽命加倍」→ 只有右欄對
25 °C / 50%(升 5 °C)1.00070.5025升溫應變短,左欄卻略微變長
20 °C / 25%(RH 減半)1.25992.4623「RH 減半壽命增加超過一倍」→ 只有右欄對

怎麼辦:本教材第 4、5 章一律使用下面這個依文件重寫的版本,並在圖表上標示 LM*

# 依 ConSciR 說明文件與 Michalski (2002) 重寫
calcLM_fix <- function(Temp, RH, EA = 100000) {   # EA 單位 J/mol
  (50 / RH)^1.3 * exp((EA / 8.314) * (1 / (Temp + 273.15) - 1 / 293.15))
}

calcMould_VTT():臨界濕度式的一次項符號相反

VTT 模型的臨界相對濕度(低於它就不會長黴)在 T ≤ 20 °C 時為 RHcrit = −0.00267·T³ + 0.160·T² 3.13·T + 100, 這個式子在 T = 20 °C 剛好接上 T > 20 °C 時的常數 80%。ConSciR 的程式碼寫成 + 3.13 * temp, 於是臨界濕度變成一個大於 100% 的數,低溫時「永遠達不到門檻」的保護就消失了

溫度ConSciR 的 RHcrit公開式的 RHcrit30 天恆定條件下 ConSciR 累積的 M模型應有的答案
19 °C / 60% RH198.980.00.1470(未達門檻)
18 °C / 70% RH192.679.90.9990
15 °C / 75% RH173.980.02.0820
12 °C / 78% RH156.080.92.8850

15 °C/75% 的冷藏庫在模型裡本來完全不會長黴,ConSciR 卻在一個月後給出 M ≈ 2(=肉眼可見)。 對低溫庫房而言,這是會產生假警報的錯誤;相對地 T > 20 °C 的分支使用常數 80%,行為正確—— 這也是為什麼在亞熱帶夏季情境裡不容易被發現。

calcMould_VTT():整欄丟進去不會累積

函式最後是 mapply(calc_mould, Temp, RH, M_prev)。你若照文件範例把一整欄溫濕度丟進去, M_prev 會被回收成同一個值(預設 0),所以每一列都是「從 M = 0 開始長一個時間步」的增量,不是黴菌指數。

# 240 小時都是 25 °C / 85% RH
Temp <- rep(25, 240); RH <- rep(85, 240)

tail(calcMould_VTT(Temp, RH), 1)      #> 0.01838  <- 不會累積

m <- 0
for (i in 1:240) m <- calcMould_VTT(25, 85, M_prev = m)
m                                     #> 2.6187   <- 這才是黴菌指數

add_conservation_calcs() 產生的 Mould_index 欄位就是前者,不是累積黴菌指數。這一點在解讀報表時務必注意。

另外兩個技術性問題:k1 的分支條件用的是 M_max < 1 而非目前的 M,且括號寫成 2/(t_v/(t_m-1)) (Hukka & Viitanen 的原式為 2/(t_v/t_m − 1));以及此實作沒有衰退項—— 原模型在條件不利時 dM/dt 為 −0.032/日(前 6 小時)、0(6–24 小時)、−0.016/日(24 小時之後), ConSciR 則讓 M 只會持平不會下降,因此對「白天開空調、晚上停機」這種間歇環境會系統性高估累積風險。 本教材所有模擬使用補上正確 RHcrit 與衰退項的版本,圖表一律標示為 M*

calcSensibleHeatRatio():位置引數對錯位

calcSensibleHeating 的形參順序是 (Temp1, Temp2, RH, volumeFlowRate)calcTotalHeating(Temp1, Temp2, RH1, RH2, volumeFlowRate); 但 calcSensibleHeatRatio 內部呼叫時把流量放到了 RH 的位置。實測:

T1<-30; T2<-22; RH1<-75; RH2<-55; V<-0.5
calcTotalHeating(T1, T2, RH1, RH2, V)   #>  -21.08   (正確:這是冷卻,負值)
calcTotalHeating(T1, T2, V, RH1, RH2)   #> 1482.09   (SHR 內部實際送出的引數)

此外 calcSensibleHeating 用了 pmax(..., 0),在冷卻工況(T₂ < T₁)一律回傳 0, 所以 calcSensibleHeatRatio 在冷卻時恆為 0。本教材第 5 章因此不使用 SHR,直接用焓差自己算。

⑤ SaltsR 的 total_ion_content 欄位名稱會誤導

它的計算式是 (total_wt − total_wt_adj) − gypsum_content,也就是「校正過程中被移除的量再扣掉石膏」, 不是樣品的總離子含量。以本教材的 FT-01 為例:

欄位數值 (wt%)真正的意思
total_wt1.1920七離子實測總量 ← 這才是總離子含量
total_wt_adj1.1176校正並扣除石膏後、要送進 ECOS 的量
gypsum_content0.0744推估的石膏含量
total_ion_content0.0001前三者的殘差,不是總離子含量

寫報告時請直接引用 total_wt,並在方法段說明來源。

這一節真正要教的能力 不是「記住這五個問題」(套件會更新),而是三個習慣: (1) 拿一個你知道答案的極端案例去測函式(Michalski 的口訣、240 小時飽和黴菌條件); (2) 用具名引數呼叫,不要靠位置; (3) 欄位名稱只是標籤,要看程式碼裡它到底怎麼算。

R 練習 3b:自己把這五點驗證一遍

👉 換你做:再找一個可以自我驗證的極端案例

calcPI(20, 50) 應該回傳約 41.8 年。IPI 的另一個常被引用的數字是「溫度每降 5 °C,PI 約增為 1.8–2 倍」。 上面的區塊最後一行已經算出 calcPI(15, 50) / calcPI(20, 50)1.902——PI 通過了檢驗。 (提示:PI 的溫度項寫在 Arrhenius 式的分母,方向與 calcLM 不同——這也是為什麼 calcLM 的錯誤特別容易被忽略。)

Part 2 |情境一

2. 展廳與展櫃:夏季黴菌風險

情境設定

南部某地方文化館,一樓展廳陳列紙質與木質民俗文物。空調只在開館時間(週二至週日 09:00–17:00)運轉, 設定 24 °C / 55%。館方在 8 月接到通報:冰水機故障,連續七天停機。維修完成後, 典藏組在幾件展櫃外的木匾背面發現白色黴斑,但展櫃內的紙本文書看起來沒事。

館長問三個問題:(1) 這七天到底發生了什麼?(2) 為什麼櫃內櫃外差這麼多?(3) 下次停機幾天以內是安全的?

2.1 先看資料,不要先看結論

模擬資料涵蓋 6/1–9/30 共 2,928 小時,記錄外氣、展廳、展櫃三處的 T 與 RH。下圖先只畫 RH:

外氣 展廳 展櫃內 Zeng 長黴門檻(展廳)
圖 2-1(模擬)6–9 月相對濕度。灰色網底為 8 月冰水機故障期(第 222–228 日)。 展櫃內的曲線明顯平滑:這是調濕劑造成的一階遞延(時間常數約 90 小時)。

光看 RH 曲線只能說「展廳比較抖」。要回答「有沒有長黴」,需要把 RH 和溫度合起來看,這就是 calcMould_Zeng 的工作: 它會告訴你在當下的溫度,開始長黴需要多高的 RH。

展廳超過長黴門檻的時數
展櫃超過門檻的時數
展廳黴菌指數 M* 峰值
展櫃黴菌指數 M* 峰值
判讀:門檻時數與累積指數說的不是同一件事 展櫃也有一百多個小時「超過門檻」,但黴菌指數峰值不到 0.5(=顯微鏡下都還看不到菌絲); 展廳超標時數只多了四倍多,黴菌指數卻衝到 2.9(=肉眼可見的黴斑)。 原因是 VTT 模型裡的生長速率對 RH 高度非線性——RH 85% 待 100 小時,遠比 RH 78% 待 400 小時嚴重。 只報「超標時數」會嚴重低估高 RH 事件的破壞力。

2.2 展櫃為什麼有效:緩衝就是買時間

展櫃不是密封盒,它是一個低通濾波器。調濕劑(矽膠、Art-Sorb、Prosorb)提供的水分緩衝容量決定了時間常數 τ: 外界 RH 階躍變化後,櫃內大約需要 τ 小時才走完 63% 的變化。本模擬取 τ ≈ 90 小時。

🔬 實驗室 2|停機幾天才會出事?調整故障天數與展櫃緩衝能力,看黴菌指數怎麼跑(即時重新模擬,數值與圖 2-1 略有差異)
展廳 M* 展櫃 M* M = 1 顯微可見 M = 3 肉眼可見
展廳 M* 峰值
展櫃 M* 峰值
展櫃越過 M=1 的天數
展櫃 RH 峰值 (%)
👉 換你做:三個值得試的組合
  1. τ = 90、停機 3 天τ = 90、停機 10 天:找出展櫃 M* 開始明顯上升的天數門檻。這就是館長要的「安全停機天數」。
  2. τ = 10(等於沒有調濕劑):展櫃曲線會幾乎貼上展廳。這說明密閉性本身不提供保護,緩衝容量才提供保護
  3. 敏感度切到 very:同樣的環境,未處理木材的 M* 會高出一截。所以「這個展廳安全嗎」這個問題不能脫離材料回答。

2.3 從數字到措施

觀察到的現象用什麼函式確認對應的預防性措施不建議的做法
夜間/休館日 RH 上衝,但 AH 幾乎不變calcAH 前後比較維持空調連續運轉(可提高設定溫度省電),或加裝夜間循環風扇買除濕機——問題是溫度不是水分
停機期間 RH 與 AH 同步上升calcAHcalcDP獨立除濕迴路,不隨主機停;控制外氣導入只把空調設定溫度調低
展廳 M* 上升但展櫃平穩calcMould_VTT(需自行累積)把最敏感的物件移入有調濕劑的展櫃;建立調濕劑再生排程假設「展櫃=安全」而停止監測櫃內
牆面/角落溫度低於室內露點calcDP 對比表面溫度改善外牆保溫、拉開展櫃與外牆距離、加強角落氣流只調整室內 RH 設定值
黴斑已出現先降 RH 使 M 停止上升、隔離物件、由修復人員清除;清除後 M 不會自己歸零,孢子仍在直接噴灑殺菌劑於文物表面
模型的邊界 VTT 與 Zeng 兩個模型都是在建材(木材、砂漿、石膏板)上以恆定條件實驗得到的。 文物表面的養分(膠料、澱粉糊、皮革油脂)遠比建材豐富,實際長黴門檻可能更低。 這兩個指標請當成相對比較的工具(A 展廳比 B 展廳危險多少),而不是絕對安全保證。

R 練習 4:重現展廳與展櫃的黴菌指數

2.4 對照組:同樣的函式跑倫敦資料

把完全相同的程式碼跑在 ConSciR 內建的 mydata(倫敦,2024 全年)上:

倫敦日均 RH Zeng 長黴門檻 南部沿海外氣日均 RH(模擬)
圖 2-2 內建資料(倫敦,實測)與模擬亞熱帶外氣的對比。倫敦全年 RH 幾乎不觸及長黴門檻。
為什麼一定要做這個對照 ConSciR 的說明文件、預設值與範例都建立在溫帶館舍的經驗上。 同一套函式、同一組門檻,在倫敦得到「幾乎沒有黴菌風險」,在南部沿海得到「一次停機就足以長黴」。 工具可以直接搬,結論不可以。學生最常犯的錯,是把國外指引的數字當成放諸四海的標準。
Part 2 |情境二

3. 海岸砲台與地下室:鹽害診斷

情境設定

兩處古蹟同時出現粉化與剝落:(A) 海岸砲台的紅磚外牆,離地 0.3 m 處磚面成片酥鬆,愈往上愈輕微; (B) 內陸古厝地下室北牆與地坪,表面析出白色結晶,灰泥層鼓起。 兩處都取了粉末樣品做離子層析。承辦人問:「這是同一種病嗎?要不要用同一種方法處理?」

3.1 八個樣品,兩種鹽的身世

模擬的離子層析結果(單位 mg/L,萃取液濃度):

先用眼睛判斷,再用程式驗證 砲台的樣品 Cl⁻ 與 Na⁺ 明顯佔優,而且離地愈近愈高——這是海鹽飛沫 + 毛細上升的典型指紋。 地下室的樣品 SO₄²⁻ 與 Ca²⁺ 佔優、NO₃⁻ 也不低——這是地下水硫酸鹽 + 歷史上有機物(廄肥、糞便)分解產生硝酸鹽的指紋。 同樣是「白粉」,處理方式完全不同。

3.2 式 1 與式 2:為什麼一定要換成當量

ppm 不能直接相加比較,因為每個離子的分子量與電荷不同。SaltsR 的式 1、式 2 就是在做這個換算:

# 式 1:濃度 -> 重量分率 (kg/kg)
w  <- (c_ppm * (V_ml / 1000)) / (m_dry_g * 1000)

# 式 2:重量分率 -> 毫當量 (mEq/kg)
e  <- (w * z) / (M / 1000) * 1000

# z 與 M 直接來自套件內建資料
SaltsR::salt_charges_z   #> Cl 1  NO3 1  SO4 2  Na 1  K 1  Ca 2  Mg 2
SaltsR::mol_wts          #> Cl 35.453   NO3 62.0049  SO4 96.064 ...
順手再查證一次 fun_salt_balance() 其實沒有使用套件內建的 mol_wtssalt_charges_z—— 它在函式內部又寫了一份自己的表(chloride = 35.4527sodium = 22.989768), 與資料集的 35.453、22.98977 略有差異。數值上無關緊要,但它提醒你:看得到的資料集不一定是程式實際用的那一份。

SO₄²⁻ 帶兩個電荷,所以同樣的毫克數對電荷平衡的貢獻是 Cl⁻ 的兩倍多。這正是為什麼地下室樣品用 ppm 看「陰陽離子差不多」, 換成當量後卻可能大幅偏一邊。

🔬 實驗室 3|電荷平衡即時模擬器改任一個離子濃度,看 Δe 與 Pathway 立刻切換
陰離子 eani 陽離子 ecat
eani (mEq/kg)
ecat (mEq/kg)
Δe (mEq/kg)
Δe 佔比 (%)
總離子 total_wt (wt%)
石膏 (wt%)
石膏飽和度 S
校正路徑

3.3 Pathway 1 還是 Pathway 2:判斷規則的兩個陷阱

程式碼裡的判斷式是:

Pathway1 <- (Δe <= max(e_cat, e_ani) * 0.02) | (e_ani > e_cat)
Pathway2 <- (Δe >  e_cat * 0.02) & (e_cat > e_ani)

兩個常見誤解:

  1. 「Δe 大就是 Pathway 2」——錯。本教材的 BS-06 樣品 Δe 高達 18.9%,卻走 Pathway 1, 因為它是陰離子過剩。陰離子過剩通常代表分析漏掉了某個陽離子(例如 NH₄⁺),模型的處理是兩邊等比例拉到中點,而不是扣誰。
  2. 「Pathway 2 只扣鈣」——錯。它是一條瀑布:Ca 扣完不夠就扣 Mg,再不夠扣 Na,最後扣 K。 本教材的 FT-04 就是扣到 Mg 的例子,而它的鈣被扣到 0,因此石膏含量變成 0——這不是「樣品沒有石膏」,是模型假設的結果。

3.4 石膏飽和度 S:同一面牆,兩個答案

BS-07 與 BS-08 是同一份均質化樣品,只是萃取條件不同:BS-07 用 10 mL 水,BS-08 用 100 mL。 兩者的 total_wtgypsum_content 完全相同(3.654% 與 2.982%), 但 SaltsR 的石膏飽和度差了十倍:

樣品萃取水量total_wt (%)石膏 (%)飽和度 S套件警告
BS-0710 mL3.6542.9821.387觸發:稀釋不足
BS-08100 mL3.6542.9820.139無警告

S 的定義是「推估石膏量 ÷ 該水/樣比下石膏的溶解上限(以 20 °C 時 2.14 g/L 計)」。S > 1 表示 你的萃取液根本溶不下這麼多石膏,IC 量到的硫酸根一定偏低,因此真實石膏含量只會更高。

這是關於「量測」而不是關於「材料」的指標 S 大不代表牆比較危險,代表你的實驗方法要重做:加大萃取水量或減少樣品量後重新分析。 這也是為什麼取樣紀錄一定要寫下乾重與水量——沒有這兩個數字,S 算不出來, 而 fun_salt_balance() 也不會拒絕你,它會安安靜靜給你一個錯的答案。

3.5 送進 ECOS/RUNSALT,然後讀曲線

式 8 算出的七個莫耳分率就是 ECOS 輸入檔的內容。格式如下(可在實驗室 3 按「產生 ECOS 輸入檔」取得任一樣品的版本):

把這個檔案丟給 RUNSALT,它會在你指定的 RH 範圍內逐點解熱力學平衡,輸出「每個鹽相在每個 RH 下的莫耳數」。 回到 R,用 tidyRunsalt() 整理,再用 graph_salt_balance() 畫圖。

本節曲線為示意曲線 下面的圖不是 ECOS 的實際輸出,而是依文獻在 20 °C 的單鹽潮解濕度(NaCl 75.3%、NaNO₃ 74.3%、KNO₃ 93.6%、 MgSO₄·7H₂O 90.1%、MgCl₂·6H₂O 33.1% 等)與「混合鹽的潮解濕度必定低於其中任一單鹽」這條原則, 建構出來、用來練習判讀方法的曲線。真實案件請務必跑 RUNSALT 或使用 PREDICT 計算器。
🔬 實驗室 4|結晶曲線判讀器拖動 RH,看哪些鹽在這個濕度下是固體

判讀曲線的四個問題

  1. 某條線從 0 開始爬升的那個 RH 是什麼?那是該鹽相的結晶濕度。RH 由高往低掃,跨過它就開始析出固體。
  2. 水(water)那條線在哪裡歸零?那是這組混合鹽的共同潮解濕度(MDRH)。低於它,牆裡完全沒有液態水,鹽也不再移動。
  3. 環境 RH 會不會反覆穿越某條結晶濕度?每穿越一次就是一次溶解—結晶循環,破壞是循環次數的函數,不是 RH 高低的函數
  4. 最危險的鹽是哪一個?不是量最多的,而是結晶濕度落在你的環境 RH 正中央的那一個。

3.6 從數字到措施

診斷結果措施理由
NaCl 主導、結晶濕度約 70–75%,環境 RH 在 60–85% 之間擺盪把 RH 穩定在明顯低於結晶濕度處(例如 55%),或明顯高於(不建議,會促進其他劣化)破壞來自循環;停留在單側比追求「低 RH」更重要
MDRH 很低(例如 35%),環境不可能降到那麼乾放棄「讓鹽完全結晶乾燥」的目標,改為穩定 + 降低鹽的補充來源把 RH 壓到 MDRH 以下在亞熱帶不現實,且會傷害有機質文物
離地愈近鹽愈多(FT-01 > FT-02 > FT-03)先處理水源:地面排水、防潮層、外牆導水;再考慮除鹽敷貼(poultice)不斷水就會不斷補鹽,除鹽只是治標
硫酸鹽 + 鈣為主,石膏含量高避免高 RH 波動;檢討水泥砂漿修補(會持續供應硫酸根);不要用含硫酸鹽的清潔劑石膏在 ECOS 模型外,但它是真實的體積膨脹來源
硝酸鹽偏高調查歷史使用(廄舍、廁所、鳥糞)並移除污染源;注意硝酸鹽吸濕性強,會讓牆長期潮濕硝酸鹽的潮解濕度低,是「牆一直乾不了」的常見原因
S > 1 的樣品重做萃取(加大水量),不要拿現有數據下結論方法學問題,不是材料問題

R 練習 5:一次跑完八個樣品

Part 2 |情境三

4. 紙質檔案庫:化學劣化與四種控制策略

情境設定

某校校史館要把日治時期的學籍簿、照片與少量醋酸片基底片移入新庫房。 預算只夠選一種空調策略,總務處提出四個方案:

A 恆溫恆濕 20 °C / 50% | B 只除濕,溫度隨室溫 26 °C / 50% | C 只降溫,不控濕 20 °C / 65% | D 不裝空調,只做通風除塵

直覺上大家覺得 B「至少濕度顧到了」比 C 好。這一章就用 calcLMcalcPI 檢驗這個直覺。

4.1 溫度與濕度,哪一個比較要緊?

Michalski(2002)那句被引用最多的話是:「每降 5 °C,壽命加倍;每把相對濕度減半,壽命增加超過一倍」。 把這句話寫成式子就是 1.4 節裡的 calcLM_fix。用它跑一年的模擬資料:

結果推翻了直覺 只除濕不降溫(B,26 °C / 50%)的壽命倍數 0.43,反而比只降溫不除濕(C,20 °C / 65%)的 0.71 更差。 原因是溫度進入 Arrhenius 指數項,影響力遠大於進入冪次項的相對濕度。 同樣的錢,先花在溫度上通常比先花在濕度上有效——只要不讓 RH 跨過黴菌門檻。

但這個結論有一個必要條件:C 的 RH 65% 已經很接近長黴門檻,模擬中出現 19 小時超標。 如果庫房位在亞熱帶且氣密性差,C 隨時會變成黴菌事件。所以正確的說法不是「溫度比濕度重要」,而是:

兩階段思考 第一階段:RH 必須先被壓到黴菌門檻以下(這是硬約束,不能交換)。 第二階段:在滿足硬約束的前提下,每一塊錢優先買溫度。
🔬 實驗室 5|壽命倍數取捨盤同時看見 ConSciR 版與修正版,以及等壽命線
纖維素約 100、清漆黃化約 70
白色等值線:LM* = 0.5、1、2 圓圈=目前設定點 四個策略 A–D 底色:藍=壽命長,紅=壽命短
LM*(修正版)
ConSciR calcLM
PI(年)
木材 EMC (%)
距長黴門檻 (%RH)
等效於 50% RH 下的幾 °C
👉 換你做:把「降 1 °C」換算成「減幾 %RH」

固定 RH = 50%,把溫度從 24 降到 23,記下 LM* 的變化倍數;再固定 T = 24,把 RH 往下調到 LM* 出現同樣的倍數, 看需要減幾個百分點。R 練習 6 已經幫你算好:在 24 °C/50% 附近,降 1 °C 大約等於把 RH 減 5 個百分點(壽命倍數同為 1.147 倍)。 這個換算率是跟總務處談判時最有用的一個數字:它讓「保存效益」和「機電成本」可以放在同一張表上比較。

4.2 別忘了機械劣化:看 EMC 的擺幅,不是 RH 的擺幅

A 恆溫恆濕B 只除濕 C 只降溫D 無空調
圖 4-1(模擬)四種策略下木材平衡含水率的全年變化。D 的年擺幅達 17.6%,是 A 的五倍以上。

紙、皮革、木材都會隨 EMC 變化而膨脹收縮。當一件物件由多種材料組合(畫布 + 木框 + 顏料層、書皮 + 書頁 + 膠), 各層的膨脹係數不同,EMC 擺幅就直接轉成層間應力。因此:

三個指標要一起看 A 策略的 LM* 最好、EMC 擺幅最小、黴菌時數為 0,所以它在三個維度都贏——這是為什麼它最貴。 真正的決策困難出現在 B 與 C 之間:B 的 EMC 擺幅小但化學劣化快,C 的化學劣化慢但貼近黴菌門檻。 這種取捨無法只用一個數字解決,第 5 章會把它們畫在一起。

R 練習 6:四種策略的年度指標

Part 2 |情境四

5. 節能減碳與保存風險的正面衝突

情境設定

同一間校史館收到上級的節能指標:三年內用電量減 20%。 機電廠商建議「把庫房設定點從 20 °C / 50% 放寬到 24 °C / 55%,一年可省下四成空調電」。 典藏組直覺反對,但講不出具體代價。這一章的任務是把代價算成數字

5.1 設定點怎麼變成電費

把外氣調到設定狀態所需的冷卻功率,就是焓差乘上質量流量:

rho <- calcAD(T_out, RH_out)                # 空氣密度 kg/m3
h1  <- calcEnthalpy(T_out, RH_out)          # 外氣焓 kJ/kg
h2  <- calcEnthalpy(T_set, RH_set)          # 設定點焓 kJ/kg
kW  <- q * rho * pmax(h1 - h2, 0)          # q = 體積流量 m3/s
kWh_year <- sum(kW)                          # 逐時資料直接加總

本教材用 900 m³ 的庫房、每小時 0.4 次換氣(滲透 + 新鮮外氣)計算,模擬外氣為南部沿海全年逐時資料。 這是空氣處理的理論負荷,不含機組效率、內部發熱與圍護結構傳熱,因此絕對值會低於實際電費, 但用來做設定點之間的相對比較是有效的。

🔬 實驗室 6|設定點決策台在能耗地圖上點一個位置,同時看到四種後果
全年冷卻 kWh
相對基準能耗
LM*(壽命倍數)
相對基準壽命
距長黴門檻 (%RH)
PI(年)

5.2 廠商建議的真實代價

20 °C/50% 全年冷卻能耗 (kWh)
24 °C/55% 全年冷卻能耗 (kWh)
能耗變化
20 °C/50% 的 LM*
24 °C/55% 的 LM*
壽命變化
把話講清楚的方式 「省 39% 的電,換來物件預期壽命少一半」——這句話才是決策層需要的資訊。 它不一定會讓館方否決節能案,但至少讓「節能」與「保存」在同一個尺度上被比較, 而不是一方拿電費表、一方拿感覺。

5.3 真正該優先做的節能措施

措施對能耗對保存風險優先度
降低換氣量與滲透(氣密、門斗、減少不必要新鮮外氣)↓↓ 大幅下降↓ 波動變小,風險同時下降最優先——雙贏
加強圍護結構保溫與遮陽↓↓↓ 表面溫度上升,冷凝風險下降優先
放寬溫度設定(例如 20 → 22 °C)↑ 化學劣化加快需計算,逐案評估
放寬濕度設定(例如 50 → 55%)↑ 接近黴菌門檻、可能穿越鹽結晶點慎用,且必須檢查鹽害
季節性浮動設定(跟隨外氣緩慢漂移)↓↓→ 若漂移速率夠慢,機械風險不增推薦,但需要連續監測支持
夜間/休館日停機↑↑ 見第 2 章:這正是黴菌事件的成因不建議
順序才是重點 節能有兩類做法:減少負荷(氣密、保溫、遮陽、降低換氣)與放寬目標(改設定點)。 前者幾乎都是雙贏,後者一定要付保存代價。 多數館舍在還沒把前者做完之前就先動設定點,這是最不划算的順序。
Part 3 |收斂

6. 四條風險,一根 RH 軸

前面四章各自得到一個「應該把 RH 設在哪裡」的答案,而且互相矛盾。這一章把它們畫在同一張圖上。 情境是最難的那一種:一棟位在海岸、有鹽害、同時收藏紙質與木質文物、而且要節能的館舍

6.1 四條曲線各自要什麼

風險指標它偏好的 RH它真正在意的事
黴菌calcMould_Zeng 門檻、VTT 指數愈低愈好;Zeng 門檻在 14–30 °C 約為 74–76%,扣安全裕度後實務上限常落在 65–70%是否跨過門檻——這是硬約束
化學劣化calcLM*calcPI愈低愈好,且愈冷愈好累積曝露——可以用時間交換
鹽結晶RUNSALT 結晶濕度、MDRH沒有「愈低愈好」;要遠離結晶濕度並保持穩定穿越次數——不是高低
機械劣化calcEMC_wood 擺幅沒有偏好值;要穩定變化幅度與速率
能耗calcEnthalpy 積分愈高愈好(愈接近外氣愈省)與前四項全部反向
四個風險有兩種完全不同的性格 黴菌與化學劣化在意水平(level),鹽害與機械劣化在意變動(fluctuation)。 一份只寫「RH 維持 55 ± 5%」的規範同時回應了兩者; 一份只寫「RH 不得高於 65%」的規範只回應了前者,對鹽害與開裂毫無保護作用。
🔬 實驗室 7|共同可行區間拖動設定點與控制帶寬,看哪些風險亮紅燈
黴菌禁區 鹽結晶穿越帶 化學劣化(LM*) 相對能耗 共同可行區間

6.2 一條可以照著走的決策流程

  1. 先確認硬約束。calcMould_Zeng 的門檻算出來(它隨溫度變動),減去 5% 當安全裕度,得到 RH 上限。 這一條不能拿來交換。
  2. 再確認鹽的禁區。若牆體有鹽,把 RUNSALT 給的每個結晶濕度各畫一條 ±(控制帶寬)的禁帶。 設定點加上帶寬後不可以壓在任何一條禁帶上。沒有鹽害紀錄的館舍可跳過,但海岸與地下空間請務必先取樣。
  3. 在剩下的區間裡,往低 RH、低溫方向找。每往下一格用 calcLM_fix 記下壽命增益, 用能耗網格記下成本,算出「每 kWh 買到多少壽命」。
  4. 檢查機械風險。calcEMC_wood 算出設定點 ± 帶寬對應的 EMC 擺幅,控制在 2% 以內通常安全。
  5. 寫成規範。三個數字缺一不可:目標值、允許帶寬、允許變化速率(例如「55%,±5%,每小時不超過 2%」)。
  6. 設定監測與複核。至少一支感測器放在最不利點(外牆角落、地板附近、展櫃內),而不是只放在門口。
為什麼要有「允許變化速率」 同樣是 45% 到 60%,花三個月漂移過去,木材可以緩慢達到平衡而幾乎不產生內應力; 花三小時衝過去,表層先動、內層沒動,應力就出現了。這也是季節性浮動設定之所以可行的原因。

6.3 把結果寫成管理文件

環境控制建議(範本)

適用範圍:◯◯館一樓庫房(紙質、木質為主;外牆檢出氯化鈉為主之可溶鹽)

控制目標:溫度 22 ± 1.5 °C;相對濕度 55 ± 5%,每小時變化不超過 2%。

依據: (1) 黴菌:以 Zeng 模型於 22 °C 之門檻約 ◯◯%,扣除安全裕度後上限 ◯◯%; (2) 鹽害:本案 RUNSALT 顯示主要鹽相結晶濕度約 ◯◯%,55 ± 5% 未穿越; (3) 化學劣化:相對 20 °C/50% 之壽命倍數 LM* = ◯.◯◯; (4) 機械:對應木材 EMC 擺幅 ◯.◯%,低於 2% 之管理值; (5) 能耗:相較 20 °C/50% 節省 ◯◯%。

監測:庫房中央、外牆角落、展櫃內各一點,15 分鐘取樣,每季以 ConSciR 產生報表。

複核條件:連續 24 小時超出帶寬、單次 RH 變化超過 5%/h、或牆面出現新析出物時,重新評估。

資料與模型限制:本建議所用之壽命倍數依 Michalski (2002) 之式重算; 黴菌指數採補上衰退項之 VTT 模型;鹽相平衡由 ECOS/RUNSALT 計算,該模型不含碳酸鹽、石膏與動力學,僅適用 20 °C 附近。

最後一段才是專業的分野 「資料與模型限制」那一段是把學生報告和專業報告分開的地方。 能算出數字的人很多,會說明數字在什麼條件下才成立的人少。
Part 4 |學習成效

後測與能力雷達圖

12 題綜合題,涵蓋四個情境與工具層。作答完成後會自動計分, 依數據判讀 / 風險診斷 / 措施決策 / 工具操作四個維度畫出雷達圖,並列出建議複習的章節。

目前作答進度

附錄 A:教學使用建議

三小時工作坊

0:00–0:15前測 + 第 0 章
0:15–0:50第 1 章工具層 + 實驗室 1
0:50–1:101.4 節誠實的極限(建議由學生分組各驗證一項
1:10–1:50第 2 章黴菌 + 實驗室 2 + 情境測
2:00–2:35第 3 章鹽害 + 實驗室 3、4 + 情境測
2:35–3:00第 6 章整合 + 實驗室 7 + 後測與雷達圖

第 4、5 章留作課後自學。

一學期(16 週)配置

  • W1–2 保存科學導論、R 與資料框基礎、第 0 章
  • W3–5 第 1 章工具層;作業:用自己館舍/實驗室的記錄器資料重跑一次
  • W6  1.4 節;作業:再找出一個套件與文件不符之處並寫成 issue
  • W7–8 第 2 章;期中:以實測資料做一份黴菌風險報告
  • W9–11 第 3 章;含 IC 實驗、ECOS 輸入檔製作
  • W12–13 第 4、5 章
  • W14–16 第 6 章整合;期末:為一處指定古蹟撰寫環境控制建議書

常見迷思與對應章節

學生常說的話問題在哪回到哪一節
「RH 越低越好」忽略鹽結晶的穿越效應與有機質乾裂3.56.1
「這個展櫃是密封的,所以安全」密封 ≠ 緩衝;沒有調濕劑的密封櫃只是延後而非削弱2.2
「函式跑出來就是答案」沒有驗證函式是否算它宣稱的東西1.4
「Mould_index 欄位是黴菌指數」那是單步增量,不是累積指數1.4 ③
「樣品不含鈣」把 Pathway 2 的模型假設當成量測結果1.33.3
「石膏飽和度大代表牆很危險」S 是萃取方法的指標,不是材料的指標3.4
「省電就是把設定點放寬」忽略了減少負荷這一類雙贏措施5.3
「國外的 50 ± 5% 規範照抄就好」門檻隨氣候、材料、鹽組成而變2.46.2

附錄 B:資料與可重現性

本教材所有數值皆由下列流程產生,可完整重現:

  1. 從 GitHub 取得 ConSciRSaltsR 原始碼, 直接載入其 R/ 目錄下的函式定義(兩者的計算函式皆為 base R,不需安裝套件即可執行)。
  2. fun_salt_balance() 唯一的修改是把 tibble::tibble( 換成 data.frame( 並移除結尾多餘的逗號;所有算式未更動
  3. 亞熱帶外氣以季節項 + 日夜項 + AR(1) 天氣雜訊 + 降雨事件合成,隨機種子 set.seed(20260810)
  4. 離子層析數值為設計值,用意是涵蓋 Pathway 1/2、石膏由 Ca 或 SO₄ 限制、以及飽和度警告三種狀況。
  5. 第 3 章的結晶曲線為依文獻潮解濕度建構的示意曲線,非 ECOS 輸出。

下載資料與腳本

以下連結在部署到伺服器(含 GitHub Pages)後才有效; 單獨用 file:// 開啟本檔時會找不到檔案。

資料集(CSV)

R 腳本與 ECOS 輸入檔

  • prelude.R 教材內 webR 載入的完整函式定義(可直接在自己的 R 裡 source()
  • gen.R 產生全部模擬資料(set.seed(20260810)
  • blocks.R 七個 R 練習區塊的原始碼
  • ECOS_input_FT-01.txtBS-08 八個可直接餵給 RUNSALT 的輸入檔
再說一次:模擬資料只能用於教學演示,不得作為任何館舍或古蹟的實際評估依據,也不得引用為實驗數據。

參考文獻

  1. Hukka, A., & Viitanen, H. (1999). A mathematical model of mould growth on wooden material. Wood Science and Technology, 33(6), 475–485. doi:10.1007/s002260050131 — VTT 黴菌指數模型原始文獻
  2. Zeng, L., Chen, Y., Ma, M., Du, B., Gao, J., Cao, G., & Li, J. (2023). Prediction of mould growth rate within building envelopes: development and validation of an improved model. Building Services Engineering Research and Technology. doi:10.1177/01436244221137846 calcMould_Zeng 的來源
  3. Michalski, S. (2002). Double the life for each five-degree drop, more than double the life for each halving of relative humidity. In Preprints of the 13th ICOM-CC Triennial Meeting, Rio de Janeiro, Vol. I, 66–72. James & James. — 壽命倍數 LM
  4. Reilly, J. M. (1995). New Tools for Preservation: Assessing Long-Term Environmental Effects on Library and Archives Collections. Commission on Preservation and Access. — Preservation Index
  5. Godts, S., Steiger, M., Orr, S. A., De Kock, T., Desarnaud, J., De Clercq, H., & Cnudde, V. (2022). Charge balance calculations for mixed salt systems applied to a large dataset from the built environment. Scientific Data, 9, 324. doi:10.1038/s41597-022-01445-9 — SaltsR 的 11 條式子
  6. Godts, S., Steiger, M., Orr, S. A., Stahlbuhk, A., Desarnaud, J., De Clercq, H., Cnudde, V., & De Kock, T. (2022). Modeling salt behavior with ECOS/RUNSALT: terminology, methodology, limitations, and solutions. Heritage, 5(4), 3648–3663. doi:10.3390/heritage5040190 — ECOS 模型的六離子上限、不含碳酸鹽與石膏、無動力學
  7. Godts, S., Orr, S. A., Steiger, M., Stahlbuhk, A., De Kock, T., Desarnaud, J., De Clercq, H., & Cnudde, V. (2023). Salt mixtures in stone weathering. Scientific Reports, 13, 13306. doi:10.1038/s41598-023-40590-y — 由 11,412 個樣品歸納出的典型混合鹽組成
  8. Godts, S., Steiger, M., Stahlbuhk, A., Orr, S. A., Desarnaud, J., De Clercq, H., Cnudde, V., & De Kock, T. (2024). Modeled versus experimental salt mixture behavior under variable humidity. ACS Omega, 9(18), 20454–20466. doi:10.1021/acsomega.4c01486 — 實測結晶濕度比模型預測低 9–28%;RH 變化愈慢愈接近模型
  9. Rörig-Dalgaard, I. (2021). Direct measurements of the deliquescence relative humidity in salt mixtures including the contribution from metastable phases. ACS Omega, 6(25), 16297–16306. doi:10.1021/acsomega.1c00538 — 混合鹽的潮解濕度必低於任一單鹽
  10. Price, C. A. (Ed.) (2000). An Expert Chemical Model for Determining the Environmental Conditions Needed to Prevent Salt Damage in Porous Materials (Protection and Conservation of European Cultural Heritage Research Report No. 11). Archetype. — ECOS 模型
  11. Bionda, D. (2005). RUNSALT — a graphical user interface to the ECOS thermodynamic model for the prediction of the behaviour of salt mixtures under changing climate conditions. — RUNSALT 軟體
  12. Buck, A. L. (1981). New equations for computing vapor pressure and enhancement factor. Journal of Applied Meteorology, 20(12), 1527–1532. calcPws 預設方法
  13. Shah, B. (2024–). ConSciR: Tools for Conservation Science. R package. github.com/BhavShah01/ConSciR說明文件
  14. Shah, B., Godts, S., & Orr, A. (2024–). SaltsR: Tools for the Analysis of Salt Formation Data. R package. github.com/BhavShah01/SaltsR說明文件

本教材對 ConSciR 與 SaltsR 提出的五處程式碼/文件差異,均為對照公開原始碼與其引用文獻後的觀察, 且皆可在本頁的 R 區塊中重現。兩個套件均為 GPL-3 授權的開源專案,發現問題的正確做法是到其 GitHub 開 issue—— 這也是本教材建議指派給學生的作業之一。以上觀察基於 2026 年 8 月取得的原始碼版本,套件更新後可能已修正。