lib/measures/tbd/resources/ua.rb in tbd-3.0.3 vs lib/measures/tbd/resources/ua.rb in tbd-3.1.0

- old
+ new

@@ -60,34 +60,37 @@ area = lc.getNetArea return zero("'#{id}': net area (m2)", mth, ERR, res) unless area > TOL # First, calculate initial layer RSi to initially meet Ut target. - rt = 1 / ut # target construction Rt - ro = rsi(lc, film) # current construction Ro - new_r = lyr[:r] + (rt - ro) # new, un-derated layer RSi - new_u = 1 / new_r + rt = 1 / ut # target construction Rt + ro = rsi(lc, film) # current construction Ro + new_r = lyr[:r] + (rt - ro) # new, un-derated layer RSi + new_u = 1 / new_r # Then, uprate (if possible) to counter expected thermal bridging effects. - u_psi = hloss / area # from psi & khi - new_u = new_u - u_psi # uprated layer USi to counter psi & khi - new_r = 1 / new_u # uprated layer RSi to counter psi & khi + u_psi = hloss / area # from psi & khi + new_u -= u_psi # uprated layer USi to counter psi & khi + new_r = 1 / new_u # uprated layer RSi to counter psi & khi return zero("'#{id}': new Rsi", mth, ERR, res) unless new_r > 0.001 - loss = 0.0 # residual heatloss (not assigned) [W/K] + loss = 0.0 # residual heatloss (not assigned) [W/K] + if lyr[:type] == :massless m = lc.getLayer(lyr[:index]).to_MasslessOpaqueMaterial return invalid("'#{id}' massless layer?", mth, 0) if m.empty? + m = m.get.clone(model).to_MasslessOpaqueMaterial.get m.setName("#{id} uprated") new_r = 0.001 unless new_r > 0.001 loss = (new_u - 1 / new_r) * area unless new_r > 0.001 m.setThermalResistance(new_r) else # type == :standard - m = lc.getLayer(lyr[:index]).to_StandardOpaqueMaterial + m = lc.getLayer(lyr[:index]).to_StandardOpaqueMaterial return invalid("'#{id}' standard layer?", mth, 0) if m.empty? + m = m.get.clone(model).to_StandardOpaqueMaterial.get m.setName("#{id} uprated") k = m.thermalConductivity if new_r > 0.001 @@ -106,14 +109,16 @@ loss = (new_u - k / d) * area end ok = m.setThickness(d) return invalid("Can't uprate '#{id}': > 3m", mth, 0, ERR, res) unless ok + m.setThermalConductivity(k) if ok end return invalid("", mth, 0, ERR, res) unless m + lc.setLayer(lyr[:index], m) uo = 1 / rsi(lc, film) if loss > TOL h_loss = format "%.3f", loss @@ -185,10 +190,11 @@ model.getSurfaces.each do |sss| next unless sss.surfaceType.downcase.include?(label.to_s) next unless sss.outsideBoundaryCondition.downcase == "outdoors" next if sss.construction.empty? next if sss.construction.get.to_LayeredConstruction.empty? + c = sss.construction.get.to_LayeredConstruction.get i = c.nameString # Reliable unless referenced by other surface types e.g. floor vs wall. if c.getNetArea > area @@ -945,10 +951,10 @@ model = "" model = "* model : #{ua[:file]}" if ua.key?(:file) && lang == :en model = "* modèle : #{ua[:file]}" if ua.key?(:file) && lang == :fr model += " (v#{ua[:version]})" if ua.key?(:version) report << model unless model.empty? - report << "* TBD : v3.0.3" + report << "* TBD : v3.1.0" report << "* date : #{ua[:date]}" if lang == :en report << "* status : #{msg(status)}" unless status.zero? report << "* status : success !" if status.zero?