{"id":50270309,"url":"https://github.com/pdaf/pdaf","last_synced_at":"2026-05-27T17:00:41.428Z","repository":{"id":154475018,"uuid":"612958494","full_name":"PDAF/PDAF","owner":"PDAF","description":"Parallel Data Assimilation Framework (this is the release repository, thus expect only updates when we prepare a new release)","archived":false,"fork":false,"pushed_at":"2026-04-16T13:41:54.000Z","size":23401,"stargazers_count":43,"open_issues_count":0,"forks_count":18,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-04-16T15:25:48.898Z","etag":null,"topics":["data-assimilation","ensemble-kalman-filter","nonlinear-systems","particle-filter","uncertainty-quantification","variational-method"],"latest_commit_sha":null,"homepage":"https://pdaf.awi.de","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PDAF.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-12T13:49:03.000Z","updated_at":"2026-04-16T13:22:20.000Z","dependencies_parsed_at":"2024-04-29T10:48:52.115Z","dependency_job_id":"80d4f760-c7ca-4d88-82e1-7b6dce48db8d","html_url":"https://github.com/PDAF/PDAF","commit_stats":{"total_commits":740,"total_committers":2,"mean_commits":370.0,"dds":0.006756756756756799,"last_synced_commit":"ed631034956dece8e91e8b588c4cf3aaa7916f49"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/PDAF/PDAF","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PDAF%2FPDAF","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PDAF%2FPDAF/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PDAF%2FPDAF/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PDAF%2FPDAF/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PDAF","download_url":"https://codeload.github.com/PDAF/PDAF/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PDAF%2FPDAF/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33575520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-assimilation","ensemble-kalman-filter","nonlinear-systems","particle-filter","uncertainty-quantification","variational-method"],"created_at":"2026-05-27T17:00:32.394Z","updated_at":"2026-05-27T17:00:41.413Z","avatar_url":"https://github.com/PDAF.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# PDAF (Parallel Data Assimilation Framework)\n\nCopyright 2004-2026, Lars Nerger, Alfred Wegener Institute, Helmholtz Center\nfor Polar and Marine Research, Bremerhaven, Germany. \nFor license information, please see the file LICENSE.txt.\n\nFor full documentation and tutorial, see: http://pdaf.awi.de \n\nWe recommend to subscribe to the PDAF mailing list via the\nonline form at https://pdaf.awi.de/register\n\n## Introduction\n\nPDAF is a unified framework for data assimilation with the aim\nto reduce development effort for data assimilation while providing\nhigh computational efficiency.\n\nPDAF can be used\n- to perform data assimilation with high-dimensional models,\n- to assess data assimilation methods with small models,\n- to perform ensemble simulations, e.g. for sensitivity analyses,\n- to teach ensemble data assimilation, and\n- to develop new data assimilation methods and test them in a unified environment\n\nPDAF provides\n- A modular structure with separation-of-concerns for the model,\n  the data assimilation methods, observation handling, and covariances\n- A parallel infrastructure, using MPI and OpenMP, to implement a\n  parallel data assimilation system based on existing numerical\n  models (typically of, but not limited to, components of the Earth system). \n- A selection of state-of-the-art ensemble data assimilation algorithms\n  based on the Kalman filter or nonlinear filters (see list below)\n- A selection of 3D variational methods, both with parameterized\n  and ensemble covariance matrix\n- A structured approach to handle large sets of observation\n  types\n- Functionality for ensemble and observation diagnostics\n- Functionality to generate synthetic observations for data\n  assimilation studies (e.g. OSSEs)\n\nThe PDAF release provides also\n- Tutorial codes demonstrating the implementation\n- Code templates to assist in the implementation \n- Toy models fully implemented with PDAF for the study of data\n  assimilation methods.\n- Links to codes for existing model couplings with PDAF\n\n## First Steps with PDAF\n\nA good starting point for using PDAF is to run a tutorial example.\nThe web site  http://pdaf.awi.de/trac/wiki/FirstSteps \nprovides hints on getting started with PDAF.\n\n## PDAF tutorials\nThe page\nhttps://pdaf.awi.de/trac/wiki/PdafTutorial\nprovides tutorial slide sets that explain the implementation\nsteps and how to compile and run the tutorial examples. \n\n\n## Models\n\nThe directory models/ contains toy models that are fully implemented\nwith PDAF. These models can be used to assess the behavior of different\nassimilation algorithms. \n- **lorenz96/**\n  This directory contains the Lorenz-96 model, which is a widely used\n  model to assess data assimilation methods. Provided is a full\n  implementation of the data assimilation with various filters and options.\n  This model can be configured to have a sufficiently large state\n  dimension to test low-rank filter algorithms.\n- **lorenz63/**\n  This directory contains the Lorenz-63 model, which is a classical\n  3-variable model with chaotic dynamics. Provided is a full\n  implementation of the data assimilation with various filters and options.\n  The small state dimension and nonlinear dynamics make it a suitable\n  test case for the standard particle filter (PF).\n- **lorenz05b/**\n  This directory contains the model Lorenz-2005 model II. Provided is a full\n  implementation of the data assimilation with various filters and options.\n- **lorenz05c/**\n  This directory contains the two-scale model Lorenz-2005 model III.\n  Provided is a full implementation of the data assimilation with various\n  filters and options.\n\nInstructions on how to run data assimilation experiments with these models\nare provided on the PDAF web site.\n\n\n## Installation of the PDAF library\n\nThe PDAF library will be automatically built when compiling a tutorial case\nor one of the models. However, one can also separately build the library.\nIn order to build the PDAF library one needs a Fortran 2003 compiler,\n'make'. PDAF is generally intended for parallel computing using MPI and\nneeds an MPI-library for compilation. In addition, the libraries BLAS\nand LAPACK are required.\n\n1. Choose a suitable include file for the make process and/or edit or\ncreate one. See the directory make.arch/ for several provided include files.\nFor standard Linux systems using gfortran and OpenMPI using\nlinux_gfortran.h will most likely work.\n\n2. Set the environment variable $PDAF_ARCH to the name of the include\nfile (without ending .h). Alternatively you can specify PDAF_ARCH on\nthe command line when running 'make' in step 3.\n\n3. In the main directory execute 'make' at the prompt, e.g.\n'make PDAF_ARCH=linux_gfortran'. This will\ncompile the sources and generate two library files that include the \nensemble filter methods and the 3D-Var methods including solvers\nin the directory lib/.  \n\n## Verifying your installation \n\nThe tutorial implementations can be verified as follows:\n\nYou can run the script\n**runtests.sh** in the main tutorial directory **tutorial**.\n\nThis script will compile and run all tutorial implementations. Afterwards\nthe outputs at the final time step are checked against reference outputs\nfrom the directory verification using a Python script. You can also compare\n the output files like out.online_2D_parallelmodel with reference files.\n(Note: The script runtests.sh uses the generic compile definitions for\nLinux with the gfotran compiler. For other systems, you might need to\nchange the settings for the make definitions files).\n\n\n## Test suite\n\nThe directory tests/ contains a set of implementations for consistency tests.\nThis is more for 'internal use'. We use these implementations to validate PDAF. \n\nYou can run the scripts analogously to that in the directory tutorial/:\n**runtests_offline.sh** or **runtests_online.sh** perform details tests\non options for the offline and online coupled implementations.\nThe script **test_runtime.sh** runs tests on a larger model grid. This is\nusually used to assess the effect of code changes on the run time.\n\n\n## Data Assimilation Algorithms \n\nThe filter algorithms in PDAF are:\n\n**Filters with global analysis step**\n- **EnKF** (The classical perturbed-observations Ensemble Kalman filter)\n       [G. Evensen, J. Geophys. Res. 99 C5 (1994) 10143-10162,\n        G. Burgers et al., Mon. Wea. Rev. 126 (1998) 1719-1724]\n- **ESTKF** (Error Subspace Transform Kalman filter)\n       [L. Nerger et al. Mon. Wea. Rev. 140 (2012) 2335-2345, doi:10.1175/MWR-D-11-00102.1]\n- **ETKF** (Ensemble Transform Kalman filter)\n       [C. H. Bishop et al. Mon. Wea. Rev. 129 (2001) 420-436]\n       The implementation in PDAF follows that described for the LETKF, but as a global filter. \n- **SEIK** (Singular \"Evolutive\" Interpolated Kalman) filter\n       This is the full ensemble variant of the SEIK\n       (Singular \"Interpolated\" Extended Kalman) filter.\n       [SEIK: D.-T. Pham et al., C. R. Acad Sci., Ser. III, 326 (1009)\n        255-260, for the SEIK variant in PDAF see L. Nerger et al.,\n        Tellus 57A (2005) 715-735, doi:10.3402/tellusa.v57i5.14732]\t\n- **SEEK** (Singular \"Evolutive\" Extended Kalman) filter\n       [D.-T. Pham et al., J. Mar. Syst. 16 (1998) 323-340] \n- **NETF** (Nonlinear Ensemble Transform Filter)\n       [J. Toedter, B. Ahrens, Mon. Wea. Rev. 143 (2015) 1347-1367, doi:10.1175/MWR-D-14-00108.1]\n- **PF** (Particle filter with importance resampling)\n       [see S. Vetra-Carvalho et al., Tellus A 70 (2018) 1445364, doi:10.1080/16000870.2018.1445364]\n\n**Filters with localized analysis step**\n- **LESTKF** (Local Error Subspace Transform Kalman filter)\n       [L. Nerger et al. Mon. Wea. Rev. 140 (2012) 2335-2345, doi:10.1175/MWR-D-11-00102.1]\n- **LETKF** (Local Ensemble Transform Kalman filter)\n       [B. R. Hunt et al., Physica D 230 (2007) 112-126, doi:10.1016/j.physd.2006.11.008]\n- **LSEIK** (Local Singular \"Evolutive\" Interpolated Kalman) filter\n       [L. Nerger et al., Oce. Dyn. 56 (2006) 634-649, doi:10.1007/s10236-006-0083-0]\n- **LEnKF** (The classical perturbed-observations Ensemble Kalman filter with localization)\n       [G. Evensen, J. Geophys. Res. 99 C5 (1994) 10143-10162,\n        G. Burgers et al., Mon. Wea. Rev. 126 (1998) 1719-1724]\n- **LNETF** (Nonlinear Ensemble Transform Filter with observation localization)\n       [J. Toedter, B. Ahrens, Mon. Wea. Rev. 143 (2015) 1347-1367, doi:10.1175/MWR-D-14-00108.1]\n- **LKNETF** (Local Kalman-nonlinear ensemble transform filter)\n       [L. Nerger, Q. J. R. Meteorol Soc., 148 (2022) 620-640, doi:10.1002/qj.4221]\n- **ENSRF** (Ensemble square-root filter  using serial observation processing and covariance localization)\n       [J. Whitaker, T. Hamill, Mon. Wea. Rev. 130 (2002) 1913-1924]\n- **EAKF** (Ensemble Adjustment Filter using serial observation processing and covariance localization)\n       [J. Anderson, Mon. Wea. Rev. (2003) 634-642] \n\nAll filter algorithms are fully parallelized with MPI and optimized. The local filters \n(LSEIK, LETKF, LESTKF, LNETF, LKNETF) are in addition parallelized using OpenMP.\n\n**Smoother extensions** are included for the filters ESTKF/LESTKF, ETKF/LETKF, EnKF, NETF/LNETF.\n\n**3D-Var methods**\n\nNext to the ensemble filter methods, different 3D-Var methods are provided:\n- **parameterized 3D-Var**\n- **3D ensemble** Var with ensemble transformation by ESTKF or LESTKF\n- **hybrid 3D-Var** with ensemble transformation by ESTKF or LESTKF\n\nThe 3D-Var methods are implemented as incremental 3D-Var schemes following\nBannister, Q. J. Royal Meteorol. Soc., 143 (2017) 607-633, doi:10.1002/qj.2982. \n\n## The code\n\nPDAF is written in, mainly, Fortran 2003. \nThe compilation and execution has been tested on the different systems ranging from\nnotebook computers to supercomputers, e.g.:\n- Linux\n- MacOS\n- Cray CLE\n- NEC Aurora\n- Microsoft Windows 10 with Cygwin\n\n## Citing PDAF\n\nPDAF is developed by researchers. Thus, with respect to science, please cite PDAF,\nwhen you publish work obtained using the software. For more information on how to\ncite PDAF, see https://pdaf.awi.de/trac/wiki/CitingPDAF\n\n## Contact Information\n\nPlease send comments, suggestions, or bug reports to pdaf@awi.de or use the Issues in Github.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpdaf%2Fpdaf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpdaf%2Fpdaf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpdaf%2Fpdaf/lists"}