From 064865926f2deae4a3cadd07e6ac2e332b99d83a Mon Sep 17 00:00:00 2001 From: yoshito takahashi Date: Sun, 15 Nov 2020 12:19:31 +0900 Subject: [PATCH 1/5] update setup --- .gitignore | 5 +- build/lib/jos3/__init__.py | 2 +- dist/jos3-yoshito-takahashi-0.0.3.tar.gz | Bin 22450 -> 0 bytes ...3_yoshito_takahashi-0.0.3-py3-none-any.whl | Bin 24192 -> 0 bytes requirements.txt | 1 - setup.py | 11 +-- src/jos3.egg-info/PKG-INFO | 11 ++- src/jos3.egg-info/requires.txt | 2 +- src/jos3/__init__.py | 2 +- src/jos3_yoshito_takahashi.egg-info/PKG-INFO | 80 ------------------ .../SOURCES.txt | 13 --- .../dependency_links.txt | 1 - .../requires.txt | 1 - .../top_level.txt | 1 - 14 files changed, 17 insertions(+), 113 deletions(-) delete mode 100644 dist/jos3-yoshito-takahashi-0.0.3.tar.gz delete mode 100644 dist/jos3_yoshito_takahashi-0.0.3-py3-none-any.whl delete mode 100644 requirements.txt delete mode 100644 src/jos3_yoshito_takahashi.egg-info/PKG-INFO delete mode 100644 src/jos3_yoshito_takahashi.egg-info/SOURCES.txt delete mode 100644 src/jos3_yoshito_takahashi.egg-info/dependency_links.txt delete mode 100644 src/jos3_yoshito_takahashi.egg-info/requires.txt delete mode 100644 src/jos3_yoshito_takahashi.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index 7e99e36..e1e44dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -*.pyc \ No newline at end of file +*.pyc +dist/ +build/ +jos3.egg-info/ \ No newline at end of file diff --git a/build/lib/jos3/__init__.py b/build/lib/jos3/__init__.py index abd4497..ee7e8db 100644 --- a/build/lib/jos3/__init__.py +++ b/build/lib/jos3/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- from jos3.jos3 import * -__version__ = '0.0.3' \ No newline at end of file +__version__ = '0.0.4' \ No newline at end of file diff --git a/dist/jos3-yoshito-takahashi-0.0.3.tar.gz b/dist/jos3-yoshito-takahashi-0.0.3.tar.gz deleted file mode 100644 index 181a5778898dbd06c87a51a253f2e6482e8ba657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22450 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

) 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 diff --git a/dist/jos3_yoshito_takahashi-0.0.3-py3-none-any.whl b/dist/jos3_yoshito_takahashi-0.0.3-py3-none-any.whl deleted file mode 100644 index 2012c42d61595a113e147ce5dd711a335897cf04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24192 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%0AF@Q=Q<6BvB@k8${HC66O%-?u6=6VQ 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 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ac495ec..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -numpy==1.19.4 \ No newline at end of file diff --git a/setup.py b/setup.py index 9642eef..736b8d7 100644 --- a/setup.py +++ b/setup.py @@ -11,13 +11,6 @@ except IOError: readme = '' -try: - with open("requirements.txt") as f: - requirements = f.read().splitlines() -except: - requirements = ["numpy"] - - # version here = os.path.dirname(os.path.abspath(__file__)) initpath = os.path.join(here, "src", 'jos3', '__init__.py') @@ -28,7 +21,7 @@ version = line setup( - name="jos3-yoshito-takahashi", + name="jos3", version=version, url='https://github.com/TanabeLab/JOS-3', author='Yoshito Takahashi', @@ -38,7 +31,7 @@ long_description_content_type='text/markdown', packages=find_packages("src"), package_dir={'': "src"}, - install_requires=requirements, + install_requires=["numpy"], license="MIT", classifiers=[ 'Operating System :: OS Independent', diff --git a/src/jos3.egg-info/PKG-INFO b/src/jos3.egg-info/PKG-INFO index 935ddb8..1163f3a 100644 --- a/src/jos3.egg-info/PKG-INFO +++ b/src/jos3.egg-info/PKG-INFO @@ -1,6 +1,6 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: jos3 -Version: 0.0.0 +Version: 0.0.4 Summary: Joint-thermoregulation system, JOS-3 Home-page: https://github.com/TanabeLab/JOS-3 Author: Yoshito Takahashi @@ -24,6 +24,10 @@ Description: # JOS-3 # Installation ```bash + pip install jos3 + + or + pip install git+https://github.com/TanabeLab/JOS-3.git ``` @@ -51,7 +55,7 @@ Description: # JOS-3 df.TskMean.plot() # Show the graph of mean skin temp. ``` - ![result](example/ex_result.png) + ![result](https://raw.githubusercontent.com/TanabeLab/JOS-3/master/example/ex_result.png) # Author @@ -73,3 +77,4 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: License :: OSI Approved :: MIT License +Description-Content-Type: text/markdown diff --git a/src/jos3.egg-info/requires.txt b/src/jos3.egg-info/requires.txt index 250d96c..cb648ee 100644 --- a/src/jos3.egg-info/requires.txt +++ b/src/jos3.egg-info/requires.txt @@ -1 +1 @@ -numpy==1.19.4 +numpy>=1.19.4 diff --git a/src/jos3/__init__.py b/src/jos3/__init__.py index abd4497..ee7e8db 100644 --- a/src/jos3/__init__.py +++ b/src/jos3/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- from jos3.jos3 import * -__version__ = '0.0.3' \ No newline at end of file +__version__ = '0.0.4' \ No newline at end of file diff --git a/src/jos3_yoshito_takahashi.egg-info/PKG-INFO b/src/jos3_yoshito_takahashi.egg-info/PKG-INFO deleted file mode 100644 index b0f610d..0000000 --- a/src/jos3_yoshito_takahashi.egg-info/PKG-INFO +++ /dev/null @@ -1,80 +0,0 @@ -Metadata-Version: 2.1 -Name: jos3-yoshito-takahashi -Version: 0.0.3 -Summary: Joint-thermoregulation system, JOS-3 -Home-page: https://github.com/TanabeLab/JOS-3 -Author: Yoshito Takahashi -Author-email: takahashiyoshito64@gmail.com -License: MIT -Description: # JOS-3 - - JOS-3 is a model to simulate a human thermoregulation. - - Its python package name is "jos3". - - The model has been derived from 65MN https://doi.org/10.1016/S0378-7788(02)00014-2 and JOS-2 https://doi.org/10.1016/j.buildenv.2013.04.013 model. - - Please cite us if you use this package : Y. Takahashi, A. Nomoto, S. Yoda, R. Hisayama, M. Ogata, Y. Ozeki, S. Tanabe,Thermoregulation Model JOS-3 with New Open Source Code, Energy & Buildings (2020), doi: https://doi.org/10.1016/j.enbuild.2020.110575 - - # Requirement - - * python 3 - * numpy - - # Installation - - ```bash - pip install jos3 - - or - - pip install git+https://github.com/TanabeLab/JOS-3.git - ``` - - # Usage - - ```python - - import pandas as pd - import jos3 - - model = jos3.JOS3(height=1.7, weight=60, age=30) # Builds a model - - # Set the first condition - model.To = 28 # Operative temperature [oC] - model.RH = 40 # Relative humidity [%] - model.Va = 0.2 # Air velocity [m/s] - model.PAR = 1.2 # Physical activity ratio [-] - model.simulate(60) # Exposre time = 60 [min] - - # Set the next condition - model.To = 20 # Changes only operative temperature - model.simulate(60) # Additional exposre time = 60 [min] - - df = pd.DataFrame(model.dict_results()) # Make pandas.DataFrame - df.TskMean.plot() # Show the graph of mean skin temp. - ``` - - ![result](https://raw.githubusercontent.com/TanabeLab/JOS-3/master/example/ex_result.png) - - # Author - - * Yoshito Takahashi - * Master's level graduate [Tanabe Laboratory, Waseda University](https://www.tanabe.arch.waseda.ac.jp/en/) - * takahashiyoshito64@gmail.com - - # License - jos3 is under [MIT license](https://en.wikipedia.org/wiki/MIT_License). - -Platform: UNKNOWN -Classifier: Operating System :: OS Independent -Classifier: Intended Audience :: Science/Research -Classifier: Intended Audience :: Education -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: License :: OSI Approved :: MIT License -Description-Content-Type: text/markdown diff --git a/src/jos3_yoshito_takahashi.egg-info/SOURCES.txt b/src/jos3_yoshito_takahashi.egg-info/SOURCES.txt deleted file mode 100644 index c398e00..0000000 --- a/src/jos3_yoshito_takahashi.egg-info/SOURCES.txt +++ /dev/null @@ -1,13 +0,0 @@ -README.md -setup.py -src/jos3/__init__.py -src/jos3/comfmod.py -src/jos3/construction.py -src/jos3/jos3.py -src/jos3/matrix.py -src/jos3/thermoregulation.py -src/jos3_yoshito_takahashi.egg-info/PKG-INFO -src/jos3_yoshito_takahashi.egg-info/SOURCES.txt -src/jos3_yoshito_takahashi.egg-info/dependency_links.txt -src/jos3_yoshito_takahashi.egg-info/requires.txt -src/jos3_yoshito_takahashi.egg-info/top_level.txt \ No newline at end of file diff --git a/src/jos3_yoshito_takahashi.egg-info/dependency_links.txt b/src/jos3_yoshito_takahashi.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/jos3_yoshito_takahashi.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/jos3_yoshito_takahashi.egg-info/requires.txt b/src/jos3_yoshito_takahashi.egg-info/requires.txt deleted file mode 100644 index 250d96c..0000000 --- a/src/jos3_yoshito_takahashi.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -numpy==1.19.4 diff --git a/src/jos3_yoshito_takahashi.egg-info/top_level.txt b/src/jos3_yoshito_takahashi.egg-info/top_level.txt deleted file mode 100644 index 7981563..0000000 --- a/src/jos3_yoshito_takahashi.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jos3 From eb4ef9ac4a4f6a883491267e2aebca509f86f9f7 Mon Sep 17 00:00:00 2001 From: yoshito takahashi Date: Sun, 15 Nov 2020 12:22:20 +0900 Subject: [PATCH 2/5] delete files --- build/lib/jos3/__init__.py | 3 - build/lib/jos3/comfmod.py | 108 --- build/lib/jos3/construction.py | 430 ------------ build/lib/jos3/jos3.py | 821 ----------------------- build/lib/jos3/matrix.py | 323 --------- build/lib/jos3/thermoregulation.py | 871 ------------------------- src/jos3.egg-info/PKG-INFO | 80 --- src/jos3.egg-info/SOURCES.txt | 13 - src/jos3.egg-info/dependency_links.txt | 1 - src/jos3.egg-info/requires.txt | 1 - src/jos3.egg-info/top_level.txt | 1 - 11 files changed, 2652 deletions(-) delete mode 100644 build/lib/jos3/__init__.py delete mode 100644 build/lib/jos3/comfmod.py delete mode 100644 build/lib/jos3/construction.py delete mode 100644 build/lib/jos3/jos3.py delete mode 100644 build/lib/jos3/matrix.py delete mode 100644 build/lib/jos3/thermoregulation.py delete mode 100644 src/jos3.egg-info/PKG-INFO delete mode 100644 src/jos3.egg-info/SOURCES.txt delete mode 100644 src/jos3.egg-info/dependency_links.txt delete mode 100644 src/jos3.egg-info/requires.txt delete mode 100644 src/jos3.egg-info/top_level.txt diff --git a/build/lib/jos3/__init__.py b/build/lib/jos3/__init__.py deleted file mode 100644 index ee7e8db..0000000 --- a/build/lib/jos3/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- -from jos3.jos3 import * -__version__ = '0.0.4' \ No newline at end of file diff --git a/build/lib/jos3/comfmod.py b/build/lib/jos3/comfmod.py deleted file mode 100644 index fb1bcc8..0000000 --- a/build/lib/jos3/comfmod.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -import math - -def pmv(ta, tr, va, rh, met, clo, wmet=0): - """ - Get PMV value based on the 2017 ASHRAE Handbook—Fundamentals, Chapter 9: - Thermal Comfort, Equations 63 - 68. - - Parameters - ---------- - ta : float, optional - Air temperature [oC] - tr : float, optional - Mean radiant temperature [oC] - va : float, optional - Air velocity [m/s] - rh : float, optional - Relative humidity [%] - met : float, optional - Metabolic rate [met] - clo : float, optional - Clothing insulation [clo] - wmet : float, optional - External work [met], optional. The default is 0. - - Returns - ------- - PMV value - """ - - met *= 58.15 # chage unit [met] to [W/m2] - wmet *= 58.15 # chage unit [met] to [W/m2] - mw = met - wmet # heat production [W/m2] - - if clo < 0.5: fcl = 1 + 0.2*clo # clothing area factor [-] - else: fcl = 1.05 + 0.1*clo - - antoine = lambda x: math.e**(16.6536-(4030.183/(x+235))) # antoine's formula - pa = antoine(ta) * rh/100 # vapor pressure [kPa] - rcl = 0.155 * clo # clothing thermal resistance [K.m2/W] - hcf = 12.1 * va**0.5 # forced convective heat transfer coefficience - - hc = hcf # initial convective heat transfer coefficience - tcl = (34 + ta) / 2 # initial clothing temp. - - # Cal. clothing temp. by iterative calculation method - for i in range(100): - # clothing temp. [oC] - tcliter = 35.7 - 0.028 * mw \ - - rcl * (39.6 * 10**(-9) * fcl * ((tcl+273)**4 - (tr+273)**4) \ - + fcl * hc * (tcl - ta)) # Eq.68 - # new clothin temp. [oC] - tcl = (tcliter + tcl) / 2 - - hcn = 2.38 * abs(tcl - ta)**0.25 # natural convective heat transfer coefficience - - # select forced or natural convection - if hcn > hcf: hc = hcf - else: hc = hcf - - # terminate iterative calculation - if abs(tcliter - tcl) < 0.0001: - break - - # tcl = 35.7 - 0.0275 * mw \ - # - rcl * (mw - 3.05 * (5.73 - 0.007 * mw - pa) \ - # - 0.42 * (mw - 58.15) - 0.0173 * met * (5.87 - pa) \ - # + 0.0014 * met * (34 - ta)) # Eq.64 - - # Heat loss of human body - rad = 3.96 * (10**(-8)) * fcl * ((tcl+273)**4 - (tr+273)**4) # by radiation - conv = fcl * hc * (tcl - ta) # by convction - diff = 3.05 * (5.73 - 0.007 * mw - pa) # by insensive perspiration - sweat = max(0, 0.42 * (mw - 58.15)) # by sweating - res = 0.0173 * met * (5.87 - pa) + 0.0014 * met * (34 - ta) # by repiration - load = mw - rad - conv - diff - sweat - res - - pmv_value = (0.303 * math.exp(-0.036 * met) + 0.028) * load # Eq.63 - - return pmv_value - -def preferred_temp(va=0.1, rh=50, met=1, clo=0): - """ - Calculate operative temperature [oC] at PMV=0. - - Parameters - ---------- - va : float, optional - Air velocity [m/s]. The default is 0.1. - rh : float, optional - Relative humidity [%]. The default is 50. - met : float, optional - Metabolic rate [met]. The default is 1. - clo : float, optional - Clothing insulation [clo]. The default is 0. - - Returns - ------- - to : float - Operative temperature [oC]. - """ - - to = 28 # initial temp - for i in range(100): - vpmv = pmv(to, to, va, rh, met, clo) - if abs(vpmv) < 0.001: break - else: to = to - vpmv/3 - return to \ No newline at end of file diff --git a/build/lib/jos3/construction.py b/build/lib/jos3/construction.py deleted file mode 100644 index 5ce0df2..0000000 --- a/build/lib/jos3/construction.py +++ /dev/null @@ -1,430 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np - -# Import from relative path -try: - from .matrix import NUM_NODES, IDICT, BODY_NAMES -# Import from absolute path -# These codes are for debugging -except ImportError: - from jos3.matrix import NUM_NODES, IDICT, BODY_NAMES - - -_BSAst = np.array([ - 0.110, 0.029, 0.175, 0.161, 0.221, - 0.096, 0.063, 0.050, 0.096, 0.063, 0.050, - 0.209, 0.112, 0.056, 0.209, 0.112, 0.056,]) - -dubois = lambda height, weight: 0.2025 * (height ** 0.725) * (weight ** 0.425) -takahira = lambda height, weight: 0.2042 * (height ** 0.725) * (weight ** 0.425) -fujimoto = lambda height, weight: 0.1882 * (height ** 0.663) * (weight ** 0.444) -kurazumi = lambda height, weight: 0.2440 * (height ** 0.693) * (weight ** 0.383) - -def body_surface_area(height=1.72, weight=74.43, equation="dubois",): - """ - Calculate body surface area (BSA) [m2]. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - - Returns - ------- - bsa : float - Body surface area (BSA) [m2]. - """ - - if equation == "dubois": - bsa = dubois(height, weight) - elif equation == "takahira": - bsa = takahira(height, weight) - elif equation == "fujimoto": - bsa = fujimoto(height, weight) - elif equation == "kurazumi": - bsa = kurazumi(height, weight) - - return bsa - - -def bsa_rate(height=1.72, weight=74.43, equation="dubois",): - """ - Calculate the rate of BSA to standard body. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - - Returns - ------- - bsa_rate : float - The ratio of BSA to the standard body [-]. - """ - bsa_all = body_surface_area(height, weight, equation,) - bsa_rate = bsa_all/_BSAst.sum() # The BSA ratio to the standard body (1.87m2) - return bsa_rate - - -def localbsa(height=1.72, weight=74.43, equation="dubois",): - """ - Calculate local body surface area (BSA) [m2]. - - The local body surface area has been derived from 65MN. - The head have been devided to head and neck based on Smith's model. - Head = 0.1396*0.1117/0.1414 (65MN_Head * Smith_Head / Smith_Head+Neck) - Neck = 0.1396*0.0297/0.1414 (65MN_Head * Smith_Neck / Smith_Head+Neck) - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - - Returns - ------- - localbsa : ndarray(17,) - Local body surface area (BSA) [m2]. - bsa_rate : float - The ratio of BSA to the standard body [-]. - - """ - _bsa_rate = bsa_rate(height, weight, equation,) # The BSA ratio to the standard body (1.87m2) - bsa = _BSAst * _bsa_rate - return bsa - - -def weight_rate(weight=74.43,): - """ - Calculate the ratio of the body weitht to the standard body (74.43 kg). - - The standard values of local body weights are as below. - weight_local = np.array([ - 3.18, 0.84, 12.4, 11.03, 17.57, - 2.16, 1.37, 0.34, 2.16, 1.37, 0.34, - 7.01, 3.34, 0.48, 7.01, 3.34, 0.48]) - The data have been derived from 65MN. - The weight of neck is extracted from the weight of 65MN's head based on - the local body surface area of Smith's model. - - Parameters - ---------- - weight : float, optional - The body weight [kg]. The default is 74.43. - - Returns - ------- - weight_rate : float - The ratio of the body weight to the standard body (74.43 kg). - weight_rate = weight / 74.43 - """ - rate = weight / 74.43 - return rate - - -def bfb_rate(height=1.72, weight=74.43, equation="dubois", age=20, ci=2.59,): - """ - Calculate the ratio of basal blood flow (BFB) of the standard body (290 L/h). - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - ci : float, optional - Cardiac index [L/min/㎡]. The default is 2.59. - - Returns - ------- - bfb_rate : float - Basal blood flow rate. - """ - - ci *= 60 # Change unit [L/min/㎡] to [L/h/㎡] - - # Decrease of BFB by aging - if age < 50: - ci *= 1 - elif age < 60: - ci *= 0.85 - elif age < 70: - ci *= 0.75 - else: # age >= 70 - ci *= 0.7 - - bfb_all = ci * bsa_rate(height, weight, equation) * _BSAst.sum() # [L/h] - _bfb_rate = bfb_all / 290 - return _bfb_rate - - -def conductance(height=1.72, weight=74.43, equation="dubois", fat=15,): - """ - Calculate thermal conductance between layers [W/K]. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - fat : float, optional - Body fat rate [%]. The default is 15. - - Returns - ------- - conductance : numpy.ndarray - Thermal conductance between layers [W/K]. - The shape is (NUM_NODES, NUM_NODES). - """ - - if fat < 12.5: - cdt_cr_sk = np.array([ - 1.341, 0.930, 1.879, 1.729, 2.370, - 1.557, 1.018, 2.210, 1.557, 1.018, 2.210, - 2.565, 1.378, 3.404, 2.565, 1.378, 3.404 - ]) - elif fat < 17.5: - cdt_cr_sk = np.array([ - 1.311, 0.909, 1.785, 1.643, 2.251, - 1.501, 0.982, 2.183, 1.501, 0.982, 2.183, - 2.468, 1.326, 3.370, 2.468, 1.326, 3.370 - ]) - elif fat < 22.5: - cdt_cr_sk = np.array([ - 1.282, 0.889, 1.698, 1.563, 2.142, - 1.448, 0.947, 2.156, 1.448, 0.947, 2.156, - 2.375, 1.276, 3.337, 2.375, 1.276, 3.337 - ]) - elif fat < 27.5: - cdt_cr_sk = np.array([ - 1.255, 0.870, 1.618, 1.488, 2.040, - 1.396, 0.913, 2.130, 1.396, 0.913, 2.130, - 2.285, 1.227, 3.304, 2.285, 1.227, 3.304 - ]) - else: #fat >= 27.5 - cdt_cr_sk = np.array([ - 1.227, 0.852, 1.542, 1.419, 1.945, - 1.346, 0.880, 1.945, 1.346, 0.880, 1.945, - 2.198, 1.181, 3.271, 2.198, 1.181, 3.271 - ]) - - cdt_cr_ms = np.zeros(17) # core to muscle [W/K] - cdt_ms_fat = np.zeros(17) # muscle to fat [W/K] - cdt_fat_sk = np.zeros(17) # fat to skin [W/K] - - # Head and Pelvis consists of 65MN's conductances - cdt_cr_ms[0] = 1.601 # Head - cdt_ms_fat[0] = 13.222 - cdt_fat_sk[0] = 16.008 - cdt_cr_ms[4] = 3.0813 # Pelvis - cdt_ms_fat[4] = 0.3738 - cdt_fat_sk[4] = 41.4954 - - # vessel to core - # The shape is a cylinder. - # It is assumed that the inner is vascular radius, 2.5mm and the outer is - # stolwijk's core radius. - # The heat transer coefficient of the core is assumed as the Michel's - # counter-flow model 0.66816 [W/(m・K)]. - cdt_ves_cr = np.array([ - 0, 0, 0, 0, 0, - 0.586, 0.383, 1.534, 0.586, 0.383, 1.534, - 0.810, 0.435, 1.816, 0.810, 0.435, 1.816,]) - #superficial vein to skin - cdt_sfv_sk = np.array([ - 0, 0, 0, 0, 0, - 57.735, 37.768, 16.634, 57.735, 37.768, 16.634, - 102.012, 54.784, 24.277, 102.012, 54.784, 24.277,]) - - # art to vein (counter-flow) [W/K] - # The data has been derived Mitchell's model. - # THe values = 15.869 [W/(m・K)] * the segment lenght [m] - cdt_art_vein = np.array([ - 0, 0, 0, 0, 0, - 0.537, 0.351, 0.762, 0.537, 0.351, 0.762, - 0.826, 0.444, 0.992, 0.826, 0.444, 0.992 - ]) - - # Changes values by body size based on the standard body. - wr = weight_rate(weight) - bsar = bsa_rate(height, weight, equation) - # Head, Neck (Sphere shape) - cdt_cr_sk[:2] *= wr/bsar - cdt_cr_ms[:2] *= wr/bsar - cdt_ms_fat[:2] *= wr/bsar - cdt_fat_sk[:2] *= wr/bsar - cdt_ves_cr[:2] *= wr/bsar - cdt_sfv_sk[:2] *= wr/bsar - cdt_art_vein[:2] *= wr/bsar - # Others (Cylinder shape) - cdt_cr_sk[2:] *= bsar**2/wr - cdt_cr_ms[2:] *= bsar**2/wr - cdt_ms_fat[2:] *= bsar**2/wr - cdt_fat_sk[2:] *= bsar**2/wr - cdt_ves_cr[2:] *= bsar**2/wr - cdt_sfv_sk[2:] *= bsar**2/wr - cdt_art_vein[2:] *= bsar**2/wr - - cdt_whole = np.zeros((NUM_NODES, NUM_NODES)) - for i, bn in enumerate(BODY_NAMES): - # Dictionary of indecies in each body segment - # key = layer name, value = index of matrix - indexof = IDICT[bn] - - # Common - cdt_whole[indexof["artery"], indexof["vein"]] = cdt_art_vein[i] # art to vein - cdt_whole[indexof["artery"], indexof["core"]] = cdt_ves_cr[i] # art to cr - cdt_whole[indexof["vein"], indexof["core"]] = cdt_ves_cr[i] # vein to cr - - # Only limbs - if i >= 5: - cdt_whole[indexof["sfvein"], indexof["skin"]] = cdt_sfv_sk[i] # sfv to sk - - # If the segment has a muscle or fat layer - if not indexof["muscle"] is None: # or not indexof["fat"] is None - cdt_whole[indexof["core"], indexof["muscle"]] = cdt_cr_ms[i] # cr to ms - cdt_whole[indexof["muscle"], indexof["fat"]] = cdt_ms_fat[i] # ms to fat - cdt_whole[indexof["fat"], indexof["skin"]] = cdt_fat_sk[i] # fat to sk - - else: - cdt_whole[indexof["core"], indexof["skin"]] = cdt_cr_sk[i] # cr to sk - - # Creates a symmetrical matrix - cdt_whole = cdt_whole + cdt_whole.T - - return cdt_whole.copy() - - -def capacity(height=1.72, weight=74.43, equation="dubois", age=20, ci=2.59): - """ - Calculate the thermal capacity [J/K]. - - The values of vascular and central blood capacity have been derived from - Yokoyama's model. - The specific heat of blood is assumed as 1.0 [kcal/L.K]. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - ci : float, optional - Cardiac index [L/min/㎡]. The default is 2.59. - - Returns - ------- - capacity : numpy.ndarray. - Thermal capacity [W/K]. - The shape is (NUM_NODES). - """ - # artery [Wh/K] - cap_art = np.array([ - 0.096, 0.025, 0.12, 0.111, 0.265, - 0.0186, 0.0091, 0.0044, 0.0186, 0.0091, 0.0044, - 0.0813, 0.04, 0.0103, 0.0813, 0.04, 0.0103,]) - - # vein [Wh/K] - cap_vein = np.array([ - 0.321, 0.085, 0.424, 0.39, 0.832, - 0.046, 0.024, 0.01, 0.046, 0.024, 0.01, - 0.207, 0.1, 0.024, 0.207, 0.1, 0.024,]) - - # superficial vein [Wh/K] - cap_sfv = np.array([ - 0, 0, 0, 0, 0, - 0.025, 0.015, 0.011, 0.025, 0.015, 0.011, - 0.074, 0.05, 0.021, 0.074, 0.05, 0.021,]) - - # central blood [Wh/K] - cap_cb = 1.999 - - # core [Wh/K] - cap_cr = np.array([ - 1.7229, 0.564, 10.2975, 9.3935, 13.834, - 1.6994, 1.1209, 0.1536, 1.6994, 1.1209, 0.1536, - 5.3117, 2.867, 0.2097, 5.3117, 2.867, 0.2097,]) - - # muscle [Wh/K] - cap_ms = np.array([ - 0.305, 0.0, 0.0, 0.0, 7.409, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - - # fat [Wh/K] - cap_fat = np.array([ - 0.203, 0.0, 0.0, 0.0, 1.947, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - - # skin [Wh/K] - cap_sk = np.array([ - 0.1885, 0.058, 0.441, 0.406, 0.556, - 0.126, 0.084, 0.088, 0.126, 0.084, 0.088, - 0.334, 0.169, 0.107, 0.334, 0.169, 0.107,]) - - # Changes the values based on the standard body - bfbr = bfb_rate(height, weight, equation, age, ci) - wr = weight_rate(weight) - cap_art *= bfbr - cap_vein *= bfbr - cap_sfv *= bfbr - cap_cb *= bfbr - cap_cr *= wr - cap_ms *= wr - cap_fat *= wr - cap_sk *= wr - - cap_whole = np.zeros(NUM_NODES) - cap_whole[0] = cap_cb - - for i, bn in enumerate(BODY_NAMES): - # Dictionary of indecies in each body segment - # key = layer name, value = index of matrix - indexof = IDICT[bn] - - # Common - cap_whole[indexof["artery"]] = cap_art[i] - cap_whole[indexof["vein"]] = cap_vein[i] - cap_whole[indexof["core"]] = cap_cr[i] - cap_whole[indexof["skin"]] = cap_sk[i] - - # Only limbs - if i >= 5: - cap_whole[indexof["sfvein"]] = cap_sfv[i] - - # If the segment has a muscle or fat layer - if not indexof["muscle"] is None: # or not indexof["fat"] is None - cap_whole[indexof["muscle"]] = cap_ms[i] - cap_whole[indexof["fat"]] = cap_fat[i] - - cap_whole *= 3600 # Changes unit [Wh/K] to [J/K] - return cap_whole \ No newline at end of file diff --git a/build/lib/jos3/jos3.py b/build/lib/jos3/jos3.py deleted file mode 100644 index 347a156..0000000 --- a/build/lib/jos3/jos3.py +++ /dev/null @@ -1,821 +0,0 @@ -# -*- coding: utf-8 -*- -import csv -import datetime as dt -import os - -import numpy as np -# Import from relative path -try: - from . import thermoregulation as threg - from . import matrix - from .matrix import NUM_NODES, INDEX, VINDEX, BODY_NAMES - from .comfmod import preferred_temp - from . import construction as cons - from .construction import _BSAst -# Import from absolute path -# These codes are for debugging -except ImportError: - from jos3 import thermoregulation as threg - from jos3 import matrix - from jos3.matrix import NUM_NODES, INDEX, VINDEX, BODY_NAMES - from jos3.comfmod import preferred_temp - from jos3 import construction as cons - from jos3.construction import _BSAst - - -class JOS3(): - def __init__( - self, - height=1.72, - weight=74.43, - fat=15, - age=20, - sex="male", - ci=2.59, - bmr_equation="harris-benedict", - bsa_equation="dubois", - ex_output=None, - ): - """ - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - fat : float, optional - Fat rte [%]. The default is 15. - age : int, optional - Age [years]. The default is 20. - sex : str, optional - Sex ("male" or "female"). The default is "male". - ci : float, optional - Cardiac index [L/min/m2]. The default is 2.6432. - bmr_equation : str, optional - Choose a BMR equation. The default is "harris-benedict". - bsa_equation : str, optional - Choose a BSA equation. The default is "dubois". - ex_output : None, list or "all", optional - Extra output parameters. If "all", all parameters are output. - The default is None. - - Returns - ------- - None. - """ - - - self._height = height - self._weight = weight - self._fat = fat - self._sex = sex - self._age = age - self._ci = ci - self._bmr_equation = bmr_equation - self._bsa_equation = bsa_equation - self._ex_output = ex_output - - # Body surface area [m2] - self._bsa_rate = cons.bsa_rate(height, weight, bsa_equation,) - # Body surface area rate [-] - self._bsa = cons.localbsa(height, weight, bsa_equation,) - # Basal blood flow rate [-] - self._bfb_rate = cons.bfb_rate(height, weight, bsa_equation, age, ci) - # Thermal conductance [W/K] - self._cdt = cons.conductance(height, weight, bsa_equation, fat,) - # Thermal capacity [J/K] - self._cap = cons.capacity(height, weight, bsa_equation, age, ci) - - # Set point temp [oC] - self.setpt_cr = np.ones(17)*37 # core - self.setpt_sk = np.ones(17)*34 # skin - - # Initial body temp [oC] - self._bodytemp = np.ones(NUM_NODES) * 36 - - # Default values of input condition - self._ta = np.ones(17)*28.8 - self._tr = np.ones(17)*28.8 - self._rh = np.ones(17)*50 - self._va = np.ones(17)*0.1 - self._clo = np.zeros(17) - self._iclo = np.ones(17) * 0.45 - self._par = 1.25 # Physical activity ratio - self._posture = "standing" - self._hc = None - self._hr = None - self.ex_q = np.zeros(NUM_NODES) - self._t = dt.timedelta(0) # Elapsed time - self._cycle = 0 # Cycle time - self.model_name = "JOS3" - self.options = { - "nonshivering_thermogenesis": True, - "cold_acclimated": False, - "shivering_threshold": False, - "limit_dshiv/dt": False, - "bat_positive": False, - "ava_zero": False, - "shivering": False,} - threg.PRE_SHIV = 0 # reset - self._history = [] - self._t = dt.timedelta(0) # Elapsed time - self._cycle = 0 # Cycle time - - # Reset setpoint temperature - dictout = self.reset_setpt() - self._history.append(dictout) # Save the last model parameters - - - def reset_setpt(self): - """ - Reset setpoint temperature by steady state calculation. - Be careful, input parameters (Ta, Tr, RH, Va, Icl, PAR) and body - tempertures are also resetted. - - Returns - ------- - Parameters of JOS-3 : dict - """ - # Set operative temperature under PMV=0 environment - # Metabolic rate at PAR = 1.25 - # 1 met = 58.15 W/m2 - met = self.BMR * 1.25 / 58.15 / self.BSA.sum() # [met] - self.To = preferred_temp(met=met) - self.RH = 50 - self.Va = 0.1 - self.Icl = 0 - self.PAR = 1.25 - - # Steady-calculation - self.options["ava_zero"] = True - for t in range(10): - dictout = self._run(dtime=60000, passive=True) - - # Set new setpoint temperatures - self.setpt_cr = self.Tcr - self.setpt_sk = self.Tsk - self.options["ava_zero"] = False - - return dictout - - - def simulate(self, times, dtime=60, output=True): - """ - Execute JOS3 model. - - Parameters - ---------- - times : int - Number of loops of a simulation - dtime : int or float, optional - Time delta [sec]. The default is 60. - output : bool, optional - If you don't record paramters, set False. The default is True. - - Returns - ------- - None. - - """ - for t in range(times): - self._t += dt.timedelta(0, dtime) - self._cycle += 1 - dictdata = self._run(dtime=dtime, output=output) - if output: - # self.history.append(dictdata) - self._history.append(dictdata) - - - def _run(self, dtime=60, passive=False, output=True): - """ - Run a model for a once and get model parameters. - - Parameters - ---------- - dtime : int or float, optional - Time delta [sec]. The default is 60. - passive : bool, optional - If you run a passive model, set True. The default is False. - output : bool, optional - If you don't need paramters, set False. The default is True. - - Returns - ------- - dictout : dictionary - Output parameters. - - """ - tcr = self.Tcr - tsk = self.Tsk - - # Convective and radiative heat transfer coefficient [W/K.m2] - hc = threg.fixed_hc(threg.conv_coef(self._posture, self._va, self._ta, tsk,), self._va) - hr = threg.fixed_hr(threg.rad_coef(self._posture,)) - # Manual setting - if self._hc is not None: - hc = self._hc - if self._hr is not None: - hr = self._hr - - # Operarive temp. [oC], heat and evaporative heat resistance [K/W], [kPa/W] - to = threg.operative_temp(self._ta, self._tr, hc, hr,) - r_t = threg.dry_r(hc, hr, self._clo) - r_et = threg.wet_r(hc, self._clo, self._iclo) - - #------------------------------------------------------------------ - # Thermoregulation - #------------------------------------------------------------------ - # Setpoint temperature of thermoregulation - if passive: - setpt_cr = tcr.copy() - setpt_sk = tsk.copy() - else: - setpt_cr = self.setpt_cr.copy() - setpt_sk = self.setpt_sk.copy() - # Difference between setpoint and body temperatures - err_cr = tcr - setpt_cr - err_sk = tsk - setpt_sk - - # Skinwettedness [-], Esk, Emax, Esw [W] - wet, e_sk, e_max, e_sweat = threg.evaporation( - err_cr, err_sk, tsk, - self._ta, self._rh, r_et, - self._height, self._weight, self._bsa_equation, self._age) - - # Skin blood flow, basal skin blood flow [L/h] - bf_sk = threg.skin_bloodflow(err_cr, err_sk, - self._height, self._weight, self._bsa_equation, self._age, self._ci) - - # Hand, Foot AVA blood flow [L/h] - bf_ava_hand, bf_ava_foot = threg.ava_bloodflow(err_cr, err_sk, - self._height, self._weight, self._bsa_equation, self._age, self._ci) - if self.options["ava_zero"] and passive: - bf_ava_hand = 0 - bf_ava_foot = 0 - - # Thermogenesis by shivering [W] - mshiv = threg.shivering( - err_cr, err_sk, tcr, tsk, - self._height, self._weight, self._bsa_equation, self._age, self._sex, dtime, - self.options,) - - # Thermogenesis by non-shivering [W] - if self.options["nonshivering_thermogenesis"]: - mnst = threg.nonshivering(err_cr, err_sk, - self._height, self._weight, self._bsa_equation, self._age, - self.options["cold_acclimated"], self.options["bat_positive"]) - else: # not consider NST - mnst = np.zeros(17) - - #------------------------------------------------------------------ - # Thermogenesis - #------------------------------------------------------------------ - # Basal thermogenesis [W] - mbase = threg.local_mbase( - self._height, self._weight, self._age, self._sex, - self._bmr_equation,) - mbase_all = sum([m.sum() for m in mbase]) - - # Thermogenesis by work [W] - mwork = threg.local_mwork(mbase_all, self._par) - - # Sum of thermogenesis in core, muscle, fat, skin [W] - qcr, qms, qfat, qsk = threg.sum_m(mbase, mwork, mshiv, mnst,) - qall = qcr.sum() + qms.sum() + qfat.sum() + qsk.sum() - - #------------------------------------------------------------------ - # Other - #------------------------------------------------------------------ - # Blood flow in core, muscle, fat [L/h] - bf_cr, bf_ms, bf_fat = threg.crmsfat_bloodflow(mwork, mshiv, - self._height, self._weight, self._bsa_equation, self._age, self._ci) - - # Heat loss by respiratory - p_a = threg.antoine(self._ta)*self._rh/100 - res_sh, res_lh = threg.resp_heatloss(self._ta[0], p_a[0], qall) - - # Sensible heat loss [W] - shlsk = (tsk - to) / r_t * self._bsa - - # Cardiac output [L/h] - co = threg.sum_bf( - bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot) - - # Weight loss rate by evaporation [g/sec] - wlesk = (e_sweat + 0.06*e_max) / 2418 - wleres = res_lh / 2418 - - #------------------------------------------------------------------ - # Matrix - #------------------------------------------------------------------ - # Matrix A - # (83, 83,) ndarray - bf_art, bf_vein = matrix.vessel_bloodflow( - bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot - ) - bf_local = matrix.localarr( - bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot - ) - bf_whole = matrix.wholebody( - bf_art, bf_vein, bf_ava_hand, bf_ava_foot - ) - arr_bf = np.zeros((NUM_NODES,NUM_NODES)) - arr_bf += bf_local - arr_bf += bf_whole - - arr_bf /= self._cap.reshape((NUM_NODES,1)) # Change unit [W/K] to [/sec] - arr_bf *= dtime # Change unit [/sec] to [-] - - arr_cdt = self._cdt.copy() - arr_cdt /= self._cap.reshape((NUM_NODES,1)) # Change unit [W/K] to [/sec] - arr_cdt *= dtime # Change unit [/sec] to [-] - - arrB = np.zeros(NUM_NODES) - arrB[INDEX["skin"]] += 1/r_t*self._bsa - arrB /= self._cap # Change unit [W/K] to [/sec] - arrB *= dtime # Change unit [/sec] to [-] - - arrA_tria = -(arr_cdt + arr_bf) - - arrA_dia = arr_cdt + arr_bf - arrA_dia = arrA_dia.sum(axis=1) + arrB - arrA_dia = np.diag(arrA_dia) - arrA_dia += np.eye(NUM_NODES) - - arrA = arrA_tria + arrA_dia - arrA_inv = np.linalg.inv(arrA) - - # Matrix Q [W] / [J/K] * [sec] = [-] - # Thermogensis - arrQ = np.zeros(NUM_NODES) - arrQ[INDEX["core"]] += qcr - arrQ[INDEX["muscle"]] += qms[VINDEX["muscle"]] - arrQ[INDEX["fat"]] += qfat[VINDEX["fat"]] - arrQ[INDEX["skin"]] += qsk - - # Respiratory [W] - arrQ[INDEX["core"][2]] -= res_sh + res_lh #Chest core - - # Sweating [W] - arrQ[INDEX["skin"]] -= e_sk - - # Extra heat gain [W] - arrQ += self.ex_q.copy() - - arrQ /= self._cap # Change unit [W]/[J/K] to [K/sec] - arrQ *= dtime # Change unit [K/sec] to [K] - - # Boundary batrix [℃] - arr_to = np.zeros(NUM_NODES) - arr_to[INDEX["skin"]] += to - - # all - arr = self._bodytemp + arrB * arr_to + arrQ - - #------------------------------------------------------------------ - # New body temp. [oC] - #------------------------------------------------------------------ - self._bodytemp = np.dot(arrA_inv, arr) - - #------------------------------------------------------------------ - # Output paramters - #------------------------------------------------------------------ - dictout = {} - if output: # Default output - dictout["CycleTime"] = self._cycle - dictout["ModTime"] = self._t - dictout["dt"] = dtime - dictout["TskMean"] = self.TskMean - dictout["Tsk"] = self.Tsk - dictout["Tcr"] = self.Tcr - dictout["WetMean"] = np.average(wet, weights=_BSAst) - dictout["Wet"] = wet - dictout["Wle"] = (wlesk.sum() + wleres) - dictout["CO"] = co - dictout["Met"] = qall - dictout["Met"] = qall - dictout["RES"] = res_sh + res_lh - dictout["THLsk"] = shlsk + e_sk - - - detailout = {} - if self._ex_output: - detailout["Name"] = self.model_name - detailout["Height"] = self._height - detailout["Weight"] = self._weight - detailout["BSA"] = self._bsa - detailout["Fat"] = self._fat - detailout["Sex"] = self._sex - detailout["Age"] = self._age - detailout["Setptcr"] = setpt_cr - detailout["Setptcr"] = setpt_sk - detailout["Tcb"] = self.Tcb - detailout["Tar"] = self.Tar - detailout["Tve"] = self.Tve - detailout["Tsve"] = self.Tsve - detailout["Tms"] = self.Tms - detailout["Tfat"] = self.Tfat - detailout["To"] = to - detailout["Rt"] = r_t - detailout["Ret"] = r_et - detailout["Ta"] = self._ta.copy() - detailout["Tr"] = self._tr.copy() - detailout["RH"] = self._rh.copy() - detailout["Va"] = self._va.copy() - detailout["PAR"] = self._par - detailout["Icl"] = self._clo.copy() - detailout["Esk"] = e_sk - detailout["Emax"] = e_max - detailout["Esweat"] = e_sweat - detailout["BFcr"] = bf_cr - detailout["BFms"] = bf_ms[VINDEX["muscle"]] - detailout["BFfat"] = bf_fat[VINDEX["fat"]] - detailout["BFsk"] = bf_sk - detailout["BFava_hand"] = bf_ava_hand - detailout["BFava_foot"] = bf_ava_foot - detailout["Mbasecr"] = mbase[0] - detailout["Mbasems"] = mbase[1][VINDEX["muscle"]] - detailout["Mbasefat"] = mbase[2][VINDEX["fat"]] - detailout["Mbasesk"] = mbase[3] - detailout["Mwork"] = mwork - detailout["Mshiv"] = mshiv - detailout["Mnst"] = mnst - detailout["Qcr"] = qcr - detailout["Qms"] = qms[VINDEX["muscle"]] - detailout["Qfat"] = qfat[VINDEX["fat"]] - detailout["Qsk"] = qsk - dictout["SHLsk"] = shlsk - dictout["LHLsk"] = e_sk - dictout["RESsh"] = res_sh - dictout["RESlh"] = res_lh - - - if self._ex_output == "all": - dictout.update(detailout) - elif isinstance(self._ex_output, list): # if ex_out type is list - outkeys = detailout.keys() - for key in self._ex_output: - if key in outkeys: - dictout[key] = detailout[key] - return dictout - - - def dict_results(self): - """ - Get results as pandas.DataFrame format. - - Returns - ------- - pandas.DataFrame - """ - if not self._history: - print("The model has no data.") - return None - - def check_word_contain(word, *args): - """ - Check if word contains *args. - """ - boolfilter = False - for arg in args: - if arg in word: - boolfilter = True - return boolfilter - - # Set column titles - # If the values are iter, add the body names as suffix words. - # If the values are not iter and the single value data, convert it to iter. - key2keys = {} # Column keys - for key, value in self._history[0].items(): - try: - length = len(value) - if isinstance(value, str): - keys = [key] # str is iter. Convert to list without suffix - elif check_word_contain(key, "sve", "sfv", "superficialvein"): - keys = [key+BODY_NAMES[i] for i in VINDEX["sfvein"]] - elif check_word_contain(key, "ms", "muscle"): - keys = [key+BODY_NAMES[i] for i in VINDEX["muscle"]] - elif check_word_contain(key, "fat"): - keys = [key+BODY_NAMES[i] for i in VINDEX["fat"]] - elif length == 17: # if data contains 17 values - keys = [key+bn for bn in BODY_NAMES] - else: - keys = [key+BODY_NAMES[i] for i in range(length)] - except TypeError: # if the value is not iter. - keys= [key] # convert to iter - key2keys.update({key: keys}) - - data = [] - for i, dictout in enumerate(self._history): - row = {} - for key, value in dictout.items(): - keys = key2keys[key] - if len(keys) == 1: - values = [value] # make list if value is not iter - else: - values = value - row.update(dict(zip(keys, values))) - data.append(row) - - outdict = dict(zip(data[0].keys(), [[] for i in range(len(data[0].keys()))])) - for row in data: - for k in data[0].keys(): - outdict[k].append(row[k]) - return outdict - - - def to_csv(self, path=None, folder=None, unit=True): - """ - Export results with "units" as csv format. - If you want to know units of parametes, use this method. - - Parameters - ---------- - path : str, optional - Output path. If you don't use the default file name, set a name. - The default is None. - folder : str, optional - Output folder. If you use the default file name, set a only folder path. - The default is None. - unit : bool, optional - Writes unit in csv file. The default is True. - """ - if path is None: - nowtime = dt.datetime.now().strftime("%Y%m%d-%H%M%S") - path = "{}_{}.csv".format(self.model_name, nowtime) - if folder: - os.makedirs(folder, exist_ok=True) - path = folder + os.sep + path - elif not ((path[-4:] == ".csv") or (path[-4:] == ".txt")): - path += ".csv" - dictout = self.dict_results() - - columns = [k for k in dictout.keys()] - units = [] - for col in columns: - if "RES" in col[:3]: - units.append("[W]") - elif "Setpt" in col[:5]: - units.append("[oC]") - elif "RH" in col[:2]: - units.append("[%]") - elif "Va" in col[:2]: - units.append("[m/s]") - elif "Met" in col[:3]: - units.append("[W]") - elif "HL" in col[1:3]: - units.append("[W]") - elif "CO" in col[:2]: - units.append("[L/h]") - elif "T" in col[:1]: - units.append("[oC]") - elif "BF" in col[:2]: - units.append("[L/h]") - elif "M" in col[:1]: - units.append("[W]") - elif "Q" in col[:1]: - units.append("[W]") - elif "R" in col[:1]: - units.append("[K.m2/W]") - elif "E" in col[:1]: - units.append("[W]") - elif "dt" == col: - units.append("[sec]") - else: - units.append("") - - with open(path, "wt", newline="") as f: - writer = csv.writer(f) - writer.writerow(list(columns)) - writer.writerow(units) - for i in range(len(dictout["CycleTime"])): - row = [] - for k in columns: - row.append(dictout[k][i]) - writer.writerow(row) - - - #-------------------------------------------------------------------------- - # Setter - #-------------------------------------------------------------------------- - def set_ex_q(self, tissue, value): - """ - Set extra heat gain by tissue name. - - Parameters - ---------- - tissue : str - Tissue name. "core", "skin", or "artery".... If you set value to - Head muscle and other segment's core, set "all_muscle". - value : int, float, array - Heat gain [W] - - Returns - ------- - array - Current extra heat gain of model. - """ - self.ex_q[INDEX[tissue]] = value - return self.ex_q - - - #-------------------------------------------------------------------------- - # Setter & getter - #-------------------------------------------------------------------------- - - @property - def Ta(self): - return self._ta - @Ta.setter - def Ta(self, inp): - self._ta = _to17array(inp) - - @property - def Tr(self): - return self._tr - @Tr.setter - def Tr(self, inp): - self._tr = _to17array(inp) - - @property - def To(self): - hc = threg.fixed_hc(threg.conv_coef(self._posture, self._va, self._ta, self.Tsk,), self._va) - hr = threg.fixed_hr(threg.rad_coef(self._posture,)) - to = threg.operative_temp(self._ta, self._tr, hc, hr,) - return to - @To.setter - def To(self, inp): - self._ta = _to17array(inp) - self._tr = _to17array(inp) - - @property - def RH(self): - return self._rh - @RH.setter - def RH(self, inp): - self._rh = _to17array(inp) - - @property - def Va(self): - return self._va - @Va.setter - def Va(self, inp): - self._va = _to17array(inp) - - @property - def posture(self): - return self._posture - @posture.setter - def posture(self, inp): - if inp == 0: - self._posture = "standing" - elif inp == 1: - self._posture = "sitting" - elif inp == 2: - self._posture = "lying" - elif type(inp) == str: - if inp.lower() == "standing": - self._posture = "standing" - elif inp.lower() in ["sitting", "sedentary"]: - self._posture = "sitting" - elif inp.lower() in ["lying", "supine"]: - self._posture = "lying" - else: - self._posture = "standing" - print('posture must be 0="standing", 1="sitting" or 2="lying".') - print('posture was set "standing".') - - @property - def Icl(self): - return self._clo - @Icl.setter - def Icl(self, inp): - self._clo = _to17array(inp) - - @property - def PAR(self): - return self._par - @PAR.setter - def PAR(self, inp): - self._par = inp - - @property - def bodytemp(self): - return self._bodytemp - @bodytemp.setter - def bodytemp(self, inp): - self._bodytemp = inp.copy() - - #-------------------------------------------------------------------------- - # Getter - #-------------------------------------------------------------------------- - - @property - def BSA(self): - return self._bsa.copy() - - @property - def Rt(self): - hc = threg.fixed_hc(threg.conv_coef(self._posture, self._va, self._ta, self.Tsk,), self._va) - hr = threg.fixed_hr(threg.rad_coef(self._posture,)) - return threg.dry_r(hc, hr, self._clo) - - @property - def Ret(self): - hc = threg.fixed_hc(threg.conv_coef(self._posture, self._va, self._ta, self.Tsk,), self._va) - return threg.wet_r(hc, self._clo, self._iclo) - - @property - def Wet(self): - err_cr = self.Tcr - self.setpt_cr - err_sk = self.Tsk - self.setpt_sk - wet, *_ = threg.evaporation(err_cr, err_sk, - self._ta, self._rh, self.Ret, self._bsa_rate, self._age) - return wet - - @property - def WetMean(self): - wet = self.Wet - return np.average(wet, weights=_BSAst) - - - - @property - def TskMean(self): - return np.average(self._bodytemp[INDEX["skin"]], weights=_BSAst) - - @property - def Tsk(self): - return self._bodytemp[INDEX["skin"]].copy() - - @property - def Tcr(self): - return self._bodytemp[INDEX["core"]].copy() - - @property - def Tcb(self): - return self._bodytemp[0].copy() - - @property - def Tar(self): - return self._bodytemp[INDEX["artery"]].copy() - - @property - def Tve(self): - return self._bodytemp[INDEX["vein"]].copy() - - @property - def Tsve(self): - return self._bodytemp[INDEX["sfvein"]].copy() - - @property - def Tms(self): - return self._bodytemp[INDEX["muscle"]].copy() - - @property - def Tfat(self): - return self._bodytemp[INDEX["fat"]].copy() - - @property - def bodyname(self): - body = [ - "Head", "Neck", "Chest", "Back", "Pelvis", - "LShoulder", "LArm", "LHand", - "RShoulder", "RArm", "RHand", - "LThigh", "LLeg", "LHand", - "RThigh", "RLeg", "RHand",] - return body - - @property - def results(self): - return self.dict_results() - - @property - def BMR(self): - bmr = threg.basal_met( - self._height, self._weight, self._age, - self._sex, self._bmr_equation,) - return bmr - -def _to17array(inp): - """ - Make ndarray (17,). - - Parameters - ---------- - inp : int, float, ndarray, list - Number you make as 17array. - - Returns - ------- - ndarray - """ - try: - if len(inp) == 17: - array = np.array(inp) - else: - first_item = inp[0] - array = np.ones(17)*first_item - except: - array = np.ones(17)*inp - return array.copy() \ No newline at end of file diff --git a/build/lib/jos3/matrix.py b/build/lib/jos3/matrix.py deleted file mode 100644 index 3de062e..0000000 --- a/build/lib/jos3/matrix.py +++ /dev/null @@ -1,323 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np - -def sub2whole(subarr_list): - ishape = 0 - jshape = 0 - for subarr in subarr_list: - ishape += subarr.shape[0] - jshape += subarr.shape[1] - - wholearr = np.zeros((ishape, jshape)) - i = 0 - j = 0 - for subarr in subarr_list: - iend = i + subarr.shape[0] - jend = j + subarr.shape[1] - wholearr[i:iend, j:jend] = subarr.copy() - i += subarr.shape[0] - j += subarr.shape[1] - - return wholearr - - -BODY_NAMES = [ - "Head", "Neck", "Chest", "Back", "Pelvis", - "LShoulder", "LArm", "LHand", - "RShoulder", "RArm", "RHand", - "LThigh", "LLeg", "LFoot", - "RThigh", "RLeg", "RFoot"] -LAYER_NAMES = ["artery", "vein", "sfvein", "core", "muscle", "fat", "skin"] - -def index_order(): - """ - Defines the index's order of the matrix - Returns - ------- - indexdict : nested dictionary - keys are BODY_NAMES and LAYER_NAMES - """ - # Defines exsisting layers as 1 or None - indexdict = {} - - for key in ["Head", "Pelvis"]: - indexdict[key] = { - "artery": 1, "vein": 1, "sfvein": None, - "core": 1, "muscle": 1, "fat": 1, "skin": 1} - - for key in ["Neck", "Chest", "Back"]: - indexdict[key] = { - "artery": 1, "vein": 1, "sfvein": None, - "core": 1, "muscle": None, "fat": None, "skin": 1} - - for key in BODY_NAMES[5:]: # limb segments - indexdict[key] = { - "artery": 1, "vein": 1, "sfvein": 1, - "core": 1, "muscle": None, "fat": None, "skin": 1} - - # Sets ordered indices in the matrix - indexdict["CB"] = 0 - order_count = 1 - for bn in BODY_NAMES: - for ln in LAYER_NAMES: - if not indexdict[bn][ln] is None: - indexdict[bn][ln] = order_count - order_count += 1 - - return indexdict, order_count -IDICT, NUM_NODES = index_order() - - -def index_bylayer(layer): - """ - Get indices of the matrix by the layer name. - Parameters - ---------- - layer : str - Layer name of jos. - ex) artery, vein, sfvein, core, muscle, fat or skin. - Returns - ------- - indices of the matrix : list - """ - - # Gets indices by the layer name - outindex = [] - for bn in BODY_NAMES: - for ln in LAYER_NAMES: - if (layer.lower() == ln) and IDICT[bn][ln]: - outindex.append(IDICT[bn][ln]) - return outindex - - -def validindex_bylayer(layer): - """ - Get indices of the matrix by the layer name. - Parameters - ---------- - layer : str - Layer name of jos. - ex) artery, vein, sfvein, core, muscle, fat or skin. - Returns - ------- - indices of the matrix : list - """ - - # Gets valid indices of the layer name - outindex = [] - for i, bn in enumerate(BODY_NAMES): - if IDICT[bn][layer]: - outindex.append(i) - return outindex - -# Constant parameters of the matrix' indicies -INDEX = {} -VINDEX = {} -for key in LAYER_NAMES: - INDEX[key] = index_bylayer(key) - VINDEX[key] = validindex_bylayer(key) - - -def localarr(bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot): - """ - Create matrix to calculate heat exchage by blood flow in each segment [W/K] - 1.067 [Wh/(L・K)] * Bloodflow [L/h] = [W/K] - """ - bf_local = np.zeros((NUM_NODES, NUM_NODES)) - for i, bn in enumerate(BODY_NAMES): - # Dictionary of indecies in each body segment - # key = layer name, value = index of matrix - indexof = IDICT[bn] - - # Common - bf_local[indexof["core"], indexof["artery"]] = 1.067*bf_cr[i] # art to cr - bf_local[indexof["skin"], indexof["artery"]] = 1.067*bf_sk[i] # art to sk - bf_local[indexof["vein"], indexof["core"]] = 1.067*bf_cr[i] # vein to cr - bf_local[indexof["vein"], indexof["skin"]] = 1.067*bf_sk[i] # vein to sk - - # If the segment has a muslce or fat layer - if not indexof["muscle"] is None: - bf_local[indexof["muscle"], indexof["artery"]] = 1.067*bf_ms[i] # art to ms - bf_local[indexof["vein"], indexof["muscle"]] = 1.067*bf_ms[i] # vein to ms - if not indexof["fat"] is None: - bf_local[indexof["fat"], indexof["artery"]] = 1.067*bf_fat[i] # art to fat - bf_local[indexof["vein"], indexof["fat"]] = 1.067*bf_fat[i] # vein to fat - - # Only hand - if i == 7 or i == 10: - bf_local[indexof["sfvein"], indexof["artery"]] = 1.067*bf_ava_hand # art to sfvein - # Only foot - if i == 13 or i == 16: - bf_local[indexof["sfvein"], indexof["artery"]] = 1.067*bf_ava_foot # art to sfvein - - return bf_local - - -def vessel_bloodflow(bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot): - """ - Get artery and vein blood flow rate [l/h] - """ - xbf = bf_cr + bf_ms + bf_fat + bf_sk - - bf_art = np.zeros(17) - bf_vein = np.zeros(17) - - #Head - bf_art[0] = xbf[0] - bf_vein[0] = xbf[0] - - #Neck (+Head) - bf_art[1] = xbf[1] + xbf[0] - bf_vein[1] = xbf[1] + xbf[0] - - #Chest - bf_art[2] = xbf[2] - bf_vein[2] = xbf[2] - - #Back - bf_art[3] = xbf[3] - bf_vein[3] = xbf[3] - - #Pelvis (+Thighs, Legs, Feet, AVA_Feet) - bf_art[4] = xbf[4] + xbf[11:17].sum() + 2*bf_ava_foot - bf_vein[4] = xbf[4] + xbf[11:17].sum() + 2*bf_ava_foot - - #L.Shoulder (+Arm, Hand, (arteryのみAVA_Hand)) - bf_art[5] = xbf[5:8].sum() + bf_ava_hand - bf_vein[5] = xbf[5:8].sum() - - #L.Arm (+Hand) - bf_art[6] = xbf[6:8].sum() + bf_ava_hand - bf_vein[6] = xbf[6:8].sum() - - #L.Hand - bf_art[7] = xbf[7] + bf_ava_hand - bf_vein[7] = xbf[7] - - #R.Shoulder (+Arm, Hand, (arteryのみAVA_Hand)) - bf_art[8] = xbf[8:11].sum() + bf_ava_hand - bf_vein[8] = xbf[8:11].sum() - - #R.Arm (+Hand) - bf_art[9] = xbf[9:11].sum() + bf_ava_hand - bf_vein[9] = xbf[9:11].sum() - - #R.Hand - bf_art[10] = xbf[10] + bf_ava_hand - bf_vein[10] = xbf[10] - - #L.Thigh (+Leg, Foot, (arteryのみAVA_Foot)) - bf_art[11] = xbf[11:14].sum() + bf_ava_foot - bf_vein[11] = xbf[11:14].sum() - - #L.Leg (+Foot) - bf_art[12] = xbf[12:14].sum() + bf_ava_foot - bf_vein[12] = xbf[12:14].sum() - - #L.Foot - bf_art[13] = xbf[13] + bf_ava_foot - bf_vein[13] = xbf[13] - - #R.Thigh (+Leg, Foot, (arteryのみAVA_Foot)) - bf_art[14] = xbf[14:17].sum() + bf_ava_foot - bf_vein[14] = xbf[14:17].sum() - - #R.Leg (+Foot) - bf_art[15] = xbf[15:17].sum() + bf_ava_foot - bf_vein[15] = xbf[15:17].sum() - - #R.Foot - bf_art[16] = xbf[16] + bf_ava_foot - bf_vein[16] = xbf[16] - - return bf_art, bf_vein - - -def wholebody(bf_art, bf_vein, bf_ava_hand, bf_ava_foot): - """ - Create matrix to calculate heat exchage by blood flow between segments [W/K] - """ - - def flow(up, down, bloodflow): - arr = np.zeros((NUM_NODES, NUM_NODES)) - # Coefficient = 1.067 [Wh/L.K] - arr[down,up] = 1.067*bloodflow # Change unit [L/h] to [W/K] - return arr - - arr83 = np.zeros((NUM_NODES, NUM_NODES)) - # Matrix offsets of segments - CB = IDICT["CB"] - Head = IDICT["Head"]["artery"] - Neck = IDICT["Neck"]["artery"] - Chest = IDICT["Chest"]["artery"] - Back = IDICT["Back"]["artery"] - Pelvis = IDICT["Pelvis"]["artery"] - LShoulder = IDICT["LShoulder"]["artery"] - LArm = IDICT["LArm"]["artery"] - LHand = IDICT["LHand"]["artery"] - RShoulder = IDICT["RShoulder"]["artery"] - RArm = IDICT["RArm"]["artery"] - RHand = IDICT["RHand"]["artery"] - LThigh = IDICT["LThigh"]["artery"] - LLeg = IDICT["LLeg"]["artery"] - LFoot = IDICT["LFoot"]["artery"] - RThigh = IDICT["RThigh"]["artery"] - RLeg = IDICT["RLeg"]["artery"] - RFoot = IDICT["RFoot"]["artery"] - - - arr83 += flow(CB, Neck, bf_art[1]) #CB to Neck.art - arr83 += flow(Neck, Head, bf_art[0]) #Neck.art to Head.art - arr83 += flow(Head+1, Neck+1, bf_vein[0]) #Head.vein to Neck.vein - arr83 += flow(Neck+1, CB, bf_vein[1]) #Neck.vein to CB - - arr83 += flow(CB, Chest, bf_art[2]) #CB to Chest.art - arr83 += flow(Chest+1, CB, bf_vein[2]) #Chest.vein to CB - - arr83 += flow(CB, Back, bf_art[3]) #CB to Back.art - arr83 += flow(Back+1, CB, bf_vein[3]) #Back.vein to CB - - arr83 += flow(CB, Pelvis, bf_art[4]) #CB to Pelvis.art - arr83 += flow(Pelvis+1, CB, bf_vein[4]) #Pelvis.vein to CB - - arr83 += flow(CB, LShoulder, bf_art[5]) #CB to LShoulder.art - arr83 += flow(LShoulder, LArm, bf_art[6]) #LShoulder.art to LArm.art - arr83 += flow(LArm, LHand, bf_art[7]) #LArm.art to LHand.art - arr83 += flow(LHand+1, LArm+1, bf_vein[7]) #LHand.vein to LArm.vein - arr83 += flow(LArm+1, LShoulder+1, bf_vein[6]) #LArm.vein to LShoulder.vein - arr83 += flow(LShoulder+1, CB, bf_vein[5]) #LShoulder.vein to CB - arr83 += flow(LHand+2, LArm+2, bf_ava_hand) #LHand.sfvein to LArm.sfvein - arr83 += flow(LArm+2, LShoulder+2, bf_ava_hand) #LArm.sfvein to LShoulder.sfvein - arr83 += flow(LShoulder+2, CB, bf_ava_hand) #LShoulder.sfvein to CB - - arr83 += flow(CB, RShoulder, bf_art[8]) #CB to RShoulder.art - arr83 += flow(RShoulder, RArm, bf_art[9]) #RShoulder.art to RArm.art - arr83 += flow(RArm, RHand, bf_art[10]) #RArm.art to RHand.art - arr83 += flow(RHand+1, RArm+1, bf_vein[10]) #RHand.vein to RArm.vein - arr83 += flow(RArm+1, RShoulder+1, bf_vein[9]) #RArm.vein to RShoulder.vein - arr83 += flow(RShoulder+1, CB, bf_vein[8]) #RShoulder.vein to CB - arr83 += flow(RHand+2, RArm+2, bf_ava_hand) #RHand.sfvein to RArm.sfvein - arr83 += flow(RArm+2, RShoulder+2, bf_ava_hand) #RArm.sfvein to RShoulder.sfvein - arr83 += flow(RShoulder+2, CB, bf_ava_hand) #RShoulder.sfvein to CB - - arr83 += flow(Pelvis, LThigh, bf_art[11]) #Pelvis to LThigh.art - arr83 += flow(LThigh, LLeg, bf_art[12]) #LThigh.art to LLeg.art - arr83 += flow(LLeg, LFoot, bf_art[13]) #LLeg.art to LFoot.art - arr83 += flow(LFoot+1, LLeg+1, bf_vein[13]) #LFoot.vein to LLeg.vein - arr83 += flow(LLeg+1, LThigh+1, bf_vein[12]) #LLeg.vein to LThigh.vein - arr83 += flow(LThigh+1, Pelvis+1, bf_vein[11]) #LThigh.vein to Pelvis - arr83 += flow(LFoot+2, LLeg+2, bf_ava_foot) #LFoot.sfvein to LLeg.sfvein - arr83 += flow(LLeg+2, LThigh+2, bf_ava_foot) #LLeg.sfvein to LThigh.sfvein - arr83 += flow(LThigh+2, Pelvis+1, bf_ava_foot) #LThigh.vein to Pelvis - - arr83 += flow(Pelvis, RThigh, bf_art[14]) #Pelvis to RThigh.art - arr83 += flow(RThigh, RLeg, bf_art[15]) #RThigh.art to RLeg.art - arr83 += flow(RLeg, RFoot, bf_art[16]) #RLeg.art to RFoot.art - arr83 += flow(RFoot+1, RLeg+1, bf_vein[16]) #RFoot.vein to RLeg.vein - arr83 += flow(RLeg+1, RThigh+1, bf_vein[15]) #RLeg.vein to RThigh.vein - arr83 += flow(RThigh+1, Pelvis+1, bf_vein[14]) #RThigh.vein to Pelvis - arr83 += flow(RFoot+2, RLeg+2, bf_ava_foot) #RFoot.sfvein to RLeg.sfvein - arr83 += flow(RLeg+2, RThigh+2, bf_ava_foot) #RLeg.sfvein to RThigh.sfvein - arr83 += flow(RThigh+2, Pelvis+1, bf_ava_foot) #RThigh.vein to Pelvis - - return arr83 \ No newline at end of file diff --git a/build/lib/jos3/thermoregulation.py b/build/lib/jos3/thermoregulation.py deleted file mode 100644 index bcea0e5..0000000 --- a/build/lib/jos3/thermoregulation.py +++ /dev/null @@ -1,871 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np -import math - -# Import from relative path -try: - from .matrix import NUM_NODES, IDICT, BODY_NAMES - from . import construction as cons -# Import from absolute path -# These codes are for debugging -except ImportError: - from jos3.matrix import NUM_NODES, IDICT, BODY_NAMES - from jos3 import construction as cons - - -_BSAst = np.array([ - 0.110, 0.029, 0.175, 0.161, 0.221, - 0.096, 0.063, 0.050, 0.096, 0.063, 0.050, - 0.209, 0.112, 0.056, 0.209, 0.112, 0.056,]) - - -def conv_coef(posture="standing", va=0.1, ta=28.8, tsk=34.0,): - """ - Calculate convective heat transfer coefficient (hc) [W/K.m2] - - Parameters - ---------- - posture : str, optional - Select posture from standing, sitting or lying. - The default is "standing". - va : float or iter, optional - Air velocity [m/s]. If iter is input, its length should be 17. - The default is 0.1. - ta : float or iter, optional - Air temperature [oC]. If iter is input, its length should be 17. - The default is 28.8. - tsk : float or iter, optional - Skin temperature [oC]. If iter is input, its length should be 17. - The default is 34.0. - - Returns - ------- - hc : numpy.ndarray - Convective heat transfer coefficient (hc) [W/K.m2]. - - """ - # Natural convection - if posture.lower() == "standing": - # Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hc_natural = np.array([ - 4.48, 4.48, 2.97, 2.91, 2.85, - 3.61, 3.55, 3.67, 3.61, 3.55, 3.67, - 2.80, 2.04, 2.04, 2.80, 2.04, 2.04,]) - elif posture.lower() in ["sitting", "sedentary"]: - # Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hc_natural = np.array([ - 4.75, 4.75, 3.12, 2.48, 1.84, - 3.76, 3.62, 2.06, 3.76, 3.62, 2.06, - 2.98, 2.98, 2.62, 2.98, 2.98, 2.62,]) - - elif posture.lower() in ["lying", "supine"]: - # Kurazumi et al., 2008, https://doi.org/10.20718/jjpa.13.1_17 - # The values are applied under cold environment. - hc_a = np.array([ - 1.105, 1.105, 1.211, 1.211, 1.211, - 0.913, 2.081, 2.178, 0.913, 2.081, 2.178, - 0.945, 0.385, 0.200, 0.945, 0.385, 0.200,]) - hc_b = np.array([ - 0.345, 0.345, 0.046, 0.046, 0.046, - 0.373, 0.850, 0.297, 0.373, 0.850, 0.297, - 0.447, 0.580, 0.966, 0.447, 0.580, 0.966,]) - hc_natural = hc_a * (abs(ta - tsk) ** hc_b) - - # Forced convection - # Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hc_a = np.array([ - 15.0, 15.0, 11.0, 17.0, 13.0, - 17.0, 17.0, 20.0, 17.0, 17.0, 20.0, - 14.0, 15.8, 15.1, 14.0, 15.8, 15.1,]) - hc_b = np.array([ - 0.62, 0.62, 0.67, 0.49, 0.60, - 0.59, 0.61, 0.60, 0.59, 0.61, 0.60, - 0.61, 0.74, 0.62, 0.61, 0.74, 0.62,]) - hc_forced = hc_a * (va ** hc_b) - - # Select natural or forced hc. - # If local va is under 0.2 m/s, the hc valuse is natural. - hc = np.where(va<0.2, hc_natural, hc_forced) # hc [W/K.m2)] - - return hc - - -def rad_coef(posture="standing"): - """ - Calculate radiative heat transfer coefficient (hr) [W/K.m2] - - Parameters - ---------- - posture : str, optional - Select posture from standing, sitting or lying. - The default is "standing". - - Returns - ------- - hc : numpy.ndarray - Radiative heat transfer coefficient (hr) [W/K.m2]. - - """ - - - if posture.lower() == "standing": - # Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hr = np.array([ - 4.89, 4.89, 4.32, 4.09, 4.32, - 4.55, 4.43, 4.21, 4.55, 4.43, 4.21, - 4.77, 5.34, 6.14, 4.77, 5.34, 6.14,]) - elif posture.lower() in ["sitting", "sedentary"]: - # Ichihara et al., 1997, https://doi.org/10.3130/aija.62.45_5 - hr = np.array([ - 4.96, 4.96, 3.99, 4.64, 4.21, - 4.96, 4.21, 4.74, 4.96, 4.21, 4.74, - 4.10, 4.74, 6.36, 4.10, 4.74, 6.36,]) - elif posture.lower() in ["lying", "supine"]: - # Kurazumi et al., 2008, https://doi.org/10.20718/jjpa.13.1_17 - hr = np.array([ - 5.475, 5.475, 3.463, 3.463, 3.463, - 4.249, 4.835, 4.119, 4.249, 4.835, 4.119, - 4.440, 5.547, 6.085, 4.440, 5.547, 6.085,]) - return hr - - -def fixed_hc(hc, va): - """ - Fixes hc values to fit tow-node-model's values. - """ - mean_hc = np.average(hc, weights=_BSAst) - mean_va = np.average(va, weights=_BSAst) - mean_hc_whole = max(3, 8.600001*(mean_va**0.53)) - _fixed_hc = hc * mean_hc_whole/mean_hc - return _fixed_hc - - -def fixed_hr(hr): - """ - Fixes hr values to fit tow-node-model's values. - """ - mean_hr = np.average(hr, weights=_BSAst) - _fixed_hr = hr * 4.7/mean_hr - return _fixed_hr - -def operative_temp(ta, tr, hc, hr): - to = (hc*ta + hr*tr) / (hc + hr) - return to - - -def clo_area_factor(clo): - fcl = np.where(clo<0.5, clo*0.2+1, clo*0.1+1.05) - return fcl - - -def dry_r(hc, hr, clo): - """ - Calculate total sensible thermal resistance. - - Parameters - ---------- - hc : float or array - Convective heat transfer coefficient (hc) [W/K.m2]. - hr : float or array - Radiative heat transfer coefficient (hr) [W/K.m2]. - clo : float or array - Clothing insulation [clo]. - - Returns - ------- - rt : float or array - Total sensible thermal resistance between skin and ambient. - """ - fcl = clo_area_factor(clo) - r_a = 1/(hc+hr) - r_cl = 0.155*clo - r_t = r_a/fcl + r_cl - return r_t - - -def wet_r(hc, clo, iclo=0.45, lewis_rate=16.5): - """ - Calculate total evaporative thermal resistance. - - Parameters - ---------- - hc : float or array - Convective heat transfer coefficient (hc) [W/K.m2]. - clo : float or array - Clothing insulation [clo]. - iclo : float, or array, optional - Clothin vapor permeation efficiency [-]. The default is 0.45. - lewis_rate : float, optional - Lewis rate [K/kPa]. The default is 16.5. - - Returns - ------- - ret : float or array - Total evaporative thermal resistance. - - """ - fcl = clo_area_factor(clo) - r_cl = 0.155 * clo - r_ea = 1 / (lewis_rate * hc) - r_ecl = r_cl / (lewis_rate * iclo) - r_et = r_ea / fcl + r_ecl - return r_et - - -def heat_resistances( - ta=np.ones(17)*28.8, - tr=np.ones(17)*28.8, - va=np.ones(17)*0.1, - tsk=np.ones(17)*34, - clo=np.zeros(17), - posture="standing", - iclo=np.ones(17)*0.45, - options={},): - - hc = fixed_hc(conv_coef(posture, va, ta, tsk,)) - hr = fixed_hr(rad_coef(posture,)) - to = operative_temp(ta, tr, hc, hr,) - fcl = clo_area_factor(clo,) - r_t, r_a, r_cl = dry_r(hc, hr, clo) - r_et, r_ea, r_ecl = wet_r(hc, clo, iclo) - - return to, r_t, r_et, r_a, r_cl, r_ea, r_ecl, fcl - - -def error_signals(err_cr=0, err_sk=0): - """ - Calculate WRMS and CLDS signals of thermoregulation - - Parameters - ---------- - err_cr, err_sk : float or array, optional - Difference between setpoint and body temperatures. - The default is 0. - - Returns - ------- - wrms, clds : array - WRMS and CLDS signals. - """ - - # SKINR - receptor = np.array([ - 0.0549, 0.0146, 0.1492, 0.1321, 0.2122, - 0.0227, 0.0117, 0.0923, 0.0227, 0.0117, 0.0923, - 0.0501, 0.0251, 0.0167, 0.0501, 0.0251, 0.0167,]) - - # wrms signal - wrm = np.maximum(err_sk, 0) - wrm *= receptor - wrms = wrm.sum() - # clds signal - cld = np.minimum(err_sk, 0) - cld *= -receptor - clds = cld.sum() - - return wrms, clds - - -# Antoine equation [kPa] -antoine = lambda x: math.e**(16.6536-(4030.183/(x+235))) -# Tetens equation [kPa] -tetens = lambda x: 0.61078*10**(7.5*x/(x+237.3)) - - -def evaporation(err_cr, err_sk, tsk, ta, rh, ret, - height=1.72, weight=74.43, equation="dubois", age=20): - """ - Calculate evaporative heat loss. - - Parameters - ---------- - err_cr, err_sk : array - Difference between setpoint and body temperatures [oC]. - tsk : array - Skin temperatures [oC]. - ta : array - Air temperatures at local body segments [oC]. - rh : array - Relative humidity at local body segments [%]. - ret : array - Total evaporative thermal resistances [m2.K/W]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - - Returns - ------- - wet : array - Local skin wettedness [-]. - e_sk : array - Evaporative heat loss at the skin by sweating and diffuse [W]. - e_max : array - Maximum evaporative heat loss at the skin [W]. - e_sweat : TYPE - Evaporative heat loss at the skin by only sweating [W]. - - """ - - wrms, clds = error_signals(err_cr, err_sk,) # Thermoregulation signals - bsar = cons.bsa_rate(height, weight, equation,) # BSA rate - bsa = _BSAst * bsar # BSA - p_a = antoine(ta)*rh/100 # Saturated vapor pressure of ambient [kPa] - p_sk_s = antoine(tsk) # Saturated vapor pressure at the skin [kPa] - - e_max = (p_sk_s - p_a) / ret * bsa # Maximum evaporative heat loss - - # SKINS - skin_sweat = np.array([ - 0.064, 0.017, 0.146, 0.129, 0.206, - 0.051, 0.026, 0.0155, 0.051, 0.026, 0.0155, - 0.073, 0.036, 0.0175, 0.073, 0.036, 0.0175,]) - - sig_sweat = (371.2*err_cr[0]) + (33.64*(wrms-clds)) - sig_sweat = max(sig_sweat, 0) - sig_sweat *= bsar - - # Signal decrement by aging - if age < 60: - sd_sweat = np.ones(17) - else: #age >= 60 - sd_sweat = np.array([ - 0.69, 0.69, 0.59, 0.52, 0.40, - 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, - 0.40, 0.40, 0.40, 0.40, 0.40, 0.40,]) - - e_sweat = skin_sweat * sig_sweat * sd_sweat * 2**((err_sk)/10) - wet = 0.06 + 0.94*(e_sweat/e_max) - wet = np.minimum(wet, 1) # Wettedness' upper limit - e_sk = wet * e_max - e_sweat = (wet - 0.06) / 0.94 * e_max # Effective sweating - return wet, e_sk, e_max, e_sweat - - -def skin_bloodflow(err_cr, err_sk, - height=1.72, weight=74.43, equation="dubois", age=20, ci=2.59,): - """ - Calculate skin blood flow rate (BFsk) [L/h]. - - Parameters - ---------- - err_cr, err_sk : array - Difference between setpoint and body temperatures [oC]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - ci : float, optional - Cardiac index [L/min/㎡]. The default is 2.59. - - Returns - ------- - BFsk : array - Skin blood flow rate [L/h]. - - """ - - wrms, clds = error_signals(err_cr, err_sk) - - # BFBsk - bfb_sk = np.array([ - 1.754, 0.325, 1.967, 1.475, 2.272, - 0.91, 0.508, 1.114, 0.91, 0.508, 1.114, - 1.456, 0.651, 0.934, 1.456, 0.651, 0.934,]) - # SKIND - skin_dilat = np.array([ - 0.0692, 0.0992, 0.0580, 0.0679, 0.0707, - 0.0400, 0.0373, 0.0632, 0.0400, 0.0373, 0.0632, - 0.0736, 0.0411, 0.0623, 0.0736, 0.0411, 0.0623,]) - # SKINC - skin_stric = np.array([ - 0.0213, 0.0213, 0.0638, 0.0638, 0.0638, - 0.0213, 0.0213, 0.1489, 0.0213, 0.0213, 0.1489, - 0.0213, 0.0213, 0.1489, 0.0213, 0.0213, 0.1489,]) - - sig_dilat = (100.5*err_cr[0]) + (6.4*(wrms-clds)) - sig_stric = (-10.8*err_cr[0]) + (-10.8*(wrms-clds)) - sig_dilat = max(sig_dilat, 0) - sig_stric = max(sig_stric, 0) - - # Signal decrement by aging - if age < 60: - sd_dilat = np.ones(17) - sd_stric = np.ones(17) - else: #age >= 60 - sd_dilat = np.array([ - 0.91, 0.91, 0.47, 0.47, 0.31, - 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, - 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, - ]) - sd_stric = np.ones(17) - - #皮膚血流量 [L/h] - bf_sk = (1 + skin_dilat * sd_dilat * sig_dilat) / \ - (1 + skin_stric * sd_stric * sig_stric) * bfb_sk * 2**(err_sk/6) - - bfbr = cons.bfb_rate(height, weight, equation, age, ci,) - bf_sk *= bfbr - return bf_sk - - -def ava_bloodflow(err_cr, err_sk, - height=1.72, weight=74.43, equation="dubois", age=20, ci=2.59,): - """ - Calculate areteriovenous anastmoses (AVA) blood flow rate [L/h] based on - Takemori's model, 1995. - - Parameters - ---------- - err_cr, err_sk : array - Difference between setpoint and body temperatures [oC]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - ci : float, optional - Cardiac index [L/min/m2]. The default is 2.59. - - Returns - ------- - BFava_hand, BFava_foot : array - AVA blood flow rate at hand and foot [L/h]. - - """ - # Cal. mean error body core temp. - cap_bcr = [10.2975, 9.3935, 13.834] # Thermal capacity at Chest, Back and Pelvis - err_bcr = np.average(err_cr[2:5], weights=cap_bcr) - - # Cal. mean error skin temp. - bsa = _BSAst - err_msk = np.average(err_sk, weights=bsa) - - # Openbess of AVA [-] - sig_ava_hand = 0.265 * (err_bcr + 0.43) + 0.953 * (err_msk + 0.1905) + 0.9126 - sig_ava_foot = 0.265 * (err_bcr - 0.97) + 0.953 * (err_msk - 0.0095) + 0.9126 - - sig_ava_hand = min(sig_ava_hand, 1) - sig_ava_hand = max(sig_ava_hand, 0) - sig_ava_foot = min(sig_ava_foot, 1) - sig_ava_foot = max(sig_ava_foot, 0) - - bfbr = bfbr = cons.bfb_rate(height, weight, equation, age, ci,) - # AVA blood flow rate [L/h] - bf_ava_hand = 1.71 * bfbr * sig_ava_hand # Hand - bf_ava_foot = 2.16 * bfbr * sig_ava_foot # Foot - return bf_ava_hand, bf_ava_foot - - -def basal_met(height=1.72, weight=74.43, age=20, - sex="male", equation="harris-benedict"): - """ - Calculate basal metabolic rate [W]. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - age : float, optional - Age [years]. The default is 20. - sex : str, optional - Choose male or female. The default is "male". - equation : str, optional - Choose harris-benedict or ganpule. The default is "harris-benedict". - - Returns - ------- - BMR : float - Basal metabolic rate [W]. - - """ - - if equation=="harris-benedict": - if sex=="male": - bmr = 88.362 + 13.397*weight + 500.3*height - 5.677*age - else: - bmr = 447.593 + 9.247*weight + 479.9*height - 4.330*age - - elif equation=="harris-benedict_origin": - if sex=="male": - bmr = 66.4730 + 13.7516*weight + 500.33*height - 6.7550*age - else: - bmr = 655.0955 + 9.5634*weight + 184.96*height - 4.6756*age - - elif equation=="japanese" or equation=="ganpule": - # Ganpule et al., 2007, https://doi.org/10.1038/sj.ejcn.1602645 - if sex=="male": - bmr = 0.0481*weight + 2.34*height - 0.0138*age - 0.4235 - else: - bmr = 0.0481*weight + 2.34*height - 0.0138*age - 0.9708 - bmr *= 1000 / 4.186 - - bmr *= 0.048 # [kcal/day] to [W] - - return bmr - - -def local_mbase(height=1.72, weight=74.43, age=20, - sex="male", equation="harris-benedict"): - """ - Calculate local basal metabolic rate [W]. - - Parameters - ---------- - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - age : float, optional - Age [years]. The default is 20. - sex : str, optional - Choose male or female. The default is "male". - equation : str, optional - Choose harris-benedict or ganpule. The default is "harris-benedict". - - Returns - ------- - mbase : array - Local basal metabolic rate (Mbase) [W]. - - """ - - mbase_all = basal_met(height, weight, age, sex, equation) - # Distribution coefficient of basal metabolic rate - mbf_cr = np.array([ - 0.19551, 0.00324, 0.28689, 0.25677, 0.09509, - 0.01435, 0.00409, 0.00106, 0.01435, 0.00409, 0.00106, - 0.01557, 0.00422, 0.00250, 0.01557, 0.00422, 0.00250,]) - mbf_ms = np.array([ - 0.00252, 0.0, 0.0, 0.0, 0.04804, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - mbf_fat = np.array([ - 0.00127, 0.0, 0.0, 0.0, 0.00950, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - mbf_sk = np.array([ - 0.00152, 0.00033, 0.00211, 0.00187, 0.00300, - 0.00059, 0.00031, 0.00059, 0.00059, 0.00031, 0.00059, - 0.00144, 0.00027, 0.00118, 0.00144, 0.00027, 0.00118,]) - - mbase_cr = mbf_cr * mbase_all - mbase_ms = mbf_ms * mbase_all - mbase_fat = mbf_fat * mbase_all - mbase_sk = mbf_sk * mbase_all - return mbase_cr, mbase_ms, mbase_fat, mbase_sk - - -def local_mwork(bmr, par): - """ - Calculate local metabolic rate by work [W] - - Parameters - ---------- - bmr : float - Basal metbolic rate [W]. - par : float - Physical activity ratio [-]. - - Returns - ------- - Mwork : array - Local metabolic rate by work [W]. - - """ - mwork_all = (par-1) * bmr - mwf = np.array([ - 0, 0, 0.091, 0.08, 0.129, - 0.0262, 0.0139, 0.005, 0.0262, 0.0139, 0.005, - 0.2010, 0.0990, 0.005, 0.2010, 0.0990, 0.005]) - mwork = mwork_all * mwf - return mwork - - -PRE_SHIV = 0 -def shivering(err_cr, err_sk, tcr, tsk, - height=1.72, weight=74.43, equation="dubois", age=20, sex="male", dtime=60, - options={}): - """ - Calculate local metabolic rate by shivering [W]. - - Parameters - ---------- - err_cr, err_sk : array - Difference between setpoint and body temperatures [oC]. - tcr, tsk : array - Core and skin temperatures [oC]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - sex : str, optional - Choose male or female. The default is "male". - dtime : float, optional - Interval of analysis time. The default is 60. - - Returns - ------- - Mshiv : array - Local metabolic rate by shivering [W]. - - """ - wrms, clds = error_signals(err_cr, err_sk,) - shivf = np.array([ - 0.0339, 0.0436, 0.27394, 0.24102, 0.38754, - 0.00243, 0.00137, 0.0002, 0.00243, 0.00137, 0.0002, - 0.0039, 0.00175, 0.00035, 0.0039, 0.00175, 0.00035,]) - sig_shiv = 24.36 * clds * (-err_cr[0]) - sig_shiv = max(sig_shiv, 0) - - if options: - if options["shivering_threshold"]: - # Asaka, 2016 - # Threshold of starting shivering - tskm = np.average(tsk, weights=_BSAst) # Mean skin temp. - if tskm < 31: - thres = 36.6 - else: - if sex == "male": - thres = -0.2436 * tskm + 44.10 - else: # sex == "female": - thres = -0.2250 * tskm + 43.05 - # Second threshold of starting shivering - if thres < tcr[0]: - sig_shiv = 0 - - global PRE_SHIV # Previous shivering thermogenesis [W] - if options: - if options["limit_dshiv/dt"]: - # Asaka, 2016 - # dshiv < 0.0077 [W/s] - dshiv = sig_shiv - PRE_SHIV - if options["limit_dshiv/dt"] is True: # default is 0.0077 [W/s] - limit_dshiv = 0.0077 * dtime - else: - limit_dshiv = options["limit_dshiv/dt"] * dtime - if dshiv > limit_dshiv: - sig_shiv = limit_dshiv + PRE_SHIV - elif dshiv < -limit_dshiv: - sig_shiv = -limit_dshiv + PRE_SHIV - PRE_SHIV = sig_shiv - - # Signal sd_shiv by aging - if age < 30: - sd_shiv = np.ones(17) - elif age < 40: - sd_shiv = np.ones(17) * 0.97514 - elif age < 50: - sd_shiv = np.ones(17) * 0.95028 - elif age < 60: - sd_shiv = np.ones(17) * 0.92818 - elif age < 70: - sd_shiv = np.ones(17) * 0.90055 - elif age < 80: - sd_shiv = np.ones(17) * 0.86188 - else: #age >= 80 - sd_shiv = np.ones(17) * 0.82597 - - bsar = cons.bsa_rate(height, weight, equation) - mshiv = shivf * bsar * sd_shiv * sig_shiv - return mshiv - -shivering -def nonshivering(err_cr, err_sk, - height=1.72, weight=74.43, equation="dubois", age=20, - coldacclimation=False, batpositive=True, - options={},): - """ - Calculate local metabolic rate by non-shivering [W] - - Parameters - ---------- - err_cr, err_sk : array - Difference between setpoint and body temperatures [oC]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - coldacclimation : bool, optional - Whether the subject acclimates cold enviroment or not. - The default is False. - batpositive : bool, optional - Whether BAT ativity is positive or not. - The default is True. - - Returns - ------- - Mnst : array - Local metabolic rate by non-shivering [W]. - - """ - # NST (Non-Shivering Thermogenesis) model, Asaka, 2016 - wrms, clds = error_signals(err_cr, err_sk, ) - - bmi = weight / height**2 - - # BAT: brown adipose tissue [SUV] - bat = 10**(-0.10502 * bmi + 2.7708) - - # age factor - if age < 30: - bat *= 1.61 - elif age < 40: - bat *= 1.00 - else: # age >= 40 - bat *= 0.80 - - if coldacclimation: - bat += 3.46 - - if not batpositive: - # incidence age factor: T.Yoneshiro 2011 - if age < 30: - bat *= 44/83 - elif age < 40: - bat *= 15/38 - elif age < 50: - bat *= 7/26 - elif age < 50: - bat *= 1/8 - else: # age > 60 - bat *= 0 - - # NST limit - thres = ((1.80 * bat + 2.43) + 5.62) # [W] - - sig_nst = 2.8 * clds # [W] - sig_nst = min(sig_nst, thres) - - mnstf = np.array([ - 0.000, 0.190, 0.000, 0.190, 0.190, - 0.215, 0.000, 0.000, 0.215, 0.000, 0.000, - 0.000, 0.000, 0.000, 0.000, 0.000, 0.000,]) - bsar = cons.bsa_rate(height, weight, equation) - mnst = bsar * mnstf * sig_nst - return mnst - - -def sum_m(mbase, mwork, mshiv, mnst): - qcr = mbase[0].copy() - qms = mbase[1].copy() - qfat = mbase[2].copy() - qsk = mbase[3].copy() - - for i, bn in enumerate(BODY_NAMES): - # If the segment has a muscle layer, muscle heat production increases by the activity. - if not IDICT[bn]["muscle"] is None: - qms[i] += mwork[i] + mshiv[i] - # In other segments, core heat production increase, instead of muscle. - else: - qcr[i] += mwork[i] + mshiv[i] - qcr += mnst # Non-shivering thermogenesis occurs in core layers - return qcr, qms, qfat, qsk - - -def crmsfat_bloodflow(mwork, mshiv, - height=1.72, weight=74.43, equation="dubois", age=20, ci=2.59,): - """ - Calculate core, muslce and fat blood flow rate [L/h]. - - Parameters - ---------- - mwork : array - Metablic rate by work [W]. - mshiv : array - Metablic rate by shivering [W]. - height : float, optional - Body height [m]. The default is 1.72. - weight : float, optional - Body weight [kg]. The default is 74.43. - equation : str, optional - The equation name (str) of bsa calculation. Choose a name from "dubois", - "takahira", "fujimoto", or "kurazumi". The default is "dubois". - age : float, optional - Age [years]. The default is 20. - ci : float, optional - Cardiac index [L/min/㎡]. The default is 2.59. - - Returns - ------- - BFcr, BFms, BFfat : array - Core, muslce and fat blood flow rate [L/h]. - - """ - # Basal blood flow rate [L/h] - # core, CBFB - bfb_cr = np.array([ - 35.251, 15.240, 89.214, 87.663, 18.686, - 1.808, 0.940, 0.217, 1.808, 0.940, 0.217, - 1.406, 0.164, 0.080, 1.406, 0.164, 0.080,]) - # muscle, MSBFB - bfb_ms = np.array([ - 0.682, 0.0, 0.0, 0.0, 12.614, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - # fat, FTBFB - bfb_fat = np.array([ - 0.265, 0.0, 0.0, 0.0, 2.219, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,]) - - bfbr = cons.bfb_rate(height, weight, equation, age, ci) - bf_cr = bfb_cr * bfbr - bf_ms = bfb_ms * bfbr - bf_fat = bfb_fat * bfbr - - for i, bn in enumerate(BODY_NAMES): - # If the segment has a muscle layer, muscle blood flow increases. - if not IDICT[bn]["muscle"] is None: - bf_ms[i] += (mwork[i] + mshiv[i])/1.163 - # In other segments, core blood flow increase, instead of muscle blood flow. - else: - bf_cr[i] += (mwork[i] + mshiv[i])/1.163 - return bf_cr, bf_ms, bf_fat - - -def sum_bf(bf_cr, bf_ms, bf_fat, bf_sk, bf_ava_hand, bf_ava_foot): - co = 0 - co += bf_cr.sum() - co += bf_ms.sum() - co += bf_fat.sum() - co += bf_sk.sum() - co += 2*bf_ava_hand - co += 2*bf_ava_foot - return co - - -def resp_heatloss(t, p, met): - res_sh = 0.0014 * met * (34 - t) #顕熱 - res_lh = 0.0173 * met * (5.87 - p) #潜熱 - return res_sh, res_lh - - -def get_lts(ta): - return 2.418*1000 \ No newline at end of file diff --git a/src/jos3.egg-info/PKG-INFO b/src/jos3.egg-info/PKG-INFO deleted file mode 100644 index 1163f3a..0000000 --- a/src/jos3.egg-info/PKG-INFO +++ /dev/null @@ -1,80 +0,0 @@ -Metadata-Version: 2.1 -Name: jos3 -Version: 0.0.4 -Summary: Joint-thermoregulation system, JOS-3 -Home-page: https://github.com/TanabeLab/JOS-3 -Author: Yoshito Takahashi -Author-email: takahashiyoshito64@gmail.com -License: MIT -Description: # JOS-3 - - JOS-3 is a model to simulate a human thermoregulation. - - Its python package name is "jos3". - - The model has been derived from 65MN https://doi.org/10.1016/S0378-7788(02)00014-2 and JOS-2 https://doi.org/10.1016/j.buildenv.2013.04.013 model. - - Please cite us if you use this package : Y. Takahashi, A. Nomoto, S. Yoda, R. Hisayama, M. Ogata, Y. Ozeki, S. Tanabe,Thermoregulation Model JOS-3 with New Open Source Code, Energy & Buildings (2020), doi: https://doi.org/10.1016/j.enbuild.2020.110575 - - # Requirement - - * python 3 - * numpy - - # Installation - - ```bash - pip install jos3 - - or - - pip install git+https://github.com/TanabeLab/JOS-3.git - ``` - - # Usage - - ```python - - import pandas as pd - import jos3 - - model = jos3.JOS3(height=1.7, weight=60, age=30) # Builds a model - - # Set the first condition - model.To = 28 # Operative temperature [oC] - model.RH = 40 # Relative humidity [%] - model.Va = 0.2 # Air velocity [m/s] - model.PAR = 1.2 # Physical activity ratio [-] - model.simulate(60) # Exposre time = 60 [min] - - # Set the next condition - model.To = 20 # Changes only operative temperature - model.simulate(60) # Additional exposre time = 60 [min] - - df = pd.DataFrame(model.dict_results()) # Make pandas.DataFrame - df.TskMean.plot() # Show the graph of mean skin temp. - ``` - - ![result](https://raw.githubusercontent.com/TanabeLab/JOS-3/master/example/ex_result.png) - - # Author - - * Yoshito Takahashi - * Master's level graduate [Tanabe Laboratory, Waseda University](https://www.tanabe.arch.waseda.ac.jp/en/) - * takahashiyoshito64@gmail.com - - # License - jos3 is under [MIT license](https://en.wikipedia.org/wiki/MIT_License). - -Platform: UNKNOWN -Classifier: Operating System :: OS Independent -Classifier: Intended Audience :: Science/Research -Classifier: Intended Audience :: Education -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: License :: OSI Approved :: MIT License -Description-Content-Type: text/markdown diff --git a/src/jos3.egg-info/SOURCES.txt b/src/jos3.egg-info/SOURCES.txt deleted file mode 100644 index 4f21d52..0000000 --- a/src/jos3.egg-info/SOURCES.txt +++ /dev/null @@ -1,13 +0,0 @@ -README.md -setup.py -src/jos3/__init__.py -src/jos3/comfmod.py -src/jos3/construction.py -src/jos3/jos3.py -src/jos3/matrix.py -src/jos3/thermoregulation.py -src/jos3.egg-info/PKG-INFO -src/jos3.egg-info/SOURCES.txt -src/jos3.egg-info/dependency_links.txt -src/jos3.egg-info/requires.txt -src/jos3.egg-info/top_level.txt \ No newline at end of file diff --git a/src/jos3.egg-info/dependency_links.txt b/src/jos3.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/jos3.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/jos3.egg-info/requires.txt b/src/jos3.egg-info/requires.txt deleted file mode 100644 index cb648ee..0000000 --- a/src/jos3.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -numpy>=1.19.4 diff --git a/src/jos3.egg-info/top_level.txt b/src/jos3.egg-info/top_level.txt deleted file mode 100644 index 7981563..0000000 --- a/src/jos3.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jos3 From dc7f2d815d1b8c094bb21896c88c7337f7b51426 Mon Sep 17 00:00:00 2001 From: yoshito takahashi Date: Sun, 15 Nov 2020 12:23:10 +0900 Subject: [PATCH 3/5] Delete test.py --- test.py | 78 --------------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 test.py diff --git a/test.py b/test.py deleted file mode 100644 index d27ac17..0000000 --- a/test.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -import os -sys.path.append(os.path.dirname(__file__) + "/src") - -from jos3 import JOS3 - -if __name__ == "__main__": - mod = JOS3() - print("\nNeutral") - print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) - print("TskMean: {:.3f} [oC]".format(mod.TskMean)) - - mod = JOS3() - mod.PAR = 2 - mod.To = 40 - mod.RH = 70 - mod.Va = 2 - mod.Icl = 0.6 - mod.simulate(60) - print("\nAfter Hot Exposure") - print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) - print("TskMean: {:.3f} [oC]".format(mod.TskMean)) - - mod = JOS3() - mod.PAR = 1.2 - mod.To = 10 - mod.RH = 20 - mod.Va = 3 - mod.Icl = 0.1 - mod.simulate(60) - print("\nAfter Cold Exposure") - print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) - print("TskMean: {:.3f} [oC]".format(mod.TskMean)) - - # Measure calculation time - import time - stime = time.time() - mod = JOS3() - mod.To = 30 - mod.simulate(60) - mod.To = 20 - mod.simulate(60) - mod.To = 40 - mod.simulate(60) - mod.To = 10 - mod.simulate(60) - etime = time.time() - print("Default output") - print("Calculation time {:.2f} [sec]".format(etime-stime)) - - stime = time.time() - mod = JOS3(ex_output=["BFsk", "BFcr", "Emax"]) - mod.To = 30 - mod.simulate(60) - mod.To = 20 - mod.simulate(60) - mod.To = 40 - mod.simulate(60) - mod.To = 10 - mod.simulate(60) - etime = time.time() - print("Extra output") - print("Calculation time {:.2f} [sec]".format(etime-stime)) - - stime = time.time() - mod = JOS3(ex_output="all") - mod.To = 30 - mod.simulate(60) - mod.To = 20 - mod.simulate(60) - mod.To = 40 - mod.simulate(60) - mod.To = 10 - mod.simulate(60) - etime = time.time() - print("All output") - print("Calculation time {:.2f} [sec]".format(etime-stime)) \ No newline at end of file From 7d7ac2b492f952755260c1baa34820fbc12d5237 Mon Sep 17 00:00:00 2001 From: yoshito takahashi Date: Sun, 15 Nov 2020 12:23:20 +0900 Subject: [PATCH 4/5] Create test.py --- test.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test.py diff --git a/test.py b/test.py new file mode 100644 index 0000000..d27ac17 --- /dev/null +++ b/test.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +import sys +import os +sys.path.append(os.path.dirname(__file__) + "/src") + +from jos3 import JOS3 + +if __name__ == "__main__": + mod = JOS3() + print("\nNeutral") + print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) + print("TskMean: {:.3f} [oC]".format(mod.TskMean)) + + mod = JOS3() + mod.PAR = 2 + mod.To = 40 + mod.RH = 70 + mod.Va = 2 + mod.Icl = 0.6 + mod.simulate(60) + print("\nAfter Hot Exposure") + print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) + print("TskMean: {:.3f} [oC]".format(mod.TskMean)) + + mod = JOS3() + mod.PAR = 1.2 + mod.To = 10 + mod.RH = 20 + mod.Va = 3 + mod.Icl = 0.1 + mod.simulate(60) + print("\nAfter Cold Exposure") + print("TcrHead: {:.3f} [oC]".format(mod.Tcr[0])) + print("TskMean: {:.3f} [oC]".format(mod.TskMean)) + + # Measure calculation time + import time + stime = time.time() + mod = JOS3() + mod.To = 30 + mod.simulate(60) + mod.To = 20 + mod.simulate(60) + mod.To = 40 + mod.simulate(60) + mod.To = 10 + mod.simulate(60) + etime = time.time() + print("Default output") + print("Calculation time {:.2f} [sec]".format(etime-stime)) + + stime = time.time() + mod = JOS3(ex_output=["BFsk", "BFcr", "Emax"]) + mod.To = 30 + mod.simulate(60) + mod.To = 20 + mod.simulate(60) + mod.To = 40 + mod.simulate(60) + mod.To = 10 + mod.simulate(60) + etime = time.time() + print("Extra output") + print("Calculation time {:.2f} [sec]".format(etime-stime)) + + stime = time.time() + mod = JOS3(ex_output="all") + mod.To = 30 + mod.simulate(60) + mod.To = 20 + mod.simulate(60) + mod.To = 40 + mod.simulate(60) + mod.To = 10 + mod.simulate(60) + etime = time.time() + print("All output") + print("Calculation time {:.2f} [sec]".format(etime-stime)) \ No newline at end of file From 5b6842b90671ce33cac3737815fd06a759ed986b Mon Sep 17 00:00:00 2001 From: yoshito takahashi Date: Sun, 15 Nov 2020 12:27:44 +0900 Subject: [PATCH 5/5] Update __init__.py --- src/jos3/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jos3/__init__.py b/src/jos3/__init__.py index ee7e8db..143250e 100644 --- a/src/jos3/__init__.py +++ b/src/jos3/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- from jos3.jos3 import * -__version__ = '0.0.4' \ No newline at end of file +__version__ = '0.0.5' \ No newline at end of file