Coverage for teaser/data/output/usecond_output.py: 100%
49 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-04-29 16:01 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-04-29 16:01 +0000
1"""This module contains function to save UseConditions classes."""
3import collections
4import json
5import warnings
6import teaser.logic.utilities as utilities
9def save_use_conditions(use_cond, data_class):
10 """Use conditions saver.
12 Saves use conditions according to their usage type in the the JSON file
13 for use conditions in InputData. If the Project parent is set, it
14 automatically saves it to the file given in Project.data. Alternatively
15 you can specify a path to a file of UseConditions. If this
16 file does not exist, a new file is created.
18 Parameters
19 ----------
20 bound_cond : UseCondtiions()
21 Instance of TEASERs
22 BuildingObjects.UseCondtiions
23 data_class : DataClass()
24 DataClass containing the bindings for TypeBuildingElement and
25 Material (typically this is the data class stored in prj.data,
26 but the user can individually change that.ile
28 """
29 if use_cond.usage in data_class.conditions_bind.keys():
30 add_to_json = False
31 warnings.warn(
32 "Usage already exist in this JSON, consider "
33 + "revising your inputs. The UseConditions is "
34 + "NOT saved into JSON"
35 )
36 else:
37 add_to_json = True
39 data_class.conditions_bind["version"] = "0.7"
41 if add_to_json is True:
42 data_class.conditions_bind[use_cond.usage] = collections.OrderedDict()
43 data_class.conditions_bind[use_cond.usage][
44 "typical_length"
45 ] = use_cond.typical_length
46 data_class.conditions_bind[use_cond.usage][
47 "typical_width"
48 ] = use_cond.typical_width
49 data_class.conditions_bind[use_cond.usage][
50 "with_heating"
51 ] = use_cond.with_heating
52 data_class.conditions_bind[use_cond.usage][
53 "T_threshold_heating"
54 ] = use_cond.T_threshold_heating
55 data_class.conditions_bind[use_cond.usage][
56 "T_threshold_cooling"
57 ] = use_cond.T_threshold_cooling
58 data_class.conditions_bind[use_cond.usage][
59 "with_cooling"
60 ] = use_cond.with_cooling
61 data_class.conditions_bind[use_cond.usage][
62 "fixed_heat_flow_rate_persons"
63 ] = use_cond.fixed_heat_flow_rate_persons
64 data_class.conditions_bind[use_cond.usage][
65 "activity_degree_persons"
66 ] = use_cond.activity_degree_persons
67 data_class.conditions_bind[use_cond.usage][
68 "activity_degree_persons"
69 ] = use_cond.activity_degree_persons
70 data_class.conditions_bind[use_cond.usage]["persons"] = use_cond.persons
71 data_class.conditions_bind[use_cond.usage][
72 "internal_gains_moisture_no_people"
73 ] = use_cond.internal_gains_moisture_no_people
74 data_class.conditions_bind[use_cond.usage][
75 "ratio_conv_rad_persons"
76 ] = use_cond.ratio_conv_rad_persons
77 data_class.conditions_bind[use_cond.usage]["machines"] = use_cond.machines
78 data_class.conditions_bind[use_cond.usage][
79 "ratio_conv_rad_machines"
80 ] = use_cond.ratio_conv_rad_machines
82 data_class.conditions_bind[use_cond.usage][
83 "lighting_power"
84 ] = use_cond.lighting_power
85 data_class.conditions_bind[use_cond.usage][
86 "fixed_lighting_power"
87 ] = use_cond.fixed_lighting_power
88 data_class.conditions_bind[use_cond.usage][
89 "use_maintained_illuminance"
90 ] = use_cond.use_maintained_illuminance
91 data_class.conditions_bind[use_cond.usage][
92 "ratio_conv_rad_lighting"
93 ] = use_cond.ratio_conv_rad_lighting
94 data_class.conditions_bind[use_cond.usage][
95 "maintained_illuminance"
96 ] = use_cond.maintained_illuminance
97 data_class.conditions_bind[use_cond.usage][
98 "lighting_efficiency_lumen"
99 ] = use_cond.lighting_efficiency_lumen
101 data_class.conditions_bind[use_cond.usage][
102 "use_constant_infiltration"
103 ] = use_cond.use_constant_infiltration
104 data_class.conditions_bind[use_cond.usage][
105 "base_infiltration"
106 ] = use_cond.base_infiltration
107 data_class.conditions_bind[use_cond.usage][
108 "max_user_infiltration"
109 ] = use_cond.max_user_infiltration
110 data_class.conditions_bind[use_cond.usage][
111 "max_overheating_infiltration"
112 ] = use_cond.max_overheating_infiltration
113 data_class.conditions_bind[use_cond.usage][
114 "max_summer_infiltration"
115 ] = use_cond.max_summer_infiltration
116 data_class.conditions_bind[use_cond.usage][
117 "winter_reduction_infiltration"
118 ] = use_cond.winter_reduction_infiltration
119 data_class.conditions_bind[use_cond.usage]["min_ahu"] = use_cond.min_ahu
120 data_class.conditions_bind[use_cond.usage]["max_ahu"] = use_cond.max_ahu
121 data_class.conditions_bind[use_cond.usage]["with_ahu"] = use_cond.with_ahu
122 data_class.conditions_bind[use_cond.usage][
123 "heating_profile"
124 ] = use_cond.heating_profile
125 data_class.conditions_bind[use_cond.usage][
126 "cooling_profile"
127 ] = use_cond.cooling_profile
128 data_class.conditions_bind[use_cond.usage][
129 "persons_profile"
130 ] = use_cond.persons_profile
131 data_class.conditions_bind[use_cond.usage][
132 "machines_profile"
133 ] = use_cond.machines_profile
134 data_class.conditions_bind[use_cond.usage][
135 "lighting_profile"
136 ] = use_cond.lighting_profile
137 data_class.conditions_bind[use_cond.usage][
138 "with_ideal_thresholds"
139 ] = use_cond.with_ideal_thresholds
141 with open(utilities.get_full_path(data_class.path_uc), "w") as file:
142 file.write(
143 json.dumps(data_class.conditions_bind, indent=4, separators=(",", ": "))
144 )