= Implementation Guide = '''This version of the documentation is valid for PDAF until and including V1.7. For the most recent version see [ImplementationGuide here].''' {{{ #!html
}}} This page contains the implementation guide for the online mode of PDAF. The [OfflineImplementationGuide implementation guide for the offline mode], in which separate programs for model integrations and assimilation step are executed, is provided on a separate page. The differences between the online and offline modes is described on the page on the [GeneralImplementationConcept Implementation concept of PDAF]. == The implementation of PDAF with an existing model == For the online-mode of data assimilation, the numerical model has to e combined with PDAF to generate the assimilation system. The implementation of PDAF with an existing model can be performed in several steps. A possible sequence is the following: 1. [AdaptParallelizationuntilOnePointSeven Adaptation of the parallelization] 2. [InitPdafuntilOnePointSeven Initialization of PDAF and the ensemble by PDAF_init] 3. [ModifyModelforEnsembleIntegrationuntilOnePointSeven Modification of the model code for the ensemble integration] 4. [ImplementationofAnalysisStepuntilOnePointSeven Implementation of the analysis step] 5. [AddingMemoryandTimingInformationuntilOnePointSeven Adding memory and timing information] The implementation steps are described on the pages linked above. An example of the implementation is given in the test suite provided with PDAF with the routines in `testsuite/main/` and `testsuite/dummymodel_1D/`. Several routines that contain model and observation specific operations are called by PDAF through its defined interface. These routines need to be implemented by the user. The operations in all these routines are rather elementary like the initialization of the model's physical fields from a state vector provided by PDAF and the initialization of the vector of observations. The example mentioned above also includes examples for these routines. In addition, the directory `templates/` contains template implementations of the routines that can be used as a basis for new implementations.