API Reference Overview
This section provides comprehensive API documentation for all Canopy-App modules, functions, and data structures.
Documentation Structure
The API documentation is automatically generated from the Fortran source code using Doxygen and organized into the following sections:
📋 Quick Navigation
- Module List - All Fortran modules in the codebase
- Function Index - Alphabetical list of all functions and subroutines
- Variable Reference - Global variables and parameters
- Generated Doxygen API - Complete auto-generated documentation
Module Categories
Core System Modules
canopy_app
- Main program entry pointcanopy_init
- Model initialization routinescanopy_alloc
- Memory allocation managementcanopy_dealloc
- Memory cleanup routines
Configuration and I/O
canopy_readnml
- Namelist reading and parsingcanopy_files_mod
- File management utilitiescanopy_ncf_io_mod
- NetCDF input/output operationscanopy_txt_io_mod
- Text file I/O operationscanopy_check_input
- Input validation and quality control
Physical Process Modules
canopy_canmet_mod
- Canopy meteorology calculationscanopy_rad_mod
- Radiation transfer computationscanopy_bioemi_mod
- Biogenic emission algorithmscanopy_drydep_mod
- Dry deposition calculationscanopy_phot_mod
- Photolysis rate computations
Supporting Modules
canopy_const_mod
- Physical and mathematical constantscanopy_utils_mod
- General utility functionscanopy_coord_mod
- Coordinate system utilitiescanopy_date_mod
- Date and time handling
Using the API Documentation
Finding Functions
- Browse by module to see related functions grouped together
- Use the function index for alphabetical lookup
- Search the Doxygen API for detailed parameter information
Understanding Parameters
Each function/subroutine is documented with: - Purpose - What the routine does - Input parameters - Required inputs with types and units - Output parameters - Results and their formats - Side effects - Any global state changes - Dependencies - Required modules or external libraries
Code Examples
Many API entries include usage examples showing:
! Example function call
call canopy_function(input_param, output_result, status)
if (status /= 0) then
write(*,*) 'Error in canopy_function'
endif
API Conventions
Naming Conventions
- Modules:
canopy_<purpose>_mod
- Subroutines:
<action>_<object>
(e.g.,calc_windspeed
) - Functions:
<object>_<property>
(e.g.,temperature_profile
) - Variables:
<type>_<name>
(e.g.,real_windspeed
)
Parameter Conventions
intent(in)
- Input parameters (read-only)intent(out)
- Output parameters (write-only)intent(inout)
- Input/output parameters (read-write)optional
- Optional parameters with defaults
Error Handling
Most routines follow consistent error handling: - Return status codes (0 = success, non-zero = error) - Error messages written to standard output - Graceful degradation when possible
Common Usage Patterns
Model Initialization
! Standard initialization sequence
call canopy_alloc_arrays(status)
call canopy_read_namelist('namelist.canopy', status)
call canopy_init_physics(status)
call canopy_check_inputs(status)
Main Calculation Loop
! Typical calculation sequence
call canopy_calc_meteorology(status)
call canopy_calc_radiation(status)
call canopy_calc_biogenic_emissions(status)
call canopy_calc_dry_deposition(status)
call canopy_write_outputs(status)
Memory Management
! Proper cleanup sequence
call canopy_write_final_outputs(status)
call canopy_dealloc_arrays(status)
Performance Considerations
Computational Efficiency
- Most calculations are vectorized for array operations
- Optional physics modules can be disabled to improve performance
- Memory allocation is optimized for typical canopy layer counts
Memory Usage
- Arrays are allocated dynamically based on canopy configuration
- Large arrays use double precision only when necessary
- Intermediate arrays are deallocated when no longer needed
Extending the API
Adding New Modules
- Follow the naming convention:
canopy_<name>_mod.F90
- Include proper Doxygen documentation headers
- Implement consistent error handling
- Add appropriate unit tests
Modifying Existing Functions
- Maintain backward compatibility when possible
- Update documentation for any parameter changes
- Add version notes for significant modifications
- Test thoroughly before committing changes