Cleanroom Zone
GMP cleanroom suite served by an AHU, with controlled temperature, humidity, positive pressure cascade, air changes, HEPA loading, door events, and particle counts.

What it is
One GMP cleanroom suite and the air handling unit (AHU) that serves it. The suite holds temperature and relative humidity in tight bands, keeps a positive pressure against the adjacent corridor, and changes the room air target_ach times per hour through a HEPA filter. Door events, shift activity and filter loading move pressure and particle counts the way a pharma quality team watches them.
t=0 is the start of shift 1. The 24-hour profile runs two production shifts with breaks, then overnight cleaning at rest.
Used in
pharma-cleanroom: the Grade B, C, D and gowning suites
What it tracks
| Member | Description |
|---|---|
running | AHU operating state. |
room_temperature | Suite temperature, held within a tight band around temp_setpoint_c. |
relative_humidity | Suite humidity in % RH. It follows the supply-air dew point and the humidifier. |
supply_dewpoint / humidifier_output | Humidity actuation path. |
differential_pressure | Pressure in Pa against the adjacent corridor. Falls when a door opens or airflow drops. |
air_changes_per_hour | Air changes per hour (ACH): supply_airflow divided by room_volume_m3. |
supply_airflow | Delivered airflow in m³/h. |
fan_speed | AHU fan speed. 80 % delivers the design airflow. |
hepa_filter_dp | HEPA filter pressure drop in Pa. Rises with lifecycle wear and loading. |
particle_count_0_5um / particle_count_5um | Particles of 0.5 µm and larger, and 5 µm and larger, per m³ (UInt32). They rise with shift activity, with airflow loss, and when the pressure cascade falls and air floods in from the adjacent lower grade. |
dp_alarm | Pressure below dp_alarm_min_pa for about 2 minutes. |
temp_alarm / rh_alarm | Temperature or humidity outside its setpoint ± band for about 2 minutes. |
particle_alert / particle_action | Worst particle size above the alert level (particle_alert_fraction of the limit) or the action limit. |
particle_limit_0_5um / particle_limit_5um | The action limit that applies now: in-operation while staffed, at-rest once the room has been unstaffed for 20 minutes. |
excursion_active | True while any of dp_alarm, temp_alarm, rh_alarm or particle_action is true. |
excursion_count | Rising edges of excursion_active: exactly one per new excursion. An alarm that starts while another is active joins that excursion. |
dp_excursion_count / temp_excursion_count / rh_excursion_count / particle_excursion_count | Rising edges of each alarm (particle_action for particles). Their sum can exceed excursion_count when alarms overlap. |
door_open | Door state, driven by shift activity. |
shift_activity | Staff activity profile that drives door events and particle generation. |
power_draw / energy_total | AHU fan and humidifier energy. |
Fault modes
hepa_filter_loading: needs the early_wear stage and fan speed above 20 %. Filter pressure drop rises ×1.8 and airflow falls ×0.85 over a 1800 s ramp, for 3600 s. The weaker airflow also pulls the pressure cascade down.pressure_cascade_loss: needs the degraded stage, fan speed above 20 % and differential pressure above 5 Pa. The pressure target drops 20 Pa for 900 s, so the room can go negative against the corridor. This is the key GMP alarm.humidifier_failure: needs the degraded stage, fan speed above 20 % and humidifier output above 5 %. Output ramps to zero over 300 s and stays there for 2400 s, and humidity drifts down by about 18 % RH.door_left_open: needs fan speed above 20 % and shift activity above 0.3, with no lifecycle gate (0.04 per hour). The door stays open for 240 s, the cascade collapses,dp_alarmasserts and 5 µm counts climb towards the alert level.supply_fan_degraded: needs fan speed above 20 %, no lifecycle gate (0.01 per hour). The fan delivers about 70 % of its reference for 1800 s, so ACH and the cascade collapse and particles build up: a pressure and particle excursion together.humidifier_trip: likehumidifier_failurebut with no lifecycle gate (0.008 per hour) and a 1800 s duration. Humidity leaves its band andrh_alarmasserts.cooling_loss: needs fan speed above 20 %, no lifecycle gate (0.01 per hour). The room warms 4 K above setpoint over 900 s and holds for 3600 s, sotemp_alarmasserts.
Environmental monitoring (EU GMP Annex 1)
Each room is monitored the way Annex 1 asks: differential pressure against the adjacent lower grade (at least 10 Pa between grades), temperature and humidity bands, and airborne particle counts at 0.5 µm and 5 µm. Alarms assert after about 2 minutes out of band, so brief door openings do not alarm, and clear about 2 minutes after recovery.
The action limits are parameters, so each grade gets its own. Per m³ at ≥ 0.5 µm and ≥ 5 µm (Annex 1 (2022), Table 5):
| Grade | At rest | In operation |
|---|---|---|
| A | 3,520 / 29 | 3,520 / 29 |
| B | 3,520 / 29 | 352,000 / 2,930 |
| C | 352,000 / 2,930 | 3,520,000 / 29,300 |
| D | 3,520,000 / 29,300 | not predetermined (the at-rest limit is used) |
The alert level is particle_alert_fraction (default 0.7) of the action limit. An alert is an early warning for trending, not an excursion. The room counts as in operation while staffed and for 20 minutes afterwards, the clean-up period before at-rest sampling.
Typical counts are parameters too (particle_rest_*, particle_op_*, quoted at design airflow), plus particle_ingress_*, the extra count that floods in from the adjacent lower grade when the cascade is fully lost. An open door, a fan fault or filter loading therefore drives pressure alarms first and particle alarms when the loss is severe.
Key parameters
| Parameter | Default | Unit |
|---|---|---|
target_ach | 20 | ACH |
room_volume_m3 | 150 | m3 |
pressure_setpoint_pa | 15 | Pa |
temp_setpoint_c | 20 | °C |
rh_setpoint_pct | 45 | % |
dp_alarm_min_pa | 5 | Pa |
temp_band_c / rh_band_pct | 2 / 10 | °C / % |
particle_alert_fraction | 0.7 | pu |
particle_limit_rest_0_5um / particle_limit_op_0_5um | 352,000 / 3,520,000 | count/m³ |
particle_limit_rest_5um / particle_limit_op_5um | 2,930 / 29,300 | count/m³ |
particle_rest_* / particle_op_* / particle_ingress_* (0.5 µm, 5 µm) | Grade C values | count/m³ |
Defaults describe a Grade C suite. pharma-cleanroom sets them per room.
Input port
| Port | Default | Unit |
|---|---|---|
makeup_air_temp | 16 | °C |
Supply air temperature of the make-up air unit feeding the suite. The suite AHU holds the setpoint, so the port leaks only 0.03 K per K of swing around its 16 °C default into room_temperature. Unbound, the room stays on temp_setpoint_c. pharma-cleanroom binds every zone to makeup-air-001 supply_air_temp.
Design airflow is target_ach × room_volume_m3 (3000 m³/h by default). Typical particle counts are quoted at design airflow. Losing airflow raises them in proportion.
Use cases
- Pressure cascade and door-event monitoring.
- Alarm tuning for differential pressure, humidity, and HEPA filter loading.
- Particle-count excursion and recovery-time analysis.
- Counting environmental excursions per room over a simulated week.
- Environmental monitoring dashboards.
Customize
miravo models add cleanroom-zone --from cleanroom-zonemiravo models inspect cleanroom-zoneWas this page useful?
Last updated on
District heating substation
District heating customer substation with a heat exchanger, pipe transport delay from the plant, seasonal weather-driven demand, energy-balance primary flow, and fault health.
Diesel generator
Model a diesel backup generator with engine state, electrical load response, fuel depletion, runtime health, and faults for power scenarios.
Miravo