[Dart-dev] DART/branches Revision: 12619

dart at ucar.edu dart at ucar.edu
Mon Jun 4 17:35:53 MDT 2018


thoar at ucar.edu
2018-06-04 17:35:53 -0600 (Mon, 04 Jun 2018)
282
Creates an output file with a 'N_DARTqc_8' copy to streamline the coordination
with the matlab scripts. QC = 8 is a failed vertical conversion, which should
not be possible with a 1D model, but it was easier to create the slot than
change the Matlab logic in a bunch of scripts.
  



Modified: DART/branches/gigg/assimilation_code/programs/obs_diag/oned/obs_diag.f90
===================================================================
--- DART/branches/gigg/assimilation_code/programs/obs_diag/oned/obs_diag.f90	2018-06-04 22:30:36 UTC (rev 12618)
+++ DART/branches/gigg/assimilation_code/programs/obs_diag/oned/obs_diag.f90	2018-06-04 23:35:53 UTC (rev 12619)
@@ -118,14 +118,26 @@
 ! 3     Evaluated only, but the posterior forward operator failed
 !   --- everything above this means only the prior is OK
 ! 4     prior forward operator failed
-! 5     not used
+! 5     not assimilated or evaluated because of namelist specification of
+!         input.nml:obs_kind_nml:[assimilate,evaluate]_these_obs_types
 ! 6     prior QC rejected
 ! 7     outlier rejected
-! 8+    reserved for future use
+! 8     failed vertical conversion
+! 9+    reserved for future use
+!
+! Some DART QC == 4 have meaningful posterior mean/spread (i.e. not MISSING)
+! Anything with a DART QC == 5 has MISSING values for all DART copies
+! Anything with a DART QC == 6 has MISSING values for all DART copies
+! Anything with a DART QC == 7 has 'good' values for all DART copies, EXCEPT
+! ambiguous case:
+! prior rejected (7) ... posterior fails (should be 7 & 4)
+!
+! FIXME can there be a case where the prior is evaluated and the posterior QC is wrong
+! FIXME ... there are cases where the prior fails but the posterior works ...
 
 integer             :: org_qc_index, dart_qc_index
 integer             :: qc_integer
-integer, parameter  :: QC_MAX = 8
+integer, parameter  :: QC_MAX = 9
 integer, parameter  :: QC_MAX_PRIOR     = 3
 integer, parameter  :: QC_MAX_POSTERIOR = 1
 integer, dimension(0:QC_MAX) :: qc_counter = 0
@@ -132,9 +144,11 @@
 real(r8), allocatable, dimension(:) :: qc
 real(r8), allocatable, dimension(:) :: copyvals
 
-integer, parameter, dimension(5) :: hist_qcs = (/ 0, 1, 2, 3, 7 /)
+integer, parameter, dimension(5) ::          hist_qcs = (/ 0, 1, 2, 3, 7 /)
 integer, parameter, dimension(5) :: trusted_prior_qcs = (/ 0, 1, 2, 3, 7 /)
 integer, parameter, dimension(3) :: trusted_poste_qcs = (/ 0, 1,       7 /)
+integer, parameter, dimension(4) ::    good_prior_qcs = (/ 0, 1, 2, 3 /)
+integer, parameter, dimension(2) ::    good_poste_qcs = (/ 0, 1       /)
 integer :: numqcvals
 
 !-----------------------------------------------------------------------
@@ -177,13 +191,13 @@
 ! Variables used to accumulate the statistics.
 !-----------------------------------------------------------------------
 
-integer, parameter :: Ncopies = 18
-character(len = stringlength), dimension(Ncopies) :: copy_names = &
-   (/ 'Nposs      ', 'Nused      ',                               &
-      'rmse       ', 'bias       ', 'spread     ', 'totalspread', &
-      'NbadDARTQC ', 'observation', 'ens_mean   ',                &
-      'N_DARTqc_0 ', 'N_DARTqc_1 ', 'N_DARTqc_2 ', 'N_DARTqc_3 ', &
-      'N_DARTqc_4 ', 'N_DARTqc_5 ', 'N_DARTqc_6 ', 'N_DARTqc_7 ', 'N_trusted  ' /)
+integer, parameter :: Ncopies = 19
+character(len=stringlength), dimension(Ncopies) :: copy_names =                  &
+   (/ 'Nposs      ', 'Nused      ',                                              &
+      'rmse       ', 'bias       ', 'spread     ', 'totalspread',                &
+      'NbadDARTQC ', 'observation', 'ens_mean   ', 'N_trusted  ',                &
+      'N_DARTqc_0 ', 'N_DARTqc_1 ', 'N_DARTqc_2 ', 'N_DARTqc_3 ', 'N_DARTqc_4 ', &
+      'N_DARTqc_5 ', 'N_DARTqc_6 ', 'N_DARTqc_7 ', 'N_DARTqc_8 '                /)
 
 type TRV_type
    ! statistics by time-region-variable
@@ -198,15 +212,16 @@
    real(r8), dimension(:,:,:), pointer :: observation, ens_mean
    integer,  dimension(:,:,:), pointer :: NDartQC_0, NDartQC_1, NDartQC_2, NDartQC_3
    integer,  dimension(:,:,:), pointer :: NDartQC_4, NDartQC_5, NDartQC_6, NDartQC_7
+   integer,  dimension(:,:,:), pointer :: NDartQC_8
    integer,  dimension(:,:,:,:), pointer :: hist_bin => NULL()
 end type TRV_type
 
-type(TRV_type) :: analy, guess
+type(TRV_type) :: prior, poste
 
 type(time_type), allocatable, dimension(:)   :: bincenter
 type(time_type), allocatable, dimension(:,:) :: binedges
-real(digits12),  allocatable, dimension(:)   :: epochcenter
-real(digits12),  allocatable, dimension(:,:) :: epochedges
+real(digits12),  allocatable, dimension(:)   :: epoch_center
+real(digits12),  allocatable, dimension(:,:) :: epoch_edges
 integer,         allocatable, dimension(:)   :: obs_used_in_epoch
 
 !-----------------------------------------------------------------------
@@ -239,8 +254,8 @@
 type(time_type) :: obsT1, obsTN        ! first,last time of all observations
 type(time_type) :: obs_time, skip_time
 
-character(len = 129) :: msgstring1, msgstring2
-character(len = stringlength) :: str1, str2, str3
+character(len=512) :: string1, string2, string3
+character(len=stringlength) :: obsname
 
 !-----------------------------------------------------------------------
 ! Some variables to keep track of who's rejected why ...
@@ -272,12 +287,12 @@
 


More information about the Dart-dev mailing list