Skip to content

Workflow Parameters Reference

Overview

This comprehensive reference documents all parameters available for EEMT and Solar Radiation workflows, including their scientific basis, valid ranges, and impact on calculations.

Solar Radiation Workflow Parameters

Core Parameters

step - Time Step

Type: Float
Default: 15.0
Range: 3.0 - 60.0 minutes
Required: No

Description: Time interval for solar radiation calculations throughout the day. Smaller values provide higher temporal resolution but increase computation time.

Scientific Basis: The time step determines how frequently the sun's position is calculated and solar radiation is computed. This affects the accuracy of daily radiation totals, especially in complex terrain.

Impact on Results: - 3-5 minutes: High precision, captures rapid shadow changes in complex terrain - 10-15 minutes: Good balance of accuracy and performance for most applications - 30-60 minutes: Faster computation, suitable for regional assessments

Example Usage:

# High-resolution analysis for complex terrain
parameters = {
    'step': 3.0,  # 3-minute intervals
    'num_threads': 8
}

# Regional assessment with moderate resolution
parameters = {
    'step': 15.0,  # 15-minute intervals (default)
    'num_threads': 4
}

linke_value - Atmospheric Turbidity

Type: Float
Default: 3.0
Range: 1.0 - 8.0
Required: No

Description: Linke turbidity factor representing atmospheric optical thickness due to absorption and scattering.

Scientific Basis: The Linke turbidity factor accounts for the attenuation of solar radiation as it passes through the atmosphere. It combines the effects of: - Water vapor absorption - Aerosol scattering - Molecular (Rayleigh) scattering

Typical Values by Environment:

Environment Linke Value Description
Clean mountain air 1.0 - 2.0 Very clear atmosphere, high elevation
Rural areas 2.5 - 3.5 Clean continental atmosphere
Urban areas 3.5 - 5.0 Moderate pollution and aerosols
Industrial zones 5.0 - 8.0 Heavy pollution, high aerosol content

Seasonal Variations:

# Winter (clearer atmosphere)
winter_params = {'linke_value': 2.5}

# Summer (more water vapor and aerosols)
summer_params = {'linke_value': 3.5}

# Monsoon/humid season
humid_params = {'linke_value': 4.5}

albedo_value - Surface Reflectance

Type: Float
Default: 0.2
Range: 0.0 - 1.0
Required: No

Description: Fraction of incident solar radiation reflected by the surface.

Scientific Basis: Albedo affects the amount of diffuse radiation through multiple reflections between the surface and atmosphere. Higher albedo increases the total radiation received through these interactions.

Typical Values by Surface Type:

Surface Type Albedo Example
Fresh snow 0.80 - 0.95 Alpine environments
Old snow 0.50 - 0.70 Late season snowpack
Desert sand 0.30 - 0.45 Arid regions
Grassland 0.15 - 0.25 Natural vegetation
Forest 0.10 - 0.20 Dense canopy
Water 0.05 - 0.10 Lakes, oceans
Asphalt 0.05 - 0.15 Urban surfaces

Land Cover Specific Examples:

# Forest analysis
forest_params = {
    'albedo_value': 0.15,
    'linke_value': 2.8  # Some canopy filtering
}

# Snow-covered terrain
snow_params = {
    'albedo_value': 0.85,
    'linke_value': 2.0  # Clear winter air
}

# Urban environment
urban_params = {
    'albedo_value': 0.12,
    'linke_value': 4.5  # Urban pollution
}

Computational Parameters

num_threads - CPU Threads

Type: Integer
Default: 4
Range: 1 - 32
Required: No

Description: Number of parallel processing threads for workflow execution.

Performance Impact:

# Estimated processing times (10km x 10km @ 10m resolution)
# 1 thread:  ~4 hours
# 4 threads: ~1 hour (default)
# 8 threads: ~35 minutes
# 16 threads: ~20 minutes (diminishing returns)

Resource Considerations: - Each thread requires ~2GB RAM - I/O becomes bottleneck beyond 8-16 threads - Leave 1-2 cores for system processes

Advanced Parameters

day - Specific Day

Type: Integer
Range: 1 - 365
Required: No (processes all days if not specified)

Description: Calculate solar radiation for a specific day of year.

# Summer solstice analysis
params = {'day': 172}  # June 21 (day 172)

# Winter solstice analysis  
params = {'day': 355}  # December 21 (day 355)

beam_rad - Beam Radiation Output

Type: Boolean
Default: True
Required: No

Description: Output direct beam radiation component separately.

diff_rad - Diffuse Radiation Output

Type: Boolean
Default: True
Required: No

Description: Output diffuse radiation component separately.

refl_rad - Reflected Radiation Output

Type: Boolean
Default: False
Required: No

Description: Output ground-reflected radiation component.

EEMT Workflow Parameters

Temporal Parameters

start_year - Start Year

Type: Integer
Default: 2020
Range: 1980 - 2024
Required: Yes for EEMT workflow

Description: First year of climate data to process.

Data Availability: - DAYMET v4: 1980 - present (1-2 year lag) - Quality varies by year and region - Recent years may have provisional data

end_year - End Year

Type: Integer
Default: 2020
Range: 1980 - 2024
Required: Yes for EEMT workflow

Description: Last year of climate data to process.

Multi-Year Processing:

# Single year analysis
params = {
    'start_year': 2020,
    'end_year': 2020
}

# 5-year climatology
params = {
    'start_year': 2016,
    'end_year': 2020
}

# Long-term analysis (30+ years)
params = {
    'start_year': 1990,
    'end_year': 2020,
    'num_threads': 16  # Use more threads for large datasets
}

Climate Data Parameters

daymet_variables - Climate Variables

Type: List[str]
Default: ['tmin', 'tmax', 'prcp', 'vp']
Options: tmin, tmax, prcp, vp, srad, swe, dayl
Required: No

Description: DAYMET climate variables to download and process.

Variable Descriptions:

Variable Description Units Use in EEMT
tmin Daily minimum temperature °C Energy calculations
tmax Daily maximum temperature °C Energy calculations
prcp Daily precipitation mm/day Water flux
vp Daily average vapor pressure Pa Humidity effects
srad Incoming shortwave radiation W/m² Validation
swe Snow water equivalent kg/m² Snow dynamics
dayl Day length seconds Photoperiod

climate_buffer - Spatial Buffer

Type: Float
Default: 0.1
Range: 0.0 - 1.0 degrees
Required: No

Description: Buffer around DEM extent for climate data download.

# Tight boundary (minimize download)
params = {'climate_buffer': 0.01}

# Include surrounding area for edge effects
params = {'climate_buffer': 0.25}

EEMT Calculation Parameters

eemt_method - Calculation Method

Type: String
Default: 'topographic'
Options: 'traditional', 'topographic', 'vegetation'
Required: No

Description: EEMT calculation methodology.

Method Comparison:

Method Description Inputs Required Best For
traditional Climate-based only Climate data Regional comparison
topographic Terrain-modified DEM + climate Complex terrain
vegetation Full ecosystem DEM + climate + LAI Detailed analysis

Method Selection:

# Simple regional assessment
params = {'eemt_method': 'traditional'}

# Mountain watershed analysis
params = {'eemt_method': 'topographic'}

# Ecosystem carbon studies
params = {'eemt_method': 'vegetation'}

npp_model - NPP Calculation

Type: String
Default: 'miami'
Options: 'miami', 'thornthwaite', 'user_defined'
Required: No

Description: Net Primary Production model for biological energy calculation.

Model Equations:

Miami Model:

# Temperature-limited
NPP_t = 3000 * (1 - exp(1.315 - 0.119 * T))

# Precipitation-limited  
NPP_p = 3000 * (1 - exp(-0.000664 * P))

# Actual NPP (minimum)
NPP = min(NPP_t, NPP_p)

Thornthwaite Model:

# Based on evapotranspiration
NPP = 3000 * (AET / PET)

Topographic Parameters

slope_threshold - Maximum Slope

Type: Float
Default: 45.0
Range: 0.0 - 90.0 degrees
Required: No

Description: Maximum slope angle for stable soil formation.

Geomorphological Context: - < 15°: Minimal erosion, stable soils - 15-30°: Moderate erosion potential - 30-45°: High erosion, thin soils - > 45°: Bedrock exposure likely

twi_threshold - Wetness Threshold

Type: Float
Default: 10.0
Range: 0.0 - 20.0
Required: No

Description: Topographic Wetness Index threshold for water accumulation zones.

TWI Interpretation: - < 5: Ridge tops, dry areas - 5-10: Hillslopes, normal drainage - 10-15: Convergent areas, seasonal wetness - > 15: Valley bottoms, persistent wetness

Output Control Parameters

output_format - File Format

Type: String
Default: 'geotiff'
Options: 'geotiff', 'netcdf', 'zarr'
Required: No

Format Characteristics:

Format Pros Cons Best For
GeoTIFF Wide compatibility Single variable per file GIS integration
NetCDF Multi-dimensional Requires special tools Time series
Zarr Cloud-optimized New format Big data

output_compression - Compression

Type: String
Default: 'lzw'
Options: 'none', 'lzw', 'deflate', 'zstd'
Required: No

Compression Trade-offs:

# No compression (fastest write, largest files)
params = {'output_compression': 'none'}

# LZW (good balance, wide support)
params = {'output_compression': 'lzw'}

# Deflate (better compression, slower)
params = {'output_compression': 'deflate'}

# Zstd (best compression, newest)
params = {'output_compression': 'zstd'}

output_resolution - Output Resolution

Type: Float
Default: Same as input DEM
Range: 1.0 - 1000.0 meters
Required: No

Description: Resample output to different resolution.

# Maintain input resolution
params = {}  # Default behavior

# Aggregate to coarser resolution
params = {'output_resolution': 30.0}  # 30m output

# Regional product
params = {'output_resolution': 100.0}  # 100m output

Parameter Validation

Input Validation Rules

def validate_parameters(params: dict, workflow_type: str) -> dict:
    """Validate and sanitize workflow parameters"""

    # Common validations
    if params.get('step'):
        assert 3.0 <= params['step'] <= 60.0

    if params.get('linke_value'):
        assert 1.0 <= params['linke_value'] <= 8.0

    if params.get('albedo_value'):
        assert 0.0 <= params['albedo_value'] <= 1.0

    if params.get('num_threads'):
        assert 1 <= params['num_threads'] <= 32

    # EEMT-specific validations
    if workflow_type == 'eemt':
        assert params.get('start_year'), "start_year required for EEMT"
        assert params.get('end_year'), "end_year required for EEMT"
        assert params['start_year'] <= params['end_year']
        assert 1980 <= params['start_year'] <= 2024
        assert 1980 <= params['end_year'] <= 2024

    return params

Parameter Combinations

High-Accuracy Solar Analysis

high_accuracy = {
    'step': 3.0,
    'linke_value': 3.0,
    'albedo_value': 0.2,
    'num_threads': 16,
    'beam_rad': True,
    'diff_rad': True,
    'refl_rad': True
}

Quick Regional Assessment

quick_regional = {
    'step': 30.0,
    'linke_value': 3.0,
    'albedo_value': 0.2,
    'num_threads': 4,
    'output_resolution': 100.0,
    'output_compression': 'lzw'
}

Climate Change Analysis

climate_analysis = {
    'start_year': 1990,
    'end_year': 2020,
    'step': 15.0,
    'eemt_method': 'topographic',
    'daymet_variables': ['tmin', 'tmax', 'prcp', 'vp', 'srad'],
    'output_format': 'netcdf'
}

Snow-Dominated Watershed

snow_watershed = {
    'step': 10.0,
    'linke_value': 2.5,  # Clear mountain air
    'albedo_value': 0.65,  # Snow average
    'start_year': 2020,
    'end_year': 2020,
    'daymet_variables': ['tmin', 'tmax', 'prcp', 'swe'],
    'slope_threshold': 35.0  # Avalanche consideration
}

Performance Optimization Guide

Memory Requirements

def estimate_memory(dem_size_mb: float, params: dict) -> float:
    """Estimate memory requirements in GB"""

    base_memory = 2.0  # OS and runtime

    # DEM memory (multiple copies for processing)
    dem_memory = dem_size_mb * 4 / 1024  

    # Thread memory (2GB per thread)
    thread_memory = params.get('num_threads', 4) * 2

    # Time series memory (for EEMT)
    if params.get('start_year'):
        years = params['end_year'] - params['start_year'] + 1
        timeseries_memory = dem_size_mb * years * 365 / 1024
    else:
        timeseries_memory = 0

    return base_memory + dem_memory + thread_memory + timeseries_memory

Processing Time Estimates

def estimate_runtime(dem_pixels: int, params: dict) -> float:
    """Estimate runtime in hours"""

    # Base rate: pixels per second per thread
    if params.get('step', 15) <= 5:
        rate = 1000  # High resolution
    elif params.get('step', 15) <= 15:
        rate = 5000  # Medium resolution
    else:
        rate = 10000  # Low resolution

    threads = params.get('num_threads', 4)

    # Solar workflow
    days = 365
    solar_time = (dem_pixels * days) / (rate * threads * 3600)

    # EEMT additions
    if params.get('start_year'):
        years = params['end_year'] - params['start_year'] + 1
        eemt_time = solar_time * years * 1.5  # Climate data overhead
    else:
        eemt_time = solar_time

    return eemt_time

Troubleshooting Parameters

Common Parameter Issues

Issue Cause Solution
Out of memory Too many threads Reduce num_threads
Slow processing Fine time step Increase step to 15-30
Poor results in shadows Coarse time step Decrease step to 3-5
Unrealistic radiation Wrong turbidity Adjust linke_value for conditions
Missing diffuse radiation Wrong albedo Set appropriate albedo_value
DAYMET download fails Invalid year range Check data availability
Large output files No compression Enable output_compression

Parameter Debugging

# Enable verbose logging
debug_params = {
    'step': 15.0,
    'num_threads': 1,  # Single thread for debugging
    'verbose': True,
    'debug': True,
    'log_level': 'DEBUG'
}