[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