Skip to content

Commit 2720b0b

Browse files
authored
Add FCI on Meteosat-12 varobs and CX namelists and test files (#235)
* Add varobs files for FCI. FCIASR and FCIClr in the UKV and FCIClr in the global. * Add CX files for FCI. FCIASR and FCIClr for the UKV and FCIClr only for the global. * Add FCI to default CX fields file * Add FCI (Meteosat12) to OPS FORTRAN routines * Add missing entries to OPS routines for FCI * Update generate_unittest python script to add FCI, and update netCDF files for CX and Varobs tests * Re-add IRS which was accidentally deleted
1 parent 5c7d171 commit 2720b0b

37 files changed

+616
-3
lines changed

deps/ops/stubs/OpsMod_CXGenerate/Ops_GetDefaultCxFields.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ SELECT CASE (ObsGroup)
120120
StashItem_SeaIce,StashItem_orog,StashItem_qcl, &
121121
StashItem_p,StashItem_p_Surface,StashCode_u10, &
122122
StashCode_v10,StashCode_t2,StashCode_rh2,StashCode_pmsl/)
123+
CASE (ObsGroupFCIASR, ObsGroupFCIClr)
124+
CxFields(1:15) = (/StashItem_theta,StashItem_q,StashItem_qcf,StashItem_SST, &
125+
StashItem_SeaIce,StashItem_orog,StashItem_qcl, &
126+
StashItem_p,StashItem_p_Surface,StashCode_u10, &
127+
StashCode_v10,StashCode_t2,StashCode_rh2,StashCode_pmsl, &
128+
StashItem_Cloud_Bulk/)
123129
CASE (ObsGroupMWRI)
124130
CxFields(1:14) = (/StashItem_theta,StashItem_q,StashItem_qcf,StashItem_SST, &
125131
StashItem_SeaIce,StashItem_orog,StashItem_qcl, &

deps/ops/stubs/OpsMod_Control/Ops_ReadObsGroupSwitches.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ Using(ObsGroupAIRS) = ops_env_is_true ("OPS_AIRS")
6767
Using(ObsGroupIASI) = ops_env_is_true ("OPS_IASI")
6868
Using(ObsGroupSEVIRIClr) = ops_env_is_true ("OPS_SEVIRICLR")
6969
Using(ObsGroupSEVIRIASR) = ops_env_is_true ("OPS_SEVIRIASR")
70+
Using(ObsGroupFCIClr) = ops_env_is_true ("OPS_FCICLR")
71+
Using(ObsGroupFCIASR) = ops_env_is_true ("OPS_FCIASR")
7072
Using(ObsGroupMVIRIClr) = ops_env_is_true ("OPS_MVIRICLR")
7173
Using(ObsGroupGOESImClr) = ops_env_is_true ("OPS_GOESIMCLR")
7274
Using(ObsGroupCOMSMIClr) = ops_env_is_true ("OPS_COMSMICLR")

deps/ops/stubs/OpsMod_ODB/OpsFn_ObsToReportType.inc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ USE OpsMod_Satids, ONLY: &
105105
SatId_Meteosat9, &
106106
SatId_Meteosat10, &
107107
SatId_Meteosat11, &
108+
SatId_Meteosat12, &
108109
SatId_MetopA, &
109110
SatId_MetopB, &
110111
SatId_MetopC, &
@@ -419,6 +420,25 @@ SELECT CASE (Obs % Header % ObsGroup)
419420
END IF
420421
CASE (ObsGroupCOMSMIClr)
421422
report_types = rep_type_kma_geos_rad
423+
CASE (ObsGroupFCIClr, ObsGroupFCIASR)
424+
IF (Obs % Header % Satid % Present) THEN
425+
DO i = ob_start, ob_end
426+
IF (Obs % Satid(i) == SatId_Meteosat12) THEN
427+
report_types(i - ob_start + 1) = rep_type_meteosat_12_geos_rad
428+
ELSE
429+
found_report_type = .FALSE.
430+
DO j = 1, SIZE (map, DIM = 1)
431+
IF ((map(j,1) == ObsGroupFCIClr .AND. map(j,2) == Obs % Satid(i)) .OR. &
432+
(map(j,1) == ObsGroupFCIASR .AND. map(j,2) == Obs % Satid(i))) THEN
433+
report_types(i - ob_start + 1) = map(j,3)
434+
found_report_type = .TRUE.
435+
EXIT
436+
END IF
437+
END DO
438+
CALL update_unrecognized_satids (Obs % Satid(i))
439+
END IF
440+
END DO
441+
END IF
422442
CASE (ObsGroupMWSFY3B)
423443
report_types = rep_type_fy3b
424444
CASE (ObsGroupGeoCloud)
@@ -436,6 +456,8 @@ SELECT CASE (Obs % Header % ObsGroup)
436456
report_types(i - ob_start + 1) = rep_type_meteosat_10_geos_rad
437457
ELSE IF (Obs % Satid(i) == SatId_METEOSAT11) THEN
438458
report_types(i - ob_start + 1) = rep_type_meteosat_11_geos_rad
459+
ELSE IF (Obs % Satid(i) == SatId_METEOSAT12) THEN
460+
report_types(i - ob_start + 1) = rep_type_meteosat_12_geos_rad
439461
ELSE
440462
found_report_type = .FALSE.
441463
DO j = 1, SIZE (map, DIM = 1)

deps/ops/stubs/OpsMod_ODB/OpsODB_InitODBElemDesp_Body.inc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ USE OpsMod_ObsGroupInfo, ONLY: &
5353
ObsGroupSurfaceCloud, &
5454
ObsGroupTOVS, &
5555
OpsFn_IsAHIGroup, &
56+
OpsFn_IsFCIGroup, &
5657
OpsFn_IsSEVIRIGroup
5758

5859
USE OpsMod_Index
@@ -590,6 +591,28 @@ IF (OpsFn_IsAHIGroup(ObsGroup) .OR. &
590591
ElemDesp2ODBDesp(IndexAHIBrightnessTemp) % also_do_levels(1:5) = (/1,43,43,1,1/)
591592
END IF
592593

594+
ElemDesp2ODBDesp(IndexFCICloudTopT) % TableName = 'body'
595+
ElemDesp2ODBDesp(IndexFCICloudTopT) % ColName = 'initial_obsvalue'
596+
ElemDesp2ODBDesp(IndexFCICloudTopT) % Varno = ops_odb_getval (h, "$cloud_top_temp")
597+
598+
IF (OpsFn_IsFCIGroup(ObsGroup) .OR. &
599+
(ObsGroup == ObsGroupGeoCloud .AND. OpsFn_IsFCIGroup (SrcObsGroupGeoCloud))) THEN
600+
ElemDesp2ODBDesp(IndexFCIBrightnessTemp) % TableName = 'body'
601+
ElemDesp2ODBDesp(IndexFCIBrightnessTemp) % ColName = 'initial_obsvalue'
602+
ElemDesp2ODBDesp(IndexFCIBrightnessTemp) % Varno = ops_odb_getval (h, "$rawbt") ! brightness temperature
603+
604+
ElemDesp2ODBDesp(IndexFCICloudFree) % TableName = 'body'
605+
ElemDesp2ODBDesp(IndexFCICloudFree) % ColName = 'initial_obsvalue'
606+
ElemDesp2ODBDesp(IndexFCICloudFree) % Varno = ops_odb_getval (h, "$cloud_frac_clear")
607+
608+
ElemDesp2ODBDesp(IndexFCIBrightnessTemp) % also_do(1:5) = (/IndexSkinTemperature, &
609+
IndexRH, &
610+
IndexTemp, &
611+
IndexRH2, &
612+
IndexT2/)
613+
ElemDesp2ODBDesp(IndexFCIBrightnessTemp) % also_do_levels(1:5) = (/1,43,43,1,1/)
614+
END IF
615+
593616
IF (ObsGroup == ObsGroupMTSATImClr) THEN
594617
ElemDesp2ODBDesp(IndexMTSATImBrightnessTemp) % TableName = 'body'
595618
ElemDesp2ODBDesp(IndexMTSATImBrightnessTemp) % ColName = 'initial_obsvalue'

deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ SELECT CASE (ObsGroup)
108108
IF (.NOT. RTTOV_CloudSwitch) THEN
109109
Varfields(13:14) = (/Varfield_cloudtopp, Varfield_cloudfrac/)
110110
END IF
111+
CASE (ObsGroupFCIASR, ObsGroupFCIClr)
112+
Varfields(1:12) = (/Varfield_britemp,Varfield_satid,Varfield_satzenith, &
113+
Varfield_solzenith,Varfield_tskin,Varfield_tcozone, &
114+
Varfield_surface,Varfield_numchans,Varfield_channum, &
115+
Varfield_stratt,Varfield_iremiss,Varfield_qcinfo/)
111116
CASE (ObsGroupHIRAS)
112117
Varfields(1:12) = (/Varfield_tskin,Varfield_tcozone,Varfield_satzenith, &
113118
Varfield_surface,Varfield_stratt,Varfield_satid, &

deps/ops/stubs/OpsMod_Varobs/Ops_SetupVarobsLevDepC.inc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ USE OpsMod_ObsGroupInfo, ONLY: &
4848
ObsGroupGPSRO, &
4949
ObsGroupSEVIRIClr, &
5050
ObsGroupSEVIRIASR, &
51+
ObsGroupFCIClr, &
52+
ObsGroupFCIASR, &
5153
ObsGroupMVIRIClr, &
5254
ObsGroupGOESImClr, &
5355
ObsGroupMTSATImClr, &
@@ -187,6 +189,11 @@ SELECT CASE (Observations % header % ObsGroup)
187189
ObsLevelType = 0.0
188190
NumLevelLevs = 1
189191

192+
CASE (ObsGroupFCIClr, ObsGroupFCIASR)
193+
194+
ObsLevelType = 0.0
195+
NumLevelLevs = 1
196+
190197
CASE (ObsGroupSAPHIR)
191198

192199
ObsLevelType = 0.0

deps/ops/stubs/Ops_Constants/OpsFn_ASRToClrGeoGroup.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ INTEGER :: OpsFn_ASRToClrGeoGroup
1616
SELECT CASE (obsgroup)
1717
CASE (ObsGroupAHIASR)
1818
OpsFn_ASRToClrGeoGroup = ObsGroupAHIClr
19+
CASE (ObsGroupFCIASR)
20+
OpsFn_ASRToClrGeoGroup = ObsGroupFCIClr
1921
CASE (ObsGroupSEVIRIASR)
2022
OpsFn_ASRToClrGeoGroup = ObsGroupSEVIRIClr
2123
CASE DEFAULT

deps/ops/stubs/Ops_Constants/OpsFn_IsASRGeoGroup.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ INTEGER, INTENT(IN) :: obsgroup
1414
LOGICAL :: OpsFn_IsASRGeoGroup
1515

1616
IF (obsgroup == ObsGroupAHIASR .OR. &
17+
obsgroup == ObsGroupFCIASR .OR. &
1718
obsgroup == ObsGroupSEVIRIASR) THEN
1819
OpsFn_IsASRGeoGroup = .TRUE.
1920
ELSE

deps/ops/stubs/Ops_Constants/OpsFn_IsClrGeoGroup.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ LOGICAL :: OpsFn_IsClrGeoGroup
1616
IF (obsgroup == ObsGroupABIClr .OR. &
1717
obsgroup == ObsGroupAHIClr .OR. &
1818
obsgroup == ObsGroupCOMSMIClr .OR. &
19+
obsgroup == ObsGroupFCIClr .OR. &
1920
obsgroup == ObsGroupGOESImClr .OR. &
2021
obsgroup == ObsGroupIN3DIClr .OR. &
2122
obsgroup == ObsGroupMTSATImClr .OR. &
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
!-------------------------------------------------------------------------------
2+
! (C) Crown copyright Met Office. All rights reserved.
3+
!-------------------------------------------------------------------------------
4+
! Function that returns .TRUE. if given obs group is a FCI obs group, false
5+
! if not.
6+
!-------------------------------------------------------------------------------
7+
8+
ELEMENTAL FUNCTION OpsFn_IsFCIGroup (obsgroup)
9+
10+
! Function arguments:
11+
INTEGER, INTENT(IN) :: obsgroup
12+
13+
! Function result:
14+
LOGICAL :: OpsFn_IsFCIGroup
15+
16+
IF (obsgroup == ObsGroupFCIClr .OR. &
17+
obsgroup == ObsGroupFCIASR) THEN
18+
OpsFn_IsFCIGroup = .TRUE.
19+
ELSE
20+
OpsFn_IsFCIGroup = .FALSE.
21+
END IF
22+
23+
END FUNCTION OpsFn_IsFCIGroup

0 commit comments

Comments
 (0)