Documentation
1. A major overhaul of the command line application section of the user guide including the addition of examples.
1. Publish batch scripts illustrating running TECA at scale in the new [TECA_examples](https://github.com/LBL-EESA/TECA_examples) repo.
1. Giving tutorials and publishing the materials in the new [TECA_tutorials](https://sourceforge.net/p/teca/TECA_tutorials) repo
1. Updates to the installation section of the TECA User's Guide](https://teca.readthedocs.io/en/latest/installation.html)
Data Model Improvements
1. Added support for Arakawa C Grids in `teca_arakawa_c_grid`
1. Added support for logically Cartesian so called curvilinear grids in `teca_curvilinear_mesh`
1. Refactored mesh related class hierarchy so that common codes such as array accessing and I/O live in `teca_mesh`
1. Added support for face and edge centered mesh based data.
I/O Capabilities
1. Added reader for WRF simulation `teca_wrf_reader`
1. Add support for writing logically Cartesian curvilinear meshes in `teca_cartesian_mesh_writer`.
1. Added a new NetCDF based output format for tabular data to the `teca_table_writer`.
1. Added support for reading tabular CSV files to the `teca_table_reader`. This enables the tabular outputs such as TC tracks etc saved from TECA apps to be stored in a format ingestible by other tools such as Python and Excel without the need to convert from TECA's internal binary format.
1. Added versioning and error checking to TECA's internal binary serialization format across all datasets. This enables us to catch version differences and handle bad or corrupted files gracefully.
1. use of NetCDF parallel 4 (i.e. MPI collective I/O) for writing results. this enables the use of any number of files with any number of ranks.
Execution Patterns
1. Implement a new streaming mode reduction where data is incrementally reduced as it becomes available. This parallelizes the reduction step and reduces the memory overhead.
1. Introducing a new MPI parallel approach to scan the time axis. This has substantial benefit when there are a large number of files.
1. expose MPI aware thread load balancing to Python. This was used in the `teca_pytorch_algorithm` to automatically load balance the OpenMP backend of PyTorch.
1. implement GPU load balancing strategy in the `teca_pytorch_algorithm`.
1. Enable process groups to be excluded from execution. This lets a pipeline run on a subset of MPI_COMM_WORLD.
Algorithmic Capabilities
1. Added `teca_pytorch_algorithm` a base class that handle tasks common to interfacing to PyTroch when developing Machine Learning based detectors.
1. Added `teca_deeplab_ar_detect` a new PyTorch based Machine Learning based AR detector.
1. Added `teca_valid_value_mask` an algorithm that generates a mask identifying the presence of NetCDF \_FillValue values in arrays. Down stream algorithms use the mask to handle \_FillValue's in an algorithm appropriate manner.
1. Added `teca_temporal_reduction` an algorithm that implements transformations from one time resolution to another. The implementation includes min, max, and average operators and supports daily, monthly, and seasonal intervals.
1. Added `teca_vertical_reduction` an algorithm that converts 3D data to 2D by applying a reduction in the vertical spatial dimension. This is a base class that contains code common to vertical reductions.
1. Added `teca_integrated_vapor_transport` a vertical reduction that computes IVT from horizontal wind vector and specific humidity.
1. An improved floating point differencing algorithm was developed and a number of codes were updated to use it.
Command Line Applications
1. Added `teca_integrated_vapor_transport` command line application for computing IVT.
1. Added `teca_restripe` command line application for re-organizing NetCDF datasets.
1. Added `teca_deeplab_ar_detector` command line application detecting AR's using machine learning.
1. Integrated IVT calculations into the `teca_nayesian_ar_detector`.
1. Normalized names and meaning of command line options across command line applications
Python Capabilities
1. A polymorphic redesigned the `teca_python_algorithm` makes it easier to use.
1. Handle numpy scalar types
1. Expose more features such as MPI aware thread load balancing, calendaring, profiling, and file manipulation utilities.
Testing
1. Added testing infrastructure and tests for command line applications
1. Deployed testing on Ubuntu 18.04, Fedora 31, Fedora 32, and Mac OS with xcode 12.2.
Bug fixes
More than 50 bug fixes were reported.