@@ -6,9 +6,8 @@ Reduce insulation depth toward reference values (flatten fur/feathers).
66Returns updated `InsulationLimits` and `organism`.
77"""
88function piloerect (organism:: Organism , insulation_limits:: InsulationLimits )
9- phys = organism. traits. physiology
10- insulation_pars = HeatExchange. insulationpars (phys)
11- shape_pars = HeatExchange. shapepars (phys)
9+ insulation_pars = HeatExchange. insulationpars (organism)
10+ shape_pars = HeatExchange. shapepars (organism)
1211 fibre_length_dorsal = insulation_pars. dorsal. length
1312 fibre_length_ventral = insulation_pars. ventral. length
1413
@@ -23,17 +22,11 @@ function piloerect(organism::Organism, insulation_limits::InsulationLimits)
2322 )
2423
2524 # Update limits
26- dorsal_limits′ = setproperties (insulation_limits. dorsal; current= insulation_depth_dorsal)
27- ventral_limits′ = setproperties (insulation_limits. ventral; current= insulation_depth_ventral)
28- insulation_limits′ = InsulationLimits (; dorsal= dorsal_limits′, ventral= ventral_limits′)
29-
30- # Update organism insulation parameters (nested FibreProperties)
31- dorsal′ = setproperties (insulation_pars. dorsal; depth= insulation_depth_dorsal)
32- ventral′ = setproperties (insulation_pars. ventral; depth= insulation_depth_ventral)
33- insulation_pars′ = setproperties (insulation_pars; dorsal= dorsal′, ventral= ventral′)
25+ insulation_limits = @set insulation_limits. dorsal. current = insulation_depth_dorsal
26+ insulation_limits = @set insulation_limits. ventral. current = insulation_depth_ventral
3427
3528 # Compute mean insulation properties
36- ventral_frac = HeatExchange. radiationpars (phys ). ventral_fraction
29+ ventral_frac = HeatExchange. radiationpars (organism ). ventral_fraction
3730 mean_insulation_depth = insulation_depth_dorsal * (1 - ventral_frac) +
3831 insulation_depth_ventral * ventral_frac
3932 mean_fibre_diameter = insulation_pars. dorsal. diameter * (1 - ventral_frac) +
@@ -46,12 +39,12 @@ function piloerect(organism::Organism, insulation_limits::InsulationLimits)
4639 fat = BiophysicalGeometry. inner_insulation (organism. body. insulation)
4740 geometry = Body (shape_pars, CompositeInsulation (fur, fat))
4841
49- # Update organism immutably
50- phys′ = setproperties (phys; insulation_pars= insulation_pars′)
51- traits′ = setproperties ( organism. traits; physiology= phys′)
52- organism′ = setproperties ( organism; traits = traits′, body = geometry)
42+ # Update organism
43+ organism = @set organism . traits . physiology . insulation_pars. dorsal . depth = insulation_depth_dorsal
44+ organism = @set organism. traits. physiology. insulation_pars . ventral . depth = insulation_depth_ventral
45+ organism = @set organism. body = geometry
5346
54- return insulation_limits′ , organism′
47+ return insulation_limits, organism
5548end
5649
5750"""
@@ -62,25 +55,24 @@ Increase body shape parameter (uncurl from ball to elongated).
6255Returns updated `SteppedParameter` and `organism`.
6356"""
6457function uncurl (organism:: Organism , shape_b_limits:: SteppedParameter )
65- phys = organism. traits. physiology
66- shape_pars = HeatExchange. shapepars (phys)
58+ shape_pars = HeatExchange. shapepars (organism)
6759
6860 # No meaning to uncurl a sphere
6961 if shape_pars isa Sphere
70- shape_b_limits′ = setproperties (shape_b_limits; current= shape_b_limits. max)
71- return shape_b_limits′ , organism
62+ shape_b_limits = @set shape_b_limits . current = shape_b_limits. max
63+ return shape_b_limits, organism
7264 end
7365
7466 shape_b = min (shape_b_limits. current + shape_b_limits. step, shape_b_limits. max)
75- shape_b_limits′ = setproperties (shape_b_limits; current= shape_b)
67+ shape_b_limits = @set shape_b_limits . current = shape_b
7668
77- new_shape_pars = setproperties (shape_pars; b = shape_b)
69+ new_shape_pars = @set shape_pars . b = shape_b
7870 fat = BiophysicalGeometry. inner_insulation (organism. body. insulation)
7971 fur = BiophysicalGeometry. outer_insulation (organism. body. insulation)
8072 geometry = Body (new_shape_pars, CompositeInsulation (fur, fat))
81- organism′ = setproperties (organism; body= geometry)
73+ organism = @set organism . body = geometry
8274
83- return shape_b_limits′ , organism′
75+ return shape_b_limits, organism
8476end
8577
8678"""
@@ -91,18 +83,12 @@ Increase tissue thermal conductivity (vasodilation).
9183Returns updated `SteppedParameter` and `organism`.
9284"""
9385function vasodilate (organism:: Organism , k_flesh_limits:: SteppedParameter )
94- phys = organism. traits. physiology
9586 k_flesh = min (k_flesh_limits. current + k_flesh_limits. step, k_flesh_limits. max)
96- k_flesh_limits′ = setproperties (k_flesh_limits; current= k_flesh)
87+ k_flesh_limits = @set k_flesh_limits . current = k_flesh
9788
98- conduction_pars_internal = setproperties (
99- HeatExchange. conductionpars_internal (phys); k_flesh
100- )
101- phys′ = setproperties (phys; conduction_pars_internal)
102- traits′ = setproperties (organism. traits; physiology= phys′)
103- organism′ = setproperties (organism; traits= traits′)
89+ organism = @set organism. traits. physiology. conduction_pars_internal. k_flesh = k_flesh
10490
105- return k_flesh_limits′ , organism′
91+ return k_flesh_limits, organism
10692end
10793
10894"""
@@ -113,23 +99,18 @@ Allow core temperature to rise (hyperthermia).
11399Returns updated `SteppedParameter`, new Q_minimum, and `organism`.
114100"""
115101function hyperthermia (organism:: Organism , T_core_limits:: SteppedParameter , pant_cost)
116- phys = organism. traits. physiology
117102 Q_minimum_ref = thermoregulation (organism). Q_minimum_ref
118103 T_core = min (T_core_limits. current + T_core_limits. step, T_core_limits. max)
119- T_core_limits′ = setproperties (T_core_limits; current= T_core)
104+ T_core_limits = @set T_core_limits . current = T_core
120105
121- metabolism = HeatExchange. metabolismpars (phys )
106+ metabolism = HeatExchange. metabolismpars (organism )
122107 q10mult = metabolism. q10^ ((ustrip (u " K" , T_core - T_core_limits. reference)) / 10 )
123108 Q_minimum = (Q_minimum_ref + pant_cost) * q10mult
124109
125- new_metabolism = setproperties (
126- metabolism; T_core= T_core, Q_metabolism= Q_minimum
127- )
128- phys′ = setproperties (phys; metabolism_pars= new_metabolism)
129- traits′ = setproperties (organism. traits; physiology= phys′)
130- organism′ = setproperties (organism; traits= traits′)
110+ organism = @set organism. traits. physiology. metabolism_pars. T_core = T_core
111+ organism = @set organism. traits. physiology. metabolism_pars. Q_metabolism = Q_minimum
131112
132- return T_core_limits′ , Q_minimum, organism′
113+ return T_core_limits, Q_minimum, organism
133114end
134115
135116"""
@@ -140,33 +121,24 @@ Increase panting rate for evaporative cooling.
140121Returns updated `PantingLimits`, new Q_minimum, and `organism`.
141122"""
142123function pant (organism:: Organism , panting_limits:: PantingLimits )
143- phys = organism. traits. physiology
144124 Q_minimum_ref = thermoregulation (organism). Q_minimum_ref
145125 pant_rate_limits = panting_limits. pant
146126 pant_rate = min (pant_rate_limits. current + pant_rate_limits. step, pant_rate_limits. max)
147127
148128 pant_cost = ((pant_rate - 1 ) / (pant_rate_limits. max + 1e-6 - 1 )) *
149129 (panting_limits. multiplier - 1 ) * Q_minimum_ref
150130
151- pant_rate_limits′ = setproperties (pant_rate_limits; current= pant_rate)
152- panting_limits′ = setproperties ( panting_limits; pant = pant_rate_limits′, cost = pant_cost)
131+ panting_limits = @set panting_limits . pant . current = pant_rate
132+ panting_limits = @set panting_limits. cost = pant_cost
153133
154- metabolism = HeatExchange. metabolismpars (phys )
134+ metabolism = HeatExchange. metabolismpars (organism )
155135 q10mult = metabolism. q10^ ((ustrip (u " K" , metabolism. T_core - panting_limits. T_core_ref)) / 10 )
156136 Q_minimum = (Q_minimum_ref + pant_cost) * q10mult
157137
158- new_metabolism = setproperties (metabolism; Q_metabolism= Q_minimum)
159- new_respiration = setproperties (
160- HeatExchange. respirationpars (phys); pant= pant_rate
161- )
162- phys′ = setproperties (phys;
163- metabolism_pars= new_metabolism,
164- respiration_pars= new_respiration
165- )
166- traits′ = setproperties (organism. traits; physiology= phys′)
167- organism′ = setproperties (organism; traits= traits′)
138+ organism = @set organism. traits. physiology. metabolism_pars. Q_metabolism = Q_minimum
139+ organism = @set organism. traits. physiology. respiration_pars. pant = pant_rate
168140
169- return panting_limits′ , Q_minimum, organism′
141+ return panting_limits, Q_minimum, organism
170142end
171143
172144"""
@@ -177,14 +149,10 @@ Increase skin wetness for evaporative cooling (sweating).
177149Returns updated `SteppedParameter` and `organism`.
178150"""
179151function sweat (organism:: Organism , skin_wetness_limits:: SteppedParameter )
180- phys = organism. traits. physiology
181152 skin_wetness = min (skin_wetness_limits. current + skin_wetness_limits. step, skin_wetness_limits. max)
182- skin_wetness_limits′ = setproperties (skin_wetness_limits; current= skin_wetness)
153+ skin_wetness_limits = @set skin_wetness_limits . current = skin_wetness
183154
184- new_evaporation = setproperties (HeatExchange. evaporationpars (phys); skin_wetness)
185- phys′ = setproperties (phys; evaporation_pars= new_evaporation)
186- traits′ = setproperties (organism. traits; physiology= phys′)
187- organism′ = setproperties (organism; traits= traits′)
155+ organism = @set organism. traits. physiology. evaporation_pars. skin_wetness = skin_wetness
188156
189- return skin_wetness_limits′ , organism′
157+ return skin_wetness_limits, organism
190158end
0 commit comments