nx_ice_scale.nx
buildroot/runtime/nx_ice_scale.nx
about
nx_ice_scale.nx -- PERSONAL TO INDUSTRIAL: what changes when you make more,
and the direction that surprises people.
===== THE FINDING THIS ORGAN EXISTS TO CARRY ======================
**SCALING UP IMPROVES ICE CRYSTAL SIZE. The artisan premium story is
backwards on this axis, and the mechanism is not subtle.**
A batch freezer holds the mix in the barrel for five to fifteen minutes
against a barrel wall only a little colder than the draw temperature. A
continuous freezer pushes it through in about thirty seconds against a
wall at -26 to -28 C. Nucleation rate rises steeply with undercooling and
growth time is what lets crystals coarsen, so the industrial machine
produces MORE and SMALLER crystals, and the small-batch machine produces
fewer and larger ones. Cold extrusion pushes this further, drawing to
-15 to -18 C with crystals and air cells two to three times smaller again.
So the quality-versus-scale trade that a formulator expects does not exist
here. It runs the other way, and a business plan that promises a superior
product BECAUSE it is made in small batches is promising the opposite of
what the freezer does.
===== WHERE THE SMALL PRODUCER ACTUALLY COMPETES ==================
Not at the freezer. At the COLD CHAIN. nx_ice_recrystal established that
ripening is driven by temperature FLUCTUATION rather than mean temperature,
and nx_ice_stabiliser established that stabilisers act during STORAGE and
not during freezing. Both point the same way: what happens after the
product leaves the barrel dominates what happened inside it.
A producer selling within days, through a freezer that is never opened to
a warm room, holds an advantage that no continuous freezer can take back --
and a national brand shipping through open-faced retail cabinets that reach
-9 C is carrying damage the plant cannot prevent. That is the real axis,
and it is the opposite of the one the marketing uses.
===== WHAT IS DERIVED AND WHAT IS SUPPLIED ========================
**The thermodynamics is DERIVED.** Freezing energy per kilogram follows
from the latent heat of fusion, the water fraction, the frozen fraction and
dependencies 1 imports · 1 importers
imports: nx_syscalls.nx
imported by: nx_ice_scale_gate.nx
structs
| none |
consts
| 63 | const ISC_MAGIC_1200: i64 = 1200 |
| 64 | const ISC_MAGIC_18000: i64 = 18000 |
| 65 | const ISC_MAGIC_22000: i64 = 22000 |
| 66 | const ISC_MAGIC_27000: i64 = 27000 |
| 67 | const ISC_MAGIC_5000: i64 = 5000 |
| 68 | const ISC_MAGIC_6000: i64 = 6000 |
| 69 | const ISC_MAGIC_5500: i64 = 5500 |
| 70 | const ISC_MAGIC_16000: i64 = 16000 |
| 71 | const ISC_MAGIC_35000: i64 = 35000 |
| 72 | const ISC_MAGIC_40000: i64 = 40000 |
| 73 | const ISC_MAGIC_3600: i64 = 3600 |
| 74 | const ISC_MAGIC_1000000: i64 = 1000000 |
| 76 | const ISC_INVALID: i64 = 0 - 1 |
| 77 | const ISC_UNKNOWN: i64 = 0 - 2 |
| 81 | const ISC_BATCH_HOME: i64 = 0 |
| 82 | const ISC_BATCH_COMMERCIAL: i64 = 1 |
| 83 | const ISC_CONTINUOUS: i64 = 2 |
| 84 | const ISC_COLD_EXTRUSION: i64 = 3 |
| 89 | const ISC_LATENT_FUSION_J: i64 = 334000 |
| 92 | const ISC_CP_UNFROZEN_J: i64 = 3300 |
| 93 | const ISC_CP_FROZEN_J: i64 = 2000 |
| 95 | const ISC_J_PER_WH: i64 = 3600 |
| 99 | const ISC_RETAIL_CABINET_MC: i64 = 0 - 9000 |
functions
| 104 | func isc_residence_s(class: i64) -> i64 |
| 114 | func isc_barrel_wall_mc(class: i64) -> i64 called by 1: isc_undercooling_mc |
| 123 | func isc_draw_mc(class: i64) -> i64 called by 1: isc_undercooling_mc |
| 132 | func isc_undercooling_mc(class: i64) -> i64 |
| 146 | func isc_crystal_at_draw_q1(class: i64) -> i64 called by 1: t2 |
| 155 | func isc_batch_makes_larger_crystals(batch: i64, continuous: i64) -> i64 called by 1: t3 |
| 164 | func isc_scaling_improves_crystal_size() -> i64 { return 1 } called by 1: t3 |
| 165 | func isc_small_batch_is_finer() -> i64 { return 0 } called by 1: t3 |
| 168 | func isc_hardening_air_mc(class: i64) -> i64 |
| 176 | func isc_hardening_minutes(class: i64) -> i64 called by 1: t4 |
| 189 | func isc_has_true_hardening(class: i64) -> i64 called by 1: t4 |
| 197 | func isc_throughput_l_per_h(class: i64, barrel_l: i64) -> i64 |
| 213 | func isc_freeze_energy_j_per_kg(t_in_mc: i64, t_fp_mc: i64, t_final_mc: i64, water_permil: i64, frozen_permil: i64) -> i64 |
| 230 | func isc_latent_share_permil(t_in_mc: i64, t_fp_mc: i64, t_final_mc: i64, water_permil: i64, frozen_permil: i64) -> i64 |
| 241 | func isc_electrical_wh_per_kg(thermal_j: i64, cop_q2: i64) -> i64 |
| 252 | func isc_cogs_per_l_cents(ingredient_c: i64, energy_c: i64, labour_c: i64, packaging_c: i64) -> i64 called by 1: t10 |
| 263 | func isc_energy_cost_per_l_cents_q2(wh_per_kg: i64, mix_density_q3: i64, tariff_c_per_kwh: i64) -> i64 |
| 276 | func isc_labour_per_l_cents_q2(operator_c_per_h: i64, operators: i64, throughput_l_per_h: i64) -> i64 |
| 283 | func isc_cost_is_indicative() -> i64 { return 1 } called by 1: t10 |
| 284 | func isc_holds_any_verified_price() -> i64 { return 0 } called by 1: t10 |
| 290 | func isc_retail_cabinet_is_abuse(storage_target_mc: i64) -> i64 called by 1: t11 |
| 298 | func isc_short_chain_beats_plant_freezer() -> i64 { return 1 } called by 1: t11 |
| 299 | func isc_quality_advantage_is_at_the_freezer() -> i64 { return 0 } called by 1: t11 |