/// <summary>体の部位を接続する</summary> /// <param name="bpConnectTo">接続先の体の部位</param> internal void connect(BodyPart bpConnectTo) { this.bpConnectTo.Add(bpConnectTo); bpConnectTo.bpConnectFrom = this; }
/// <summary>血流により体の部位1から体の部位2に移動する熱量[W]を計算する</summary> /// <param name="bodyPart1">体の部位1</param> /// <param name="bodyPart2">体の部位2</param> /// <param name="bloodType">血流の種類(動脈・深部静脈・表在静脈)</param> /// <returns>血流によりbodyPosition1からbodyPosition2に移動する熱量[W]</returns> public double GetHeatTransferWithBloodFlow(ImmutableBodyPart bodyPart1, ImmutableBodyPart bodyPart2, BodyPart.Segments bloodType) { const double RCS = HumanBody.RHO_C / 3.6d; //流量単位がL/hなので、ここで単位を調整 if (bodyPart1 == null || bodyPart2 == null) return 0; List<ImmutableBodyPart> bps = new List<ImmutableBodyPart>(); //動脈の場合 if (bloodType == BodyPart.Segments.Artery) { //bp1が上流の場合には熱移動を計算 bps.AddRange(bodyPart1.BodyPartConnectTo); if (bps.Contains(bodyPart2)) return bodyPart1.GetTemperature(bloodType) * bodyPart2.GetBloodFlow(bloodType) * RCS; } //静脈の場合 else if (bloodType == BodyPart.Segments.DeepVein || bloodType == BodyPart.Segments.SuperficialVein) { //bp2が上流の場合には熱移動を計算 bps.AddRange(bodyPart2.BodyPartConnectTo); if (bps.Contains(bodyPart1)) return bodyPart1.GetTemperature(bloodType) * bodyPart1.GetBloodFlow(bloodType) * RCS; } return 0; }