From 1eec1b11ddd449cf7e0f77f049d834102cbbd38b Mon Sep 17 00:00:00 2001 From: r4d6 <50276533+r4d6@users.noreply.github.com> Date: Sat, 18 Jan 2020 20:00:07 -0500 Subject: [PATCH 1/2] Update passive_vent.dm --- .../components/unary_devices/passive_vent.dm | 52 +++++++++++++------ 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index 94d8959987..e01632c379 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -20,28 +20,46 @@ /obj/machinery/atmospherics/components/unary/passive_vent/process_atmos() ..() - var/datum/gas_mixture/environment = loc.return_air() - var/environment_pressure = environment.return_pressure() - var/pressure_delta = abs(environment_pressure - airs[1].return_pressure()) + var/active = FALSE - if((environment.temperature || airs[1].temperature) && pressure_delta > 0.5) - if(environment_pressure < airs[1].return_pressure()) - var/air_temperature = (environment.temperature > 0) ? environment.temperature : airs[1].temperature - var/transfer_moles = (pressure_delta * environment.volume) / (air_temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = airs[1].remove(transfer_moles) - loc.assume_air(removed) - air_update_turf() + var/datum/gas_mixture/external = loc.return_air() + var/datum/gas_mixture/internal = airs[1] + var/external_pressure = external.return_pressure() + var/internal_pressure = internal.return_pressure() + var/pressure_delta = abs(external_pressure - internal_pressure) + + if(pressure_delta > 0.5) + if(external_pressure < internal_pressure) + var/air_temperature = (external.temperature > 0) ? external.temperature : internal.temperature + var/transfer_moles = (pressure_delta * external.volume) / (air_temperature * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = internal.remove(transfer_moles) + external.merge(removed) else - var/air_temperature = (airs[1].temperature > 0) ? airs[1].temperature : environment.temperature - var/output_volume = airs[1].volume - var/transfer_moles = (pressure_delta * output_volume) / (air_temperature * R_IDEAL_GAS_EQUATION) - transfer_moles = min(transfer_moles, environment.total_moles()*airs[1].volume/environment.volume) - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + var/air_temperature = (internal.temperature > 0) ? internal.temperature : external.temperature + var/transfer_moles = (pressure_delta * internal.volume) / (air_temperature * R_IDEAL_GAS_EQUATION) + transfer_moles = min(transfer_moles, external.total_moles() * internal.volume / external.volume) + var/datum/gas_mixture/removed = external.remove(transfer_moles) if(isnull(removed)) return airs[1].merge(removed) - air_update_turf() - update_parents() + internal.merge(removed) + + active = TRUE + + if(abs(external.temperature - internal.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/external_heat_capacity = external.heat_capacity() + var/internal_heat_capacity = internal.heat_capacity() + var/combined_heat_capacity = external_heat_capacity + internal_heat_capacity + if(combined_heat_capacity) + var/temperature = (internal.temperature * internal_heat_capacity + external.temperature * external_heat_capacity) / combined_heat_capacity + external.temperature = temperature + internal.temperature = temperature + + active = TRUE + + if(active) + air_update_turf() + update_parents() /obj/machinery/atmospherics/components/unary/passive_vent/can_crawl_through() return TRUE From c78944c5bc0fbd4b1f95f8b591d1e61d14e1c076 Mon Sep 17 00:00:00 2001 From: r4d6 Date: Wed, 22 Jan 2020 13:47:57 -0500 Subject: [PATCH 2/2] Update --- .../components/unary_devices/passive_vent.dm | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index e01632c379..d1daa720ca 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -41,21 +41,11 @@ var/datum/gas_mixture/removed = external.remove(transfer_moles) if(isnull(removed)) return - airs[1].merge(removed) internal.merge(removed) active = TRUE - if(abs(external.temperature - internal.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/external_heat_capacity = external.heat_capacity() - var/internal_heat_capacity = internal.heat_capacity() - var/combined_heat_capacity = external_heat_capacity + internal_heat_capacity - if(combined_heat_capacity) - var/temperature = (internal.temperature * internal_heat_capacity + external.temperature * external_heat_capacity) / combined_heat_capacity - external.temperature = temperature - internal.temperature = temperature - - active = TRUE + active = internal.temperature_share(external, OPEN_HEAT_TRANSFER_COEFFICIENT) ? TRUE : active if(active) air_update_turf()