!------------------------------------------------------------------------------------------- !Copyright (c) 2013-2016 by Wolfgang Kurtz and Guowei He (Forschungszentrum Juelich GmbH) ! !This file is part of TSMP-PDAF ! !TSMP-PDAF is free software: you can redistribute it and/or modify !it under the terms of the GNU Lesser General Public License as published by !the Free Software Foundation, either version 3 of the License, or !(at your option) any later version. ! !TSMP-PDAF is distributed in the hope that it will be useful, !but WITHOUT ANY WARRANTY; without even the implied warranty of !MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the !GNU LesserGeneral Public License for more details. ! !You should have received a copy of the GNU Lesser General Public License !along with TSMP-PDAF. If not, see <http://www.gnu.org/licenses/>. !------------------------------------------------------------------------------------------- ! ! !------------------------------------------------------------------------------------------- !init_pdaf_info.F90: TSMP-PDAF implementation of routine ! 'init_pdaf_info' (PDAF online coupling) !------------------------------------------------------------------------------------------- !$Id: init_pdaf_info.F90 1442 2013-10-04 10:35:19Z lnerger $ !BOP ! ! !ROUTINE: init_pdaf_info - Screen output on assimilation configuration ! ! !INTERFACE: SUBROUTINE init_pdaf_info() ! !DESCRIPTION: ! This routine performs a model-sided screen output about ! the coniguration of the data assimilation system. ! Using this output is optional. Most of the information ! is also displayed by PDAF itself when it is initialized ! in PDAF_init. Not displayed by PDAF is the assimilation ! interval (delt_obs), which is unknown to PDAF. ! ! !REVISION HISTORY: ! 2011-05 - Lars Nerger - Initial code extracted from init_pdaf ! Later revisions - see svn log ! ! !USES: USE mod_assimilation, & ! Variables for assimilation ONLY: filtertype, subtype, dim_ens, delt_obs, rms_obs, & model_error, model_err_amp, forget, rank_analysis_enkf, & dim_lag, pf_res_type, pf_noise_type, pf_noise_amp, & type_hyb, hyb_gamma, hyb_kappa IMPLICIT NONE ! !CALLING SEQUENCE: ! Called by: init_pdaf !EOP ! ***************************** ! *** Initial Screen output *** ! ***************************** IF (filtertype == 1) THEN WRITE (*, "(21x, a)") "Filter: SEIK" IF (subtype == 2) THEN WRITE (*, "(6x, a)") "-- fixed error-space basis" ELSE IF (subtype == 3) THEN WRITE (*, "(6x, a)") "-- fixed state covariance matrix" ELSE IF (subtype == 4) THEN WRITE (*, "(6x, a)") "-- use ensemble transformation" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*,"(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 2) THEN WRITE (*, "(21x, a)") "Filter: EnKF" IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF IF (rank_analysis_enkf > 0) THEN WRITE (*, "(6x, a, i5)") & "analysis with pseudo-inverse of HPH, rank:", rank_analysis_enkf END IF ELSE IF (filtertype == 3) THEN WRITE (*, "(21x, a)") "Filter: LSEIK" IF (subtype == 2) THEN WRITE (*, "(6x, a)") "-- fixed error-space basis" ELSE IF (subtype == 3) THEN WRITE (*, "(6x, a)") "-- fixed state covariance matrix" ELSE IF (subtype == 4) THEN WRITE (*, "(6x, a)") "-- use ensemble transformation" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 4) THEN WRITE (*, "(21x, a)") "Filter: ETKF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Variant using T-matrix" ELSE IF (subtype == 1) THEN WRITE (*, "(6x, a)") "-- Variant following Hunt et al. (2007)" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*,"(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 5) THEN WRITE (*, "(21x, a)") "Filter: LETKF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Variant using T-matrix" ELSE IF (subtype == 1) THEN WRITE (*, "(6x, a)") "-- Variant following Hunt et al. (2007)" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 6) THEN WRITE (*, "(21x, a)") "Filter: ESTKF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*,"(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 7) THEN WRITE (*, "(21x, a)") "Filter: LESTKF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 8) THEN WRITE (*, "(21x, a)") "Filter: localized EnKF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF IF (rank_analysis_enkf > 0) THEN WRITE (*, "(6x, a, i5)") & "analysis with pseudo-inverse of HPH, rank:", rank_analysis_enkf END IF ELSE IF (filtertype == 9) THEN WRITE (*, "(21x, a)") "Filter: NETF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 10) THEN WRITE (*, "(21x, a)") "Filter: LNETF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (dim_lag > 0) WRITE (*, "(15x, a, i5)") "smoother lag:", dim_lag IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f5.2)") "forgetting factor:", forget IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 11) THEN WRITE (*, "(21x, a)") "Filter: LKNETF" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- HNK: 2-step LKNETF with NETF before LETKF" ELSE IF (subtype == 1) THEN WRITE (*, "(6x, a)") "-- HKN: 2-step LKNETF with LETKF before NETF" ELSE IF (subtype == 4) THEN WRITE (*, "(6x, a)") "-- HSync: LKNETF synchronous" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode - HNK: 2-step LKNETF with NETF before LETKF" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(10x, a, f7.2)") "forgetting factor:", forget IF (type_hyb == 0) THEN ELSE IF (type_hyb == 0) THEN WRITE (*, "(6x, a)") "-- use fixed hybrid weight hyb_gamma" ELSE IF (type_hyb == 1) THEN WRITE (*, "(6x, a)") "-- use gamma_lin: (1 - N_eff/N_e)*hyb_gamma" ELSE IF (type_hyb == 2) THEN WRITE (*, "(6x, a)") "-- use gamma_alpha: hybrid weight from N_eff/N>=hyb_gamma" ELSE IF (type_hyb == 3) THEN WRITE (*, "(6x, a)") "-- use gamma_ska: 1 - min(s,k)/sqrt(hyb_kappa) with N_eff/N>=hyb_gamma" ELSE IF (type_hyb == 4) THEN WRITE (*, "(6x, a)") "-- use gamma_sklin: 1 - min(s,k)/sqrt(hyb_kappa) >= 1-N_eff/N>=hyb_gamma" END IF WRITE (*, "(8x, a, f7.2)") "hybrid weight gamma:", hyb_gamma WRITE (*, "(10x, a, f7.2)") "hybrid norm kappa:", hyb_kappa IF (model_error) THEN WRITE (*, "(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 12) THEN WRITE (*, "(21x, a)") "Filter: PF with resampling" IF (subtype == 0) THEN WRITE (*, "(6x, a)") "-- Standard mode" ELSE IF (subtype == 5) THEN WRITE (*, "(6x, a)") "-- Offline mode" END IF WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens IF (subtype /= 5) WRITE (*, "(6x, a, i5)") "Assimilation interval:", delt_obs WRITE (*, "(13x, a, i5)") "reampling type:", pf_res_type WRITE (*, "(17x, a, i5)") "noise type:", pf_noise_type WRITE (*, "(12x, a, f8.3)") "noise amplitude:", pf_noise_amp IF (model_error) THEN WRITE (*,"(6x, a, f5.2)") "model error amplitude:", model_err_amp END IF ELSE IF (filtertype == 100) THEN WRITE (*, "(6x, a, f5.2)") "-- Generate observations --" IF (dim_ens>1) THEN WRITE (*, "(14x, a)") "Use ensemble mean for observations" WRITE (*, "(14x, a, i5)") "ensemble size:", dim_ens ELSE WRITE (*, "(14x, a)") "Generate observations from single ensemble state" END IF END IF END SUBROUTINE init_pdaf_info