Example #1
0
        /// <summary>人体モデル計算の例</summary>
        private static void humanBodyTest()
        {
            //標準体躯の場合は引数不要
            //HumanBody body = new HumanBody();

            //人体モデルを作成:体重70kg,身長1.6m,年齢35歳,女性,心係数2.58,体脂肪率20%
            HumanBody body = new HumanBody(70, 1.6, 35, false, 2.58, 20);

            //着衣量[clo]を設定
            body.SetClothingIndex(0);
            //乾球温度[C]を設定
            body.SetDrybulbTemperature(42);
            //放射温度[C]を設定
            body.SetMeanRadiantTemperature(42);
            //気流速度[m/s]を設定
            body.SetVelocity(1.0);
            //相対湿度[%]を設定
            body.SetRelativeHumidity(50);

            //特定の部位の条件のみを設定したい場合(右手先のみ乾球温度20Cとした)
            body.SetDrybulbTemperature(HumanBody.Nodes.RightHand, 20);

            //時間を経過させ、状態を書き出す
            Console.WriteLine("時刻  |  右肩コア温度  |  右肩皮膚温度  |  左肩コア温度  |  左肩皮膚温度");
            for (int i = 0; i < 15; i++)
            {
                body.Update(120);
                ImmutableBodyPart rightShoulder = body.GetBodyPart(HumanBody.Nodes.RightShoulder);
                ImmutableBodyPart leftShoulder = body.GetBodyPart(HumanBody.Nodes.LeftShoulder);
                Console.Write(((i + 1) * 120) + "sec | ");
                Console.Write(rightShoulder.GetTemperature(BodyPart.Segments.Core).ToString("F2") + " | ");
                Console.Write(rightShoulder.GetTemperature(BodyPart.Segments.Skin).ToString("F2") + " | ");
                Console.Write(leftShoulder.GetTemperature(BodyPart.Segments.Core).ToString("F2") + " | ");
                Console.Write(leftShoulder.GetTemperature(BodyPart.Segments.Skin).ToString("F2") + " | ");
                Console.WriteLine();
            }

            Console.Read();
        }
Example #2
0
        /// <summary>Constructor</summary>
        /// <param name="body">体</param>
        /// <param name="position">部位情報</param>
        internal BodyPart(HumanBody body, HumanBody.Nodes position)
        {
            if (position == HumanBody.Nodes.None ||
                position == HumanBody.Nodes.TerminalPart) throw new Exception("部位初期化エラー");

            Body = body;
            Position = position;

            //モデル種別を設定//ここをコメントアウト
            isJOSModel = false;
            //if (position == HumanBody.Nodes.Head) isJOSModel = false;

            //体表面積を初期化
            initSurfaceArea();
            //重量を初期化
            initWeight();
            //熱容量[Wh/K]を初期化
            initHeatCapacity();
            //代謝量[W]を初期化
            initMetabolicRate();
            //熱コンダクタンス[W/K]を初期化する
            initHeatConductance();
            //基礎血流量[L/h]を初期化する
            initInternalBloodFlow();
        }
Example #3
0
        private static void outputData(StreamWriter sWriter, HumanBody body, double time, bool isTitleLine)
        {
            ImmutableBodyPart[] parts = body.GetBodyPart();

            if (isTitleLine)
            {
                sWriter.Write("Time[sec],");
                foreach (ImmutableBodyPart part in parts)
                {
                    sWriter.Write(part.Position + "-Core,");
                    sWriter.Write(part.Position + "-Muscle,");
                    sWriter.Write(part.Position + "-Fat,");
                    sWriter.Write(part.Position + "-Skin,");
                    sWriter.Write(part.Position + "-Artery,");
                    sWriter.Write(part.Position + "-DeepVein,");
                }
            }
            else
            {
                sWriter.Write(time + ",");
                foreach (ImmutableBodyPart part in parts)
                {
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.Core) + ",");
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.Muscle) + ",");
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.Fat) + ",");
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.Skin) + ",");
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.Artery) + ",");
                    sWriter.Write(part.GetTemperature(BodyPart.Segments.DeepVein) + ",");
                }
            }
            sWriter.WriteLine();
        }
Example #4
0
        static void Main(string[] args)
        {
            //DEBUG
            //args = new string[] { "inputs.csv" };

            if (args.Length == 0)
            {
                Console.WriteLine("Specify a filename (ex. inputs.csv)");
                return;
            }
            string filePath = args[0];
            if (! File.Exists(filePath))
            {
                Console.WriteLine("File '" + filePath + "' doesn't exist.");
                return;
            }

            //Make output file
            string oFilePath = filePath.Remove(filePath.LastIndexOf('.')) + "_Result.csv";

            //Read input file
            using (StreamReader sReader = new StreamReader(filePath))
            using(StreamWriter sWriter = new StreamWriter(oFilePath, false, Encoding.GetEncoding("Shift_JIS")))
            {
                //Read "weight"
                double weight = double.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "height"
                double height = double.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "age"
                double age = double.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "sex"
                bool isMale = bool.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "cardiac index at rest"
                double ci = double.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "fat percentage"
                double fat = double.Parse(sReader.ReadLine().Split(',')[1]);
                //Read "output time span"
                double oSpan = double.Parse(sReader.ReadLine().Split(',')[1]);

                //Make an instance of HumanBody class
                HumanBody body = new HumanBody(weight, height, age, isMale, ci, fat);
                //Output informations
                outputData(sWriter, body, 0, true);
                outputData(sWriter, body, 0, false);

                sReader.ReadLine();
                sReader.ReadLine();

                //Start iteration
                double cTime = 0;
                double time =0;
                double nextTime = 0;
                Dictionary<HumanBody.Nodes, double> dbTemp = new Dictionary<HumanBody.Nodes, double>();  //乾球温度
                Dictionary<HumanBody.Nodes, double> mrTemp = new Dictionary<HumanBody.Nodes, double>(); //平均放射温度
                Dictionary<HumanBody.Nodes, double> vels = new Dictionary<HumanBody.Nodes, double>();   //気流速度
                Dictionary<HumanBody.Nodes, double> rHumid = new Dictionary<HumanBody.Nodes, double>(); //相対湿度
                Dictionary<HumanBody.Nodes, double> matTemp = new Dictionary<HumanBody.Nodes, double>();//物体温度
                Dictionary<HumanBody.Nodes, double> conRate = new Dictionary<HumanBody.Nodes, double>();//接触割合
                Dictionary<HumanBody.Nodes, double> conduct = new Dictionary<HumanBody.Nodes, double>();//接触部の熱コンダクタンス
                Dictionary<HumanBody.Nodes, double> dbTempNext = new Dictionary<HumanBody.Nodes, double>();  //乾球温度
                Dictionary<HumanBody.Nodes, double> mrTempNext = new Dictionary<HumanBody.Nodes, double>(); //平均放射温度
                Dictionary<HumanBody.Nodes, double> velsNext = new Dictionary<HumanBody.Nodes, double>();   //気流速度
                Dictionary<HumanBody.Nodes, double> rHumidNext = new Dictionary<HumanBody.Nodes, double>(); //相対湿度
                Dictionary<HumanBody.Nodes, double> matTempNext = new Dictionary<HumanBody.Nodes, double>();//物体温度
                Dictionary<HumanBody.Nodes, double> conRateNext = new Dictionary<HumanBody.Nodes, double>();//接触割合
                Dictionary<HumanBody.Nodes, double> conductNext = new Dictionary<HumanBody.Nodes, double>();//接触部の熱コンダクタンス

                //Read boundary data at time 0
                readData(sReader.ReadLine(), ref time, ref dbTemp, ref mrTemp, ref vels, ref rHumid, ref matTemp, ref conRate, ref conduct);
                readData(sReader.ReadLine(), ref nextTime, ref dbTempNext, ref mrTempNext, ref velsNext, ref rHumidNext, ref matTempNext, ref conRateNext, ref conductNext);

                while (true)
                {
                    if (nextTime < cTime)
                    {
                        string line = sReader.ReadLine();
                        if (line == null) break;
                        if (line.Split(',')[0] == "") break;
                        time = nextTime;
                        Dictionary<HumanBody.Nodes, double> buff;
                        buff = dbTemp; dbTemp = dbTempNext; dbTempNext = buff;
                        buff = mrTemp; mrTemp = mrTempNext; mrTempNext = buff;
                        buff = rHumid; rHumid = rHumidNext; rHumidNext = buff;
                        buff = vels; vels = velsNext; velsNext = buff;
                        buff = matTemp; matTemp = matTempNext; matTempNext = buff;
                        buff = conRate; conRate = conRateNext; conRateNext = buff;
                        buff = conduct; conduct = conductNext; conductNext = buff;
                        readData(line, ref nextTime, ref dbTempNext, ref mrTempNext, ref velsNext, ref rHumidNext, ref matTempNext, ref conRateNext, ref conductNext);
                    }
                    else
                    {
                        //Set boundary conditions
                        foreach (HumanBody.Nodes key in dbTemp.Keys)
                        {
                            body.SetDrybulbTemperature(key, interpolate(time, nextTime, dbTemp[key], dbTempNext[key], cTime));
                            body.SetMeanRadiantTemperature(key, interpolate(time, nextTime, mrTemp[key], mrTempNext[key], cTime));
                            body.SetVelocity(key, interpolate(time, nextTime, vels[key], velsNext[key], cTime));
                            body.SetRelativeHumidity(key, interpolate(time, nextTime, rHumid[key], rHumidNext[key], cTime));
                            body.SetMaterialTemperature(key, interpolate(time, nextTime, matTemp[key], matTempNext[key], cTime));
                            body.SetContactPortionRate(key, interpolate(time, nextTime, conRate[key], conRateNext[key], cTime));
                            body.SetHeatConductanceToMaterial(key, interpolate(time, nextTime, conduct[key], conductNext[key], cTime));
                        }

                        //Update Human body
                        body.Update(oSpan);

                        //Update current time
                        cTime += oSpan;

                        //Output informations to file
                        outputData(sWriter, body, cTime, false);

                        //Output informations to console
                        Console.WriteLine(cTime + " sec");
                    }
                }
            }
        }
Example #5
0
        /// <summary>Sample program calculating human body</summary>
        private static void humanBodyTest()
        {
            //This is constructor to make standard human body.
            //HumanBody body = new HumanBody();

            //Make human body model : Weight 70kg, Height 1.6m, Age 35, Female, Cardiac index 2.58, Fat 20%
            HumanBody body = new HumanBody(70, 1.6, 35, false, 2.58, 20);

            //Set clothing index [clo]
            body.SetClothingIndex(0);
            //Set dry-bulb temperature [C]
            body.SetDrybulbTemperature(42);
            //Set mean radiant temperature [C]
            body.SetMeanRadiantTemperature(42);
            //Set velocity [m/s]
            body.SetVelocity(1.0);
            //Set relative humidity [%]
            body.SetRelativeHumidity(50);

            //Use Nodes enumarator to set bouncary condition to particular position
            body.SetDrybulbTemperature(HumanBody.Nodes.RightHand, 20);

            //Updating body state
            Console.WriteLine("Time     |  R.Shoulder C temp  |  R.Shoulder S temp  |  L.Shoulder C temp  |  L.Shoulder S temp");
            for (int i = 0; i < 15; i++)
            {
                body.Update(120);
                ImmutableBodyPart rightShoulder = body.GetBodyPart(HumanBody.Nodes.RightShoulder);
                ImmutableBodyPart leftShoulder = body.GetBodyPart(HumanBody.Nodes.LeftShoulder);
                Console.Write(((i + 1) * 120) + "sec | ");
                Console.Write(rightShoulder.GetTemperature(BodyPart.Segments.Core).ToString("F2") + " | ");
                Console.Write(rightShoulder.GetTemperature(BodyPart.Segments.Skin).ToString("F2") + " | ");
                Console.Write(leftShoulder.GetTemperature(BodyPart.Segments.Core).ToString("F2") + " | ");
                Console.Write(leftShoulder.GetTemperature(BodyPart.Segments.Skin).ToString("F2") + " | ");
                Console.WriteLine();
            }

            Console.Read();
        }