# $Id: $ #****c* Configuration Files/cosmic_pp.cf * # # NAME # cosmic_pp.cf - COSMIC data configuration file for pre-processor # implementations in ROPP # # SYNOPSIS # ... -c cosmic_pp.cf ... # # DESCRIPTION # This file reflects the configuration for the PP # implementations within ROPP suitable for use with COSMIC data. # # NOTES # # AUTHOR # Met Office, Exeter, UK. # Any comments on this software should be given via the ROM SAF # Helpdesk at http://www.romsaf.org # # COPYRIGHT # (c) EUMETSAT. All rights reserved. # For further details please refer to the file COPYRIGHT # which you should have received as part of this distribution. # #**** #------------------------------------------------------------------------------- # 0. Output options #------------------------------------------------------------------------------- output_lev1a = .false. ! Flag to output (modified) level 1a data output_lev1b = .true. ! Flag to output level 1b data output_lev2a = .true. ! Flag to output level 2a data output_diag = .false. ! Flag to output additional diagnostics #------------------------------------------------------------------------------- # 1. Excess phase to bending angle processing #------------------------------------------------------------------------------- # 1.1 Occultation processing method # --------------------------------- # GO - use GEOMETRIC OPTICS processing to derive bending angle as a function of # impact parameter from excess phase as a function of time. # WO - use WAVE OPTICS (CT2 algorithm) processing to derive bending angle as a # function of impact parameter from excess phase as a function of time. # PM - use WAVE OPTICS (PHASE MATCHING, as CDAAC newroam) processing below # hmax_wo; see the pm_* options in section 1.7b. # FS - use FULL SPECTRUM INVERSION below hmax_wo; see section 1.7c. occ_method = PM # 1.2 Filtering method # -------------------- # optest - use OPTIMAL ESTIMATION: solution of integral equation # slpoly - use SLIDING POLYNOMIAL filter_method = slpoly # 1.3 Smoothing bending angle profile # ----------------------------------- #fw_go_smooth = 3000.0 # Filter width for smoothed GO bending angles (m) #fw_go_full = 3000.0 # Filter width for full resolution GO bending angles (m) fw_go_smooth = 2000.0 # Filter width for smoothed GO bending angles (m) fw_go_full = 2000.0 # Filter width for full resolution GO bending angles (m) fw_wo = 2000.0 # Filter width for wave optics bending angle above 7 km(m) fw_low = -1000.0 # Filter width for wave optics bending angle below 7 km (m) # 1.4 Maximum height for wave optics processing # --------------------------------------------- hmax_wo = 25000.0 # Maximum height for wave optics processing (m) # 1.5 Data cut-off limits # ----------------------- Acut = 0.0 # Fractional cut-off limit for amplitude Pcut = -2000.0 # Cut-off limit for impact height Bcut = 0.1 # Cut-off limit for bending angle Hcut = -250000.0 # Cut-off limit for straight-line tangent altitude # 1.6 CT2 options # --------------- CFF = 3 # Complex field filter flag (CFF = 'Pa') dsh = 200.0 # Shadow border width (m) # 1.7 Degraded L2 data flag # ------------------------- opt_DL2 = .true. # 1.7a L2 correction method (used with opt_DL2 = .true.) # ------------------------------------------------------ # ROPP - original ROPP ropp_pp_correct_L2 algorithm # IMPROVED - in addition: missing L2 samples filled by model continuation, # Doppler-consistency L2 cut-off (newroam l2hicd), ionospheric # L2-L1 bending angle model below the cut-off at equal impact # parameter (newroam l4fit), thresholded click removal l2_method = IMPROVED l2_rhf = ANALYSIS # radioholographic filter of L2 used only for the L2 # badness/cut-off analysis (L2 phase unfiltered); # PHASE = filtered L2 phase (v23 and earlier); the # filter can lose ~1 L2 cycle at sporadic-E layers l2_dop_tol = 6.0 # Max |raw - smoothed| L2 Doppler (Hz) l2_dif_tol = 1.0 # Max |L1 - (f1/f2) L2| smoothed Doppler (Hz) l2_hscan = 20000.0 # Top of the Doppler-consistency scan (m) # 1.7b Phase matching (occ_method = PM) options # --------------------------------------------- pm_rhf = .true. # Radio-holographic filtering of the PM field pm_nwin_rhf = 1000.0 # Gaussian spectral window half-width (bins, 32768-pt FFT) pm_fw_low = 100.0 # Savitzky-Golay half-width below pm_h_mid (m) pm_fw_mid = 225.0 # Savitzky-Golay half-width pm_h_mid..pm_h_high (m) pm_fw_high = 500.0 # Savitzky-Golay half-width above pm_h_high (m) pm_h_mid = 7000.0 # Lower smoothing transition height (m) pm_h_high = 10000.0 # Upper smoothing transition height (m) pm_h_step = 3000.0 # Lowest point of the amplitude step-fit mean (m) pm_border = LSQ # PM shadow border: LSQ - least-squares step fit of the # PM amplitude (default); NEWROAM - newroam stpfit # (v24 and earlier; can fail with "WO shadow border # too high" when the amplitude fades near 20 km) pm_dh_go = 1000.0 # PM -> GO transition width below hmax_wo (m) pm_L2 = .true. # Process L2 by phase matching pm_l2_extrap = L4FIT # L2-L1 below the L2 border: L4FIT (newroam l4fit model, # fitted from the border to 80 km), L4ANCHOR (the same # model shifted to the mean L2-L1 over border+1..6 km; # delivery <= 8) or CONST pm_ion_win = -1.0 # PM/FSI: height smoothing (full width, m) of the L2-L1 # bending difference before the L1/L2 combination; # 0 = off; < 0 (default): chosen per profile among # 0-4.5 km as newroam's optl4win (smoothest corrected # bending angle at 60-80 km) pm_ion_method = NEWROAM # PM/NEWROAM FSI ionospheric term above the L2 border: # NEWROAM - as newroam: L1/L2 GO bending from Dopplers # filtered with the optimal L1-L2 window (optl4win, # nf..3nf samples), term e3-e4; optben smoothed LC # from the 3nf window (default) # HEIGHT - L2-L1 bending difference smoothed in height # with pm_ion_win (v20 and earlier) pm_ion_hmin = 20000.0 # PM/FSI: L2 not used below this impact height (m); the # ionospheric L2-L1 model is extrapolated below it # (newroam hic = 20 km); 0 = L2 down to its border. # Setting also hmax_wo = 20000 reproduces newroam's # 20 km WO->GO transition (hid) pm_sigma = NRLSW3 # PM bending angle error proxy (bangle_sigma): NRLSW3 - # revised newroam local spectral width of the PM field, # option (iii): power-weighted mean |spectral offset| # (CDAAC Bend_ang_stdv; default); NRLSW2 - option (ii), # power-weighted rms offset; ERRMOD - option (i), step # fit of the cumulative spectrum (0 in single-ray # regions); LSW - spread of the PM bending angle; # ERRLSW - sqrt(ERRMOD**2+LSW**2) (v20-v26). Missing # above the WO top. pm_sigma_nwin = 131 # Running mean (FFT windows, 10 m apart; odd) of the # NRLSW3/NRLSW2 error proxies (PM and NEWROAM FSI): # 131 (1.3 km) matches CDAAC Bend_ang_stdv; ERRMOD # always uses 51 (errmod.f) surface_cut = AUTO # Remove levels with altitude <= 0 (bending below the # surface ray), as newroam: AUTO - PM and NEWROAM FSI, # ON - all methods, OFF - original ROPP re-gridding pm_cutoff = AUTO # PM signal truncation: AUTO/SNRCUT - newroam snrcut of the # noisy end of the record before the phase matching (keys # fsi_snr_cut1/2, fsi_snr_hwin); ROPP - Acut only pm_hmax = 20500.0 # PM/NEWROAM FSI: top of the wave optics region (m); the # pm_dh_go WO->GO transition lies below it (19.5-20.5 km # as newroam, hid = 20 km); 0 = use hmax_wo pm_transform = FAST # PM transform: FAST - exact transform with the model path # phase advanced by recurrence along the 1 m # grid (3-4x faster; differences < 1e-8) # EXACT - original direct evaluation (v16) go_window = AUTO # Full-resolution GO bending (used above the WO top): # MEAN - original: fw_go_full converted with the mean # sample density of the whole record (too wide # at 20-60 km for records reaching deep below # the surface, e.g. COSMIC-2 conPhs) # LOCAL - fw_go_full with the density at 20-60 km # NEWROAM - newroam Doppler filter (3-fold cubic # Savitzky-Golay) with the Fresnel-zone half # width 2*sqrt(lambda*D) # AUTO - NEWROAM for PM and NEWROAM FSI, else MEAN go_fres_scale = 1.0 # NEWROAM GO filter: multiplier of the Fresnel half width # (1 = newroam; 0.5/2/3 tested: all worse vs UCAR) go_dens_hmin = 20000.0 # NEWROAM/LOCAL GO window: impact height band (m) whose go_dens_hmax = 60000.0 # sample density converts the window (m) to samples pm_l2_blend = 500.0 # PM/NEWROAM FSI: top (m above the L2 border) of the L2 # model -> data transition (newroam hic + 0.5 km) # 1.7c Full spectrum inversion (occ_method = FS / FSI) options # ------------------------------------------------------------ # fsi_method: ROPP - original ROPP FSI (time-domain smoothing, two passes # joined at 10 km, DCT-like shadow border, L2 reset) # NEWROAM - one FSI pass on the unsmoothed signal; the FSI # spectrum is processed in impact parameter space as # newroam processes its PM field (pm_rhf, pm_nwin_rhf, # pm_fw_*, pm_h_*, pm_h_step, pm_dh_go, pm_l2_extrap) # fsi_cutoff: ROPP - satellite-altitude dependent signal cut-off # SNRCUT - newroam snrcut (noise = min of sliding mean SNR) # AUTO - SNRCUT with fsi_method NEWROAM, ROPP otherwise fsi_method = NEWROAM # fsi_taper_top: NEWROAM FSI - cosine taper length (s) at the top (start) of # the record, limited so that it ends above the FSI height range (GO impact # height > FSI top + 4 km). The abrupt record start leaks into the whole FSI # spectrum (spectral phase increment ~ 0) and can dominate the weak multipath # spectrum below ~10 km, giving bending-angle outliers; low-SNR receivers # need the longer taper (0 = original 20-sample taper). # fsi_model: NEWROAM FSI large-scale model of the spectral phase increments # used to centre the radio-holographic filter: # SG2 - two-pass: 100 m SG of the increments, increments re-wrapped # around it, 100 m SG again (default; no 0/2pi wrap-around bias) # SG - 100 m SG filter of the increments in [0, 2pi) (v13 behaviour) # GOREF - re-wrapped around the smoothed GO bending angle (experimental) # UNWRAP - re-wrapped around a 500 m circular mean (v15 candidate; # branch flips in the moist tropical lower troposphere) # CIRC - power-weighted circular smoothing (experimental) # fsi_border_max: NEWROAM FSI - highest accepted L1 shadow border (m impact # height); a higher step-fit border is replaced by the GO-based lower limit # (0 = no limit) fsi_taper_top = 30.0 fsi_model = SG2 fsi_border_max = 15000.0 fsi_cutoff = AUTO fsi_snr_cut1 = 3.0 # SNRCUT: start of search (x noise level) fsi_snr_cut2 = 1.5 # SNRCUT: truncation level (x noise level) fsi_snr_hwin = 1.5 # SNRCUT: half width of the sliding SNR mean (s) fsi_sigma = LSW # NEWROAM FSI bending angle error proxy (bangle_sigma): # LSW - local spectral width as fsi_lsw (ROPP FSI): # sigma**2 = /2, dalpha = deviation of the # FSI bending angle from its cubic smoothing over # fsi_lsw_sm (m, full width), mean over fsi_lsw_win # (m); LSWRAW - the same before RH filtering; # ERRMOD - newroam spectral width/2; ERRLSW - # sqrt(ERRMOD**2 + LSW**2). Missing above the WO top. fsi_lsw_sm = 100.0 fsi_lsw_win = 500.0 # Bending angle percent confidence (bangle_qual, bangle_L1_qual): always the # newroam coherence PC = 100*(1 - P2/P1) of the local spectrum of the PM / # NEWROAM FSI field, as UCAR atmPrf Bend_ang_conf (wave optics region only) benmod_file = BENMOD # CIRA+Q bending angle model (FSI orbit correction) fsi_benmod_fix = .true. # NEWROAM: consistent m/km units in the model use # fsi_orbit (NEWROAM FSI): mapping of the satellites to circular orbits # GO - exact straight-line extension along the observed ray (default) # MODEL - exact straight-line extension along the CIRA+Q model ray # ROPP - original series expansion (gpsleofix) fsi_orbit = GO # 1.7d Open-loop data (COSMIC atmPhs with a navigation bit file, -navfile) # ------------------------------------------------------------------------ # ol_lcf: AUTO - set the open-loop flag from the open-loop model of the # input when a navigation bit file is given, so that the # external navigation bits are removed (as newroam rawphs) # YES/NO - force on/off; ROPP - mission defaults ol_lcf = AUTO # 1.8 Compute and output spectra flag # ----------------------------------- opt_spectra = .false. # 1.9 Paths to EGM96 geoid model coefficients and corrections file # ---------------------------------------------------------------- egm96 = ../data/egm96.dat # EGM96 coefficients file corr_egm96 = ../data/corrcoef.dat # Correction coefficients file #------------------------------------------------------------------------------- # 1. Ionospheric correction processing #------------------------------------------------------------------------------- # 1.1 Ionospheric correction method # --------------------------------- # GMSIS - use MSIS climatology bending angle (searching global MSIS profiles # for best fit profile to obs) in ionospheric correction, # statistical optimization and bending angle to refractivity inversion. # # MSIS - use MSIS climatology bending angle in ionospheric correction, # statistical optimization and bending angle to refractivity inversion. # # GBARO - use BAROCLIM bending angle (searching global BAROCLIM profiles # for best fit profile to obs) in ionospheric correction, # statistical optimization and bending angle to refractivity inversion. # # BARO - use BAROCLIM bending angle in ionospheric correction, # statistical optimization and bending angle to refractivity inversion. # # BG - use climatology from a specified input file containing # background temperature, pressure and humidity # (e.g. from an NWP analysis). The input filename can be specified # using the '-bfile' command line argument or setting 'bfile' (see 1.5). # # NONE - linear combination of L1 and L2 bending angles in ionospheric # correction, no additional information above observed profile top # in the inverse Abel to compute refractivity. # # newroam (UCAR/CDAAC) background models: the climatological refractivity is # transformed into bending angles by the forward Abel integral (newroam # direct.f) and then fitted/used as for MSIS: # NCAR - NCAR temperature climatology with hydrostatically integrated # heights ("NCAR + hydrostatic correction", newroam istandref=3, # the CDAAC operational choice); file ncar_file (see 1.4) # NCARNH - NCAR climatology with 7 km scale-height heights (istandref=2) # CIRAQ - CIRA-86 + humidity (istandref=1); file cira1_file (not part of # the newroam distribution; dry CIRA is used if it is missing) # CIRA - dry CIRA-86 (istandref=0); file cira_file # SELF - no climatology: the statistical-optimisation background is an # exponential fitted to the profile's own smoothed LC bending angle # between self_hmin and self_hmax (m, default 40000 and 65000) method = NCAR # Ionospheric correction method # 1.2 Abel integral method # ------------------------ # LIN - assume linear variation of bending angle and ln(n) between # observation levels. This algorithm is used in ROM SAF NRT processing # # EXP - assume exponential variation of bending angle and ln(n) between # observation levels. This algorithm is used in ropp_fm module. abel = LIN # 1.3 Statistical optimisation method # ----------------------------------- # SO - statistical optimisation. # LCSO - linear combination plus statistical optimisation. # optben - newroam optimisation: the background is fitted to the smoothed LC # bending angle between 35 and 60 km with a power law and a scale # factor, and blended: LC -> smoothed LC (30-40 km) -> fitted # background (35-60 km) -> background (55-65 km) so_method = optben # optben heights (km above the curvature radius): fit of the background # h1-h2, smoothed LC h3-h4, fitted background h5-h6, background h7-h8. # newroam/CDAAC: 35 60 30 40 35 60 55 65 optben_hgt = 35.0 60.0 30.0 40.0 35.0 60.0 55.0 65.0 # Final quality control (finalQA / bad attribute) # CDAAC - CDAAC/newroam tests (default): LC bending angle and refractivity # against the fixed NCAR + hydrostatic climatology, independent of # the retrieval background 'method'; thresholds qc_thres # CDAAC2025 - the updated CDAAC QC (2025): |smean| <= 50 urad, stdv1 <= 30 # urad, benmax2 0.65 in the polar winter (lat > 45 in Dec-Mar, # lat < -45 in Jul-Oct), sanity 0 < N < 1000, -150 < T < 100 C, # 0 < P < 1500 hPa; other thresholds as CDAAC (negative qc_thres # entries take these values) # ROPP - deviations from the retrieval background (delivery 21 and earlier) qc_method = CDAAC # Apply the difmaxref test (max relative refractivity deviation from NCAR at # 10-60 km). It is not in the CDAAC 2025 list but catches profiles with an # ionospheric residual above 50 km (e.g. GLONASS R19 in October 2026) qc_difmaxref = .true. # |smean| stdv (60-80 km, rad), stdv1 (40-60 km, rad), snr1avg minimum (v/v, # 40-80 km; 0 = no SNR test), qcl2d (m, 20-40 km), benmax1 (20-30 km), # benmax2 (30-40 km), difmaxref (10-60 km); CDAAC values. A negative value # takes the CDAAC value for the mission (from leo_id): # |smean| 3e-4 for PlanetiQ (GN..) and Spire (S0..S3), 1e-4 otherwise # snr1avg: no test for Spire, 200 v/v otherwise (COSMIC-2, PlanetiQ) qc_thres = -1 1.0e-4 3.5e-5 -1 0.1 0.35 0.35 0.5 # 1.4 Climatology model coefficients files # -------------------------------- msisfile = MSIS_coeff.nc # MSIS model coefficients file mfile = MSIS_coeff.nc # Model coefficients file for stat.opt. ncar_file = NCAR # newroam NCAR climatology (method NCAR, NCARNH) cira_file = CIRA # newroam dry CIRA-86 (method CIRA) cira1_file = CIRA1 # CIRA-86 + humidity (method CIRAQ) # 1.5 Background model temperature, humidity, pressure file # --------------------------------------------------------- bfile = BG_file.nc # Background meteorology profile file (method=BG) #------------------------------------------------------------------------------- # 2. Impact parameter grid #------------------------------------------------------------------------------- # The ionospheric correction interpolates L1 and L2 bending angle profiles onto a # standard grid. dpi = 100.0 # Step of standard impact parameter grid (m) #------------------------------------------------------------------------------- # 3. Smoothing bending angle profile #------------------------------------------------------------------------------- # A smoothed bending angle profile is derived compute the fit of observed bending # angles to the model bending angle profile. np_smooth = 3 # Polynomial degree for smoothing regression fw_smooth = 1000.0 # Filter width for smoothing profile #------------------------------------------------------------------------------- # 4. Model bending angle profile fit to observations #------------------------------------------------------------------------------- # To avoid systematic deviations from the observed profile with climatology, # the model profile is scaled to the observed profile by a fitting method. sf_method = parallel # Search and fit method (parallel or serial) nparm_fit = 2 # Number of parameters for model fit regression hmin_fit = 20000.0 # Lower limit for model fit regression hmax_fit = 70000.0 # Upper limit for model fit regression omega_fit = 0.3 # A priori standard deviation of regression factor #------------------------------------------------------------------------------- # 5. Ionospheric correction and statistical optimization #------------------------------------------------------------------------------- # The method described by Gorbunov (2002) is implemented to perform ionospheric # correction with statistical optimization. f_width = 2000.0 # Ionospheric correction filter width delta_p = 20.0 # Step of homogeneous impact parameter grid s_smooth = 2000.0 # External ionospheric smoothing scale z_ion = 50000.0 # Lower height limit of ionospheric signal z_str = 35000.0 # Lower height limit of stratospheric signal z_ltr = 12000.0 # Lower height limit of tropospheric signal n_smooth = 11 # Number of points for smoothing (must be odd) model_err = -0.5 # A priori model error std.dev. (dyn.est. if negative) #------------------------------------------------------------------------------- # 6. Bending angle inversion to refractivity #------------------------------------------------------------------------------- # The Abel inversion is computed to retrieve refractivity from corrected # bending angles. The corrected bending angle profile is extended # using MSIS or BAROCLIM data above the observed profile top. ztop_invert = 150000.0 # Height of atmosphere top for inversion dzh_invert = 50.0 # Step of inversion grid above observation top dzr_invert = 20000.0 # Interval for regression in inversion #------------------------------------------------------------------------------- # 7. Tangent point lat-lons #------------------------------------------------------------------------------- # Set tp_bending=.true. to update lat-lons accounting for bending tp_bending = .false. # Calculate TP using straight line between LEO and GNSS tp_method = AUTO # Tangent point lat/lon/azimuth of the profile levels: # STRAIGHT - straight GNSS-LEO line (no bending) # FOELSCHE - bending from the observed impact parameter # NEWROAM - newroam perigee.f: CIRA+Q model bending split # symmetrically, mapped with the model impact # parameter (matches UCAR to ~0.3 km) # AUTO - NEWROAM for PM and NEWROAM FSI, else as # tp_bending (STRAIGHT/FOELSCHE) eci_gps_time = ON # ECI->ECF rotation for GPS-time stamps (UCAR conPhs/ # atmPhs): ON - use UTC = GPS - 18 s; OFF - original # (time stamp used as UTC, ~0.075 deg west); AUTO - ON # for UCAR data