Remove atmos archiving.

This commit is contained in:
Vera Aguilera Puerto
2021-07-26 11:05:43 +02:00
parent e826615f81
commit 7fa10bd17b
5 changed files with 11 additions and 61 deletions

View File

@@ -42,13 +42,6 @@ namespace Content.Server.Atmos.EntitySystems
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity); return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);
} }
public float GetHeatCapacityArchived(GasMixture mixture)
{
Span<float> tmp = stackalloc float[mixture.Moles.Length];
NumericsHelpers.Multiply(mixture.MolesArchived, GasSpecificHeats, tmp);
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);
}
public float GetThermalEnergy(GasMixture mixture) public float GetThermalEnergy(GasMixture mixture)
{ {
return mixture.Temperature * GetHeatCapacity(mixture); return mixture.Temperature * GetHeatCapacity(mixture);
@@ -79,7 +72,7 @@ namespace Content.Server.Atmos.EntitySystems
public float Share(GasMixture receiver, GasMixture sharer, int atmosAdjacentTurfs) public float Share(GasMixture receiver, GasMixture sharer, int atmosAdjacentTurfs)
{ {
var temperatureDelta = receiver.TemperatureArchived - sharer.TemperatureArchived; var temperatureDelta = receiver.Temperature - sharer.Temperature;
var absTemperatureDelta = Math.Abs(temperatureDelta); var absTemperatureDelta = Math.Abs(temperatureDelta);
var oldHeatCapacity = 0f; var oldHeatCapacity = 0f;
var oldSharerHeatCapacity = 0f; var oldSharerHeatCapacity = 0f;
@@ -130,12 +123,12 @@ namespace Content.Server.Atmos.EntitySystems
// Transfer of thermal energy (via changed heat capacity) between self and sharer. // Transfer of thermal energy (via changed heat capacity) between self and sharer.
if (!receiver.Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity) if (!receiver.Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity)
{ {
receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * receiver.TemperatureArchived) + (heatCapacitySharerToThis * sharer.TemperatureArchived)) / newHeatCapacity; receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * receiver.Temperature) + (heatCapacitySharerToThis * sharer.Temperature)) / newHeatCapacity;
} }
if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity) if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity)
{ {
sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * sharer.TemperatureArchived) + (heatCapacityToSharer*receiver.TemperatureArchived)) / newSharerHeatCapacity; sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * sharer.Temperature) + (heatCapacityToSharer*receiver.Temperature)) / newSharerHeatCapacity;
} }
// Thermal energy of the system (self and sharer) is unchanged. // Thermal energy of the system (self and sharer) is unchanged.
@@ -154,17 +147,17 @@ namespace Content.Server.Atmos.EntitySystems
var moles = receiver.TotalMoles; var moles = receiver.TotalMoles;
var theirMoles = sharer.TotalMoles; var theirMoles = sharer.TotalMoles;
return (receiver.TemperatureArchived * (moles + movedMoles)) - (sharer.TemperatureArchived * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume; return (receiver.Temperature * (moles + movedMoles)) - (sharer.Temperature * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume;
} }
public float TemperatureShare(GasMixture receiver, GasMixture sharer, float conductionCoefficient) public float TemperatureShare(GasMixture receiver, GasMixture sharer, float conductionCoefficient)
{ {
var temperatureDelta = receiver.TemperatureArchived - sharer.TemperatureArchived; var temperatureDelta = receiver.Temperature - sharer.Temperature;
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
{ {
var heatCapacity = GetHeatCapacityArchived(receiver); var heatCapacity = GetHeatCapacity(receiver);
var sharerHeatCapacity = GetHeatCapacityArchived(sharer); var sharerHeatCapacity = GetHeatCapacity(sharer);
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity) if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
{ {
@@ -183,10 +176,10 @@ namespace Content.Server.Atmos.EntitySystems
public float TemperatureShare(GasMixture receiver, float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity) public float TemperatureShare(GasMixture receiver, float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity)
{ {
var temperatureDelta = receiver.TemperatureArchived - sharerTemperature; var temperatureDelta = receiver.Temperature - sharerTemperature;
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
{ {
var heatCapacity = GetHeatCapacityArchived(receiver); var heatCapacity = GetHeatCapacity(receiver);
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity) if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
{ {

View File

@@ -16,9 +16,6 @@ namespace Content.Server.Atmos.EntitySystems
return; return;
} }
if (tile.ArchivedCycle < fireCount)
Archive(tile, fireCount);
tile.CurrentCycle = fireCount; tile.CurrentCycle = fireCount;
var adjacentTileLength = 0; var adjacentTileLength = 0;
@@ -38,7 +35,6 @@ namespace Content.Server.Atmos.EntitySystems
// If the tile is null or has no air, we don't do anything for it. // If the tile is null or has no air, we don't do anything for it.
if(enemyTile?.Air == null) continue; if(enemyTile?.Air == null) continue;
if (fireCount <= enemyTile.CurrentCycle) continue; if (fireCount <= enemyTile.CurrentCycle) continue;
Archive(enemyTile, fireCount);
var shouldShareAir = false; var shouldShareAir = false;
@@ -110,13 +106,6 @@ namespace Content.Server.Atmos.EntitySystems
RemoveActiveTile(gridAtmosphere, tile); RemoveActiveTile(gridAtmosphere, tile);
} }
private void Archive(TileAtmosphere tile, int fireCount)
{
tile.Air?.Archive();
tile.ArchivedCycle = fireCount;
tile.TemperatureArchived = tile.Temperature;
}
private void LastShareCheck(TileAtmosphere tile) private void LastShareCheck(TileAtmosphere tile)
{ {
if (tile.Air == null || tile.ExcitedGroup == null) if (tile.Air == null || tile.ExcitedGroup == null)

View File

@@ -21,9 +21,6 @@ namespace Content.Server.Atmos.EntitySystems
if (adjacent == null || adjacent.ThermalConductivity == 0f) if (adjacent == null || adjacent.ThermalConductivity == 0f)
continue; continue;
if(adjacent.ArchivedCycle < gridAtmosphere.UpdateCounter)
Archive(adjacent, gridAtmosphere.UpdateCounter);
NeighborConductWithSource(gridAtmosphere, adjacent, tile); NeighborConductWithSource(gridAtmosphere, adjacent, tile);
ConsiderSuperconductivity(gridAtmosphere, adjacent); ConsiderSuperconductivity(gridAtmosphere, adjacent);
@@ -37,8 +34,6 @@ namespace Content.Server.Atmos.EntitySystems
{ {
if(tile.Air == null) if(tile.Air == null)
{ {
if(tile.ArchivedCycle < gridAtmosphere.UpdateCounter)
Archive(tile, gridAtmosphere.UpdateCounter);
return AtmosDirection.All; return AtmosDirection.All;
} }
@@ -128,7 +123,7 @@ namespace Content.Server.Atmos.EntitySystems
private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere other, float conductionCoefficient) private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere other, float conductionCoefficient)
{ {
var deltaTemperature = (tile.TemperatureArchived - other.TemperatureArchived); var deltaTemperature = (tile.Temperature - other.Temperature);
if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider
&& tile.HeatCapacity != 0f && other.HeatCapacity != 0f) && tile.HeatCapacity != 0f && other.HeatCapacity != 0f)
{ {
@@ -146,7 +141,7 @@ namespace Content.Server.Atmos.EntitySystems
if (tile.Temperature > Atmospherics.T0C) if (tile.Temperature > Atmospherics.T0C)
{ {
// Hardcoded space temperature. // Hardcoded space temperature.
var deltaTemperature = (tile.TemperatureArchived - Atmospherics.TCMB); var deltaTemperature = (tile.Temperature - Atmospherics.TCMB);
if ((tile.HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider)) if ((tile.HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider))
{ {
var heat = tile.ThermalConductivity * deltaTemperature * (tile.HeatCapacity * var heat = tile.ThermalConductivity * deltaTemperature * (tile.HeatCapacity *

View File

@@ -26,9 +26,6 @@ namespace Content.Server.Atmos
[DataField("moles")] [ViewVariables] [DataField("moles")] [ViewVariables]
public float[] Moles = new float[Atmospherics.AdjustedNumberOfGases]; public float[] Moles = new float[Atmospherics.AdjustedNumberOfGases];
[DataField("molesArchived")] [ViewVariables]
public float[] MolesArchived = new float[Atmospherics.AdjustedNumberOfGases];
[DataField("temperature")] [ViewVariables] [DataField("temperature")] [ViewVariables]
private float _temperature = Atmospherics.TCMB; private float _temperature = Atmospherics.TCMB;
@@ -73,9 +70,6 @@ namespace Content.Server.Atmos
} }
} }
[DataField("temperatureArchived")] [ViewVariables]
public float TemperatureArchived { get; private set; }
[DataField("volume")] [ViewVariables] [DataField("volume")] [ViewVariables]
public float Volume { get; set; } public float Volume { get; set; }
@@ -96,13 +90,6 @@ namespace Content.Server.Atmos
Immutable = true; Immutable = true;
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Archive()
{
Moles.AsSpan().CopyTo(MolesArchived.AsSpan());
TemperatureArchived = Temperature;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public float GetMoles(int gasId) public float GetMoles(int gasId)
{ {
@@ -253,7 +240,6 @@ namespace Content.Server.Atmos
{ {
// The arrays MUST have a specific length. // The arrays MUST have a specific length.
Array.Resize(ref Moles, Atmospherics.AdjustedNumberOfGases); Array.Resize(ref Moles, Atmospherics.AdjustedNumberOfGases);
Array.Resize(ref MolesArchived, Atmospherics.AdjustedNumberOfGases);
} }
public override bool Equals(object? obj) public override bool Equals(object? obj)
@@ -268,12 +254,10 @@ namespace Content.Server.Atmos
if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true; if (ReferenceEquals(this, other)) return true;
return Moles.SequenceEqual(other.Moles) return Moles.SequenceEqual(other.Moles)
&& MolesArchived.SequenceEqual(other.MolesArchived)
&& _temperature.Equals(other._temperature) && _temperature.Equals(other._temperature)
&& ReactionResults.SequenceEqual(other.ReactionResults) && ReactionResults.SequenceEqual(other.ReactionResults)
&& Immutable == other.Immutable && Immutable == other.Immutable
&& LastShare.Equals(other.LastShare) && LastShare.Equals(other.LastShare)
&& TemperatureArchived.Equals(other.TemperatureArchived)
&& Volume.Equals(other.Volume); && Volume.Equals(other.Volume);
} }
@@ -284,13 +268,10 @@ namespace Content.Server.Atmos
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
{ {
var moles = Moles[i]; var moles = Moles[i];
var molesArchived = MolesArchived[i];
hashCode.Add(moles); hashCode.Add(moles);
hashCode.Add(molesArchived);
} }
hashCode.Add(_temperature); hashCode.Add(_temperature);
hashCode.Add(TemperatureArchived);
hashCode.Add(Immutable); hashCode.Add(Immutable);
hashCode.Add(LastShare); hashCode.Add(LastShare);
hashCode.Add(Volume); hashCode.Add(Volume);
@@ -303,11 +284,9 @@ namespace Content.Server.Atmos
var newMixture = new GasMixture() var newMixture = new GasMixture()
{ {
Moles = (float[])Moles.Clone(), Moles = (float[])Moles.Clone(),
MolesArchived = (float[])MolesArchived.Clone(),
_temperature = _temperature, _temperature = _temperature,
Immutable = Immutable, Immutable = Immutable,
LastShare = LastShare, LastShare = LastShare,
TemperatureArchived = TemperatureArchived,
Volume = Volume, Volume = Volume,
}; };
return newMixture; return newMixture;

View File

@@ -13,18 +13,12 @@ namespace Content.Server.Atmos
/// </summary> /// </summary>
public class TileAtmosphere : IGasMixtureHolder public class TileAtmosphere : IGasMixtureHolder
{ {
[ViewVariables]
public int ArchivedCycle;
[ViewVariables] [ViewVariables]
public int CurrentCycle; public int CurrentCycle;
[ViewVariables] [ViewVariables]
public float Temperature { get; set; } = Atmospherics.T20C; public float Temperature { get; set; } = Atmospherics.T20C;
[ViewVariables]
public float TemperatureArchived { get; set; } = Atmospherics.T20C;
[ViewVariables] [ViewVariables]
public TileAtmosphere? PressureSpecificTarget { get; set; } public TileAtmosphere? PressureSpecificTarget { get; set; }