Water balance issues
When basin_wb_aa.txt does not match expectation, the cause is almost always in one of four places: climate input mapping, curve numbers, the management schedule, or soil parameters. Inspect them in that order. Compare the offending values in checker.out and diagnostics.out against the source of truth in your input files.
What to compare¶
The basin-average annual water balance from basin_wb_aa.txt should approximately satisfy:
Where wateryld = surq_gen + latq + qtile. Big discrepancies in any one term point at a specific input group.
Symptom: precip is wrong¶
The reported precip does not match the rainfall in the source .pcp file.
- Open
weather-sta.cli. Confirm the station name and thatpgagepoints at the right.cliindex. - Open the
.cliindex. Confirm it lists the.pcpfilename that contains the right data. - Open the
.pcpfile and check the first record. The header carries thenbyr,tstep,lat,lon, andelevfor the station. Lat and lon mismatched withhru.concan mean the wrong station was assigned to the HRU.
If diagnostics.out contains <name> file not found (pgage), the climate mapping failed entirely and SWAT+ generated rainfall from the weather generator. The reported precip will not match any observed dataset.
Symptom: surq_gen is too high or too low¶
Surface runoff is controlled by:
- The curve number for the (soil hydrologic group, land cover) pair, taken from
cntable.lumand modified bycn3_swfinhydrology.hyd. - The soil-water content, computed from
soils.solfield capacity and saturation. - The infiltration method:
gampt = 0(curve number) orgampt = 1(Green-Ampt) incodes.bsn.
Checks:
- Open
checker.out. Confirmhydgrp(A, B, C, D) per soil matches what yoursoils.soldeclares. A misclassification flips runoff by tens of mm. - Open
cntable.lum. The CN values are looked up by thecn2column of the offendinglanduse.lumrow. Cross-check the value against a CN table for that land cover / hydrologic group pair. - Check
cn3_swfinhydrology.hyd. Defaults to zero; a value near 1 will damp runoff response to wet conditions. - Confirm
gamptincodes.bsnis what you intended.
References: Checker and diagnostics, codes.bsn, landuse.lum.
Symptom: ET is too high or too low¶
ET depends on the PET method and on plant cover.
codes.bsnfield 3 (pet): 0 Priestley-Taylor, 1 Penman-Monteith, 2 Hargreaves, 3 file. Penman-Monteith needs solar radiation, humidity, and wind; if those are missing, the model uses generated values.escoandepcoinhydrology.hyd(per HRU) control soil evaporation and plant uptake compensation. Defaults inchecker.outare 0.95 and 1.0; deviations from those change the ET partition.- Plant cover: if the management schedule is wrong, plants never grow,
eplantstays low, and the run produces more bare-soil evaporation and runoff.
Open checker.out and confirm esco and epco match what you expect. Open hru_pw_aa.txt and inspect biomass and LAI; near-zero biomass on a cropped HRU means management did not fire.
References: codes.bsn, hru.md.
Symptom: management never fires¶
When landuse.lum points at a schedule that does not exist, diagnostics.out writes:
The HRU runs with no operations: no plant, no fertilize, no harvest. hru_pw_aa.txt will show zero biomass and zero yield. crop_yld_aa.txt will be empty or report a residual.
Fix by either matching landuse.lum%mgt to a schedule name in management.sch, or adding the schedule.
Reference: *.dtl covers decision-table-driven operations.
Symptom: percolation is zero or saturated¶
Percolation depends on the soil profile in soils.sol:
sumfc(column inchecker.out): the total field capacity over the profile. A near-zero value means the soil-layer field capacities did not load.sumul: the saturation upper limit. Should be larger thansumfc.- The
percocoefficient inhydrology.hydscales the percolation rate. Default 0.5; setting to 0 stops percolation.
A zmx = 2000 row in checker.out for every HRU usually means the per-soil soils.sol block was not parsed. Look for warnings in diagnostics.out referencing the soil name.
References: soils.sol, checker.out.
Symptom: bad latq, qtile, or surq_runon¶
These depend on:
latq_coinhydrology.hyd. The lateral-flow coefficient. Zero turns lateral flow off. Default in the shipped Ames data is 0.01.tiledrainflag inhydrology.hyd. Confirmchecker.outshows0(no tile) or1(tile) as intended.- Tile drainage parameters: see the
tileblock inhydrology.hydand thetiledrain.strstructural file.
Symptom: ru_aa.txt and basin_wb_aa.txt disagree¶
The routing-unit output sums HRU contributions through routing. The basin output sums them directly. A large disagreement means routing is doing something unexpected. Check:
rout_unit.def,rout_unit.ele,rout_unit.rtu. The routing definition and area weights.chandeg.conand the channel-routing inputs. A misconfigured channel that has no length or no slope produces bizarre routed values.
Workflow¶
- Run the model. Confirm
success.finexists. - Read
diagnostics.outend to end. Resolve every line. - Open
checker.out. Per HRU, sanity-checkhydgrp,zmx,sumfc,sumul,usle_k,esco,epco,perco,latq_co,tiledrain. - Open
basin_wb_aa.txt. Compare each term against your expectation. If precip is wrong, fix climate mapping. If ET is wrong, check PET and esco/epco. If surface runoff is wrong, check CN. If percolation is wrong, check soils.
Related¶
- Checker and diagnostics for the structure of the diagnostic files.
- Common runtime errors for the exact warning strings.
- Water balance outputs for the column definitions.