Neatbo.

Why a cooling fallback must remain a failed row

Distinguish legitimate zero cooling from solver fallback, and keep failed measurements visible when interpreting PMV and PPD.

A value needs the branch that produced it

The source discussion asks for a complete rowwise PMV/PPD workflow using pandas.itertuples. Its private measurement table is unavailable. The useful requirement is therefore to preserve each measurement and its outcome, rather than pretend to reproduce an inaccessible dataset.

This tool fixes ISO7730-2005 and ASHRAE55-2020 from jsthermalcomfort 1.4.0. ISO does not use the ASHRAE cooling route. In ASHRAE, a speed no greater than 0.1 m/s needs no cooling adjustment. A CE solver can also return zero with a fallback warning; the numeric value alone cannot tell these cases apart.

Three meanings to keep separate
CaseCE interpretationRow treatment
ISO7730-2005ASHRAE cooling is not part of this route.PMV/PPD still require valid inputs and applicability.
ASHRAE55-2020, SI relative speed ≤0.1 m/sZero is the not-required cooling value.It does not itself make the PMV/PPD row a failure.
ASHRAE cooling solver returns warned fallback zeroZero is a failure fallback, not a successful CE estimate.Keep cooling-failed, the warning and null PMV/PPD.

Follow the source units before judging a cooling value

SI temperatures are °C and speed is m/s; IP uses °F and ft/s. IP values are converted to SI before the CE calculation. CE itself is a temperature difference in °C. RH remains a percentage, and met and clo keep the same units in either system.

The supplied speed is already relative. Adding another relative-speed adjustment changes the measurement you claim to analyze. Similarly, dynamic clothing should be an explicit setting, not a silent correction. Compare input, effectiveSI and modelInputsSI so that conversion and cooling adjustments are visible.

  • Check the original temperature and speed units before applying the 0.1 m/s cooling boundary.
  • Keep the clothing and air-speed-control selections in the saved settings.
  • For a suspicious zero, inspect the cooling status and upstream warning before the final PMV cell.

A complete series is not a list of only the successful rows

Dropping every invalid or non-applicable measurement makes the surviving table look more uniformly usable than the original series. Keep repeated IDs with their ordinals, all auxiliary cells and every explicit status. A complete report can contain failed rows and still correctly account for the whole source.

invalid-input, not-applicable, cooling-failed, non-finite, non-convergent and engine-error rows retain null PMV/PPD rather than a fabricated comfort value. A whole-file syntax or UTF-8 failure is different: it does not yield a completed package. When sharing a filtered analysis, include counts and reasons for every excluded row.

  • Reconcile source rows, valid rows and all failed states before publishing an average or comparison.
  • Keep the original row ID and ordinal together so repeated labels do not merge measurements.
  • Retain the warning text and settings with any row excluded from downstream analysis.

Interpret PMV and PPD within the fixed model

PMV predicts mean thermal sensation; values near zero describe modeled neutrality. PPD estimates the percentage dissatisfied in a modeled group. Neither number is a direct survey, an assurance of every individual’s comfort or a health assessment.

Applicability is part of the result: the older ISO and ASHRAE paths have different allowed ranges, and ISO includes the explicit met ≥0.8 rule. Finite arithmetic outside those rules is not a valid row. PMV/PPD are emitted without output rounding; original CE and dynamic-clothing rounding are retained.

The standard identifiers ISO7730-2005 and ASHRAE55-2020 describe the implemented historical routes. They do not certify compliance with a newer edition. The linked workflow explains binding and exports; the live tool reference supplies the current parameters and full limits.

Share the audit package, not just a chart

Save thermal-comfort.csv, thermal-report.json, thermal-comfort.svg, the unchanged thermal-source.csv or thermal-source.json, settings.json and NOTICE.txt together. The SVG includes invalid states; the complete report and full cell reader preserve values that a paginated preview shortens. CSV and runtime values retain negative zero, with complete sign paths in the JSON report.

Plan the whole job against 32 MiB input, 100,000 rows, 2,000,000 cells including auxiliary and invalid values, 10,000 cooling rows, 1,000,000,000 actual work charges, 128 MiB combined physical downloads, 512 MiB jointly owned allocations and 300 seconds from capture to first publication. Text/copy are each capped at 128 MiB, compact typed JSON at 256 MiB, the aggregate at 640 MiB and transport at 2 GiB; those axes do not grant extra memory or simultaneous maximum capacity.

The iso-normal JSON example and complete two-row CSV sample have been checked. The CSV retains its valid result and the RH 150 row with null PMV/PPD in all six exported files. These example checks do not establish maximum joint capacity or acceptance of the complete browser workflow.

References

Tools in this category

Expand a tool to see its steps, options and supported formats, then open its workspace.

Thermal comfort seriesCalculate a complete PMV/PPD measurement series with explicit row states and six reproducible downloads.

Bind your temperature, already-relative speed, humidity, met and clo columns. Review PMV, PPD and any ASHRAE cooling effect alongside original cells and explicit failures, then save the full table, report, chart, original, settings and notice.

Steps

  1. Choose one complete UTF-8 CSV or JSON table and confirm the selected format.
  2. Bind one-based measurement roles; select SI/IP, the fixed model, clothing and air-speed-control settings.
  3. Run the complete series and reconcile all row ordinals, failed states, warnings and usable results.
  4. Read complete cell values and the full report, then save all six downloads with the original settings.

Available options

Source format
CSV · JSON
Unit system
SI (°C, m/s) · IP (°F, ft/s)
Fixed older model
ISO 7730:2005 · ASHRAE 55:2020
Apply dynamic clothing explicitly
Off by default
Occupants control air speed
On by default
Row ID
1

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Indoor temperature
2

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Mean radiant temperature
3

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Already-relative wind speed
4

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Relative humidity (%)
5

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Metabolic rate (met)
6

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Clothing insulation (clo)
7

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

External work (met)
null

Use one-based column positions. All numeric roles must differ. Leave external work blank only to declare zero; an explicitly bound missing cell remains invalid.

Capabilities and limits

  • Choose one original file or pasted complete text. Input is strict UTF-8 CSV with a header or JSON {schema:"neatbo.thermal-comfort.input.v1",columns:[...],rows:[...]}. A leading BOM and exact original bytes are retained. JSON cells are strings, finite numbers, booleans or null; nested cells and duplicate object keys are rejected.
  • Bind eight roles by one-based column positions: row ID, indoor temperature, mean radiant temperature, already-relative speed, RH, met, clo and optional external work. Numeric roles must be distinct. An unbound external-work role explicitly means zero; a bound blank/null/missing cell is invalid. All header, auxiliary, ragged and invalid cells count.
  • SI uses Celsius and m/s; IP uses Fahrenheit and ft/s. The original converter runs IP→SI before the cooling calculation, which uses its default SI route. RH is percent 0–100. Wind speed is already relative and is never adjusted again. Dynamic clothing is off by default and uses the original ISO/ASHRAE thresholds only when enabled.
  • Fixed jsthermalcomfort 1.4.0 models: ISO 7730:2005 or ASHRAE 55:2020, unrounded output and applicability limits enabled. ISO met≥0.8 is an explicit additional applicability rule. These models do not certify compliance with the latest standard.
  • Preserve every source row, repeated ID, complete raw token, decoded cell, UTF-16/UTF-8 location and setting. Invalid or non-applicable rows have explicit states and null PMV/PPD. Non-finite values, non-convergence and cooling fallback-zero warnings are failures, not valid comfort results.
  • ASHRAE cooling applies only above 0.1 m/s. Both original SET and ET computations run and are charged. Original PMV/clothing 150-iteration and Brent 100-iteration limits remain; no additional SET/ET local iteration ceiling is introduced.
  • Joint limits: 32 MiB input, 100,000 measurement rows, 2,000,000 source cells including headers/auxiliary/invalid cells, 10,000 cooling rows and 1,000,000,000 actual loop/call charges. All limits must also satisfy complete-output and owned-memory budgets; their simultaneous maxima are not promised.
  • Six full downloads: rows CSV, full report JSON, every-row SVG including invalid states, unchanged original, settings and complete license notice. Negative zero is retained in runtime values and CSV; the report records sorted complete numericNegativeZeroPaths to restore JSON number signs.
  • Physical downloads, complete report text and copied text each ≤128 MiB; full compact typed JSON ≤256 MiB; their aggregate ≤640 MiB; full binary plus escaped metadata/text transport census ≤2 GiB. Owned allocations share one 512 MiB preflight ceiling; it is not a measured maximum browser heap.
  • One absolute 300-second deadline covers source metadata/read, import, calculation, complete validation, cleanup, six native downloads and first result publication. Cancellation, failure or late cleanup delivers no partial result. Retain the same original and settings for a fresh task. Maximum joint capacity and real cross-engine browser acceptance are pending.
Open Thermal comfort series →