Usage Guide
This guide covers the practical aspects of using the ADCIRC Subgrid Preprocessor, from basic workflows to advanced techniques.
Command Line Interface
The subgrid preprocessor provides a command-line interface with several subcommands:
Basic Command Structure
adcirc-subgrid [global-options] <subcommand> [subcommand-options]
Global Options
- –verbose
Enable verbose logging output for debugging and detailed progress information.
adcirc-subgrid --verbose prep config.yaml
Subcommands
- prep - Preprocessing Command
Generate subgrid corrections from input data.
adcirc-subgrid prep [options] config.yaml
config.yaml
: Path to YAML configuration file--window-memory
: Raster processing memory limit in MB (default: 64)
- plot-mesh - Mesh Visualization
Create visualizations of subgrid data on the computational mesh.
adcirc-subgrid plot-mesh [options] subgrid.nc
--water-level
: Water level for visualization (default: 0.0)--variable
: Variable to plot (percent_wet, wet_depth, total_depth, cf, c_mf, c_adv)--show
: Display plot interactively--output-filename
: Save plot to file--bbox
: Bounding box (minx, miny, maxx, maxy)--range
: Value range for colorbar (min, max)--colorbar
: Matplotlib colormap name
- plot-node - Node-Specific Visualization
Create detailed plots of subgrid relationships for individual nodes.
adcirc-subgrid plot-node [options] --filename subgrid.nc --node 1234
--filename
: Subgrid NetCDF file--node
: Node number to plot--basis
: Plot basis (wse or phi, default: phi)--show
: Display plot interactively--save
: Save plot to file--index-base
: Node numbering base (0 or 1, default: 0)
Basic Workflows
Single Dataset Processing
The simplest workflow processes a single set of input data:
Step 1: Prepare configuration file
input:
adcirc_mesh: ./fort.14
manning_lookup: ccap
dem: ./elevation_6m.tif
land_cover: ./ccap_2021.tif
output:
filename: ./subgrid_single.nc
progress_bar_increment: 5
options:
n_subgrid_levels: 50
n_phi_levels: 50
subgrid_level_distribution: histogram
Step 2: Run preprocessing
adcirc-subgrid prep single_dataset.yaml
Step 3: Verify results
# Quick visualization
adcirc-subgrid plot-mesh subgrid_single.nc --show --variable percent_wet
Multi-Dataset Processing
For comprehensive coverage using multiple datasets with different priorities:
Step 1: Process highest priority dataset
# config_priority1.yaml
input:
adcirc_mesh: ./fort.14
manning_lookup: ccap
dem: ./lidar_high_res.tif # Best quality data
land_cover: ./ccap_2021.tif
output:
filename: ./subgrid_step1.nc
options:
n_subgrid_levels: 75
n_phi_levels: 75
subgrid_level_distribution: histogram
adcirc-subgrid prep config_priority1.yaml
Step 2: Add second dataset
# config_priority2.yaml
input:
adcirc_mesh: ./fort.14
manning_lookup: ccap
dem: ./satellite_moderate_res.tif # Lower quality, broader coverage
land_cover: ./ccap_2021.tif
output:
filename: ./subgrid_step2.nc
options:
n_subgrid_levels: 75
n_phi_levels: 75
subgrid_level_distribution: histogram
existing_subgrid: ./subgrid_step1.nc # Build on previous results
adcirc-subgrid prep config_priority2.yaml
Step 3: Continue for additional datasets
Repeat the process with progressively lower priority datasets, always referencing the most recent output as existing_subgrid
.
Advanced Configuration
Memory Management
For large datasets, control memory usage:
Configuration Options:
# Limit raster processing memory
adcirc-subgrid prep config.yaml --window-memory 128
Environment Variables:
# GDAL cache settings
export GDAL_CACHEMAX=512 # MB
export GDAL_MAX_DATASET_POOL_SIZE=100
# Disable multithreading if memory constrained
export OMP_NUM_THREADS=1
Performance Optimization
Configuration for Performance:
options:
# Balance accuracy vs. speed
n_subgrid_levels: 30 # Fewer levels = faster
n_phi_levels: 30
# Histogram distribution is more efficient
subgrid_level_distribution: histogram
System-Level Optimizations:
# Increase available memory
ulimit -v unlimited
# Use local storage for temporary files
export TMPDIR=/local/tmp
# Optimize thread usage
export OMP_NUM_THREADS=4
Quality Control Procedures
Visual Inspection
Mesh-Level Visualization:
# Overview of φ values at mean sea level
adcirc-subgrid plot-mesh subgrid.nc --variable percent_wet --water-level 0.0 --show
# Examine specific regions
adcirc-subgrid plot-mesh subgrid.nc --variable percent_wet --bbox -95.0 29.0 -94.0 30.0 --show
# Check different variables
adcirc-subgrid plot-mesh subgrid.nc --variable wet_depth --water-level 1.0 --show
Node-Level Analysis:
# Examine φ vs. water level relationships
adcirc-subgrid plot-node --filename subgrid.nc --node 1500 --basis phi --show
# Check specific problematic nodes
adcirc-subgrid plot-node --filename subgrid.nc --node 2847 --basis wse --save node_2847.png
Data Validation
NetCDF File Inspection:
# Check file structure and metadata
ncdump -h subgrid.nc
# Examine variable ranges
ncks -H -v phi subgrid.nc | grep "min\|max"
Python-Based Validation:
import xarray as xr
import numpy as np
# Load subgrid data
ds = xr.open_dataset('subgrid.nc')
# Check for valid phi ranges (0 <= φ <= 1)
phi = ds['phi']
invalid = (phi < 0) | (phi > 1)
print(f"Invalid phi values: {invalid.sum().item()}")
# Check for monotonic relationships
for node in range(100): # Check first 100 nodes
node_phi = phi.isel(node=node)
if not np.all(np.diff(node_phi) >= 0):
print(f"Non-monotonic phi at node {node}")
Troubleshooting Common Issues
Processing Errors
Memory Errors:
Error: MemoryError during raster processing
Solutions:
- Reduce --window-memory parameter
- Process smaller geographic regions
- Use histogram distribution (more memory efficient)
- Increase system RAM or virtual memory
Coordinate System Mismatches:
Error: Inconsistent coordinate systems
Solutions:
- Verify all input files use same CRS
- Reproject data using gdalwarp
- Check ADCIRC mesh coordinate system documentation
Missing Data Coverage:
Warning: Incomplete DEM coverage
Solutions:
- Extend DEM boundaries beyond mesh extent
- Fill no-data areas with appropriate values
- Use multiple DEM sources to ensure complete coverage
Data Quality Issues
Unrealistic φ Values:
Issue: φ values outside [0,1] range or non-monotonic behavior
Diagnosis:
- Check DEM quality and artifacts
- Verify proper datum alignment
- Examine land cover classification accuracy
Solutions:
- Clean input DEM data
- Adjust distribution_factor parameter
- Use higher quality input datasets
Inconsistent Results:
Issue: Unexpected subgrid corrections
Diagnosis:
- Compare with known high-resolution results
- Check Manning's roughness values
- Verify mesh bathymetry consistency
Solutions:
- Validate input data independently
- Adjust configuration parameters
- Use subset processing for testing
Integration with ADCIRC
File Preparation
Subgrid File Usage:
The generated subgrid NetCDF file is used directly by ADCIRC:
! In ADCIRC fort.15 (control file)
NWP = 1 ! Enable subgrid corrections
NCFILE = 'subgrid.nc' ! Path to subgrid file
Parameter Settings:
Recommended ADCIRC configuration for subgrid runs:
! Timestep considerations
DTDP = 0.5 ! May need smaller timestep
! Solver settings
NCOR = 2 ! Increased iterations may help convergence
! Output options
NSCREEN = 1000 ! Monitor for stability
Performance Considerations
Computational Impact:
Subgrid corrections add computational cost:
Memory: ~20-30% increase for subgrid arrays
Runtime: ~10-20% increase for correction calculations
I/O: Additional file reading during initialization
Optimization Strategies:
Use moderate numbers of φ levels (25-75)
Ensure subgrid file is on fast storage
Consider domain decomposition impacts
Workflow Automation
Batch Processing Scripts
Shell Script Example:
#!/bin/bash
# Batch subgrid processing
CONFIG_DIR="configs"
OUTPUT_DIR="subgrid_outputs"
# Create output directory
mkdir -p $OUTPUT_DIR
# Process each configuration
for config in $CONFIG_DIR/*.yaml; do
echo "Processing $config"
adcirc-subgrid prep "$config"
# Move output to organized directory
output_file=$(grep "filename:" "$config" | cut -d: -f2 | tr -d ' ')
mv "$output_file" "$OUTPUT_DIR/"
done
Python Workflow Manager:
#!/usr/bin/env python3
import subprocess
import yaml
from pathlib import Path
def process_subgrid(config_file):
"""Process a single subgrid configuration."""
cmd = ["adcirc-subgrid", "prep", str(config_file)]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"Error processing {config_file}:")
print(result.stderr)
return False
return True
# Main workflow
config_dir = Path("configs")
for config_file in config_dir.glob("*.yaml"):
print(f"Processing {config_file.name}")
success = process_subgrid(config_file)
if success:
print(f" ✓ Completed successfully")
else:
print(f" ✗ Failed")
Best Practices and Guidelines
Resolution Design Guidelines
Based on extensive validation studies, follow these guidelines for optimal subgrid performance:
Mesh Resolution Selection:
Identify critical features: Barrier islands, major channels, flow-blocking structures
Minimum resolution rule: Ensure mesh resolves primary flow-blocking features in the underlying DEM
Coarsening limits: Avoid nearshore resolutions coarser than 400-1000m unless critical features are preserved
Balance principle: Optimize for specific application (forecasting vs. design studies)
Data Quality Requirements:
DEM resolution: At least 3-20× finer than mesh resolution
Coverage completeness: Full domain coverage with no gaps
Coordinate consistency: All datasets in same coordinate reference system
Temporal consistency: Recent, high-quality datasets for dynamic coastal areas
Memory and Performance Optimization
Lookup Table Management:
Use φ-based tables (N_φ = 11) instead of elevation-based tables (N_ζ = 401)
Monitor memory usage for ocean-scale domains
Consider preprocessing on high-memory systems if needed
Processing Strategies:
Process in geographic regions if memory limited
Use highest-priority datasets first in multi-dataset workflows
Validate results with subset domains before full-scale processing
Computational Considerations:
Typical overhead: 14-80% at same resolution
Speedup potential: 10-50× on appropriately coarsened meshes
Memory scaling: Approximately linear with domain size and mesh resolution
Validation and Quality Control
Recommended Validation Workflow:
Visual inspection: Use mesh and node plotting tools extensively
Physical consistency: Check φ monotonicity and boundary conditions
Comparative analysis: Validate against high-resolution simulations when possible
Statistical metrics: Use ERMS, R², and bias measures for quantitative assessment
Operational testing: Test with representative storm events before production use
Common Issues and Solutions:
Non-monotonic φ: Usually indicates DEM quality issues or processing errors
Over-connectivity: May result from inadequate mesh resolution for barrier features
Memory issues: Consider domain subdivision or φ-level reduction
Performance problems: Check data coverage and coordinate system consistency
Integration with ADCIRC Operations
File Management:
Store subgrid files on fast storage systems
Verify node count consistency between mesh and subgrid files
Use descriptive naming conventions for version control
Parameter Recommendations:
Minimum wet depth: 0.1m (⟨H⟩_{G,min}) for stability
φ levels: 11 discrete levels provide good balance of accuracy and efficiency
Closure level: Level 0 adequate for most applications; Level 1 for complex shallow regions
Operational Considerations:
Pre-validate subgrid files before real-time forecasting
Monitor model stability during initial runs with subgrid corrections
Document specific parameter choices for reproducibility
This comprehensive usage guide provides the foundation for effective subgrid preprocessing workflows based on extensive research validation and operational experience.