Spaces:
Sleeping
Sleeping
Update app/materials_library.py
Browse files- app/materials_library.py +49 -40
app/materials_library.py
CHANGED
@@ -18,8 +18,8 @@ import uuid
|
|
18 |
from typing import Dict, List, Any, Optional, Tuple, Union
|
19 |
from enum import Enum
|
20 |
|
21 |
-
# Import default data from centralized module
|
22 |
-
from app.m_c_data import SAMPLE_MATERIALS, SAMPLE_FENESTRATIONS
|
23 |
|
24 |
# Configure logging
|
25 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
@@ -98,7 +98,7 @@ class MaterialLibrary:
|
|
98 |
"Specific Heat (J/kg路K)": m.specific_heat,
|
99 |
"Default Thickness (m)": m.default_thickness,
|
100 |
"Embodied Carbon (kgCO鈧俥/kg)": m.embodied_carbon,
|
101 |
-
"
|
102 |
"Price (USD/m虏)": m.price,
|
103 |
"Emissivity": m.emissivity
|
104 |
}
|
@@ -221,31 +221,40 @@ def display_materials_page():
|
|
221 |
|
222 |
# Initialize material library
|
223 |
material_library = MaterialLibrary()
|
224 |
-
material_library.library_materials = {
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
|
250 |
with tab1:
|
251 |
display_materials_tab(material_library)
|
@@ -285,7 +294,7 @@ def display_materials_tab(material_library: MaterialLibrary):
|
|
285 |
st.subheader("Materials")
|
286 |
# Category filter
|
287 |
filter_options = ["All", "None"] + MATERIAL_CATEGORIES
|
288 |
-
category = st.selectbox("Filter by Category", filter_options, key="material_filter")
|
289 |
|
290 |
st.subheader("Library Materials")
|
291 |
with st.container():
|
@@ -442,9 +451,9 @@ def display_materials_tab(material_library: MaterialLibrary):
|
|
442 |
"specific_heat": 1000.0,
|
443 |
"default_thickness": 0.1,
|
444 |
"embodied_carbon": 0.5,
|
445 |
-
"absorptivity":
|
446 |
"price": 50.0,
|
447 |
-
"emissivity":
|
448 |
})
|
449 |
is_edit = editor_state.get("is_edit", False)
|
450 |
original_name = editor_state.get("original_name", "")
|
@@ -502,10 +511,10 @@ def display_materials_tab(material_library: MaterialLibrary):
|
|
502 |
key="material_embodied_carbon_input"
|
503 |
)
|
504 |
absorptivity = st.number_input(
|
505 |
-
"
|
506 |
min_value=0.0,
|
507 |
max_value=1.0,
|
508 |
-
value=form_state.get("absorptivity", editor_state.get("absorptivity",
|
509 |
help="Solar radiation absorbed",
|
510 |
key="material_absorptivity_input"
|
511 |
)
|
@@ -520,7 +529,7 @@ def display_materials_tab(material_library: MaterialLibrary):
|
|
520 |
"Emissivity",
|
521 |
min_value=0.0,
|
522 |
max_value=1.0,
|
523 |
-
value=form_state.get("emissivity", editor_state.get("emissivity",
|
524 |
help="Ratio of radiation emitted by the material (0.0 to 1.0)",
|
525 |
key="material_emissivity_input"
|
526 |
)
|
@@ -578,9 +587,9 @@ def display_materials_tab(material_library: MaterialLibrary):
|
|
578 |
"specific_heat": 1000.0,
|
579 |
"default_thickness": 0.1,
|
580 |
"embodied_carbon": 0.5,
|
581 |
-
"absorptivity":
|
582 |
"price": 50.0,
|
583 |
-
"emissivity":
|
584 |
}
|
585 |
st.session_state.material_action = {"action": None, "id": None}
|
586 |
st.session_state.rerun_trigger = None
|
@@ -601,7 +610,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
|
|
601 |
st.subheader("Library Fenestrations")
|
602 |
with st.container():
|
603 |
library_fenestrations = list(material_library.library_glazing_materials.values())
|
604 |
-
if fenestration_filter == "None":
|
605 |
library_fenestrations = []
|
606 |
elif fenestration_filter != "All":
|
607 |
library_fenestrations = [f for f in library_fenestrations if f.__class__.__name__ == fenestration_filter]
|
@@ -742,7 +751,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
|
|
742 |
"name": "",
|
743 |
"shgc": 0.7,
|
744 |
"u_value": 5.0,
|
745 |
-
"h_o":
|
746 |
})
|
747 |
is_edit = editor_state.get("is_edit", False)
|
748 |
original_name = editor_state.get("original_name", "")
|
@@ -770,7 +779,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
|
|
770 |
h_o = st.number_input(
|
771 |
"Exterior Surface Conductance (W/m虏路K)",
|
772 |
min_value=0.0,
|
773 |
-
value=form_state.get("h_o", editor_state.get("h_o",
|
774 |
help="Exterior surface heat transfer coefficient",
|
775 |
key="fenestration_h_o_input"
|
776 |
)
|
@@ -810,7 +819,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
|
|
810 |
"name": "",
|
811 |
"shgc": 0.7,
|
812 |
"u_value": 5.0,
|
813 |
-
"h_o":
|
814 |
}
|
815 |
st.session_state.fenestration_action = {"action": None, "id": None}
|
816 |
st.session_state.rerun_trigger = None
|
|
|
18 |
from typing import Dict, List, Any, Optional, Tuple, Union
|
19 |
from enum import Enum
|
20 |
|
21 |
+
# Import default data and constants from centralized module
|
22 |
+
from app.m_c_data import SAMPLE_MATERIALS, SAMPLE_FENESTRATIONS, DEFAULT_MATERIAL_PROPERTIES, DEFAULT_WINDOW_PROPERTIES
|
23 |
|
24 |
# Configure logging
|
25 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
98 |
"Specific Heat (J/kg路K)": m.specific_heat,
|
99 |
"Default Thickness (m)": m.default_thickness,
|
100 |
"Embodied Carbon (kgCO鈧俥/kg)": m.embodied_carbon,
|
101 |
+
"Absorptivity": m.absorptivity,
|
102 |
"Price (USD/m虏)": m.price,
|
103 |
"Emissivity": m.emissivity
|
104 |
}
|
|
|
221 |
|
222 |
# Initialize material library
|
223 |
material_library = MaterialLibrary()
|
224 |
+
material_library.library_materials = {}
|
225 |
+
for k, m in st.session_state.project_data["materials"]["library"].items():
|
226 |
+
try:
|
227 |
+
material_library.library_materials[k] = Material(
|
228 |
+
name=k,
|
229 |
+
category=MaterialCategory(m["category"]),
|
230 |
+
conductivity=m["thermal_properties"]["conductivity"],
|
231 |
+
density=m["thermal_properties"]["density"],
|
232 |
+
specific_heat=m["thermal_properties"]["specific_heat"],
|
233 |
+
default_thickness=m["thickness_range"]["default"],
|
234 |
+
embodied_carbon=m["embodied_carbon"],
|
235 |
+
absorptivity=m.get("absorptivity", DEFAULT_MATERIAL_PROPERTIES["absorptivity"]),
|
236 |
+
price=m["cost"]["material"],
|
237 |
+
emissivity=m.get("emissivity", DEFAULT_MATERIAL_PROPERTIES["emissivity"]),
|
238 |
+
is_library=True
|
239 |
+
)
|
240 |
+
except KeyError as e:
|
241 |
+
logger.error(f"Error processing material {k}: Missing key {e}")
|
242 |
+
continue
|
243 |
+
|
244 |
+
material_library.library_glazing_materials = {}
|
245 |
+
for k, f in st.session_state.project_data["fenestrations"]["library"].items():
|
246 |
+
if f["type"] in ["window", "skylight"]:
|
247 |
+
try:
|
248 |
+
material_library.library_glazing_materials[k] = GlazingMaterial(
|
249 |
+
name=k,
|
250 |
+
shgc=f["performance"]["shgc"],
|
251 |
+
u_value=f["performance"]["u_value"],
|
252 |
+
h_o=f.get("h_o", DEFAULT_WINDOW_PROPERTIES["h_o"]),
|
253 |
+
is_library=True
|
254 |
+
)
|
255 |
+
except KeyError as e:
|
256 |
+
logger.error(f"Error processing fenestration {k}: Missing key {e}")
|
257 |
+
continue
|
258 |
|
259 |
with tab1:
|
260 |
display_materials_tab(material_library)
|
|
|
294 |
st.subheader("Materials")
|
295 |
# Category filter
|
296 |
filter_options = ["All", "None"] + MATERIAL_CATEGORIES
|
297 |
+
category = st.selectbox("Filter by Category", filter_options, Stuarts, key="material_filter")
|
298 |
|
299 |
st.subheader("Library Materials")
|
300 |
with st.container():
|
|
|
451 |
"specific_heat": 1000.0,
|
452 |
"default_thickness": 0.1,
|
453 |
"embodied_carbon": 0.5,
|
454 |
+
"absorptivity": DEFAULT_MATERIAL_PROPERTIES["absorptivity"],
|
455 |
"price": 50.0,
|
456 |
+
"emissivity": DEFAULT_MATERIAL_PROPERTIES["emissivity"]
|
457 |
})
|
458 |
is_edit = editor_state.get("is_edit", False)
|
459 |
original_name = editor_state.get("original_name", "")
|
|
|
511 |
key="material_embodied_carbon_input"
|
512 |
)
|
513 |
absorptivity = st.number_input(
|
514 |
+
"Absorptivity",
|
515 |
min_value=0.0,
|
516 |
max_value=1.0,
|
517 |
+
value=form_state.get("absorptivity", editor_state.get("absorptivity", DEFAULT_MATERIAL_PROPERTIES["absorptivity"])),
|
518 |
help="Solar radiation absorbed",
|
519 |
key="material_absorptivity_input"
|
520 |
)
|
|
|
529 |
"Emissivity",
|
530 |
min_value=0.0,
|
531 |
max_value=1.0,
|
532 |
+
value=form_state.get("emissivity", editor_state.get("emissivity", DEFAULT_MATERIAL_PROPERTIES["emissivity"])),
|
533 |
help="Ratio of radiation emitted by the material (0.0 to 1.0)",
|
534 |
key="material_emissivity_input"
|
535 |
)
|
|
|
587 |
"specific_heat": 1000.0,
|
588 |
"default_thickness": 0.1,
|
589 |
"embodied_carbon": 0.5,
|
590 |
+
"absorptivity": DEFAULT_MATERIAL_PROPERTIES["absorptivity"],
|
591 |
"price": 50.0,
|
592 |
+
"emissivity": DEFAULT_MATERIAL_PROPERTIES["emissivity"]
|
593 |
}
|
594 |
st.session_state.material_action = {"action": None, "id": None}
|
595 |
st.session_state.rerun_trigger = None
|
|
|
610 |
st.subheader("Library Fenestrations")
|
611 |
with st.container():
|
612 |
library_fenestrations = list(material_library.library_glazing_materials.values())
|
613 |
+
if fenest Riyadh, key="fenestration_filter" == "None":
|
614 |
library_fenestrations = []
|
615 |
elif fenestration_filter != "All":
|
616 |
library_fenestrations = [f for f in library_fenestrations if f.__class__.__name__ == fenestration_filter]
|
|
|
751 |
"name": "",
|
752 |
"shgc": 0.7,
|
753 |
"u_value": 5.0,
|
754 |
+
"h_o": DEFAULT_WINDOW_PROPERTIES["h_o"]
|
755 |
})
|
756 |
is_edit = editor_state.get("is_edit", False)
|
757 |
original_name = editor_state.get("original_name", "")
|
|
|
779 |
h_o = st.number_input(
|
780 |
"Exterior Surface Conductance (W/m虏路K)",
|
781 |
min_value=0.0,
|
782 |
+
value=form_state.get("h_o", editor_state.get("h_o", DEFAULT_WINDOW_PROPERTIES["h_o"])),
|
783 |
help="Exterior surface heat transfer coefficient",
|
784 |
key="fenestration_h_o_input"
|
785 |
)
|
|
|
819 |
"name": "",
|
820 |
"shgc": 0.7,
|
821 |
"u_value": 5.0,
|
822 |
+
"h_o": DEFAULT_WINDOW_PROPERTIES["h_o"]
|
823 |
}
|
824 |
st.session_state.fenestration_action = {"action": None, "id": None}
|
825 |
st.session_state.rerun_trigger = None
|