61 extracting inferno hardwired flammability params - #145
61 extracting inferno hardwired flammability params#145Eleanor Burke (eleanorgb) wants to merge 13 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This PR restructures JULES fire-related configuration by introducing a dedicated jules_inferno namelist (and module) for INFERNO/TRIFFID fire parameters, while also refactoring several standalone/ancillary routines into proper Fortran modules and tightening some CI/workflow configuration.
Changes:
- Added
jules_inferno_modand migrated INFERNO/TRIFFID fire switches and parameters (e.g.,l_inferno,l_trif_fire,z_burn_max, combustion completeness bounds, and new flammability tunables) out of other modules/namelists. - Added a new PFT parameter
fireveg_c_to_atmos(_io)and updated TRIFFID to use it for fire carbon-to-atmosphere partitioning.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 81 out of 89 changed files in this pull request and generated 2 comments.
Suppressed comments (7)
src/control/shared/jules_inferno_mod.F90:118
errorstatusis not initialised before being passed toereportin most branches (it is only assigned whenignition_methodis invalid). This can cause inconsistent or silent error handling depending on the compiler/runtime state.
src/control/shared/jules_inferno_mod.F90:129flam_sm_funcis used as a selector incalc_flam, but the namelist checker does not validate it. If a user sets an unexpected value,calc_flamcan use an uninitialisedf_sm_l.
src/science/fire/inferno/inferno_mod.F90:252l_cf_old_infernois hard-coded to.TRUE., which means the newjules_infernonamelist parameters (flam_*) are effectively ignored (relative humidity bounds andflam_rain_constare overridden). This defeats the purpose of extracting these parameters for tuning.
src/science/fire/inferno/inferno_mod.F90:295- The new rainfall scaling branch applies
EXP(-flam_rain_const * rain_l), butcheck_jules_infernorequiresflam_rain_const <= 0.0. With the leading minus this makes rainfall increase flammability and can overflow. The exponent should be consistent with the sign convention and should use a clearly defined rain unit.
src/science/fire/inferno/inferno_io_mod.F90:320 - Fuel normalisation is still hard-coded to 0.02/0.2, so the extracted
flam_fuel_low/flam_fuel_uptunables are not actually used.
rose-meta/jules-standalone/versions.py:99 - The upgrade macro sets
flam_rhum_low/flam_rhum_upto 0.1/0.9, but the model computes relative humidity in percent (0–100) andcheck_jules_infernoexpects 0–100. This would drastically change behaviour for upgraded apps.
self.add_setting(config, ["namelist:jules_inferno", "flam_rhum_low"], "0.1")
self.add_setting(config, ["namelist:jules_inferno", "flam_rhum_up"], "0.9")
doc/source/namelists/fire.nml.rst:169
- The literal word "buggy" in the namelist documentation looks like a placeholder and will ship to users.
buggy
| errorstatus = 101 | ||
| CALL ereport("check_jules_vegetation", errorstatus, & | ||
| 'ignition_method must be 1, 2 or 3') |
| ELSE IF ( flam_fuel_up < flam_fuel_low ) THEN | ||
| CALL ereport( TRIM(RoutineName), errorstatus, & | ||
| "flam_fuel_up must be >= flam_fuel_low") |
e05dcd0 to
ade67dc
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 32 out of 34 changed files in this pull request and generated 8 comments.
Suppressed comments (2)
src/control/shared/jules_inferno_mod.F90:479
- The standalone namelist-open failure message duplicates the same phrase twice, which makes the error noisy and harder to read.
IF ( ERROR /= 0 ) &
CALL log_fatal("init_inferno", "Error opening namelist file fire.nml " // &
"Error opening namelist file fire.nml " // &
"(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // &
TRIM(iomessage) // ")")
rose-meta/jules-shared/jules-inferno/HEAD/rose-meta.conf:63
flam_sm_lowis described as a fraction of saturation (0–1) in code/docs, but rose metadata allows up to 10.0 here. This inconsistency can lead to invalid configurations being accepted by rose but rejected at runtime.
url=https://metoffice.github.io/jules/latest/namelists/jules_inferno.nml.html#JULES_INFERNO::flam_rain_const
| @@ -1020,7 +987,7 @@ SUBROUTINE read_nml_jules_vegetation (unitnumber) | |||
| INTEGER, PARAMETER :: no_of_types = 3 | |||
| INTEGER, PARAMETER :: n_int = 11 | |||
| SUBROUTINE read_jules_inferno (unitnumber) | ||
|
|
||
| ! Description: | ||
| ! Read the JULES_INFERNO namelist | ||
|
|
||
| USE jules_inferno_mod, ONLY: & | ||
| print_nlist_jules_inferno, & | ||
| check_jules_inferno, read_nml_jules_inferno | ||
|
|
| IF (l_cf_old_inferno) THEN | ||
| rain_rate = rain_l * s_in_day | ||
| ! convert rain rate from kg/m2/s to mm/day | ||
| flam_l = MAX(MIN(10.0**Z_l * f_rhum_l * fuel_l * f_sm_l & | ||
| * EXP( cr * rain_rate) ,1.0) ,0.0) | ||
| END IF | ||
| ! flam_l = MAX(MIN(10.0**Z_l * f_rhum_l * fuel_l * f_sm_l & | ||
| ! * EXP( -flam_rain_const * rain_l) ,1.0) ,0.0) | ||
| ! EJB add units here for rain or add rain as a separate function - make flam_rain > 0 |
| =================== | ||
|
|
||
| This file contains a single namelist called :nml:lst:`FIRE_SWITCHES` that sets time-invariant parameters for performing wildfire-related calculations. | ||
| This file contains two namelists one called :nml:lst:`JULES_FIRE_WEATHER_INDEX` that sets time-invariant parameters for performing wildfire-related calculations. The second namelist is for parameters associated with the inferno fire model called :nml:lst:`JULES_INFERNO` |
| [namelist:jules_inferno=flam_sm_func] | ||
| compulsory=true | ||
| description=Lower soil moisture threshold for flammability | ||
| sort-key=Panel-J11 |
| ccrpm_min = rmdi, & | ||
| ! Minimum resistant plant material urn fraction (0 <= fraction <= 1) | ||
| ccrpm_max = rmdi, & | ||
| ! Resistant Plant Material burn fraction (0 <= fraction <= 1) |
| ! Must be called after init_soil to check soil tiling flags | ||
| CALL init_vegetation(nml_dir) | ||
|
|
||
| ! initialase inferno options |
There was a problem hiding this comment.
🟡 Changes recommended
There are confirmed functional issues (inverted z_burn_max missing-value check, calc_flam not correctly applying the new rainfall scaling parameter, and rose-stem JSON pointing at a non-existent source path) that would break configurations/builds.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (5)
Previously missed (1) — in code that hasn't changed since the last review.
src/initialisation/standalone/init_inferno_mod.F90:39
- init_inferno_mod redefines ignition_method option constants locally even though they already exist in jules_inferno_mod. Duplicating these values risks drift if they ever change; import the parameters from jules_inferno_mod instead.
src/science/fire/inferno/inferno_mod.F90:239
- calc_flam still hardcodes the rainfall scaling via
cr=-2.0*s_in_day, which makes the newflam_rain_constargument effectively unused and keeps the historical double conversion behaviour. Removingcrhere avoids having an unused/duplicated constant and ensures rainfall scaling is controlled via the namelist parameter.
doc/source/namelists/fire.nml.rst:201 - Typo in documentation: "completness" should be "completeness".
Maximum DPM soil carbon pool combustion completness fraction.
doc/source/namelists/fire.nml.rst:208
- Typo in documentation: "completness" should be "completeness".
Minimum RPM soil carbon pool combustion completness fraction.
src/science/fire/inferno/inferno_mod.F90:284
flam_rain_constis passed into calc_flam but is not applied in the flammability rainfall term; instead a hardwired constant is used after converting rain to mm/day. This prevents tuning/removing the rainfall dependence via the new namelist and is inconsistent with the new interface.
- Files reviewed: 33/35 changed files
- Comments generated: 4
- Review effort level: Lite
| :type: real | ||
| :default: 0.8 | ||
|
|
||
| Minimum DPM soil carbon pool combustion completness fraction. |
PR Summary
[#61 ]
Sci/Tech Reviewer:
Code Reviewer:
Code Quality Checklist
(Some checks are automatically carried out via the CI pipeline)
rose-meta/jules-sharedthen have you supplied a linked UM and LFRic Apps PR?Testing
trac.log
Security Considerations
Performance Impact
AI Assistance and Attribution
Documentation
Approvals
Please request all relevant approvals. See the CodeOwners.txt file for section owners.
Technical
Scientific
Sci/Tech Review
Please alert the code reviewer via a tag when you have approved the SR
Code Review