├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ └── test.yml ├── .gitignore ├── LICENSE ├── NOTICE ├── README.md ├── Run.py ├── bin ├── ConcatenateObsFeedback.csh ├── EnKF.csh ├── EnKFObserver.csh ├── EnsembleOfVariational.csh ├── ExternalAnalysisToMPAS.csh ├── Forecast.csh ├── GenerateABEInflation.csh ├── GetGDASAnalysisFromFTP.csh ├── GetGFSAnalysisFromFTP.csh ├── GetGFSAnalysisFromRDA.csh ├── GetObs.csh ├── HofX.csh ├── LinkExternalAnalysis.csh ├── LinkUngribbedExternalAnalysis.csh ├── LinkWarmStartBackgrounds.csh ├── MeanAnalysis.csh ├── MeanBackground.csh ├── ObsToIODA.csh ├── PrepJEDI.csh ├── RTPP.csh ├── SACA.csh ├── UngribExternalAnalysis.csh ├── Variational.csh ├── VerifyModel.csh ├── VerifyObs.csh ├── comparemodel.csh ├── compareobs.csh └── getCycleVars.csh ├── build └── CMakeLists.txt ├── config ├── auto │ └── README.md ├── config.csh ├── environmentForecast.csh ├── environmentJEDI.csh ├── environmentNPL.csh ├── getConfigOrNone.csh ├── jedi │ ├── ObsPlugs │ │ ├── ObsErrorAnchors.yaml │ │ ├── da │ │ │ ├── base │ │ │ │ ├── abi-clr_g16.yaml │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi-clr_himawari8.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── aircraft.yaml │ │ │ │ ├── amsua-cld_aqua.yaml │ │ │ │ ├── amsua-cld_metop-a.yaml │ │ │ │ ├── amsua-cld_metop-b.yaml │ │ │ │ ├── amsua-cld_n15.yaml │ │ │ │ ├── amsua-cld_n18.yaml │ │ │ │ ├── amsua-cld_n19.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── gnssrobndmo-nopseudo.yaml │ │ │ │ ├── gnssrobndmo.yaml │ │ │ │ ├── gnssrobndnbam.yaml │ │ │ │ ├── gnssrobndropp1d.yaml │ │ │ │ ├── gnssrorefncep.yaml │ │ │ │ ├── gnssrorefncep_tunedErrors.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ ├── mhs_n19.yaml │ │ │ │ ├── satwind.yaml │ │ │ │ ├── satwnd.yaml │ │ │ │ ├── sfc.yaml │ │ │ │ ├── sondes-2018043006.yaml │ │ │ │ └── sondes.yaml │ │ │ ├── bias │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ └── mhs_n19.yaml │ │ │ ├── filters │ │ │ │ ├── abi-clr_g16.yaml │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi-clr_himawari8.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── aircraft.yaml │ │ │ │ ├── amsua-cld_aqua.yaml │ │ │ │ ├── amsua-cld_metop-a.yaml │ │ │ │ ├── amsua-cld_metop-b.yaml │ │ │ │ ├── amsua-cld_n15.yaml │ │ │ │ ├── amsua-cld_n18.yaml │ │ │ │ ├── amsua-cld_n19.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── gnssrobndmo-nopseudo.yaml │ │ │ │ ├── gnssrobndmo.yaml │ │ │ │ ├── gnssrobndnbam.yaml │ │ │ │ ├── gnssrobndropp1d.yaml │ │ │ │ ├── gnssrorefncep.yaml │ │ │ │ ├── gnssrorefncep_tunedErrors.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ ├── mhs_n19.yaml │ │ │ │ ├── satwind.yaml │ │ │ │ ├── satwnd.yaml │ │ │ │ ├── sfc.yaml │ │ │ │ ├── sondes-2018043006.yaml │ │ │ │ └── sondes.yaml │ │ │ └── filtersWithBias │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ └── mhs_n19.yaml │ │ ├── enkf │ │ │ └── ObsAnchors.yaml │ │ ├── hofx │ │ │ ├── ObsAnchors.yaml │ │ │ ├── base │ │ │ │ ├── abi-clr_g16.yaml │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi-clr_himawari8.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── aircraft.yaml │ │ │ │ ├── amsua-cld_aqua.yaml │ │ │ │ ├── amsua-cld_metop-a.yaml │ │ │ │ ├── amsua-cld_metop-b.yaml │ │ │ │ ├── amsua-cld_n15.yaml │ │ │ │ ├── amsua-cld_n18.yaml │ │ │ │ ├── amsua-cld_n19.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── gnssrobndmo-nopseudo.yaml │ │ │ │ ├── gnssrobndmo.yaml │ │ │ │ ├── gnssrobndnbam.yaml │ │ │ │ ├── gnssrobndropp1d.yaml │ │ │ │ ├── gnssrorefncep.yaml │ │ │ │ ├── gnssrorefncep_tunedErrors.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ ├── mhs_n19.yaml │ │ │ │ ├── satwind.yaml │ │ │ │ ├── satwnd.yaml │ │ │ │ ├── sfc.yaml │ │ │ │ ├── sondes-2018043006.yaml │ │ │ │ └── sondes.yaml │ │ │ └── filters │ │ │ │ ├── abi-clr_g16.yaml │ │ │ │ ├── abi_g16.yaml │ │ │ │ ├── ahi-clr_himawari8.yaml │ │ │ │ ├── ahi_himawari8.yaml │ │ │ │ ├── aircraft.yaml │ │ │ │ ├── amsua-cld_aqua.yaml │ │ │ │ ├── amsua-cld_metop-a.yaml │ │ │ │ ├── amsua-cld_metop-b.yaml │ │ │ │ ├── amsua-cld_n15.yaml │ │ │ │ ├── amsua-cld_n18.yaml │ │ │ │ ├── amsua-cld_n19.yaml │ │ │ │ ├── amsua_aqua.yaml │ │ │ │ ├── amsua_metop-a.yaml │ │ │ │ ├── amsua_metop-b.yaml │ │ │ │ ├── amsua_metop-c.yaml │ │ │ │ ├── amsua_n15.yaml │ │ │ │ ├── amsua_n18.yaml │ │ │ │ ├── amsua_n19.yaml │ │ │ │ ├── gnssrobndmo-nopseudo.yaml │ │ │ │ ├── gnssrobndmo.yaml │ │ │ │ ├── gnssrobndnbam.yaml │ │ │ │ ├── gnssrobndropp1d.yaml │ │ │ │ ├── gnssrorefncep.yaml │ │ │ │ ├── gnssrorefncep_tunedErrors.yaml │ │ │ │ ├── iasi_metop-a.yaml │ │ │ │ ├── iasi_metop-b.yaml │ │ │ │ ├── iasi_metop-c.yaml │ │ │ │ ├── mhs_metop-a.yaml │ │ │ │ ├── mhs_metop-b.yaml │ │ │ │ ├── mhs_n18.yaml │ │ │ │ ├── mhs_n19.yaml │ │ │ │ ├── satwind.yaml │ │ │ │ ├── satwnd.yaml │ │ │ │ ├── sfc.yaml │ │ │ │ ├── sondes-2018043006.yaml │ │ │ │ └── sondes.yaml │ │ ├── retrieveObsErrors │ │ │ ├── relativeObsErrors.csh │ │ │ └── trainAll.csh │ │ └── variational │ │ │ └── ObsAnchors.yaml │ ├── applications │ │ ├── 3denvar-crossed.yaml │ │ ├── 3denvar.yaml │ │ ├── 3dhybrid-allsky.yaml │ │ ├── 3dhybrid.yaml │ │ ├── 3dvar.yaml │ │ ├── 4denvar.yaml │ │ ├── 4denvar_3slots.yaml │ │ ├── 4denvar_7slots.yaml │ │ ├── 4dhybrid.yaml │ │ ├── enkf.yaml │ │ ├── hofx.yaml │ │ ├── rtpp.yaml │ │ └── saca.yaml │ └── obsProc │ │ └── ObsSpaceV2-to-V3.yaml ├── mpas │ ├── enkf │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.analysis │ │ ├── stream_list.atmosphere.background │ │ ├── stream_list.atmosphere.control │ │ ├── stream_list.atmosphere.ensemble │ │ └── streams.atmosphere │ ├── forecast │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.diagnostics │ │ ├── stream_list.atmosphere.surface │ │ └── streams.atmosphere │ ├── geovars.yaml │ ├── hofx │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.analysis │ │ ├── stream_list.atmosphere.background │ │ ├── stream_list.atmosphere.control │ │ ├── stream_list.atmosphere.ensemble │ │ └── streams.atmosphere │ ├── initic │ │ ├── namelist.init_atmosphere │ │ ├── namelist.wps │ │ └── streams.init_atmosphere │ ├── keptvars.yaml │ ├── obsop_name_map.yaml │ ├── rtpp │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.analysis │ │ ├── stream_list.atmosphere.background │ │ ├── stream_list.atmosphere.control │ │ ├── stream_list.atmosphere.ensemble │ │ └── streams.atmosphere │ ├── saca │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.saca_analysis │ │ ├── stream_list.atmosphere.saca_background │ │ ├── stream_list.atmosphere.saca_obs │ │ └── streams.atmosphere │ ├── variables.csh │ └── variational │ │ ├── namelist.atmosphere │ │ ├── stream_list.atmosphere.analysis │ │ ├── stream_list.atmosphere.background │ │ ├── stream_list.atmosphere.control │ │ ├── stream_list.atmosphere.ensemble │ │ └── streams.atmosphere ├── setConfig.csh ├── setNestedConfig.csh └── tools.csh ├── env-setup ├── machine.csh ├── machine.sh └── run_cylc.sh ├── initialize ├── applications │ ├── DA.py │ ├── EnKF.py │ ├── ExtendedForecast.py │ ├── Forecast.py │ ├── ForecastSACA.py │ ├── HofX.py │ ├── InitIC.py │ ├── Members.py │ ├── RTPP.py │ ├── SACA.py │ └── Variational.py ├── config │ ├── Component.py │ ├── Config.py │ ├── Configurable.py │ ├── Logger.py │ ├── Resource.py │ ├── Scenario.py │ ├── SubConfig.py │ ├── Task.py │ └── TaskFamily.py ├── data │ ├── DataList.py │ ├── ExternalAnalyses.py │ ├── FirstBackground.py │ ├── InvariantStream.py │ ├── Model.py │ ├── ObsEnsemble.py │ ├── Observations.py │ └── StateEnsemble.py ├── framework │ ├── Build.py │ ├── Experiment.py │ ├── HPC.py │ ├── Naming.py │ └── Workflow.py ├── post │ ├── Benchmark.py │ ├── Post.py │ ├── VerifyModel.py │ └── VerifyObs.py ├── suites │ ├── CloudDirectInsertion.py │ ├── CloudDirectInsertionCycle.py │ ├── Cycle.py │ ├── ForecastFromExternalAnalyses.py │ ├── GenerateExternalAnalyses.py │ ├── GenerateObs.py │ └── SuiteBase.py └── util │ └── ExampleComponent.py ├── scenarios ├── 3denvar_O30kmIE60km_WarmStart.yaml ├── 3denvar_O30kmIE60km_WarmStart_ABEI.yaml ├── 3denvar_O30kmIE60km_WarmStart_SpecifiedEnsemble.yaml ├── 3denvar_O30kmIE60km_WarmStart_VarBC_2outer_80mem.yaml ├── 3denvar_OIE120km_WarmStart.yaml ├── 3denvar_OIE120km_WarmStart_IAU.yaml ├── 3denvar_OIE120km_WarmStart_VarBC.yaml ├── 3denvar_OIE120km_WarmStart_VarBC_cron.yaml ├── 3denvar_OIE120km_WarmStart_VarBC_iasi.yaml ├── 3dhybrid-allsky_O30kmIE60km_SpecifiedEnsemble_VarBC.yaml ├── 3dhybrid_O30kmIE60km_SpecifiedEnsemble_VarBC.yaml ├── 3dhybrid_O30kmIE60km_SpecifiedEnsemble_VarBC_CloudInsertion.yaml ├── 3dhybrid_O30kmIE60km_SpecifiedEnsemble_VarBC_allConfig.yaml ├── 3dhybrid_O30kmIE60km_SpecifiedEnsemble_VarBC_iasi.yaml ├── 3dhybrid_O60-3kmIE60km_SpecifiedEnsemble_VarBC.yaml ├── 3dhybrid_OIE120km_WarmStart.yaml ├── 3dvar_O30kmIE60km_ColdStart.yaml ├── 3dvar_OIE120km_ColdStart.yaml ├── 3dvar_OIE120km_WarmStart.yaml ├── 3dvar_OIE120km_WarmStart_PostProcess.yaml ├── 4denvar_O30kmIE60km_WarmStart_VarBC_7slots_2outer_80mem.yaml ├── 4denvar_OIE120km_WarmStart_VarBC_7slots.yaml ├── 4denvar_OIE60km_WarmStart_VarBC_7slots_2outer.yaml ├── 4dhybrid_OIE120km_WarmStart.yaml ├── ABIAHI120km3denvar.yaml ├── CloudDirectInsertion.yaml ├── ForecastFromGFSAnalyses.yaml ├── ForecastFromGFSAnalysesVariableMesh.yaml ├── GEFSVerify_OIE120km.yaml ├── GenerateGFSAnalyses.yaml ├── GenerateObs.yaml ├── GetGDASanalysis.yaml ├── IASI120km3denvar.yaml ├── IASI30kmIE60km3denvar.yaml ├── RealTime.yaml ├── VerifyingGFSAnalysesFromRDA.yaml ├── defaults │ ├── enkf.yaml │ ├── externalanalyses.yaml │ ├── firstbackground.yaml │ ├── forecast.yaml │ ├── hofx.yaml │ ├── initic.yaml │ ├── invariantstream.yaml │ ├── model.yaml │ ├── observations.yaml │ ├── rtpp.yaml │ ├── saca.yaml │ ├── variational.yaml │ ├── verifymodel.yaml │ └── verifyobs.yaml ├── eda_OIE120km_WarmStart.yaml ├── eda_OIE60km_WarmStart.yaml ├── getkf_OIE60km_WarmStart.yaml ├── letkf2D_OIE60km_WarmStart.yaml └── letkf_OIE60km_WarmStart.yaml ├── submit.csh ├── test.csh ├── test └── testinput │ ├── 3denvar_O30kmIE60km_WarmStart.yaml │ ├── 3denvar_OIE120km_IAU_WarmStart.yaml │ ├── 3dvar_O30kmIE60km_ColdStart.yaml │ ├── 3dvar_OIE120km_ColdStart.yaml │ ├── 3dvar_OIE120km_WarmStart.yaml │ ├── 3dvar_OIE120km_WarmStart_PostProcess.yaml │ ├── 4denvar_OIE120km_WarmStart.yaml │ ├── 4dhybrid_OIE120km_WarmStart.yaml │ ├── ForecastFromGFSAnalysesMPT.yaml │ ├── eda_OIE120km_WarmStart.yaml │ ├── getkf_OIE120km_WarmStart.yaml │ ├── letkf_OIE120km_WarmStart.yaml │ ├── test1.yaml │ └── test2.yaml └── tools ├── TimeFmtChange.py ├── advanceCYMDH.py ├── checkMissingChannels.py ├── concatenate.py ├── create_amb_in_nc.py ├── dateFormats.py ├── dateList.py ├── fix_float2int.py ├── getYAMLNode.py ├── memberDir.py ├── nSpaces.py ├── prevMeanTimes.py ├── substituteEnsembleBMembers.py ├── substituteEnsembleBTemplate.py ├── substituteEnsembleBTemplate_4d.py ├── substituteEnsembleBTemplate_4d_7slots.py ├── updateXTIME.py └── update_sensorScanPosition.py /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[Issue Title]" 5 | labels: bug 6 | assignees: jjguerrette 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. [Base scenario] 16 | 2. [Modifications to that scenario] 17 | 2. Navigate to '....' 18 | 3. [Error behavior] 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Issue Title]" 5 | labels: '' 6 | assignees: jjguerrette 7 | 8 | --- 9 | 10 | ### Potential suggestions 11 | 12 | **Is your feature request related to a problem? Please describe.** 13 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 14 | 15 | **Describe the solution you'd like** 16 | A clear and concise description of what you want to happen. 17 | 18 | **Describe alternatives you've considered** 19 | A clear and concise description of any alternative solutions or features you've considered. 20 | 21 | **Additional context** 22 | Add any other context or screenshots about the feature request here. 23 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | ### Issue closed 4 | 5 | Closes #(if applicable) 6 | 7 | ### Tests completed 8 | #### Tier 1: 9 | - [ ] 3dvar_OIE120km_WarmStart 10 | - [ ] 3denvar_OIE120km_IAU_WarmStart 11 | - [ ] 3dvar_OIE120km_ColdStart 12 | - [ ] 3dvar_O30kmIE60km_ColdStart 13 | - [ ] 3denvar_O30kmIE60km_WarmStart 14 | - [ ] eda_OIE120km_WarmStart 15 | - [ ] getkf_OIE120km_WarmStart 16 | - [ ] ForecastFromGFSAnalysesMPT 17 | 18 | #### Tier 2 (optional): 19 | - [ ] GenerateGFSAnalyses 20 | - [ ] GenerateObs 21 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: test-mpas-workflow 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # uncomment if we decide to run tests when merging to develop branch 8 | #push: 9 | ## merges to develop branch 10 | #branches: [develop] 11 | pull_request: 12 | # pull request to develop with a label 13 | types: [labeled] 14 | branches: [develop] 15 | 16 | defaults: 17 | run: 18 | shell: bash 19 | 20 | jobs: 21 | Run-mpas-workflow: 22 | if: ${{ github.event.label.name == 'run-test' }} 23 | runs-on: self-hosted 24 | steps: 25 | - name: checkout 26 | uses: actions/checkout@v3 27 | 28 | - name: run-mpas-workflow 29 | run: | 30 | source /etc/profile.d/modules.sh 31 | ## temporarily set to nightly build directory 32 | export MPASBUNDLECodeBuildDirectory=/glade/work/maryamao/nightly_build/MPAS/GNU/build_Nightly 33 | sed -i 's@^set\ commonBuild\ =\ .*@set\ commonBuild\ =\ '${MPASBUNDLECodeBuildDirectory}'@' config/builds.csh 34 | source env-setup/cheyenne.sh 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore these files anywhere in the tree 2 | 3 | config/auto/*.csh 4 | suite.rc 5 | 6 | ~* 7 | __pycache__ 8 | flow.cylc 9 | 10 | config/jedi/ObsPlugs/retrieveObsErrors/*.yaml 11 | 12 | # ctags symbol file 13 | tags 14 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | `MPAS-Workflow` is provided by NCAR/MMM as an example for carrying out DA and non-DA 2 | workflows with MPAS and JEDI-MPAS. The contributors have provided any of the following: 3 | - GitHub pull requests and/or review 4 | - data 5 | - shell scripts used by workflow tasks 6 | - workflow design 7 | - source code 8 | - other critical consultation 9 | 10 | Contributors: 11 | - Maryam Abdi-Oskouei 12 | - Junmei Ban 13 | - Ivette Hernandez Banos 14 | - Jamie Bresch 15 | - JJ Guerrette 16 | - Soyoung Ha 17 | - BJ Jung 18 | - Zhiquan Liu 19 | - Chris Snyder 20 | - Craig Schwartz 21 | - Steven Vahl 22 | - Yali Wu 23 | - Yonggang Yu 24 | -------------------------------------------------------------------------------- /config/auto/README.md: -------------------------------------------------------------------------------- 1 | Files in this directory matching `*.csh` are automatically generated. Modifying them directly 2 | may not give the intended result. 3 | -------------------------------------------------------------------------------- /config/config.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | # defines helper functions for parsing YAML in c-shell 4 | 5 | if ( $?config_config ) exit 0 6 | setenv config_config 1 7 | 8 | ## config tools 9 | set wd = `pwd` 10 | set pyDir = $wd/tools 11 | setenv getYAMLNode "python ${pyDir}/getYAMLNode.py" 12 | setenv setConfig "$wd/config/setConfig.csh" 13 | setenv setNestedConfig "$wd/config/setNestedConfig.csh" 14 | setenv getConfigOrNone "$wd/config/getConfigOrNone.csh" 15 | -------------------------------------------------------------------------------- /config/environmentNPL.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | if ( $?config_environmentNPL ) exit 0 4 | setenv config_environmentNPL 1 5 | 6 | if ( "$NCAR_HOST" == "derecho" ) then 7 | source /etc/profile.d/z00_modules.csh 8 | module purge 9 | module load conda/latest 10 | module list 11 | conda activate npl 12 | else if ( "$NCAR_HOST" == "cheyenne" ) then 13 | source /etc/profile.d/modules.csh 14 | module purge 15 | module load ncarenv/1.3 16 | module load gnu/10.1.0 17 | module load ncarcompilers/0.5.0 18 | module load netcdf/4.8.1 19 | module load conda/latest 20 | conda activate npl 21 | 22 | module load cylc 23 | module load graphviz 24 | module load git 25 | git lfs install 26 | module list 27 | else 28 | echo "unknown NCAR_HOST " $NCAR_HOST 29 | endif 30 | -------------------------------------------------------------------------------- /config/getConfigOrNone.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | # a helper function for parsing YAML in c-shell 4 | 5 | source config/config.csh 6 | 7 | # get arguments 8 | set defaultYAML = "$1" 9 | set thisYAML = "$2" 10 | set rootKey = "$3" 11 | set key1 = "$4" 12 | 13 | set value = "`${getYAMLNode} ${defaultYAML} ${thisYAML} ${rootKey}.${key1} -o value`" 14 | if ( $status != 0 || "$value" =~ *"None"* ) then 15 | echo "None" 16 | else 17 | echo "$value" 18 | endif 19 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/abi-clr_g16.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: abi-clr_g16 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/abi_g16_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_abi-clr_g16{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &clrabi_channels 8-10 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: abi_g16 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/abi_g16.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: abi_g16 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/abi_g16_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_abi_g16{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &abi_g16_channels 8-10 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: abi_g16 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/ahi-clr_himawari8.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: ahi-clr_himawari8 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/ahi_himawari8_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_ahi-clr_himawari8{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &clrahi_channels 7-16 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: ahi_himawari8 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/ahi_himawari8.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: ahi_himawari8 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/ahi_himawari8_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_ahi_himawari8{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &ahi_himawari8_channels 8-10 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: ahi_himawari8 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/aircraft.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Aircraft 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/aircraft_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_aircraft{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | {{ObsDataOut}} 15 | simulated variables: [airTemperature, windEastward, windNorthward, specificHumidity] 16 | obs error: *ObsErrorDiagonal 17 | <<: *heightAndHorizObsLoc 18 | obs operator: 19 | name: VertInterp 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_aqua.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_aqua 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_aqua_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_aqua{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_aqua_channels 3,15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_aqua 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_metop-a 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-a_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_metop-a{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_metop-a_channels 1-4,15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_metop-a 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_metop-b 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-b_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_metop-b{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_metop-b_channels 1-4 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_metop-b 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_n15.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n15 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n15_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_n15{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_n15_channels 1-4,15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n15 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n18 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n18_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_n18{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_n18_channels 1-4,15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n18 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua-cld_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n19 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n19_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua-cld_n19{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua-cld_n19_channels 1-4,15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *cloudyCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n19 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_aqua.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_aqua 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_aqua_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_aqua{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_aqua_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_aqua 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-a 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-a_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_metop-a{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_metop-a_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_metop-a 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-b 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-b_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_metop-b{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_metop-b_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_metop-b 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_metop-c.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-c 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-c_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_metop-c{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_metop-c_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_metop-c 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_n15.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n15 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n15_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_n15{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_n15_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n15 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n18 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n18_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_n18{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_n18_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n18 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/amsua_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n19 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n19_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_amsua_n19{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &amsua_n19_channels 1-15 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: amsua_n19 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrobndmo-nopseudo.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBendMetOffice_nopseudo 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndmo-nopseudo_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrobndmo-nopseudo{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | obsgrouping: 15 | group variables: [ sequenceNumber ] 16 | {{ObsDataOut}} 17 | simulated variables: [bendingAngle] 18 | obs error: *ObsErrorDiagonal 19 | <<: *heightAndHorizObsLoc 20 | obs operator: 21 | name: GnssroBendMetOffice 22 | vert_interp_ops: false 23 | pseudo_ops: false 24 | min_temp_grad: 1.0e-6 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrobndmo.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBendMetOffice 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndmo_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrobndmo{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | obsgrouping: 15 | group variables: [ sequenceNumber ] 16 | {{ObsDataOut}} 17 | simulated variables: [bendingAngle] 18 | obs error: *ObsErrorDiagonal 19 | <<: *heightAndHorizObsLoc 20 | obs operator: 21 | name: GnssroBendMetOffice 22 | vert_interp_ops: true 23 | pseudo_ops: true 24 | min_temp_grad: 1.0e-6 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrobndnbam.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBndNBAM 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndnbam_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrobndnbam{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | obsgrouping: 15 | group variables: [ sequenceNumber ] 16 | sort variable: impactHeightRO 17 | sort order: ascending 18 | {{ObsDataOut}} 19 | simulated variables: [bendingAngle] 20 | obs error: *ObsErrorDiagonal 21 | <<: *heightAndHorizObsLoc 22 | obs operator: 23 | name: GnssroBndNBAM 24 | obs options: 25 | use_compress: 1 26 | #sr_steps: 2 # same as default, super-refraction steps 27 | vertlayer: mass # or full, type of vertical layers for pressure and geopotential height 28 | #super_ref_qc: NBAM # same as default, or ECMWF 29 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrobndropp1d.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBndROPP1D 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndropp1d_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrobndropp1d{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | obsgrouping: 15 | group variables: [ sequenceNumber ] 16 | sort variable: impactHeightRO 17 | sort order: ascending 18 | {{ObsDataOut}} 19 | simulated variables: [bendingAngle] 20 | obs error: *ObsErrorDiagonal 21 | <<: *heightAndHorizObsLoc 22 | obs operator: 23 | name: GnssroBndROPP1D 24 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrorefncep.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroRefNCEP 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrorefncep_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrorefncep{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [atmosphericRefractivity] 15 | obs error: *ObsErrorDiagonal 16 | <<: *heightAndHorizObsLoc 17 | obs operator: 18 | name: GnssroRefNCEP 19 | obs options: 20 | use_compress: 0 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/gnssrorefncep_tunedErrors.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroRefNCEP 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrorefncep_tunedErrors_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_gnssrorefncep_tunedErrors{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [atmosphericRefractivity] 15 | obs error: *ObsErrorDiagonal 16 | <<: *heightAndHorizObsLoc 17 | obs operator: 18 | name: GnssroRefNCEP 19 | obs options: 20 | use_compress: 0 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_metop-a 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_metop-a_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_mhs_metop-a{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &mhs_metop-a_channels 3-5 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: mhs_metop-a 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_metop-b 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_metop-b_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_mhs_metop-b{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &mhs_metop-b_channels 3-5 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: mhs_metop-b 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_n18 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_n18_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_mhs_n18{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &mhs_n18_channels 3-5 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: mhs_n18 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_n19 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_n19_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_mhs_n19{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [brightnessTemperature] 15 | channels: &mhs_n19_channels 3-5 16 | obs error: *ObsErrorDiagonal 17 | <<: *horizObsLoc 18 | obs operator: 19 | <<: *clearCRTMObsOperator 20 | obs options: 21 | <<: *CRTMObsOptions 22 | Sensor_ID: mhs_n19 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/satwind.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Satwind 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/satwind_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_satwind{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | {{ObsDataOut}} 15 | simulated variables: [windEastward, windNorthward] 16 | obs error: *ObsErrorDiagonal 17 | <<: *heightAndHorizObsLoc 18 | obs operator: 19 | name: VertInterp 20 | observation alias file: obsop_name_map.yaml 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/satwnd.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Satwnd 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/satwnd_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_satwnd{{ObsOutSuffix}}.h5 12 | obsdatain: 13 | <<: *{{ObsDataIn}} 14 | {{ObsDataOut}} 15 | simulated variables: [windEastward, windNorthward] 16 | obs error: *ObsErrorDiagonal 17 | <<: *heightAndHorizObsLoc 18 | obs operator: 19 | name: VertInterp 20 | observation alias file: obsop_name_map.yaml 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/sfc.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: SfcPCorrected 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sfc_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_sfc{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [stationPressure] 15 | obs error: *ObsErrorDiagonal 16 | <<: *horizObsLoc #TODO: use station height for vertical localization 17 | obs operator: 18 | name: SfcPCorrected 19 | da_psfc_scheme: UKMO # or WRFDA 20 | linear obs operator: 21 | name: Identity 22 | observation alias file: obsop_name_map.yaml 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/sondes-2018043006.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Radiosonde 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sondes_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_sondes{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [airTemperature, virtualTemperature, windEastward, windNorthward] 15 | obs error: *ObsErrorDiagonal 16 | <<: *heightAndHorizObsLoc 17 | obs operator: 18 | name: VertInterp 19 | observation alias file: obsop_name_map.yaml 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/base/sondes.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Radiosonde 4 | _obsdatain: &ObsDataIn 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sondes_obs_{{thisValidDate}}.h5 8 | _obsdataout: &ObsDataOut 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}{{MemberDir}}/{{obsPrefix}}_sondes{{ObsOutSuffix}}.h5 12 | obsdatain: *{{ObsDataIn}} 13 | {{ObsDataOut}} 14 | simulated variables: [airTemperature, virtualTemperature, windEastward, windNorthward, specificHumidity] 15 | obs error: *ObsErrorDiagonal 16 | <<: *heightAndHorizObsLoc 17 | obs operator: 18 | name: VertInterp 19 | observation alias file: obsop_name_map.yaml 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/abi_g16.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_abi_g16.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_abi_g16.h5 4 | variational bc: 5 | predictors: 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &abig16tlap {{fixedTlapmeanCov}}/abi_g16_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *abig16tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_abi_g16.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_abi_g16.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/ahi_himawari8.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_ahi_himawari8.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_ahi_himawari8.h5 4 | variational bc: 5 | predictors: 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &ahihimawari8tlap {{fixedTlapmeanCov}}/ahi_himawari8_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *ahihimawari8tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_ahi_himawari8.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_ahi_himawari8.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_aqua.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_aqua.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_aqua.h5 4 | variational bc: 5 | predictors: &predictors5 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsuaaquatlap {{fixedTlapmeanCov}}/amsua_aqua_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsuaaquatlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_aqua.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_aqua.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_metop-a.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_metop-a.h5 4 | variational bc: 5 | predictors: &predictors4 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsuametopatlap {{fixedTlapmeanCov}}/amsua_metop-a_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsuametopatlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_metop-a.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_metop-a.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_metop-b.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_metop-b.h5 4 | variational bc: 5 | predictors: &predictors4 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsuametopbtlap {{fixedTlapmeanCov}}/amsua_metop-b_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsuametopbtlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_metop-b.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_metop-b.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_metop-c.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_metop-c.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_metop-c.h5 4 | variational bc: 5 | predictors: &predictors4 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsuametopctlap {{fixedTlapmeanCov}}/amsua_metop-c_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsuametopctlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_metop-c.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_metop-c.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_n15.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_n15.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_n15.h5 4 | variational bc: 5 | predictors: &predictors2 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsua15tlap {{fixedTlapmeanCov}}/amsua_n15_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsua15tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_n15.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_n15.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_n18.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_n18.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_n18.h5 4 | variational bc: 5 | predictors: &predictors3 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsua18tlap {{fixedTlapmeanCov}}/amsua_n18_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsua18tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_n18.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_n18.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/amsua_n19.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_amsua_n19.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_amsua_n19.h5 4 | variational bc: 5 | predictors: &predictors1 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &amsua19tlap {{fixedTlapmeanCov}}/amsua_n19_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *amsua19tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_amsua_n19.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_amsua_n19.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/iasi_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_iasi_metop-a.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_iasi_metop-a.h5 4 | variational bc: 5 | predictors: 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &iasimetopatlap {{fixedTlapmeanCov}}/iasi_metop-a_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *iasimetopatlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_iasi_metop-a.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_iasi_metop-a.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/iasi_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_iasi_metop-b.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_iasi_metop-b.h5 4 | variational bc: 5 | predictors: 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &iasimetopbtlap {{fixedTlapmeanCov}}/iasi_metop-b_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *iasimetopbtlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_iasi_metop-b.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_iasi_metop-b.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/iasi_metop-c.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_iasi_metop-c.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_iasi_metop-c.h5 4 | variational bc: 5 | predictors: 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &iasimetopctlap {{fixedTlapmeanCov}}/iasi_metop-c_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *iasimetopctlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_iasi_metop-c.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_iasi_metop-c.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_mhs_metop-a.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_mhs_metop-a.h5 4 | variational bc: 5 | predictors: &predictors1 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &mhsmetopatlap {{fixedTlapmeanCov}}/mhs_metop-a_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *mhsmetopatlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_mhs_metop-a.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_mhs_metop-a.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_mhs_metop-b.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_mhs_metop-b.h5 4 | variational bc: 5 | predictors: &predictors1 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &mhsmetopbtlap {{fixedTlapmeanCov}}/mhs_metop-b_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *mhsmetopbtlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_mhs_metop-b.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_mhs_metop-b.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_mhs_n18.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_mhs_n18.h5 4 | variational bc: 5 | predictors: &predictors1 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &mhs18tlap {{fixedTlapmeanCov}}/mhs_n18_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *mhs18tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_mhs_n18.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_mhs_n18.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/bias/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | obs bias: 2 | input file: {{biasCorrectionDir}}/satbias_mhs_n19.h5 3 | output file: {{OutDBDir}}{{MemberDir}}/satbias_mhs_n19.h5 4 | variational bc: 5 | predictors: &predictors1 6 | - name: constant 7 | - name: lapseRate 8 | order: 2 9 | tlapse: &mhs19tlap {{fixedTlapmeanCov}}/mhs_n19_tlapmean.txt 10 | - name: lapseRate 11 | tlapse: *mhs19tlap 12 | - name: emissivityJacobian 13 | - name: sensorScanAngle 14 | order: 4 15 | - name: sensorScanAngle 16 | order: 3 17 | - name: sensorScanAngle 18 | order: 2 19 | - name: sensorScanAngle 20 | covariance: 21 | minimal required obs number: 20 22 | variance range: [1.0e-6, 10.] 23 | step size: 1.0e-4 24 | largest analysis variance: 10000.0 25 | prior: 26 | input file: {{biasCorrectionDir}}/satbias_cov_mhs_n19.h5 27 | inflation: 28 | ratio: 1.1 29 | ratio for small dataset: 2.0 30 | output file: {{OutDBDir}}{{MemberDir}}/satbias_cov_mhs_n19.h5 31 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/abi-clr_g16.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/sensorZenithAngle 6 | maxvalue: 65.0 7 | - variable: 8 | name: MetaData/cloudAmount 9 | maxvalue: 0.05 10 | # - variable: 11 | # name: GeoVaLs/water_area_fraction 12 | # minvalue: 1.0 13 | - filter: Gaussian Thinning 14 | horizontal_mesh: {{RADTHINDISTANCE}} 15 | - filter: Background Check 16 | threshold: 3.0 17 | <<: *multiIterationFilter 18 | # - filter: GOMsaver 19 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_abi-clr_g16.nc4 20 | - filter: YDIAGsaver 21 | filename: {{OutDBDir}}{{MemberDir}}/{{diagPrefix}}_abi-clr_g16.nc4 22 | filter variables: 23 | - name: brightness_temperature_assuming_clear_sky 24 | channels: *clrabi_channels 25 | - name: weightingfunction_of_atmosphere_layer 26 | channels: *clrabi_channels 27 | - name: pressure_level_at_peak_of_weightingfunction 28 | channels: *clrabi_channels 29 | - name: brightness_temperature_jacobian_air_temperature 30 | channels: *clrabi_channels 31 | - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 32 | channels: *clrabi_channels 33 | - name: brightness_temperature_jacobian_surface_emissivity 34 | channels: *clrabi_channels 35 | - name: brightness_temperature_jacobian_skin_temperature_at_surface 36 | channels: *clrabi_channels 37 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/ahi-clr_himawari8.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/sensorZenithAngle 6 | maxvalue: 65.0 7 | - variable: 8 | name: MetaData/cloudAmount 9 | maxvalue: 0.05 10 | - filter: Gaussian Thinning 11 | horizontal_mesh: {{RADTHINDISTANCE}} 12 | - filter: Background Check 13 | threshold: 3.0 14 | <<: *multiIterationFilter 15 | # - filter: GOMsaver 16 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_ahi-clr_himawari8.nc4 17 | - filter: YDIAGsaver 18 | filename: {{OutDBDir}}{{MemberDir}}/{{diagPrefix}}_ahi-clr_himawari8.nc4 19 | filter variables: 20 | - name: brightness_temperature_assuming_clear_sky 21 | channels: *clrahi_channels 22 | - name: weightingfunction_of_atmosphere_layer 23 | channels: *clrahi_channels 24 | - name: pressure_level_at_peak_of_weightingfunction 25 | channels: *clrahi_channels 26 | - name: brightness_temperature_jacobian_air_temperature 27 | channels: *clrahi_channels 28 | - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 29 | channels: *clrahi_channels 30 | - name: brightness_temperature_jacobian_surface_emissivity 31 | channels: *clrahi_channels 32 | - name: brightness_temperature_jacobian_skin_temperature_at_surface 33 | channels: *clrahi_channels 34 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/aircraft.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | - filter: Background Check 5 | threshold: 3.0 6 | <<: *multiIterationFilter 7 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_aqua.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_aqua.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_metop-a.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_metop-b.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_n15.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_n15.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_n18.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua-cld_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | - filter: Background Check 5 | threshold: 3 6 | <<: *multiIterationFilter 7 | # - filter: Gaussian Thinning 8 | # horizontal_mesh: {{RADTHINDISTANCE}} 9 | # - filter: GOMsaver 10 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua-cld_n19.nc4 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_aqua.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_aqua_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_aqua_channels 12 | options: 13 | channels: *amsua_aqua_channels 14 | use_flag: [ -1, -1, -1, -1, -1, 15 | -1, -1, 1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_aqua.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_metop-a_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_metop-a_channels 12 | options: 13 | channels: *amsua_metop-a_channels 14 | use_flag: [ -1, -1, -1, -1, 1, 15 | 1, -1, -1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_metop-a.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_metop-b_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_metop-b_channels 12 | options: 13 | channels: *amsua_metop-b_channels 14 | use_flag: [ -1, -1, -1, -1, -1, 15 | -1, -1, 1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_metop-b.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_metop-c.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_metop-c_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_metop-c_channels 12 | options: 13 | channels: *amsua_metop-c_channels 14 | use_flag: [ -1, -1, -1, -1, 1, 15 | 1, 1, 1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_metop-c.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_n15.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check #amsua-n15 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_n15_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_n15_channels 12 | options: 13 | channels: *amsua_n15_channels 14 | use_flag: [-1, -1, -1, -1, 1, 15 | 1, 1, 1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_n15.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check #amsua-n18 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_n18_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_n18_channels 12 | options: 13 | channels: *amsua_n18_channels 14 | use_flag: [-1, -1, -1, -1, 1, 15 | 1, 1, 1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_n18.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/amsua_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # Useflag check #amsua-n19 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: brightnessTemperature 8 | channels: *amsua_n19_channels 9 | test variables: 10 | - name: ObsFunction/ChannelUseflagCheckRad 11 | channels: *amsua_n19_channels 12 | options: 13 | channels: *amsua_n19_channels 14 | use_flag: [-1, -1, -1, -1, 1, 15 | 1, 1, -1, 1, -1, 16 | -1, -1, -1, -1, -1 ] 17 | minvalue: 1.0e-12 18 | action: 19 | name: reject 20 | # - filter: GOMsaver 21 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_amsua_n19.nc4 22 | - filter: Background Check 23 | threshold: 3.0 24 | <<: *multiIterationFilter 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/gnssrobndmo-nopseudo.yaml: -------------------------------------------------------------------------------- 1 | gnssrobndmo.yaml -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/gnssrobndnbam.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/impactHeightRO 6 | minvalue: 0.0 7 | maxvalue: 30000.0 8 | - variable: 9 | name: MetaData/earthRadiusCurvature 10 | minvalue: 6250000.0 11 | maxvalue: 6450000.0 12 | - variable: 13 | name: MetaData/geoidUndulation 14 | minvalue: -200.0 15 | maxvalue: 200.0 16 | # - filter: Bounds Check 17 | # filter variables: 18 | # - name: bendingAngle 19 | # where: 20 | # - variable: 21 | # name: MetaData/satelliteIdentifier 22 | # is_in: 3-5 23 | # test variables: 24 | # - name: MetaData/impactHeightRO 25 | # minvalue: 8000 26 | - filter: ROobserror 27 | filter variables: 28 | - name: bendingAngle 29 | errmodel: NBAM 30 | <<: *multiIterationFilter 31 | # - filter: Background Check 32 | # threshold: 3.0 33 | # <<: *multiIterationFilter 34 | - filter: Background Check RONBAM 35 | filter variables: 36 | - name: bendingAngle 37 | threshold: 3 38 | <<: *multiIterationFilter 39 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/gnssrorefncep.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/height 6 | minvalue: 0.0 7 | maxvalue: 30000.0 8 | - variable: 9 | name: MetaData/earthRadiusCurvature 10 | minvalue: 6250000.0 11 | maxvalue: 6450000.0 12 | - variable: 13 | name: MetaData/geoidUndulation 14 | minvalue: -200.0 15 | maxvalue: 200.0 16 | - filter: ROobserror 17 | variable: refractivity 18 | errmodel: NCEP 19 | <<: *multiIterationFilter 20 | - filter: Background Check 21 | threshold: 3.0 22 | <<: *multiIterationFilter 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_metop-a.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_metop-b.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_n18.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_n19.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/satwind.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # Assign the initial observation error, based on height/pressure 5 | - filter: Perform Action 6 | filter variables: 7 | - name: windEastward 8 | - name: windNorthward 9 | action: 10 | name: assign error 11 | error function: 12 | name: ObsFunction/ObsErrorModelStepwiseLinear 13 | options: 14 | xvar: 15 | name: MetaData/pressure 16 | xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] 17 | errors: [1.4, 1.5, 1.6, 1.8, 1.9, 2.0, 2.1, 2.3, 2.6, 2.8, 3.0, 3.2, 2.7, 2.4, 2.1] 18 | - filter: Bounds Check 19 | filter variables: 20 | - name: windEastward 21 | - name: windNorthward 22 | test variables: 23 | - name: ObsErrorData/windEastward 24 | - name: ObsErrorData/windNorthward 25 | minvalue: 0.0 26 | maxvalue: 200.0 27 | - filter: Gaussian Thinning 28 | horizontal_mesh: {{RADTHINDISTANCE}} 29 | - filter: Background Check 30 | threshold: 3.0 31 | <<: *multiIterationFilter 32 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/satwnd.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # Assign the initial observation error, based on height/pressure 5 | - filter: Perform Action 6 | filter variables: 7 | - name: windEastward 8 | - name: windNorthward 9 | action: 10 | name: assign error 11 | error function: 12 | name: ObsFunction/ObsErrorModelStepwiseLinear 13 | options: 14 | xvar: 15 | name: MetaData/pressure 16 | xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] 17 | errors: [1.4, 1.5, 1.6, 1.8, 1.9, 2.0, 2.1, 2.3, 2.6, 2.8, 3.0, 3.2, 2.7, 2.4, 2.1] 18 | # All satellite platforms, reject when pressure greater than 950 mb. 19 | - filter: Bounds Check 20 | filter variables: 21 | - name: windEastward 22 | - name: windNorthward 23 | test variables: 24 | - name: MetaData/pressure 25 | maxvalue: 95000 26 | action: 27 | name: reject 28 | - filter: Gaussian Thinning 29 | horizontal_mesh: {{RADTHINDISTANCE}} 30 | - filter: Background Check 31 | threshold: 3.0 32 | <<: *multiIterationFilter 33 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/sfc.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | - filter: Difference Check 5 | reference: MetaData/stationElevation 6 | value: GeoVaLs/height_above_mean_sea_level_at_surface 7 | threshold: 200.0 8 | - filter: Background Check 9 | threshold: 3.0 10 | <<: *multiIterationFilter 11 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/sondes-2018043006.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | - filter: Background Check 5 | threshold: 3.0 6 | <<: *multiIterationFilter 7 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filters/sondes.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # avoids large ObsError values polluting plots of ObsError 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: specificHumidity 8 | test variables: 9 | - name: ObsErrorData/specificHumidity 10 | minvalue: 0.0 11 | maxvalue: 1.0 12 | - filter: Background Check 13 | threshold: 3.0 14 | <<: *multiIterationFilter 15 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/abi_g16.yaml: -------------------------------------------------------------------------------- 1 | ../filters/abi_g16.yaml -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/ahi_himawari8.yaml: -------------------------------------------------------------------------------- 1 | ../filters/ahi_himawari8.yaml -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_metop-a.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_metop-b.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_n18.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/da/filtersWithBias/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}{{MemberDir}}/{{geoPrefix}}_mhs_n19.nc4 6 | - filter: Background Check 7 | threshold: 3.0 8 | <<: *multiIterationFilter 9 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/ObsAnchors.yaml: -------------------------------------------------------------------------------- 1 | _obs space: &ObsSpace 2 | obs perturbations seed: 1 3 | io pool: 4 | max pool size: {{maxIODAPoolSize}} 5 | write multiple files: true 6 | distribution: 7 | name: RoundRobin 8 | _obs error diagonal: &ObsErrorDiagonal 9 | covariance model: diagonal 10 | _clear crtm: &clearCRTMObsOperator 11 | name: CRTM 12 | SurfaceWindGeoVars: uv 13 | Absorbers: [H2O, O3] 14 | obs options: &CRTMObsOptions 15 | EndianType: little_endian 16 | CoefficientPath: {{CRTMTABLES}} 17 | IRVISlandCoeff: {{IRVISlandCoeff}} 18 | _cloudy crtm: &cloudyCRTMObsOperator 19 | name: CRTM 20 | SurfaceWindGeoVars: uv 21 | Absorbers: [H2O, O3] 22 | Clouds: [Water, Ice, Rain, Snow, Graupel] 23 | Cloud_Seeding: true 24 | obs options: 25 | <<: *CRTMObsOptions 26 | _multi iteration filter: &multiIterationFilter 27 | _blank: null 28 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/abi-clr_g16.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: abi-clr_g16 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/abi_g16_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_abi-clr_g16.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &clrabi_channels 7-16 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: abi_g16 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/abi_g16.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: abi_g16 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/abi_g16_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_abi_g16.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &abi_channels 7-16 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: abi_g16 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/ahi-clr_himawari8.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: ahi-clr_himawari8 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/ahi_himawari8_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_ahi-clr_himawari8.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &clrahi_channels 7-16 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: ahi_himawari8 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/ahi_himawari8.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: ahi_himawari8 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/ahi_himawari8_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_ahi_himawari8.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &ahi_channels 7-16 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: ahi_himawari8 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/aircraft.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Aircraft 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/aircraft_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_aircraft.h5 12 | simulated variables: [airTemperature, windEastward, windNorthward, specificHumidity] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: VertInterp 16 | observation alias file: obsop_name_map.yaml 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_aqua.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_aqua 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_aqua_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_aqua.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_aqua_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_aqua 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_metop-a 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_metop-a_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_metop-a.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_metop-a_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_metop-a 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_metop-b 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_metop-b_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_metop-b.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_metop-b_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_metop-b 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_n15.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n15 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_n15_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_n15.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_n15_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n15 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n18 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_n18_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_n18.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_n18_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n18 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua-cld_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua-cld_n19 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua-cld_n19_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua-cld_n19.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua-cld_n19_channels 1-4,15 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n19 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_aqua.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_aqua 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_aqua_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_aqua.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_aqua_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_aqua 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-a 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-a_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_metop-a.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_metop-a_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_metop-a 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-b 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-b_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_metop-b.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_metop-b_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_metop-b 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_metop-c.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_metop-c 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_metop-c_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_metop-c.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_metop-c_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_metop-c 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_n15.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n15 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n15_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_n15.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_n15_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n15 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n18 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n18_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_n18.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_n18_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n18 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/amsua_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: amsua_n19 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/amsua_n19_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_amsua_n19.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &amsua_n19_channels 5-14 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *clearCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: amsua_n19 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrobndmo-nopseudo.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBendMetOffice_nopseudo 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndmo-nopseudo_obs_{{thisValidDate}}.h5 8 | obsgrouping: 9 | group variables: [ sequenceNumber ] 10 | obsdataout: 11 | engine: 12 | type: H5File 13 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrobndmo-nopseudo.h5 14 | simulated variables: [bendingAngle] 15 | obs error: *ObsErrorDiagonal 16 | obs operator: 17 | name: GnssroBendMetOffice 18 | vert_interp_ops: false 19 | pseudo_ops: false 20 | min_temp_grad: 1.0e-6 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrobndmo.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBendMetOffice 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndmo_obs_{{thisValidDate}}.h5 8 | obsgrouping: 9 | group variables: [ sequenceNumber ] 10 | obsdataout: 11 | engine: 12 | type: H5File 13 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrobndmo.h5 14 | simulated variables: [bendingAngle] 15 | obs error: *ObsErrorDiagonal 16 | obs operator: 17 | name: GnssroBendMetOffice 18 | vert_interp_ops: true 19 | pseudo_ops: true 20 | min_temp_grad: 1.0e-6 21 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrobndnbam.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBndNBAM 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndnbam_obs_{{thisValidDate}}.h5 8 | obsgrouping: 9 | group variables: [ sequenceNumber ] 10 | sort variable: impactHeightRO 11 | sort order: ascending 12 | obsdataout: 13 | engine: 14 | type: H5File 15 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrobndnbam.h5 16 | simulated variables: [bendingAngle] 17 | obs error: *ObsErrorDiagonal 18 | obs operator: 19 | name: GnssroBndNBAM 20 | obs options: 21 | use_compress: 1 22 | #sr_steps: 2 # same as default, super-refraction steps 23 | vertlayer: mass # or full, type of vertical layers for pressure and geopotential height 24 | #super_ref_qc: NBAM # same as default, or ECMWF 25 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrobndropp1d.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroBndROPP1D 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrobndropp1d_obs_{{thisValidDate}}.h5 8 | obsgrouping: 9 | group variables: [ sequenceNumber ] 10 | sort variable: impactHeightRO 11 | sort order: ascending 12 | obsdataout: 13 | engine: 14 | type: H5File 15 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrobndropp1d.h5 16 | simulated variables: [bendingAngle] 17 | obs error: *ObsErrorDiagonal 18 | obs operator: 19 | name: GnssroBndROPP1D 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrorefncep.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroRefNCEP 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrorefncep_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrorefncep.h5 12 | simulated variables: [atmosphericRefractivity] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: GnssroRefNCEP 16 | obs options: 17 | use_compress: 0 18 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/gnssrorefncep_tunedErrors.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: GnssroRefNCEP 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/gnssrorefncep_tunedErrors_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_gnssrorefncep_tunedErrors.h5 12 | simulated variables: [atmosphericRefractivity] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: GnssroRefNCEP 16 | obs options: 17 | use_compress: 0 18 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_metop-a 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_metop-a_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_mhs_metop-a.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &mhs_metop-a_channels 1-5 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: mhs_metop-a 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_metop-b 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_metop-b_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_mhs_metop-b.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &mhs_metop-b_channels 1-5 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: mhs_metop-b 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_n18 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_n18_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_mhs_n18.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &mhs_n18_channels 1-5 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: mhs_n18 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: mhs_n19 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/mhs_n19_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_mhs_n19.h5 12 | simulated variables: [brightnessTemperature] 13 | channels: &mhs_n19_channels 1-5 14 | obs error: *ObsErrorDiagonal 15 | obs operator: 16 | <<: *cloudyCRTMObsOperator 17 | obs options: 18 | <<: *CRTMObsOptions 19 | Sensor_ID: mhs_n19 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/satwind.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Satwind 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/satwind_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_satwind.h5 12 | simulated variables: [windEastward, windNorthward] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: VertInterp 16 | observation alias file: obsop_name_map.yaml 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/satwnd.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Satwnd 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/satwnd_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_satwnd.h5 12 | simulated variables: [windEastward, windNorthward] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: VertInterp 16 | observation alias file: obsop_name_map.yaml 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/sfc.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: SfcPCorrected 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sfc_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_sfc.h5 12 | simulated variables: [stationPressure] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: SfcPCorrected 16 | da_psfc_scheme: UKMO # or WRFDA 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/sondes-2018043006.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Radiosonde 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sondes_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_sondes.h5 12 | simulated variables: [airTemperature, virtualTemperature, windEastward, windNorthward] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: VertInterp 16 | observation alias file: obsop_name_map.yaml 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/base/sondes.yaml: -------------------------------------------------------------------------------- 1 | - obs space: 2 | <<: *ObsSpace 3 | name: Radiosonde 4 | obsdatain: 5 | engine: 6 | type: H5File 7 | obsfile: {{InDBDir}}/sondes_obs_{{thisValidDate}}.h5 8 | obsdataout: 9 | engine: 10 | type: H5File 11 | obsfile: {{OutDBDir}}/{{obsPrefix}}_sondes.h5 12 | simulated variables: [airTemperature, virtualTemperature, windEastward, windNorthward, specificHumidity] 13 | obs error: *ObsErrorDiagonal 14 | obs operator: 15 | name: VertInterp 16 | observation alias file: obsop_name_map.yaml 17 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/abi-clr_g16.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/sensorZenithAngle 6 | maxvalue: 65.0 7 | - variable: 8 | name: MetaData/cloudAmount 9 | maxvalue: 0.05 10 | - filter: GOMsaver 11 | filename: {{OutDBDir}}/{{geoPrefix}}_abi-clr_g16.nc4 12 | - filter: YDIAGsaver 13 | filename: {{OutDBDir}}/{{diagPrefix}}_abi-clr_g16.nc4 14 | filter variables: 15 | - name: brightness_temperature_assuming_clear_sky 16 | channels: *clrabi_channels 17 | - name: weightingfunction_of_atmosphere_layer 18 | channels: *clrabi_channels 19 | - name: pressure_level_at_peak_of_weightingfunction 20 | channels: *clrabi_channels 21 | - name: brightness_temperature_jacobian_air_temperature 22 | channels: *clrabi_channels 23 | - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 24 | channels: *clrabi_channels 25 | - name: brightness_temperature_jacobian_surface_emissivity 26 | channels: *clrabi_channels 27 | - name: brightness_temperature_jacobian_skin_temperature_at_surface 28 | channels: *clrabi_channels 29 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/ahi-clr_himawari8.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/sensorZenithAngle 6 | maxvalue: 65.0 7 | - variable: 8 | name: MetaData/cloudAmount 9 | maxvalue: 0.05 10 | - filter: GOMsaver 11 | filename: {{OutDBDir}}/{{geoPrefix}}_ahi-clr_himawari8.nc4 12 | - filter: YDIAGsaver 13 | filename: {{OutDBDir}}/{{diagPrefix}}_ahi-clr_himawari8.nc4 14 | filter variables: 15 | - name: brightness_temperature_assuming_clear_sky 16 | channels: *clrahi_channels 17 | - name: weightingfunction_of_atmosphere_layer 18 | channels: *clrahi_channels 19 | - name: pressure_level_at_peak_of_weightingfunction 20 | channels: *clrahi_channels 21 | - name: brightness_temperature_jacobian_air_temperature 22 | channels: *clrahi_channels 23 | - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 24 | channels: *clrahi_channels 25 | - name: brightness_temperature_jacobian_surface_emissivity 26 | channels: *clrahi_channels 27 | - name: brightness_temperature_jacobian_skin_temperature_at_surface 28 | channels: *clrahi_channels 29 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/aircraft.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_aqua.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_aqua_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_aqua_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_aqua.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_aqua.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_aqua_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_metop-a_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_metop-a_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_metop-a.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_metop-a.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_metop-a_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_metop-b_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_metop-b_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_metop-b.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_metop-b.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_metop-b_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_n15.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_n15_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_n15_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_n15.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_n15.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_n15_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_n18_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_n18_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_n18.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_n18.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_n18_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua-cld_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | filter variables: 4 | - name: brightnessTemperature 5 | channels: *amsua-cld_n19_channels 6 | where: 7 | - variable: 8 | name: GeoVaLs/water_area_fraction 9 | minvalue: 1.0 10 | # - filter: Bounds Check 11 | # filter variables: 12 | # - name: brightnessTemperature 13 | # channels: *amsua-cld_n19_channels 14 | # minvalue: 170.0 15 | # maxvalue: 300.0 16 | # - filter: GOMsaver 17 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua-cld_n19.nc4 18 | # - filter: YDIAGsaver 19 | # filename: {{OutDBDir}}/{{diagPrefix}}_amsua-cld_n19.nc4 20 | # filter variables: 21 | # - name: brightness_temperature_assuming_clear_sky 22 | # channels: *amsua-cld_n19_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_aqua.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_aqua.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_metop-a.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_metop-b.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_metop-c.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | #- filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_metop-c.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_n15.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_n15.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_n18.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/amsua_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_amsua_n19.nc4 6 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/gnssrobndmo-nopseudo.yaml: -------------------------------------------------------------------------------- 1 | gnssrobndmo.yaml -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/gnssrobndnbam.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/impactHeightRO 6 | minvalue: 0.0 7 | maxvalue: 30000.0 8 | - variable: 9 | name: MetaData/earthRadiusCurvature 10 | minvalue: 6250000.0 11 | maxvalue: 6450000.0 12 | - variable: 13 | name: MetaData/geoidUndulation 14 | minvalue: -200.0 15 | maxvalue: 200.0 16 | # - filter: Bounds Check 17 | # filter variables: 18 | # - name: bendingAngle 19 | # where: 20 | # - variable: 21 | # name: MetaData/satelliteIdentifier 22 | # is_in: 3-5 23 | # test variables: 24 | # - name: MetaData/impactHeightRO 25 | # minvalue: 8000 26 | - filter: ROobserror 27 | filter variables: 28 | - name: bendingAngle 29 | errmodel: NBAM 30 | - filter: Background Check 31 | threshold: 10.0 32 | <<: *multiIterationFilter 33 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/gnssrorefncep.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: Domain Check 3 | where: 4 | - variable: 5 | name: MetaData/height 6 | minvalue: 0.0 7 | maxvalue: 30000.0 8 | - variable: 9 | name: MetaData/earthRadiusCurvature 10 | minvalue: 6250000.0 11 | maxvalue: 6450000.0 12 | - variable: 13 | name: MetaData/geoidUndulation 14 | minvalue: -200.0 15 | maxvalue: 200.0 16 | - filter: ROobserror 17 | variable: refractivity 18 | errmodel: NCEP 19 | <<: *multiIterationFilter 20 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/mhs_metop-a.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_mhs_metop-a.nc4 6 | # - filter: YDIAGsaver 7 | # filename: {{OutDBDir}}/{{diagPrefix}}_mhs_metop-a.nc4 8 | # filter variables: 9 | # - name: brightness_temperature_assuming_clear_sky 10 | # channels: *mhs_metop-a_channels 11 | # - name: brightness_temperature_jacobian_air_temperature 12 | # channels: *mhs_metop-a_channels 13 | # - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 14 | # channels: *mhs_metop-a_channels 15 | # - name: brightness_temperature_jacobian_surface_emissivity 16 | # channels: *mhs_metop-a_channels 17 | # - name: brightness_temperature_jacobian_skin_temperature_at_surface 18 | # channels: *mhs_metop-a_channels 19 | # - name: weightingfunction_of_atmosphere_layer 20 | # channels: *mhs_metop-a_channels 21 | # - name: pressure_level_at_peak_of_weightingfunction 22 | # channels: *mhs_metop-a_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/mhs_metop-b.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_mhs_metop-b.nc4 6 | # - filter: YDIAGsaver 7 | # filename: {{OutDBDir}}/{{diagPrefix}}_mhs_metop-b.nc4 8 | # filter variables: 9 | # - name: brightness_temperature_assuming_clear_sky 10 | # channels: *mhs_metop-b_channels 11 | # - name: brightness_temperature_jacobian_air_temperature 12 | # channels: *mhs_metop-b_channels 13 | # - name: brightness_temperature_jacobian_humidity_mixing_ratio 14 | # channels: *mhs_metop-b_channels 15 | # - name: brightness_temperature_jacobian_surface_emissivity 16 | # channels: *mhs_metop-b_channels 17 | # - name: brightness_temperature_jacobian_surface_temperature 18 | # channels: *mhs_metop-b_channels 19 | # - name: weightingfunction_of_atmosphere_layer 20 | # channels: *mhs_metop-b_channels 21 | # - name: pressure_level_at_peak_of_weightingfunction 22 | # channels: *mhs_metop-b_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/mhs_n18.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_mhs_n18.nc4 6 | # - filter: YDIAGsaver 7 | # filename: {{OutDBDir}}/{{diagPrefix}}_mhs_n18.nc4 8 | # filter variables: 9 | # - name: brightness_temperature_assuming_clear_sky 10 | # channels: *mhs_n18_channels 11 | # - name: brightness_temperature_jacobian_air_temperature 12 | # channels: *mhs_n18_channels 13 | # - name: brightness_temperature_jacobian_humidity_mixing_ratio 14 | # channels: *mhs_n18_channels 15 | # - name: brightness_temperature_jacobian_surface_emissivity 16 | # channels: *mhs_n18_channels 17 | # - name: brightness_temperature_jacobian_surface_temperature 18 | # channels: *mhs_n18_channels 19 | # - name: weightingfunction_of_atmosphere_layer 20 | # channels: *mhs_n18_channels 21 | # - name: pressure_level_at_peak_of_weightingfunction 22 | # channels: *mhs_n18_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/mhs_n19.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 0 4 | # - filter: GOMsaver 5 | # filename: {{OutDBDir}}/{{geoPrefix}}_mhs_n19.nc4 6 | # - filter: YDIAGsaver 7 | # filename: {{OutDBDir}}/{{diagPrefix}}_mhs_n19.nc4 8 | # filter variables: 9 | # - name: brightness_temperature_assuming_clear_sky 10 | # channels: *mhs_n19_channels 11 | # - name: brightness_temperature_jacobian_air_temperature 12 | # channels: *mhs_n19_channels 13 | # - name: brightness_temperature_jacobian_water_vapor_mixing_ratio_wrt_dry_air 14 | # channels: *mhs_n19_channels 15 | # - name: brightness_temperature_jacobian_surface_emissivity 16 | # channels: *mhs_n19_channels 17 | # - name: brightness_temperature_jacobian_skin_temperature_at_surface 18 | # channels: *mhs_n19_channels 19 | # - name: weightingfunction_of_atmosphere_layer 20 | # channels: *mhs_n19_channels 21 | # - name: pressure_level_at_peak_of_weightingfunction 22 | # channels: *mhs_n19_channels 23 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/satwind.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # Assign the initial observation error, based on height/pressure 5 | - filter: Perform Action 6 | filter variables: 7 | - name: windEastward 8 | - name: windNorthward 9 | action: 10 | name: assign error 11 | error function: 12 | name: ObsFunction/ObsErrorModelStepwiseLinear 13 | options: 14 | xvar: 15 | name: MetaData/pressure 16 | xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] 17 | errors: [1.4, 1.5, 1.6, 1.8, 1.9, 2.0, 2.1, 2.3, 2.6, 2.8, 3.0, 3.2, 2.7, 2.4, 2.1] 18 | - filter: Bounds Check 19 | filter variables: 20 | - name: windEastward 21 | - name: windNorthward 22 | test variables: 23 | - name: ObsErrorData/windEastward 24 | - name: ObsErrorData/windNorthward 25 | minvalue: 0.0 26 | maxvalue: 200.0 27 | - filter: Gaussian Thinning 28 | horizontal_mesh: {{RADTHINDISTANCE}} 29 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/satwnd.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # Assign the initial observation error, based on height/pressure 5 | - filter: Perform Action 6 | filter variables: 7 | - name: windEastward 8 | - name: windNorthward 9 | action: 10 | name: assign error 11 | error function: 12 | name: ObsFunction/ObsErrorModelStepwiseLinear 13 | options: 14 | xvar: 15 | name: MetaData/pressure 16 | xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] 17 | errors: [1.4, 1.5, 1.6, 1.8, 1.9, 2.0, 2.1, 2.3, 2.6, 2.8, 3.0, 3.2, 2.7, 2.4, 2.1] 18 | # All satellite platforms, reject when pressure greater than 950 mb. 19 | - filter: Bounds Check 20 | filter variables: 21 | - name: windEastward 22 | - name: windNorthward 23 | test variables: 24 | - name: MetaData/pressure 25 | maxvalue: 95000 26 | action: 27 | name: reject 28 | - filter: Gaussian Thinning 29 | horizontal_mesh: {{RADTHINDISTANCE}} 30 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/sfc.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | - filter: Difference Check 5 | reference: MetaData/stationElevation 6 | value: GeoVaLs/height_above_mean_sea_level_at_surface 7 | threshold: 200.0 8 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/sondes-2018043006.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/hofx/filters/sondes.yaml: -------------------------------------------------------------------------------- 1 | obs filters: 2 | - filter: PreQC 3 | maxvalue: 3 4 | # avoids large ObsError values polluting plots of ObsError 5 | - filter: Bounds Check 6 | filter variables: 7 | - name: specificHumidity 8 | test variables: 9 | - name: ObsErrorData/specificHumidity 10 | minvalue: 0.0 11 | maxvalue: 1.0 12 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/retrieveObsErrors/relativeObsErrors.csh: -------------------------------------------------------------------------------- 1 | #!/bin/tcsh -f 2 | set analysisDir = "$1" 3 | set obsspace = "$2" 4 | set diagnostic = "$3" 5 | set coord = "$4" 6 | set errortype = "$5" 7 | 8 | set wd = `pwd` 9 | set outf = ${wd}/${obsspace}_ObsErrorAnchor.yaml 10 | rm $outf 11 | 12 | cd $analysisDir/${obsspace}_analyses/BinValAxisProfile/${errortype}/data 13 | 14 | grep "${diagnostic}" ${coord}_*_BinValAxis_0-0min_${obsspace}_${errortype}_RMS.yaml | sed 's@.*yaml:\ \+@@' > $outf 15 | 16 | ## adjust prefixes 17 | ex -c ":%s@.*${obsspace}\(.*\)\(_.*\):@\1\2:\ \&${obsspace}\1Errors@" +":wq" $outf 18 | 19 | ## use to divide relative omf by 100: 20 | # values < 10% 21 | ex -c ":%s@\(\D\)\(\d\)\.\(\d\+\)@\10\.0\2\3@g" +":wq" $outf 22 | 23 | # values >= 10% 24 | ex -c ":%s@\(\d\d\)\.\(\d\+\)@\.\1\2@g" +":wq" $outf 25 | 26 | # add leading zero where missing 27 | ex -c ":%s@\ \.@\ 0\.@g" +":wq" $outf 28 | 29 | # return missing values to originals 30 | ex -c ":%s@9\.990@999\.0@g" +":wq" $outf 31 | 32 | ## format arrays 33 | ex -c ":%s@\ \[@\r\ \ \[@" +":wq" $outf 34 | ex -c ":%s@\(,.\{-},.\{-},.\{-},.\{-},\)@\1\r\ @g" +":wq" $outf 35 | 36 | ## indent 37 | ex -c ":%s@^@ @" +":wq" $outf 38 | ex -c ":%s@^\(\ \+\d\)@\ \1@" +":wq" $outf 39 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/retrieveObsErrors/trainAll.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | set analysisDir = /glade/campaign/mmm/parc/liuz/pandac_common/obs/2ndDoaDob 3 | set obsspace = gnssrobndropp1d 4 | set diagnostic = rltv_doadob 5 | set coord = impact_height 6 | set errortype = RelativeObsError 7 | ./relativeObsErrors.csh "$analysisDir" "$obsspace" "$diagnostic" "$coord" "$errortype" 8 | 9 | set analysisDir = /glade/campaign/mmm/parc/liuz/pandac_common/obs/Ref_1stDoaDob 10 | set obsspace = gnssrorefncep 11 | set diagnostic = rltv_doadob 12 | set coord = alt 13 | set errortype = RelativeObsError 14 | ./relativeObsErrors.csh "$analysisDir" "$obsspace" "$diagnostic" "$coord" "$errortype" 15 | -------------------------------------------------------------------------------- /config/jedi/ObsPlugs/variational/ObsAnchors.yaml: -------------------------------------------------------------------------------- 1 | _conventional obs localizations: &heightAndHorizObsLoc 2 | _blank: null 3 | 4 | _nonconventional obs localizations: &horizObsLoc 5 | _blank: null 6 | 7 | _obs space: &ObsSpace 8 | obs perturbations seed: 1 9 | io pool: 10 | max pool size: {{maxIODAPoolSize}} 11 | write multiple files: true 12 | distribution: 13 | name: RoundRobin 14 | 15 | _obs error diagonal: &ObsErrorDiagonal 16 | covariance model: diagonal 17 | # Note: the same 'obs perturbations seed' must be used for all members for the 'zero-mean perturbations' option to work 18 | zero-mean perturbations: true 19 | member: {{MemberNumber}} 20 | number of members: {{TotalMemberCount}} 21 | 22 | _clear crtm: &clearCRTMObsOperator 23 | name: CRTM 24 | SurfaceWindGeoVars: uv 25 | Absorbers: [H2O, O3] 26 | linear obs operator: 27 | Absorbers: [H2O] 28 | obs options: &CRTMObsOptions 29 | EndianType: little_endian 30 | CoefficientPath: {{CRTMTABLES}} 31 | IRVISlandCoeff: {{IRVISlandCoeff}} 32 | 33 | _cloudy crtm: &cloudyCRTMObsOperator 34 | name: CRTM 35 | SurfaceWindGeoVars: uv 36 | Absorbers: [H2O, O3] 37 | Clouds: [Water, Ice, Rain, Snow, Graupel] 38 | Cloud_Seeding: true 39 | linear obs operator: 40 | Absorbers: [H2O] 41 | Clouds: [Water, Ice, Rain, Snow, Graupel] 42 | obs options: 43 | <<: *CRTMObsOptions 44 | 45 | _multi iteration filter: &multiIterationFilter 46 | apply at iterations: 0,1,2,3,4,5 47 | -------------------------------------------------------------------------------- /config/jedi/applications/4denvar.yaml: -------------------------------------------------------------------------------- 1 | 4denvar_7slots.yaml -------------------------------------------------------------------------------- /config/jedi/applications/enkf.yaml: -------------------------------------------------------------------------------- 1 | # ObsAnchors and ObsErrorAnchors are automatically prepended above this line 2 | _member: &memberConfig 3 | date: &analysisDate {{thisISO8601Date}} 4 | state variables: [{{StateVariables}}] 5 | stream name: background 6 | 7 | _as observer: &asObserver 8 | run as observer only: true 9 | update obs config with geometry info: false 10 | 11 | _as solver: &asSolver 12 | read HX from disk: true 13 | #do test prints: false 14 | do posterior observer: false 15 | save posterior ensemble: true 16 | save posterior mean: true 17 | 18 | _letkf geometry: &3DLETKFGeometry 19 | iterator dimension: 3 20 | 21 | _letkf geometry: &2DLETKFGeometry 22 | iterator dimension: 2 23 | 24 | _lgetkf geometry: &3DGETKFGeometry 25 | iterator dimension: 2 26 | 27 | geometry: 28 | <<: *{{localizationDimension}}{{localEnsembleDASolver}}Geometry 29 | nml_file: {{EnKFNamelistFile}} 30 | streams_file: {{EnKFStreamsFile}} 31 | deallocate non-da fields: true 32 | 33 | time window: 34 | begin: {{windowBegin}} 35 | length: {{windowLength}} 36 | 37 | background: 38 | {{EnsembleMembers}} 39 | 40 | increment variables: [{{AnalysisVariables}}] 41 | 42 | observations: 43 | observers: 44 | {{Observers}} 45 | 46 | driver: *{{driver}} 47 | 48 | local ensemble DA: 49 | solver: {{localEnsembleDASolver}} 50 | vertical localization: # only used by GETKF solver 51 | fraction of retained variance: 0.95 52 | lengthscale: {{verticalLocalizationLengthscale}} 53 | lengthscale units: modellevel 54 | 55 | # TODO: how do inflation settings impact result? 56 | # inflation: 57 | # rtps: 0.5 58 | # rtpp: 0.6 59 | # mult: 1.1 60 | 61 | output: 62 | filename: {{anStateDir}}/mem%{member}%/{{anStatePrefix}}.$Y-$M-$D_$h.$m.$s.nc 63 | stream name: analysis 64 | -------------------------------------------------------------------------------- /config/jedi/applications/hofx.yaml: -------------------------------------------------------------------------------- 1 | # ObsAnchors and ObsErrorAnchors are automatically prepended above this line 2 | time window: 3 | begin: {{windowBegin}} 4 | length: {{windowLength}} 5 | geometry: 6 | nml_file: {{HofXNamelistFile}} 7 | streams_file: {{HofXStreamsFile}} 8 | deallocate non-da fields: true 9 | state: 10 | state variables: [{{StateVariables}}] 11 | filename: {{bgStateDir}}/{{bgStatePrefix}}.{{thisMPASFileDate}}.nc 12 | date: {{thisISO8601Date}} 13 | observations: 14 | observers: 15 | {{Observers}} 16 | -------------------------------------------------------------------------------- /config/jedi/applications/rtpp.yaml: -------------------------------------------------------------------------------- 1 | _state read: &stateReadConfig 2 | date: {{thisISO8601Date}} 3 | state variables: [{{StateVariables}}] 4 | stream name: background 5 | output: 6 | filename: {{anStateDir}}{{MemberDir}}/{{anStatePrefix}}.$Y-$M-$D_$h.$m.$s.nc 7 | stream name: analysis 8 | geometry: 9 | nml_file: {{EnsembleNamelistFile}} 10 | streams_file: {{EnsembleStreamsFile}} 11 | deallocate non-da fields: true 12 | analysis type: "state" 13 | analysis variables: [{{AnalysisVariables}}] 14 | background: 15 | members: 16 | {{EnsemblePbMembers}} 17 | analysis: 18 | members: 19 | {{EnsemblePaMembers}} 20 | inflation: 21 | - method: RTPP 22 | factor: {{relaxationFactor}} 23 | #- method: RTPS 24 | # factor: {{relaxationFactor}} 25 | -------------------------------------------------------------------------------- /config/jedi/applications/saca.yaml: -------------------------------------------------------------------------------- 1 | state geometry: &geom 2 | nml_file: {{SACANamelistFile}} 3 | streams_file: {{SACAStreamsFile}} 4 | deallocate non-da fields: true 5 | l_build_madwrf: {{buildMADWRF}} 6 | l_build_gsdcloud: {{buildGSDCloud}} 7 | l_saturate_qv: {{saturateQv}} 8 | l_conserve_thetaV: {{conserveThetaV}} 9 | cldfra_def: {{cldfraDef}} 10 | cldfra_thresh: {{cldfraThresh}} 11 | cldmask_thresh: {{cldmaskThresh}} 12 | cld_bld_hgt: {{cldBluidHeigt}} 13 | 14 | increment geometry: *geom 15 | 16 | state: 17 | date: &date '{{thisISO8601Date}}' 18 | state variables: [{{SACAStateVariables}}] 19 | stream name: {{AppName}}_background 20 | filename: {{bgStateDir}}/{{bgStatePrefix}}.{{thisMPASFileDate}}.nc 21 | 22 | increment: 23 | date: *date 24 | added variables: [{{addedVars}}] 25 | stream name: {{AppName}}_obs 26 | filename: {{InDBDir}}/{{SACAObs}} 27 | 28 | output: 29 | stream name: {{AppName}}_analysis 30 | filename: {{anStateDir}}/{{anStatePrefix}}.$Y-$M-$D_$h.$m.$s.nc 31 | -------------------------------------------------------------------------------- /config/mpas/enkf/namelist.atmosphere: -------------------------------------------------------------------------------- 1 | ../variational/namelist.atmosphere -------------------------------------------------------------------------------- /config/mpas/enkf/stream_list.atmosphere.analysis: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.analysis -------------------------------------------------------------------------------- /config/mpas/enkf/stream_list.atmosphere.background: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.background -------------------------------------------------------------------------------- /config/mpas/enkf/stream_list.atmosphere.control: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.control -------------------------------------------------------------------------------- /config/mpas/enkf/stream_list.atmosphere.ensemble: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.ensemble -------------------------------------------------------------------------------- /config/mpas/enkf/streams.atmosphere: -------------------------------------------------------------------------------- 1 | ../variational/streams.atmosphere -------------------------------------------------------------------------------- /config/mpas/forecast/stream_list.atmosphere.surface: -------------------------------------------------------------------------------- 1 | sst 2 | xice 3 | -------------------------------------------------------------------------------- /config/mpas/hofx/namelist.atmosphere: -------------------------------------------------------------------------------- 1 | ../variational/namelist.atmosphere -------------------------------------------------------------------------------- /config/mpas/hofx/stream_list.atmosphere.analysis: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.analysis -------------------------------------------------------------------------------- /config/mpas/hofx/stream_list.atmosphere.background: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.background -------------------------------------------------------------------------------- /config/mpas/hofx/stream_list.atmosphere.control: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.control -------------------------------------------------------------------------------- /config/mpas/hofx/stream_list.atmosphere.ensemble: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.ensemble -------------------------------------------------------------------------------- /config/mpas/initic/namelist.init_atmosphere: -------------------------------------------------------------------------------- 1 | &nhyd_model 2 | config_init_case = 7 3 | config_start_time = 'startTime' 4 | config_stop_time = 'startTime' 5 | config_theta_adv_order = 3 6 | config_coef_3rd_order = 0.25 7 | / 8 | &dimensions 9 | config_nvertlevels = 55 10 | config_nsoillevels = 4 11 | config_nfglevels = 38 12 | config_nfgsoillevels = 4 13 | / 14 | &data_sources 15 | config_geog_data_path = '/glade/campaign/mmm/wmr/mpas_static/' 16 | config_met_prefix = '{{UngribPrefix}}' 17 | config_sfc_prefix = 'SST' 18 | config_fg_interval = 86400 19 | config_landuse_data = 'MODIFIED_IGBP_MODIS_NOAH' 20 | config_topo_data = 'GMTED2010' 21 | config_use_spechumd = false 22 | / 23 | &vertical_grid 24 | config_ztop = 30000.0 25 | config_nsmterrain = 1 26 | config_smooth_surfaces = true 27 | config_dzmin = 0.3 28 | config_nsm = 30 29 | config_tc_vertical_grid = true 30 | / 31 | &interpolation_control 32 | config_extrap_airtemp = 'linear' 33 | / 34 | &preproc_stages 35 | config_static_interp = false 36 | config_native_gwd_static = false 37 | config_vertical_grid = false 38 | config_met_interp = true 39 | config_input_sst = false 40 | config_frac_seaice = true 41 | / 42 | &io 43 | config_pio_num_iotasks = 0 44 | config_pio_stride = 1 45 | / 46 | &decomposition 47 | config_block_decomp_file_prefix = 'x{{meshRatio}}.nCells.graph.info.part.' 48 | / 49 | -------------------------------------------------------------------------------- /config/mpas/initic/namelist.wps: -------------------------------------------------------------------------------- 1 | &share 2 | wrf_core = 'ARW', 3 | max_dom = 2, 4 | start_date = 'startTime', 5 | end_date = 'startTime', 6 | interval_seconds = 21600 7 | io_form_geogrid = 2, 8 | / 9 | 10 | &ungrib 11 | out_format = 'WPS', 12 | prefix = '{{UngribPrefix}}', 13 | / 14 | 15 | &metgrid 16 | fg_name = 'FILE' 17 | io_form_metgrid = 2, 18 | / 19 | -------------------------------------------------------------------------------- /config/mpas/initic/streams.init_atmosphere: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 39 | 40 | -------------------------------------------------------------------------------- /config/mpas/keptvars.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # (C) Copyright 2023 UCAR 3 | # 4 | # This software is licensed under the terms of the Apache Licence Version 2.0 5 | # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 6 | 7 | 8 | # This yaml will be exercised when "geometry.deallocate non-da fields" is true. 9 | # The variables included in "fields" will be kept in memory (mpas_domain) 10 | # for a given mpas-jedi application, while other fields will be deallocated 11 | # from mpas_domain to save the memory. 12 | 13 | fields: 14 | - re_cloud 15 | - re_ice 16 | - re_snow 17 | - cldfrac 18 | - lai 19 | - u10 20 | - v10 21 | - q2 22 | - t2m 23 | - pressure_p 24 | - pressure 25 | - pressure_base 26 | - surface_pressure 27 | - rho 28 | - theta 29 | - temperature 30 | - relhum 31 | - spechum 32 | - u 33 | - uReconstructZonal 34 | - uReconstructMeridional 35 | - stream_function 36 | - velocity_potential 37 | - landmask 38 | - xice 39 | - snowc 40 | - znt 41 | - skintemp 42 | - ivgtyp 43 | - isltyp 44 | - snowh 45 | - vegfra 46 | - lai 47 | - smois 48 | - tslb 49 | - vorticity 50 | - w 51 | -------------------------------------------------------------------------------- /config/mpas/obsop_name_map.yaml: -------------------------------------------------------------------------------- 1 | variable maps: 2 | - name: airTemperature 3 | alias: air_temperature 4 | - name: windEastward 5 | alias: eastward_wind 6 | - name: windNorthward 7 | alias: northward_wind 8 | - name: specificHumidity 9 | alias: water_vapor_mixing_ratio_wrt_moist_air 10 | - name: relativeHumidity 11 | alias: relative_humidity 12 | - name: pressure 13 | alias: air_pressure 14 | - name: virtualTemperature 15 | alias: virtual_temperature 16 | - name: stationPressure 17 | alias: air_pressure_at_surface 18 | - name: depthBelowWaterSurface 19 | alias: ocean_depth 20 | - name: waterTemperature 21 | alias: ocean_temperature 22 | - name: surfacePressure 23 | alias: air_pressure_at_surface 24 | - name: seaSurfaceTemperature 25 | alias: sea_surface_temperature 26 | - name: equivalentReflectivityFactor 27 | alias: equivalent_reflectivity_factor 28 | - name: salinity 29 | alias: sea_water_salinity 30 | - name: seaSurfaceTemperature 31 | alias: sea_surface_temperature 32 | - name: ozoneProfile 33 | alias: mole_fraction_of_ozone_in_air 34 | -------------------------------------------------------------------------------- /config/mpas/rtpp/namelist.atmosphere: -------------------------------------------------------------------------------- 1 | ../variational/namelist.atmosphere -------------------------------------------------------------------------------- /config/mpas/rtpp/stream_list.atmosphere.analysis: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.analysis -------------------------------------------------------------------------------- /config/mpas/rtpp/stream_list.atmosphere.background: -------------------------------------------------------------------------------- 1 | pressure_base 2 | pressure_p 3 | rho 4 | scalars 5 | surface_pressure 6 | theta 7 | u 8 | uReconstructZonal 9 | uReconstructMeridional 10 | -------------------------------------------------------------------------------- /config/mpas/rtpp/stream_list.atmosphere.control: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.control -------------------------------------------------------------------------------- /config/mpas/rtpp/stream_list.atmosphere.ensemble: -------------------------------------------------------------------------------- 1 | ../variational/stream_list.atmosphere.ensemble -------------------------------------------------------------------------------- /config/mpas/saca/stream_list.atmosphere.saca_analysis: -------------------------------------------------------------------------------- 1 | cldfrac 2 | scalars 3 | pressure_p 4 | theta 5 | rho 6 | -------------------------------------------------------------------------------- /config/mpas/saca/stream_list.atmosphere.saca_background: -------------------------------------------------------------------------------- 1 | cldfrac 2 | pressure_base 3 | pressure_p 4 | rho 5 | scalars 6 | theta 7 | xland 8 | -------------------------------------------------------------------------------- /config/mpas/saca/stream_list.atmosphere.saca_obs: -------------------------------------------------------------------------------- 1 | brtemp 2 | cldmask 3 | -------------------------------------------------------------------------------- /config/mpas/variables.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | #################################### 4 | ## workflow-relevant state variables 5 | #################################### 6 | set MPASHydroIncrementVariables = ( \ 7 | cloud_liquid_water \ 8 | cloud_liquid_ice \ 9 | graupel \ 10 | rain_water \ 11 | snow_water \ 12 | ) 13 | set MPASHydroStateVariables = (${MPASHydroIncrementVariables} cldfrac) 14 | 15 | set StandardAnalysisVariables = ( \ 16 | water_vapor_mixing_ratio_wrt_moist_air \ 17 | air_pressure_at_surface \ 18 | air_temperature \ 19 | northward_wind \ 20 | eastward_wind \ 21 | ) 22 | set StandardStateVariables = ( \ 23 | $StandardAnalysisVariables \ 24 | air_potential_temperature \ 25 | dry_air_density \ 26 | u \ 27 | water_vapor_mixing_ratio_wrt_dry_air \ 28 | air_pressure \ 29 | landmask \ 30 | seaice_fraction \ 31 | snowc \ 32 | skin_temperature_at_surface \ 33 | ivgtyp \ 34 | isltyp \ 35 | snowh \ 36 | vegetation_area_fraction \ 37 | eastward_wind_at_10m \ 38 | northward_wind_at_10m \ 39 | lai \ 40 | smois \ 41 | tslb \ 42 | pressure_p \ 43 | ) 44 | 45 | set MPASJEDIVariablesFiles = (\ 46 | geovars.yaml \ 47 | obsop_name_map.yaml \ 48 | keptvars.yaml \ 49 | ) 50 | 51 | set SACAStateVariables = ( \ 52 | air_temperature \ 53 | water_vapor_mixing_ratio_wrt_moist_air \ 54 | air_potential_temperature \ 55 | u \ 56 | dry_air_density \ 57 | water_vapor_mixing_ratio_wrt_dry_air \ 58 | cloud_liquid_water \ 59 | cloud_liquid_ice \ 60 | snow_water \ 61 | cloud_ice_number_concentration \ 62 | cldfrac \ 63 | xland \ 64 | air_pressure \ 65 | pressure_p \ 66 | air_pressure_at_surface \ 67 | ) 68 | -------------------------------------------------------------------------------- /config/mpas/variational/stream_list.atmosphere.analysis: -------------------------------------------------------------------------------- 1 | pressure_p 2 | rho 3 | scalars 4 | surface_pressure 5 | theta 6 | u 7 | uReconstructZonal 8 | uReconstructMeridional 9 | -------------------------------------------------------------------------------- /config/mpas/variational/stream_list.atmosphere.background: -------------------------------------------------------------------------------- 1 | cldfrac 2 | lai 3 | pressure_base 4 | pressure_p 5 | re_cloud 6 | re_ice 7 | re_snow 8 | rho 9 | scalars 10 | skintemp 11 | smois 12 | snowc 13 | snowh 14 | surface_pressure 15 | theta 16 | tslb 17 | u 18 | u10 19 | uReconstructZonal 20 | uReconstructMeridional 21 | v10 22 | vegfra 23 | w 24 | xice 25 | -------------------------------------------------------------------------------- /config/mpas/variational/stream_list.atmosphere.control: -------------------------------------------------------------------------------- 1 | scalars 2 | spechum 3 | stream_function 4 | surface_pressure 5 | temperature 6 | uReconstructZonal 7 | uReconstructMeridional 8 | velocity_potential 9 | -------------------------------------------------------------------------------- /config/mpas/variational/stream_list.atmosphere.ensemble: -------------------------------------------------------------------------------- 1 | pressure_base 2 | pressure_p 3 | scalars 4 | surface_pressure 5 | theta 6 | uReconstructZonal 7 | uReconstructMeridional 8 | -------------------------------------------------------------------------------- /config/setConfig.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | # a helper function for parsing YAML in c-shell 4 | 5 | source config/config.csh 6 | 7 | # get arguments 8 | set defaultYAML = "$1" 9 | set thisYAML = "$2" 10 | set rootKey = "$3" 11 | set key1 = "$4" 12 | 13 | # retrieve config key and value 14 | # TODO: for larger config files, this process will get more expensive; move toward: 15 | # (1) only loading sub-sections of the YAML that are needed 16 | # (2) automatically parsing an entire YAML sub-section in its respective csh script 17 | # instead of retrieving nodes one at a time 18 | # (3) same as (2), but for the entire YAML 19 | set key = "`${getYAMLNode} ${defaultYAML} ${thisYAML} ${rootKey}.${key1} -o key`" 20 | set value = "`${getYAMLNode} ${defaultYAML} ${thisYAML} ${rootKey}.${key1} -o value`" 21 | 22 | if ("$value" =~ *"None"*) then 23 | echo "$0 (ERROR): invalid value for $key1" 24 | echo "$0 (ERROR): ${rootKey}.$key1 = $value" 25 | exit 1 26 | endif 27 | 28 | # verbose output, useful for debugging 29 | #echo "$0 (DEBUG): ${rootKey}.$key1 = $value" 30 | 31 | # if value contains spaces, assume it is a list 32 | if ( "$value" =~ *" "*) then 33 | set $key = ($value) 34 | else 35 | setenv $key "$value" 36 | endif 37 | -------------------------------------------------------------------------------- /config/setNestedConfig.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | # a helper function for parsing YAML in c-shell 4 | 5 | source config/config.csh 6 | 7 | # get arguments 8 | set defaultYAML = "$1" 9 | set thisYAML = "$2" 10 | set rootKey = "$3" 11 | set key1 = "$4" 12 | 13 | # retrieve config value 14 | set value = "`${getYAMLNode} ${defaultYAML} ${thisYAML} ${rootKey}.${key1} -o value`" 15 | set key = "`${getYAMLNode} ${defaultYAML} ${thisYAML} ${rootKey}.${key1} -o key`" 16 | 17 | # substitute "__" for "." in nested key 18 | set key = "${rootKey}.${key}" 19 | set key = `echo "$key" | sed 's@\.@__@g'` 20 | 21 | if ("$value" =~ *"None"*) then 22 | echo "$0 (ERROR): invalid value for $key" 23 | echo "$0 (ERROR): $key = $value" 24 | exit 1 25 | endif 26 | 27 | # verbose output, useful for debugging 28 | #echo "$0 (DEBUG): $key = $value" 29 | 30 | # if value contains spaces, assume it is a list 31 | if ( "$value" =~ *" "*) then 32 | set $key = ($value) 33 | else 34 | setenv $key "$value" 35 | endif 36 | -------------------------------------------------------------------------------- /config/tools.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | if ( $?config_tools ) exit 0 4 | set config_tools = 1 5 | 6 | ## workflow tools 7 | set wd = `pwd` 8 | set pyDir = $wd/tools 9 | set pyTools = ( \ 10 | advanceCYMDH \ 11 | checkMissingChannels \ 12 | create_amb_in_nc \ 13 | dateList \ 14 | fix_float2int \ 15 | memberDir \ 16 | nSpaces \ 17 | substituteEnsembleBMembers \ 18 | substituteEnsembleBTemplate \ 19 | substituteEnsembleBTemplate_4d \ 20 | substituteEnsembleBTemplate_4d_7slots \ 21 | TimeFmtChange \ 22 | update_sensorScanPosition \ 23 | updateXTIME \ 24 | concatenate \ 25 | ) 26 | foreach tool ($pyTools) 27 | setenv ${tool} "python ${pyDir}/${tool}.py" 28 | end 29 | -------------------------------------------------------------------------------- /env-setup/machine.csh: -------------------------------------------------------------------------------- 1 | #!/bin/tcsh -f 2 | 3 | # Use deactivate to remove NPL from environment if it is activated 4 | which conda >& /dev/null 5 | if ($? == 0) then 6 | conda deactivate 7 | endif 8 | 9 | if ( "$NCAR_HOST" == "derecho" || "$NCAR_HOST" == "casper" ) then 10 | if ( ! $?CYLC_ENV ) then 11 | echo 'CYLC_ENV environment variable is not set, setting it to /glade/work/jwittig/conda-envs/my-cylc8.2' 12 | setenv CYLC_ENV /glade/work/jwittig/conda-envs/my-cylc8.2 13 | endif 14 | source /etc/profile.d/z00_modules.csh 15 | # module purge 16 | module load conda/latest 17 | module list 18 | 19 | conda activate $CYLC_ENV 20 | else if ( "$NCAR_HOST" == "cheyenne" ) then 21 | source /etc/profile.d/modules.csh 22 | module purge 23 | module load ncarenv/1.3 24 | module load gnu/10.1.0 25 | module load ncarcompilers/0.5.0 26 | module load netcdf/4.8.1 27 | module load conda/latest 28 | conda activate npl 29 | 30 | module load cylc 31 | module load graphviz 32 | module load git 33 | git lfs install 34 | module list 35 | else 36 | echo "unknown NCAR_HOST " $NCAR_HOST 37 | endif 38 | 39 | setenv PYTHONDONTWRITEBYTECODE 1 # avoid __pycache__ creation 40 | 41 | # "conda init" modifies ~/.tcshrc in order to enable conda in batch jobs. If conda is loaded in 42 | # a csh/tcsh script that is part of a batch job, the following line is needed. 43 | 44 | #conda init tcsh 45 | 46 | # Also the "-f" flag must not be present in the csh/tcsh script that loads conda and activates npl, 47 | # because that flag prevents sourcing ~/.tcshrc. Following this procedure will cause "~/.cshrc" to 48 | # become null by replacing its usage with "~/.tcshrc". After all settings residing in "~/.cshrc" 49 | # are migrated to "~/.tcshrc", users should have their expected environment restored. 50 | 51 | -------------------------------------------------------------------------------- /initialize/applications/Members.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from initialize.config.Component import Component 11 | from initialize.config.Config import Config 12 | 13 | class Members(Component): 14 | optionalVariables = { 15 | ## n: number of firstbackground, DA, and forecast members 16 | 'n': int, 17 | } 18 | 19 | fmt = '/mem{:03d}' 20 | 21 | def __init__(self, config): 22 | super().__init__(config) 23 | 24 | ################### 25 | # derived variables 26 | ################### 27 | n = self['n'] 28 | if n is None: 29 | self._set('nMembers', 0) 30 | self.n = 0 31 | else: 32 | self._set('nMembers', n) 33 | self.n = n 34 | 35 | self._cshVars = ['nMembers'] 36 | 37 | if self.n > 1: 38 | self.memFmt = self.fmt 39 | else: 40 | self.memFmt = '' 41 | -------------------------------------------------------------------------------- /initialize/config/Configurable.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from copy import deepcopy 11 | 12 | class Configurable: 13 | conf = {} 14 | def __init__(self, conf:dict): 15 | ''' 16 | conf: {key1[str]: { 17 | 'def': default value, # optional 18 | 'req': required, # bool, optional, False when missing 19 | 'typ': type}, # e.g., int, float, str, list, class w/ ctor taking 1 arg 20 | key2[str]: { 21 | 'def': default value, # optional 22 | 'req': required, # bool, optional, False when missing 23 | 'typ': type}, # e.g., int, float, str, list, class w/ ctor taking 1 arg 24 | } 25 | ''' 26 | self.lower = self.__class__.__name__.lower() 27 | self.autoLabel = self.lower 28 | 29 | self._vtable = {} 30 | for k, v in self.conf.items(): 31 | required = v.get('req', False) 32 | if required: 33 | assert k in conf, self.__class__.__name__+': missing conf element => '+str(k) 34 | 35 | vv = conf.get(k, v.get('def', None)) 36 | 37 | if vv is not None: 38 | try: 39 | typ = v['typ'] 40 | vv = typ(vv) 41 | except: 42 | raise TypeError 43 | 44 | self._vtable[k] = vv 45 | 46 | def __getitem__(self, key): 47 | ''' 48 | basic get method 49 | usage: obj = Configurable(conf); value = obj[key] 50 | ''' 51 | return self._vtable[key] 52 | -------------------------------------------------------------------------------- /initialize/config/Logger.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | import os 11 | 12 | ''' 13 | class for logging statements conditionally, based on verbosity. 14 | the value of the CYLC_DEBUG environment variable will control output. 15 | if CYLC_DEBUG is not set, assume verbosity level 1 (some info, all errors) 16 | ''' 17 | class Logger(): 18 | 19 | # values for passing to log e.g. log("text", level=self.MSG_DEBUG) 20 | MSG_QUIET = 0 # always print 21 | MSG_NORMAL = 1 # normal output, suppress if CYLC_DEBUG env var is 0 22 | MSG_DEBUG = 2 # print if CYLC_DEBUG is >= 2 23 | MSG_NOISY = 3 # print if CYLC_DEBUG is >= 3 24 | _msg_level = 1 25 | 26 | def __init__(self): 27 | 28 | # set level for printing via self.log() 29 | msg_env = os.getenv('CYLC_DEBUG') 30 | if msg_env is None: 31 | self._msg_level = 1 32 | elif msg_env.isdigit(): 33 | self._msg_level = int(msg_env) 34 | 35 | self.logPrefix = self.__class__.__name__+': ' 36 | 37 | def log(self, text, *args, **kwargs): 38 | level = kwargs.get('level', 1) 39 | if level <= self._msg_level: 40 | print(self.logPrefix+text) 41 | return 42 | 43 | -------------------------------------------------------------------------------- /initialize/config/SubConfig.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from initialize.config.Config import Config 11 | 12 | class SubConfig(Config): 13 | def __init__(self, 14 | table:dict = {}, 15 | defaults:dict = {}, 16 | ): 17 | self._table = table 18 | self._defaults = defaults 19 | 20 | @ classmethod 21 | def fromConfig(cls, 22 | parent:Config, 23 | subKey:str, 24 | defaultsFile:str = None, 25 | ): 26 | table, defaults = parent.extract(subKey, defaultsFile) 27 | return cls(table, defaults) 28 | -------------------------------------------------------------------------------- /initialize/data/ObsEnsemble.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from initialize.config.Configurable import Configurable 11 | from initialize.data.DataList import DataList 12 | 13 | class ObsEnsemble(DataList): 14 | def __init__(self, duration:int=0): 15 | super().__init__(self.check_method) 16 | self.__duration = duration 17 | 18 | @staticmethod 19 | def check_method(val): 20 | if isinstance(val, dict): 21 | return ObsDB(val) 22 | elif isinstance(val, State): 23 | return val 24 | else: 25 | raise TypeError 26 | 27 | def duration(self): 28 | return self.__duration 29 | 30 | class ObsDB(Configurable): 31 | conf = { 32 | 'directory': {'typ': str, 'req': True}, 33 | 'observers': {'typ': list, 'req': True}, 34 | } 35 | def __init__(self, conf:dict): 36 | super().__init__(conf) 37 | 38 | def directory(self): 39 | return self['directory'] 40 | 41 | def observers(self): 42 | return self['observers'] 43 | -------------------------------------------------------------------------------- /initialize/data/StateEnsemble.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from initialize.config.Configurable import Configurable 11 | 12 | from initialize.data.Model import Mesh 13 | from initialize.data.DataList import DataList 14 | 15 | class StateEnsemble(DataList): 16 | def __init__(self, mesh:Mesh, duration=0): 17 | 18 | super().__init__(self.check_method) 19 | 20 | self.__mesh = mesh 21 | self.__duration = duration 22 | 23 | def check_method(self, val): 24 | if isinstance(val, dict): 25 | return State(val, self.__mesh) 26 | elif isinstance(val, State): 27 | return val 28 | else: 29 | raise TypeError 30 | 31 | def mesh(self): 32 | return self.__mesh 33 | 34 | def duration(self): 35 | return self.__duration 36 | 37 | class State(Configurable): 38 | conf = { 39 | 'directory': {'typ': str, 'req': True}, 40 | 'prefix': {'typ': str, 'req': True}, 41 | } 42 | def __init__(self, conf:dict, mesh:Mesh): 43 | super().__init__(conf) 44 | self.__mesh = mesh 45 | 46 | def location(self): 47 | return self.directory()+'/'+self.prefix() 48 | 49 | def directory(self): 50 | return self['directory'] 51 | 52 | def prefix(self): 53 | return self['prefix'] 54 | 55 | def mesh(self): 56 | return self.__mesh 57 | -------------------------------------------------------------------------------- /initialize/suites/GenerateObs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | # TODO: make members optional, modify getCycleVars 11 | from initialize.applications.Members import Members 12 | 13 | from initialize.config.Config import Config 14 | 15 | from initialize.data.Observations import Observations 16 | 17 | from initialize.framework.Build import Build 18 | from initialize.framework.Experiment import Experiment 19 | from initialize.framework.Naming import Naming 20 | 21 | from initialize.suites.SuiteBase import SuiteBase 22 | 23 | 24 | class GenerateObs(SuiteBase): 25 | def __init__(self, conf:Config): 26 | super().__init__(conf) 27 | 28 | self.c['build'] = Build(conf, None) 29 | self.c['observations'] = Observations(conf, self.c['hpc']) 30 | self.c['experiment'] = Experiment(conf, self.c['hpc']) 31 | self.c['naming'] = Naming(conf, self.c['experiment']) 32 | 33 | # TODO: make members optional, modify getCycleVars 34 | self.c['members'] = Members(conf) 35 | 36 | for k, c_ in self.c.items(): 37 | c_.export() 38 | 39 | self._dependencies += [''' 40 | +PT'''+str(self.c['workflow']['CyclingWindowHR'])+'''H/PT'''+str(self.c['workflow']['CyclingWindowHR'])+'''H = """ 41 | '''+self.c['observations']['PrepareObservations'] + ''' 42 | """ '''] 43 | self.taskComponents += ['observations'] 44 | -------------------------------------------------------------------------------- /initialize/util/ExampleComponent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | (C) Copyright 2023 UCAR 5 | 6 | This software is licensed under the terms of the Apache Licence Version 2.0 7 | which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 8 | ''' 9 | 10 | from initialize.config.Component import Component 11 | 12 | class Example(Component): 13 | #defaults = 'scenarios/defaults/example.yaml' (optional) 14 | requiredVariables = { 15 | 'required int': int, 16 | 'required float': float, 17 | 'required str': str, 18 | 'required bool': bool, 19 | 'required list': list, 20 | } 21 | optionalVariables = { 22 | 'optional int': int, 23 | 'optional float': float, 24 | 'optional str': str, 25 | 'optional bool': bool, 26 | 'optional list': list, 27 | } 28 | variablesWithDefaults = { 29 | 'default int': [0, int], 30 | 'default float': [0., float], 31 | 'default str': ['0', str], 32 | 'default bool': [False, bool], 33 | 'default list': [[0, 0., '0'], list], 34 | } 35 | 36 | def __init__(self, config:Config): 37 | super().__init__(config) 38 | 39 | ################### 40 | # derived variables 41 | ################### 42 | self._cshVars = list(self._vtable.keys()) 43 | 44 | ######################## 45 | # tasks and dependencies 46 | ######################## 47 | self._tasks = [''' 48 | [[Example0]] 49 | [[Example1]] 50 | '''] 51 | 52 | self._dependencies = [''' 53 | Example0 => Example1 54 | '''] 55 | -------------------------------------------------------------------------------- /scenarios/3denvar_O30kmIE60km_WarmStart_VarBC_2outer_80mem.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '3denvar_O30kmIE60km_VarBC_2out_80mem' 3 | workflow: 4 | first cycle point: 20180414T18 5 | final cycle point: 20180514T18 6 | restart cycle point: 20180501T06 7 | observations: 8 | resource: PANDACArchiveForVarBC 9 | members: 10 | n: 1 11 | model: 12 | outerMesh: 30km 13 | innerMesh: 60km 14 | ensembleMesh: 60km 15 | firstbackground: 16 | resource: "PANDAC.GFS" 17 | externalanalyses: 18 | resource: "GFS.PANDAC" 19 | variational: 20 | DAType: 3denvar 21 | biasCorrection: True 22 | nInnerIterations: [60,60,] 23 | ensemble: 24 | forecasts: 25 | resource: "PANDAC.GEFS_4DEnVar_80mem" 26 | -------------------------------------------------------------------------------- /scenarios/3denvar_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | observations: 2 | resource: PANDACArchive 3 | members: 4 | n: 1 5 | model: 6 | outerMesh: 120km 7 | innerMesh: 120km 8 | ensembleMesh: 120km 9 | firstbackground: 10 | resource: "PANDAC.GFS" 11 | externalanalyses: 12 | resource: "GFS.PANDAC" 13 | variational: 14 | DAType: 3denvar 15 | ensemble: 16 | forecasts: 17 | resource: "PANDAC.GEFS" 18 | workflow: 19 | first cycle point: 20180414T18 20 | #restart cycle point: 20180418T00 21 | final cycle point: 20180415T06 22 | -------------------------------------------------------------------------------- /scenarios/3denvar_OIE120km_WarmStart_IAU.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20180414T18 3 | #restart cycle point: 20180418T00 4 | final cycle point: 20180415T06 5 | #final cycle point: 20180514T18 6 | 7 | extendedforecast: 8 | #meanTimes: T00 # uncomment to engage 9 | lengthHR: 120 10 | outIntervalHR: 12 11 | 12 | forecast: 13 | post: [] 14 | observations: 15 | resource: PANDACArchive 16 | members: 17 | n: 1 18 | model: 19 | outerMesh: 120km 20 | innerMesh: 120km 21 | ensembleMesh: 120km 22 | experiment: 23 | suffix: '_IAU' 24 | firstbackground: 25 | resource: "PANDAC.GFS" 26 | externalanalyses: 27 | resource: "GFS.PANDAC" 28 | variational: 29 | DAType: 3denvar 30 | ensemble: 31 | forecasts: 32 | resource: "PANDAC.GEFS" 33 | post: [verifyobs] 34 | 35 | 36 | forecast: 37 | IAU: True 38 | hpc: 39 | CriticalAccount: NMMM0015 40 | NonCriticalAccount: NMMM0015 41 | SingleProcAccount: NMMM0015 42 | -------------------------------------------------------------------------------- /scenarios/3denvar_OIE120km_WarmStart_VarBC.yaml: -------------------------------------------------------------------------------- 1 | observations: 2 | resource: PANDACArchiveForVarBC 3 | experiment: 4 | suffix: '_VarBC' 5 | members: 6 | n: 1 7 | model: 8 | outerMesh: 120km 9 | innerMesh: 120km 10 | ensembleMesh: 120km 11 | firstbackground: 12 | resource: "PANDAC.GFS" 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | variational: 16 | DAType: 3denvar 17 | biasCorrection: True 18 | ensemble: 19 | forecasts: 20 | resource: "PANDAC.GEFS" 21 | #execute: False # the default is True 22 | #post: [] # this turns off verifyobs 23 | forecast: 24 | #execute: False # the default is True 25 | #post: [] # use this when doing extended forecast 26 | post: [verifymodel] # this turns off verifyobs 27 | #extendedforecast: 28 | # meanTimes: T00 # T00, T12 29 | # lengthHR: 120 30 | # outIntervalHR: 24 31 | # execute: True # this is the default setting 32 | # post: [verifymodel,verifyobs] # can be replaced by [verifyobs,verifymodel] 33 | workflow: 34 | first cycle point: 20180414T18 35 | #restart cycle point: 20180418T00 36 | final cycle point: 20180415T06 37 | #final cycle point: 20180514T18 38 | #CyclingWindowHR: 24 # default is 6 for cycling DA 39 | #max active cycle points: 4 # used for independent 'extendedforecast' 40 | -------------------------------------------------------------------------------- /scenarios/3denvar_OIE120km_WarmStart_VarBC_cron.yaml: -------------------------------------------------------------------------------- 1 | observations: 2 | resource: PANDACArchiveForVarBC 3 | experiment: 4 | suffix: '_VarBC' 5 | members: 6 | n: 1 7 | model: 8 | outerMesh: 120km 9 | innerMesh: 120km 10 | ensembleMesh: 120km 11 | firstbackground: 12 | resource: "PANDAC.GFS" 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | variational: 16 | DAType: 3denvar 17 | biasCorrection: True 18 | ensemble: 19 | forecasts: 20 | resource: "PANDAC.GEFS" 21 | #execute: False # the default is True 22 | #post: [] # this turns off verifyobs 23 | forecast: 24 | #execute: False # the default is True 25 | #post: [] # use this when doing extended forecast 26 | post: [verifymodel] # this turns off verifyobs 27 | #extendedforecast: 28 | # meanTimes: T00 # T00, T12 29 | # lengthHR: 120 30 | # outIntervalHR: 24 31 | # execute: True # this is the default setting 32 | # post: [verifymodel,verifyobs] # can be replaced by [verifyobs,verifymodel] 33 | workflow: 34 | first cycle point: 20180414T18 35 | #restart cycle point: 20180418T00 36 | final cycle point: 20180421T18 37 | #final cycle point: 20180514T18 38 | #CyclingWindowHR: 24 # default is 6 for cycling DA 39 | #max active cycle points: 4 # used for independent 'extendedforecast' 40 | hpc: 41 | #CriticalAccount: nmmm0043 42 | #NonCriticalAccount: nmmm0043 43 | CriticalQueue: economy 44 | NonCriticalQueue: economy 45 | -------------------------------------------------------------------------------- /scenarios/3denvar_OIE120km_WarmStart_VarBC_iasi.yaml: -------------------------------------------------------------------------------- 1 | observations: 2 | resource: PANDACArchiveForVarBC 3 | experiment: 4 | name: '3denvar-60-iter_O120km_VarBC_iasi' 5 | members: 6 | n: 1 7 | model: 8 | outerMesh: 120km 9 | innerMesh: 120km 10 | ensembleMesh: 120km 11 | firstbackground: 12 | resource: "PANDAC.GFS" 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | variational: 16 | DAType: 3denvar 17 | biasCorrection: True 18 | ensemble: 19 | forecasts: 20 | resource: "PANDAC.GEFS" 21 | observers: [ 22 | aircraft, 23 | gnssrorefncep, 24 | #gnssrobndropp1d, 25 | satwind, 26 | satwnd, 27 | sfc, 28 | sondes, 29 | amsua_aqua, 30 | amsua_metop-a, 31 | amsua_metop-b, 32 | amsua_n15, 33 | amsua_n18, 34 | amsua_n19, 35 | mhs_metop-a, 36 | mhs_metop-b, 37 | mhs_n18, 38 | mhs_n19, 39 | iasi_metop-a, 40 | iasi_metop-b, 41 | ] 42 | #execute: False # the default is True 43 | #post: [] # this turns off verifyobs 44 | forecast: 45 | #execute: False # the default is True 46 | #post: [] # use this when doing extended forecast 47 | post: [verifymodel] # this turns off verifyobs 48 | #extendedforecast: 49 | # meanTimes: T00 # T00, T12 50 | # lengthHR: 120 51 | # outIntervalHR: 24 52 | # execute: True # this is the default setting 53 | # post: [verifymodel,verifyobs] # can be replaced by [verifyobs,verifymodel] 54 | workflow: 55 | first cycle point: 20180424T06 56 | #restart cycle point: 20180429T00 57 | final cycle point: 20180424T18 58 | #final cycle point: 20180514T18 59 | #CyclingWindowHR: 24 # default is 6 for cycling DA 60 | #max active cycle points: 4 # used for independent 'extendedforecast' 61 | -------------------------------------------------------------------------------- /scenarios/3dhybrid-allsky_O30kmIE60km_SpecifiedEnsemble_VarBC.yaml: -------------------------------------------------------------------------------- 1 | # settings borrowed from /glade/work/liuz/pandac_hybrid/amsua_clrsky 2 | experiment: 3 | suffix: '_ensB-SE80+RTPP70_VarBC' 4 | 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | 8 | forecast: 9 | #execute: False # the default is True 10 | #post: [] # use this when doing extended forecast 11 | post: [verifymodel] # this turns off verifyobs 12 | 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | 16 | members: 17 | n: 1 18 | 19 | model: 20 | outerMesh: 30km 21 | innerMesh: 60km 22 | ensembleMesh: 60km 23 | 24 | observations: 25 | resource: PANDACArchiveForVarBC 26 | 27 | variational: 28 | DAType: 3dhybrid-allsky 29 | biasCorrection: True 30 | nInnerIterations: [60,60,] 31 | ensemble: 32 | forecasts: 33 | resource: "PANDAC.EDA" 34 | #execute: False # the default is True 35 | #post: [] # this turns off verifyobs 36 | hofx: 37 | concatenateObsFeedback: True 38 | 39 | workflow: 40 | first cycle point: 20180414T18 41 | #restart cycle point: 20180415T00 42 | final cycle point: 20180415T06 43 | #final cycle point: 20180514T18 44 | #CyclingWindowHR: 24 # default is 6 for cycling DA 45 | #max active cycle points: 4 # used for independent 'extendedforecast' 46 | -------------------------------------------------------------------------------- /scenarios/3dhybrid_O30kmIE60km_SpecifiedEnsemble_VarBC.yaml: -------------------------------------------------------------------------------- 1 | # settings borrowed from /glade/work/liuz/pandac_hybrid/amsua_clrsky 2 | experiment: 3 | suffix: '_ensB-SE80+RTPP70_VarBC' 4 | 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | 8 | forecast: 9 | job: 10 | 30km: 11 | nodes: 2 12 | PEPerNode: 128 13 | baseSeconds: 60 14 | secondsPerForecastHR: 240 15 | 16 | #execute: False # the default is True 17 | #post: [] # use this when doing extended forecast 18 | post: [verifymodel] # this turns off verifyobs 19 | 20 | externalanalyses: 21 | resource: "GFS.PANDAC" 22 | 23 | members: 24 | n: 1 25 | 26 | model: 27 | outerMesh: 30km 28 | innerMesh: 60km 29 | ensembleMesh: 60km 30 | 31 | observations: 32 | resource: PANDACArchiveForVarBC 33 | 34 | variational: 35 | DAType: 3dhybrid 36 | biasCorrection: True 37 | ensembleCovarianceWeight: 0.75 38 | staticCovarianceWeight: 0.25 39 | nInnerIterations: [60,60,] 40 | ensemble: 41 | forecasts: 42 | resource: "PANDAC.EDA" 43 | 44 | #execute: False # the default is True 45 | #post: [] # this turns off verifyobs 46 | 47 | workflow: 48 | first cycle point: 20180414T18 49 | #restart cycle point: 20180415T00 50 | final cycle point: 20180415T06 51 | #final cycle point: 20180514T18 52 | #CyclingWindowHR: 24 # default is 6 for cycling DA 53 | #max active cycle points: 4 # used for independent 'extendedforecast' 54 | -------------------------------------------------------------------------------- /scenarios/3dhybrid_O60-3kmIE60km_SpecifiedEnsemble_VarBC.yaml: -------------------------------------------------------------------------------- 1 | # settings borrowed from /glade/work/liuz/pandac_hybrid/amsua_clrsky 2 | experiment: 3 | suffix: '_ensB-SE80+RTPP70_VarBC' 4 | 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | 8 | forecast: 9 | #execute: False # the default is True 10 | post: [] # use this when doing extended forecast 11 | #post: [verifymodel] # this turns off verifyobs 12 | 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | 16 | members: 17 | n: 1 18 | 19 | model: 20 | outerMesh: 60-3km 21 | innerMesh: 60km 22 | ensembleMesh: 60km 23 | 24 | observations: 25 | resource: PANDACArchiveForVarBC 26 | 27 | variational: 28 | DAType: 3dhybrid 29 | biasCorrection: True 30 | ensembleCovarianceWeight: 0.75 31 | staticCovarianceWeight: 0.25 32 | nInnerIterations: [60,60,] 33 | ensemble: 34 | forecasts: 35 | resource: "PANDAC.EDA" 36 | IRVISlandCoeff: IGBP 37 | # resource requirements 38 | job: 39 | defaults: 40 | retry: '3*PT30S' 41 | #execute: False # the default is True 42 | post: [] # this turns off verifyobs 43 | 44 | workflow: 45 | first cycle point: 20180414T18 46 | #restart cycle point: 20180419T12 47 | final cycle point: 20180415T06 48 | #CyclingWindowHR: 24 # default is 6 for cycling DA 49 | #max active cycle points: 4 # used for independent 'extendedforecast' 50 | -------------------------------------------------------------------------------- /scenarios/3dhybrid_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | externalanalyses: 2 | resource: "GFS.PANDAC" 3 | firstbackground: 4 | resource: "PANDAC.GFS" 5 | members: 6 | n: 1 7 | model: 8 | outerMesh: 120km 9 | innerMesh: 120km 10 | ensembleMesh: 120km 11 | observations: 12 | resource: PANDACArchive 13 | variational: 14 | DAType: 3dhybrid 15 | ensembleCovarianceWeight: 0.5 16 | staticCovarianceWeight: 0.5 17 | ensemble: 18 | forecasts: 19 | resource: "PANDAC.GEFS" 20 | workflow: 21 | first cycle point: 20180414T18 22 | #restart cycle point: 20180418T00 23 | final cycle point: 20180415T06 24 | #final cycle point: 20180514T18 25 | -------------------------------------------------------------------------------- /scenarios/3dvar_O30kmIE60km_ColdStart.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20220217T18 3 | #restart cycle point: 20220218T00 4 | final cycle point: 20220218T06 5 | #final cycle point: 20220228T00 6 | observations: 7 | resource: GladeRDAOnline 8 | members: 9 | n: 1 10 | model: 11 | outerMesh: 30km 12 | innerMesh: 60km 13 | ensembleMesh: 60km 14 | # Need x1.655362.static.nc to include var2d, con, oa{1,2,3,4}, and ol{1,2,3,4} fields 15 | # alternatively could use /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc, 16 | # but no such file exists for 60km mesh. This might skew comparisons to 30km GFS analyses produced 17 | # offline using /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc. The 18 | # ultimate action item then is to look deeper into the x1.*.static.nc file generation process, 19 | # and determine if it is viable to bring into the workflow. Ideally those files should be 20 | # generated using the same MPAS-A code version as is used in the initic and forecast applications. 21 | GraphInfoDir: /glade/work/duda/static_moved_to_campaign 22 | externalanalyses: 23 | resource: "GFS.RDA" 24 | forecast: 25 | post: [] 26 | variational: 27 | DAType: 3dvar 28 | biasCorrection: True 29 | nInnerIterations: [60,60] 30 | -------------------------------------------------------------------------------- /scenarios/3dvar_OIE120km_ColdStart.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20220217T18 3 | #restart cycle point: 20220218T00 4 | final cycle point: 20220218T06 5 | #final cycle point: 20220228T00 6 | observations: 7 | resource: GladeRDAOnline 8 | members: 9 | n: 1 10 | model: 11 | outerMesh: 120km 12 | innerMesh: 120km 13 | ensembleMesh: 120km 14 | externalanalyses: 15 | resource: "GFS.RDA" 16 | variational: 17 | DAType: 3dvar 18 | biasCorrection: True 19 | -------------------------------------------------------------------------------- /scenarios/3dvar_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | externalanalyses: 2 | resource: "GFS.PANDAC" 3 | 4 | firstbackground: 5 | resource: "PANDAC.GFS" 6 | 7 | forecast: 8 | post: [] 9 | 10 | members: 11 | n: 1 12 | 13 | model: 14 | outerMesh: 120km 15 | innerMesh: 120km 16 | ensembleMesh: 120km 17 | 18 | observations: 19 | resource: PANDACArchive 20 | 21 | variational: 22 | DAType: 3dvar 23 | post: [] 24 | 25 | workflow: 26 | first cycle point: 20180414T18 27 | #restart cycle point: 20180418T00 28 | final cycle point: 20180415T06 29 | #final cycle point: 20180514T18 30 | -------------------------------------------------------------------------------- /scenarios/3dvar_OIE120km_WarmStart_PostProcess.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | suite identifier: PostProcess 3 | 4 | extendedforecast: 5 | #meanTimes: T00,T12 # uncomment to enable extended forecast verification 6 | lengthHR: 120 7 | outIntervalHR: 24 8 | #execute: False # uncomment if forecasts are already completed 9 | 10 | # optionally enable extended forecast post (requires meanTimes to be set) 11 | post: [verifyobs, verifymodel] 12 | 13 | externalanalyses: 14 | resource: "GFS.PANDAC" 15 | 16 | firstbackground: 17 | resource: "PANDAC.GFS" 18 | 19 | forecast: 20 | execute: False 21 | post: [verifymodel] #verifyobs 22 | 23 | members: 24 | n: 1 25 | 26 | model: 27 | outerMesh: 120km 28 | innerMesh: 120km 29 | ensembleMesh: 120km 30 | 31 | observations: 32 | resource: PANDACArchive 33 | 34 | variational: 35 | DAType: 3dvar 36 | execute: False 37 | post: [verifyobs] 38 | 39 | workflow: 40 | first cycle point: 20180414T18 41 | #restart cycle point: 20180418T00 42 | final cycle point: 20180415T06 43 | #final cycle point: 20180514T18 44 | -------------------------------------------------------------------------------- /scenarios/4denvar_O30kmIE60km_WarmStart_VarBC_7slots_2outer_80mem.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4denvar_7slots_O30kmIE60km_VarBC_2out_80mem' 3 | workflow: 4 | first cycle point: 20180414T18 5 | final cycle point: 20180415T00 6 | #restart cycle point: 20180415T06 7 | subwindow: 1 8 | observations: 9 | resource: PANDACArchiveForVarBC 10 | members: 11 | n: 1 12 | model: 13 | outerMesh: 30km 14 | innerMesh: 60km 15 | ensembleMesh: 60km 16 | firstbackground: 17 | resource: "PANDAC.GFS" 18 | externalanalyses: 19 | resource: "GFS.PANDAC" 20 | variational: 21 | DAType: 4denvar 22 | biasCorrection: True 23 | nInnerIterations: [60,60,] 24 | subwindow: 1 25 | ensemble: 26 | forecasts: 27 | resource: "PANDAC.GEFS_4DEnVar_80mem" 28 | forecast: 29 | FourD: True 30 | -------------------------------------------------------------------------------- /scenarios/4denvar_OIE120km_WarmStart_VarBC_7slots.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4denvar_6h_7slots_OIE120km_VarBC' 3 | workflow: 4 | first cycle point: 20180414T18 5 | final cycle point: 20180422T00 6 | #restart cycle point: 20180415T06 7 | subwindow: 1 8 | observations: 9 | resource: PANDACArchiveForVarBC 10 | members: 11 | n: 1 12 | model: 13 | outerMesh: 120km 14 | innerMesh: 120km 15 | ensembleMesh: 120km 16 | firstbackground: 17 | resource: "PANDAC.GFS_4DEnVAR" 18 | externalanalyses: 19 | resource: "GFS.PANDAC" 20 | variational: 21 | DAType: 4denvar 22 | biasCorrection: True 23 | subwindow: 1 24 | ensemble: 25 | forecasts: 26 | resource: "PANDAC.GEFS" 27 | #execute: False 28 | #post: [] 29 | forecast: 30 | FourD: True 31 | # execute: False 32 | # post: [] 33 | #extendedforecast: 34 | # meanTimes: T00 35 | # lengthHR: 168 36 | # outIntervalHR: 24 37 | # execute: False 38 | -------------------------------------------------------------------------------- /scenarios/4denvar_OIE60km_WarmStart_VarBC_7slots_2outer.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4denvar_6h_7slots_OIE60km_VarBC_2outer' 3 | workflow: 4 | first cycle point: 20180414T18 5 | final cycle point: 20180415T00 6 | subwindow: 1 7 | observations: 8 | resource: PANDACArchiveForVarBC 9 | members: 10 | n: 1 11 | model: 12 | outerMesh: 60km 13 | innerMesh: 60km 14 | ensembleMesh: 60km 15 | firstbackground: 16 | resource: "PANDAC.GFS" 17 | externalanalyses: 18 | resource: "GFS.PANDAC" 19 | variational: 20 | DAType: 4denvar 21 | nInnerIterations: [60,60,] 22 | biasCorrection: True 23 | subwindow: 1 24 | ensemble: 25 | forecasts: 26 | resource: "PANDAC.GEFS_4DEnVar" 27 | forecast: 28 | FourD: True 29 | -------------------------------------------------------------------------------- /scenarios/4dhybrid_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4dhybrid_OIE120km_WarmStart_VarBC' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.GFS_4DEnVAR" 7 | forecast: 8 | FourD: True 9 | post: [verifymodel] #verifyobs 10 | members: 11 | n: 1 12 | model: 13 | outerMesh: 120km 14 | innerMesh: 120km 15 | ensembleMesh: 120km 16 | observations: 17 | resource: PANDACArchive 18 | variational: 19 | DAType: 4dhybrid 20 | biasCorrection: True 21 | ensembleCovarianceWeight: 0.75 22 | staticCovarianceWeight: 0.25 23 | ensemble: 24 | forecasts: 25 | resource: "PANDAC.GEFS" 26 | workflow: 27 | first cycle point: 20180414T18 28 | #restart cycle point: 20180418T00 29 | final cycle point: 20180422T00 30 | -------------------------------------------------------------------------------- /scenarios/ABIAHI120km3denvar.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20180414T18 3 | #restart cycle point: 20180418T00 4 | final cycle point: 20180415T06 5 | #final cycle point: 20180514T18 6 | observations: 7 | resource: PANDACArchive 8 | resources: 9 | PANDACArchive: 10 | instrumentsAllowingBiasCorrection: 11 | - abi_g16 12 | - ahi_himawari8 13 | IODADirectory: 14 | da: 15 | abi_g16: /glade/campaign/mmm/parc/ivette/pandac/Observations/abi/ioda/SUPEROBBING59 16 | ahi_himawari8: /glade/campaign/mmm/parc/ivette/pandac/Observations/ahi/ioda/SUPEROBBING59 17 | initialVARBCcoeff: /glade/scratch/ivette/pandac/ivette_3denvar_OIE120km_WarmStart_ABIAHI_10AUG2022_SUPEROBBING59_VarBC_2022ABI_2022AHI/CyclingDA/2018051418/dbOut 18 | fixedTlapmeanCov: /glade/campaign/mmm/parc/ivette/pandac/SATBIAS_fixed/new_20220816/2022ABI_2022AHI 19 | experiment: 20 | name: '3denvar_OIE120km_WarmStart_ABIAHI_VarBC' 21 | members: 22 | n: 1 23 | model: 24 | outerMesh: 120km 25 | innerMesh: 120km 26 | ensembleMesh: 120km 27 | firstbackground: 28 | resource: "PANDAC.GFS" 29 | externalanalyses: 30 | resource: "GFS.PANDAC" 31 | variational: 32 | DAType: 3denvar 33 | ensemble: 34 | forecasts: 35 | resource: "PANDAC.GEFS" 36 | nInnerIterations: [60,] 37 | biasCorrection: True 38 | observers: [ 39 | aircraft, 40 | gnssrorefncep, 41 | satwind, 42 | satwnd, 43 | sfc, 44 | sondes, 45 | amsua_aqua, 46 | amsua_metop-a, 47 | amsua_metop-b, 48 | amsua_n15, 49 | amsua_n18, 50 | amsua_n19, 51 | abi_g16, 52 | ahi_himawari8, 53 | ] 54 | hpc: 55 | CriticalQueue: economy 56 | NonCriticalQueue: economy 57 | verifyobs: 58 | script directory: /glade/work/ivette/pandac/mpas-jedi/graphics 59 | -------------------------------------------------------------------------------- /scenarios/CloudDirectInsertion.yaml: -------------------------------------------------------------------------------- 1 | suite: CloudDirectInsertion 2 | 3 | experiment: 4 | name: 'CloudDirectInsertion_TEST' 5 | 6 | externalanalyses: 7 | resource: "GFS.PANDAC" 8 | 9 | firstbackground: 10 | resource: "PANDAC.GFS" 11 | 12 | saca: 13 | runCyclingSaca: False 14 | meanTimes: T00 15 | #runSaca: False #this does not run saca but copies the 6hr fcst for exp starting from 6hr 16 | #execute: False 17 | 18 | extendedforecast: 19 | meanTimes: T00 20 | lengthHR: 1 21 | outIntervalHR: 1 22 | DACycling: True 23 | updateSea: True 24 | #execute: False # uncomment if forecasts are already completed 25 | post: [] #verifyobs 26 | 27 | forecastsaca: 28 | #execute: False 29 | post: [] #verifymodel,verifyobs 30 | 31 | hofx: 32 | observers: [ 33 | abi_g16, 34 | ] 35 | concatenateObsFeedback: True 36 | IRVISlandCoeff: IGBP 37 | 38 | hpc: 39 | CriticalQueue: economy 40 | NonCriticalQueue: economy 41 | 42 | members: 43 | n: 1 44 | 45 | model: 46 | outerMesh: 60-3km 47 | innerMesh: 60km 48 | ensembleMesh: 60km 49 | GraphInfoDir: /glade/campaign/mmm/parc/ivette/pandac/all_graph 50 | 51 | observations: 52 | resource: SacaObs 53 | 54 | workflow: 55 | first cycle point: 20180415T00 56 | final cycle point: 20180415T00 57 | #max active cycle points: 4 58 | -------------------------------------------------------------------------------- /scenarios/ForecastFromGFSAnalyses.yaml: -------------------------------------------------------------------------------- 1 | suite: ForecastFromExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GFS.RDA" 5 | 6 | experiment: 7 | name: 'ForecastFromGFSAnalyses' 8 | prefix: '' 9 | 10 | extendedforecast: 11 | meanTimes: T00,T12 12 | lengthHR: 24 13 | outIntervalHR: 12 14 | #execute: False # uncomment if forecasts are already completed 15 | 16 | # optionally turn on extended forecast post 17 | post: [verifyobs, verifymodel] 18 | 19 | hpc: 20 | CriticalQueue: economy 21 | NonCriticalQueue: economy 22 | 23 | members: 24 | n: 1 25 | 26 | model: 27 | outerMesh: 120km 28 | 29 | observations: # for optional verification 30 | resource: GladeRDAOnline 31 | 32 | workflow: 33 | first cycle point: 20220606T00 34 | final cycle point: 20220607T00 35 | max active cycle points: 4 36 | -------------------------------------------------------------------------------- /scenarios/ForecastFromGFSAnalysesVariableMesh.yaml: -------------------------------------------------------------------------------- 1 | suite: ForecastFromExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | 6 | experiment: 7 | name: 'ForecastFromGFSAnalyses' 8 | suffix: '_V60-3km' 9 | 10 | 11 | extendedforecast: 12 | meanTimes: T00,T12 13 | lengthHR: 24 14 | outIntervalHR: 12 15 | #execute: False # uncomment if forecasts are already completed 16 | 17 | # optionally turn on extended forecast post 18 | post: [verifyobs, verifymodel] 19 | 20 | hofx: 21 | concatenateObsFeedback: True 22 | IRVISlandCoeff: IGBP 23 | 24 | hpc: 25 | CriticalQueue: economy 26 | NonCriticalQueue: economy 27 | 28 | members: 29 | n: 1 30 | 31 | model: 32 | outerMesh: 60-3km 33 | innerMesh: 60km 34 | GraphInfoDir: /glade/campaign/mmm/parc/ivette/pandac/all_graph 35 | 36 | observations: # for optional verification 37 | resource: PANDACArchive 38 | 39 | workflow: 40 | first cycle point: 20180415T00 41 | final cycle point: 20180415T12 42 | #max active cycle points: 4 43 | -------------------------------------------------------------------------------- /scenarios/GEFSVerify_OIE120km.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | suffix: _GEFSVerify 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | forecast: 6 | execute: False 7 | firstbackground: 8 | resource: "PANDAC.LaggedGEFS" 9 | model: 10 | outerMesh: 120km 11 | innerMesh: 120km 12 | ensembleMesh: 120km 13 | members: 14 | n: 20 15 | observations: 16 | resource: PANDACArchive 17 | variational: 18 | DAType: 3denvar 19 | SelfExclusion: False 20 | nInnerIterations: [,] 21 | execute: False 22 | -------------------------------------------------------------------------------- /scenarios/GenerateGFSAnalyses.yaml: -------------------------------------------------------------------------------- 1 | suite: GenerateExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GFS.RDA" 5 | #resource: "GFS.NCEPFTP" 6 | experiment: 7 | name: 'GenerateGFSAnalyses' 8 | prefix: '' 9 | model: 10 | outerMesh: 120km 11 | hpc: 12 | CriticalQueue: economy 13 | NonCriticalQueue: economy 14 | #CriticalQueue: main 15 | #NonCriticalQueue: main 16 | workflow: 17 | first cycle point: 20220606T00 18 | final cycle point: 20220608T00 19 | max active cycle points: 60 20 | -------------------------------------------------------------------------------- /scenarios/GenerateObs.yaml: -------------------------------------------------------------------------------- 1 | suite: GenerateObs 2 | 3 | observations: 4 | resource: GladeRDAOnline 5 | convertToIODAObservations: 6 | - 1bamua 7 | - 1bmhs 8 | - airsev 9 | #- cris 10 | - gpsro 11 | #- mtiasi 12 | - prepbufr 13 | - satwnd 14 | experiment: 15 | name: 'GenerateObs' 16 | prefix: '' 17 | hpc: 18 | CriticalQueue: economy 19 | NonCriticalQueue: economy 20 | workflow: 21 | first cycle point: 20220606T00 22 | final cycle point: 20220608T00 23 | 24 | max active cycle points: 60 25 | -------------------------------------------------------------------------------- /scenarios/GetGDASanalysis.yaml: -------------------------------------------------------------------------------- 1 | suite: GenerateExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GDAS.NCEPFTP" 5 | experiment: 6 | name: 'DownloadGDASAnalysis' 7 | prefix: '' 8 | hpc: 9 | CriticalQueue: economy 10 | NonCriticalQueue: economy 11 | workflow: 12 | # test a recent date 13 | first cycle point: 20220819T00 14 | final cycle point: 20250912T12 15 | max active cycle points: 1 16 | 17 | # needed variables for the experiment to run, even though we do not run init_atmosphere 18 | model: 19 | outerMesh: 120km 20 | -------------------------------------------------------------------------------- /scenarios/IASI120km3denvar.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20180414T18 3 | final cycle point: 20180415T06 4 | observations: 5 | resource: PANDACArchive 6 | resources: 7 | PANDACArchive: 8 | instrumentsAllowingBiasCorrection: 9 | - iasi_metop-a 10 | - iasi_metop-b 11 | - iasi_metop-c 12 | IODADirectory: 13 | da: 14 | iasi_metop-a: /glade/campaign/mmm/parc/ivette/pandac/Observations/iasi/6h 15 | iasi_metop-b: /glade/campaign/mmm/parc/ivette/pandac/Observations/iasi/6h 16 | iasi_metop-c: /glade/campaign/mmm/parc/ivette/pandac/Observations/iasi/6h 17 | experiment: 18 | name: '3denvar_OIE120km_WarmStart_IASI' 19 | members: 20 | n: 1 21 | model: 22 | outerMesh: 120km 23 | innerMesh: 120km 24 | ensembleMesh: 120km 25 | firstbackground: 26 | resource: "PANDAC.GFS" 27 | externalanalyses: 28 | resource: "GFS.PANDAC" 29 | variational: 30 | DAType: 3denvar 31 | nInnerIterations: [60,] 32 | ensemble: 33 | forecasts: 34 | resource: "PANDAC.GEFS" 35 | biasCorrection: True 36 | tropprsMethod: thompson 37 | observers: [ 38 | aircraft, 39 | gnssrorefncep, 40 | satwind, 41 | satwnd, 42 | sfc, 43 | sondes, 44 | amsua_aqua, 45 | amsua_metop-a, 46 | amsua_metop-b, 47 | amsua_n15, 48 | amsua_n18, 49 | amsua_n19, 50 | iasi_metop-b, 51 | ] 52 | # check job specification for Derecho 53 | 54 | verifyobs: 55 | script directory: /glade/campaign/mmm/parc/ivette/pandac/graphics 56 | -------------------------------------------------------------------------------- /scenarios/RealTime.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | # test a recent date 3 | first cycle point: 20220316T00 4 | restart cycle point: 20220915T00 5 | final cycle point: 20250916T18 6 | max active cycle points: 1 7 | observations: 8 | resource: NCEPFTPOnline 9 | experiment: 10 | name: 'RealTime' 11 | members: 12 | n: 1 13 | model: 14 | outerMesh: 120km 15 | innerMesh: 120km 16 | ensembleMesh: 120km 17 | GraphInfoDir: /glade/work/duda/static_moved_to_campaign 18 | externalanalyses: 19 | resource: "GFS.NCEPFTP" 20 | variational: 21 | DAType: 3dvar 22 | nInnerIterations: [60,] 23 | biasCorrection: True 24 | -------------------------------------------------------------------------------- /scenarios/VerifyingGFSAnalysesFromRDA.yaml: -------------------------------------------------------------------------------- 1 | suite: ForecastFromExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GFS.RDA" 5 | 6 | experiment: 7 | name: 'VerifyingGFSAnalysesFromRDA' 8 | prefix: '' 9 | 10 | extendedforecast: 11 | meanTimes: T00,T06,T12,T18 12 | lengthHR: 1 13 | outIntervalHR: 1 14 | 15 | # optionally turn on extended forecast verification 16 | post: [] 17 | 18 | hpc: 19 | CriticalQueue: regular 20 | NonCriticalQueue: regular 21 | 22 | members: 23 | n: 1 24 | 25 | model: 26 | outerMesh: 30km 27 | # Need x1.655362.static.nc to include var2d, con, oa{1,2,3,4}, and ol{1,2,3,4} fields 28 | # alternatively could use /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc, 29 | # but no such file exists for 60km mesh. This might skew comparisons to 30km GFS analyses produced 30 | # offline using /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc. The 31 | # ultimate action item then is to look deeper into the x1.*.static.nc file generation process, 32 | # and determine if it is viable to bring into the workflow. Ideally those files should be 33 | # generated using the same MPAS-A code version as is used in the initic and forecast applications. 34 | #GraphInfoDir: /glade/work/duda/static_moved_to_campaign 35 | GraphInfoDir: /glade/campaign/mmm/parc/liuz/pandac_common/mpas_meshes/30km_mesh 36 | 37 | observations: # for optional verification 38 | #resource: GladeRDAOnline 39 | resource: GenerateObs 40 | 41 | workflow: 42 | first cycle point: 20180414T18 43 | final cycle point: 20180524T00 44 | max active cycle points: 20 45 | -------------------------------------------------------------------------------- /scenarios/defaults/forecast.yaml: -------------------------------------------------------------------------------- 1 | forecast: 2 | # resource requirements (used for both Forecast and ExtendedForecast) 3 | job: 4 | defaults: 5 | nodes: 1 6 | PEPerNode: 128 7 | baseSeconds: 60 8 | secondsPerForecastHR: 500 9 | 10 | # cylc retry string 11 | retry: '0*PT30S' 12 | 13 | #{{outerMesh}}: 14 | # baseSeconds: int 15 | # secondsPerForecastHR: int 16 | # nodes: int 17 | # PEPerNode: int 18 | 60-3km: 19 | # faster turnaround 20 | #nodes: 21 | #PEPerNode: 22 | #baseSeconds: 60 23 | #secondsPerForecastHR: 120 24 | # more efficient 25 | nodes: 4 26 | PEPerNode: 128 27 | baseSeconds: 60 28 | secondsPerForecastHR: 340 #240 for calling radiation every 30 minutes 29 | 30km: 30 | # faster turnaround 31 | #nodes: 16 32 | #PEPerNode: 32 33 | #baseSeconds: 60 34 | #secondsPerForecastHR: 120 35 | # more efficient 36 | nodes: 2 37 | PEPerNode: 128 38 | baseSeconds: 60 39 | #secondsPerForecastHR: 120 40 | secondsPerForecastHR: 240 41 | 60km: 42 | # faster turnaround 43 | #nodes: 4 44 | #PEPerNode: 36 45 | #baseSeconds: 60 46 | #secondsPerForecastHR: 40 47 | # more efficient 48 | nodes: 1 49 | PEPerNode: 128 50 | baseSeconds: 60 51 | secondsPerForecastHR: 70 52 | 120km: 53 | nodes: 1 54 | PEPerNode: 128 55 | baseSeconds: 60 56 | secondsPerForecastHR: 30 57 | -------------------------------------------------------------------------------- /scenarios/defaults/hofx.yaml: -------------------------------------------------------------------------------- 1 | hofx: 2 | # resource requirements 3 | job: 4 | defaults: 5 | seconds: 1000 6 | nodes: 2 7 | PEPerNode: 128 8 | memory: 235GB 9 | 10 | # cylc retry string 11 | retry: '0*PT30S' 12 | 13 | #{{outerMesh}}: 14 | # seconds: int 15 | # nodes: int 16 | # PEPerNode: int 17 | # memory: int 18 | 60-3km: 19 | seconds: 600 20 | nodes: 2 21 | PEPerNode: 64 22 | memory: 235GB 23 | 30km: 24 | seconds: 600 25 | nodes: 2 26 | PEPerNode: 128 27 | memory: 235GB 28 | 60km: 29 | seconds: 600 30 | nodes: 1 31 | PEPerNode: 128 32 | memory: 235GB 33 | 120km: 34 | seconds: 600 35 | nodes: 1 36 | PEPerNode: 128 37 | memory: 235GB 38 | -------------------------------------------------------------------------------- /scenarios/defaults/initic.yaml: -------------------------------------------------------------------------------- 1 | initic: 2 | ## mesh-specific settings 3 | # resource requirements 4 | job: 5 | #{{outerMesh}}: 6 | # seconds: int 7 | # nodes: int 8 | # PEPerNode: int 9 | defaults: 10 | seconds: 600 11 | nodes: 1 12 | PEPerNode: 128 13 | 14 | # cylc retry string 15 | retry: '0*PT30S' 16 | 17 | 60-3km: 18 | seconds: 320 19 | nodes: 2 20 | PEPerNode: 128 21 | 30km: 22 | seconds: 320 23 | nodes: 2 24 | PEPerNode: 128 25 | 60km: 26 | seconds: 160 27 | nodes: 1 28 | PEPerNode: 128 29 | 120km: 30 | seconds: 120 31 | nodes: 1 32 | PEPerNode: 128 33 | -------------------------------------------------------------------------------- /scenarios/defaults/invariantstream.yaml: -------------------------------------------------------------------------------- 1 | invariantstream: 2 | resources: 3 | ## defaults: 4 | # default resource values 5 | # can be overridden in either a `common` or `{{mesh}}``-specific block 6 | defaults: 7 | ## directory (required): location of invariant stream file 8 | InvariantDirectory: /glade/campaign/mmm/parc/taosun/pandac/Invariant 9 | 10 | ## filePrefix: prefix of invariant stream file 11 | InvariantFilePrefix: "x{{meshRatio}}.{{nCells}}.invariant" 12 | 13 | ## InitDirectory 14 | InitDirectory: "{{ExternalAnalysesDir}}/{{FirstCycleDate}}" 15 | 16 | ## InitFilePrefix 17 | InitFilePrefix: "x{{meshRatio}}.{{nCells}}.init" 18 | -------------------------------------------------------------------------------- /scenarios/defaults/rtpp.yaml: -------------------------------------------------------------------------------- 1 | rtpp: 2 | # resource requirements 3 | job: 4 | #{{ensembleMesh}}: 5 | # baseSeconds: int 6 | # secondsPerMember: int 7 | # nodes: int 8 | # PEPerNode: int 9 | # memory: int 10 | defaults: 11 | baseSeconds: 30 12 | secondsPerMember: 15 13 | nodes: 1 14 | PEPerNode: 128 15 | memory: 235GB 16 | 17 | # cylc retry string 18 | retry: '2*PT30S' 19 | 20 | ## mesh-specific settings 21 | 60km: 22 | baseSeconds: 30 23 | secondsPerMember: 30 24 | nodes: 1 25 | PEPerNode: 128 26 | memory: 235GB 27 | 120km: 28 | baseSeconds: 30 29 | secondsPerMember: 20 30 | nodes: 1 31 | PEPerNode: 128 32 | memory: 235GB 33 | -------------------------------------------------------------------------------- /scenarios/defaults/saca.yaml: -------------------------------------------------------------------------------- 1 | saca: 2 | # resource requirements 3 | job: 4 | defaults: 5 | seconds: 100 6 | 7 | # cylc retry string 8 | retry: '0*PT30S' 9 | 10 | #{{outerMesh}}: 11 | # seconds: int 12 | # secondsPerMember: int 13 | 60-3km: 14 | seconds: 200 15 | 30km: 16 | seconds: 80 17 | 60km: 18 | seconds: 80 19 | 120km: 20 | seconds: 80 21 | -------------------------------------------------------------------------------- /scenarios/defaults/verifymodel.yaml: -------------------------------------------------------------------------------- 1 | verifymodel: 2 | # resource requirements 3 | job: 4 | defaults: 5 | seconds: 2000 6 | secondsPerMember: 500 7 | 8 | # cylc retry string 9 | retry: '0*PT30S' 10 | 11 | #{{outerMesh}}: 12 | # seconds: int 13 | # secondsPerMember: int 14 | 60-3km: 15 | seconds: 500 16 | 30km: 17 | seconds: 1200 18 | 60km: 19 | seconds: 480 20 | secondsPerMember: 100 21 | 120km: 22 | seconds: 400 23 | secondsPerMember: 80 24 | -------------------------------------------------------------------------------- /scenarios/defaults/verifyobs.yaml: -------------------------------------------------------------------------------- 1 | verifyobs: 2 | # resource requirements 3 | job: 4 | # cylc retry string 5 | retry: '0*PT30S' 6 | 7 | seconds: 1100 8 | secondsPerMember: 120 9 | -------------------------------------------------------------------------------- /scenarios/eda_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | workflow: 2 | first cycle point: 20180414T18 3 | #restart cycle point: 20180418T00 4 | final cycle point: 20180415T06 5 | #final cycle point: 20180514T18 6 | externalanalyses: 7 | resource: "GFS.PANDAC" 8 | firstbackground: 9 | resource: "PANDAC.EnsPertB" 10 | hofx: 11 | maxIODAPoolSize: 3 12 | members: 13 | n: 20 14 | model: 15 | outerMesh: 120km 16 | innerMesh: 120km 17 | ensembleMesh: 120km 18 | observations: 19 | resource: PANDACArchive 20 | rtpp: 21 | relaxationFactor: 0.8 22 | variational: 23 | DAType: 3denvar 24 | SelfExclusion: True 25 | maxIODAPoolSize: 3 26 | -------------------------------------------------------------------------------- /test.csh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | ./Run.py test/testinput/test1.yaml 4 | #./Run.py test/testinput/test2.yaml 5 | 6 | # only need to run these for modifications to scenario, suite, and environment setup 7 | #./Run.py scenarios/GenerateGFSAnalyses.yaml 8 | #./Run.py scenarios/GenerateObs.yaml 9 | -------------------------------------------------------------------------------- /test/testinput/3denvar_OIE120km_IAU_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '3denvar_OIE120km_IAU_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | forecast: 8 | IAU: True 9 | post: [verifyobs, verifymodel] 10 | hpc: 11 | CriticalQueue: economy 12 | NonCriticalQueue: economy 13 | members: 14 | n: 1 15 | model: 16 | outerMesh: 120km 17 | innerMesh: 120km 18 | ensembleMesh: 120km 19 | observations: 20 | resource: PANDACArchive 21 | variational: 22 | DAType: 3denvar 23 | nInnerIterations: [15,] 24 | ensemble: 25 | forecasts: 26 | resource: "PANDAC.GEFS" 27 | post: [verifyobs] 28 | workflow: 29 | first cycle point: 20180414T18 30 | final cycle point: 20180415T06 31 | -------------------------------------------------------------------------------- /test/testinput/3dvar_O30kmIE60km_ColdStart.yaml: -------------------------------------------------------------------------------- 1 | externalanalyses: 2 | resource: "GFS.RDA" 3 | experiment: 4 | name: '3dvar_O30kmIE60km_ColdStart_TEST' 5 | forecast: 6 | post: [verifyobs, verifymodel] 7 | hpc: 8 | CriticalQueue: economy 9 | NonCriticalQueue: economy 10 | members: 11 | n: 1 12 | model: 13 | outerMesh: 30km 14 | innerMesh: 60km 15 | ensembleMesh: 60km 16 | # Need x1.655362.static.nc to include var2d, con, oa{1,2,3,4}, and ol{1,2,3,4} fields 17 | # alternatively could use /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc, 18 | # but no such file exists for 60km mesh. This might skew comparisons to 30km GFS analyses produced 19 | # offline using /glade/work/liuz/pandac/prepare_mpas/mpas_static_30km/x1.655362.static.nc. The 20 | # ultimate action item then is to look deeper into the x1.*.static.nc file generation process, 21 | # and determine if it is viable to bring into the workflow. Ideally those files should be 22 | # generated using the same MPAS-A code version as is used in the initic and forecast applications. 23 | GraphInfoDir: /glade/work/duda/static_moved_to_campaign 24 | observations: 25 | resource: GladeRDAOnline 26 | variational: 27 | DAType: 3dvar 28 | nInnerIterations: [30,] 29 | biasCorrection: True 30 | post: [verifyobs] 31 | workflow: 32 | # test a recent date 33 | first cycle point: 20220201T00 34 | final cycle point: 20220201T06 35 | -------------------------------------------------------------------------------- /test/testinput/3dvar_OIE120km_ColdStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '3dvar_OIE120km_ColdStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.RDA" 5 | forecast: 6 | post: [] 7 | hpc: 8 | CriticalQueue: economy 9 | NonCriticalQueue: economy 10 | members: 11 | n: 1 12 | model: 13 | outerMesh: 120km 14 | innerMesh: 120km 15 | ensembleMesh: 120km 16 | observations: 17 | resource: GladeRDAOnline 18 | variational: 19 | DAType: 3dvar 20 | nInnerIterations: [15,] 21 | biasCorrection: True 22 | post: [] 23 | workflow: 24 | # test a recent date 25 | first cycle point: 20220201T00 26 | final cycle point: 20220201T12 27 | -------------------------------------------------------------------------------- /test/testinput/3dvar_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '3dvar_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | forecast: 8 | # turn off post to reduce overhead 9 | post: [] 10 | job: 11 | # to run forecast on gpu's, set GPUPerNode to 4 and 12 | # uncomment forecast directory below 13 | GPUPerNode: 0 14 | hpc: 15 | CriticalQueue: economy 16 | NonCriticalQueue: economy 17 | members: 18 | n: 1 19 | model: 20 | outerMesh: 120km 21 | innerMesh: 120km 22 | ensembleMesh: 120km 23 | observations: 24 | resource: PANDACArchive 25 | variational: 26 | DAType: 3dvar 27 | nInnerIterations: [15,] 28 | # turn off post to reduce overhead 29 | post: [] 30 | workflow: 31 | first cycle point: 20180414T18 32 | final cycle point: 20180415T06 33 | build: 34 | #forecast directory: /glade/derecho/scratch/jwittig/repos-s/mpas-bundle-io/build-nvhpc 35 | -------------------------------------------------------------------------------- /test/testinput/3dvar_OIE120km_WarmStart_PostProcess.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '3dvar_OIE120km_WarmStart_TEST' 3 | suite identifier: PostProcess 4 | extendedforecast: 5 | meanTimes: T00 6 | lengthHR: 24 7 | outIntervalHR: 12 8 | execute: True 9 | post: [verifyobs, verifymodel] 10 | externalanalyses: 11 | resource: "GFS.PANDAC" 12 | firstbackground: 13 | resource: "PANDAC.GFS" 14 | forecast: 15 | execute: False 16 | post: [verifyobs, verifymodel] 17 | hpc: 18 | CriticalQueue: economy 19 | NonCriticalQueue: economy 20 | members: 21 | n: 1 22 | model: 23 | outerMesh: 120km 24 | innerMesh: 120km 25 | ensembleMesh: 120km 26 | observations: 27 | resource: PANDACArchive 28 | variational: 29 | DAType: 3dvar 30 | nInnerIterations: [15,] 31 | execute: False 32 | post: [verifyobs] 33 | workflow: 34 | first cycle point: 20180415T00 35 | final cycle point: 20180415T06 36 | -------------------------------------------------------------------------------- /test/testinput/4denvar_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4denvar_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | forecast: 8 | FourD: True 9 | post: [verifyobs, verifymodel] 10 | hpc: 11 | CriticalQueue: economy 12 | NonCriticalQueue: economy 13 | members: 14 | n: 1 15 | model: 16 | outerMesh: 120km 17 | innerMesh: 120km 18 | ensembleMesh: 120km 19 | observations: 20 | resource: PANDACArchive 21 | variational: 22 | DAType: 4denvar 23 | nInnerIterations: [15,] 24 | ensemble: 25 | forecasts: 26 | resource: "PANDAC.GEFS" 27 | post: [verifyobs] 28 | workflow: 29 | first cycle point: 20180414T18 30 | final cycle point: 20180415T06 31 | -------------------------------------------------------------------------------- /test/testinput/4dhybrid_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: '4dhybrid_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.GFS" 7 | forecast: 8 | FourD: True 9 | post: [verifyobs, verifymodel] 10 | hpc: 11 | CriticalQueue: economy 12 | NonCriticalQueue: economy 13 | members: 14 | n: 1 15 | model: 16 | outerMesh: 120km 17 | innerMesh: 120km 18 | ensembleMesh: 120km 19 | observations: 20 | resource: PANDACArchive 21 | variational: 22 | DAType: 4dhybrid 23 | ensembleCovarianceWeight: 0.5 24 | staticCovarianceWeight: 0.5 25 | nInnerIterations: [15,] 26 | ensemble: 27 | forecasts: 28 | resource: "PANDAC.GEFS" 29 | post: [verifyobs] 30 | workflow: 31 | first cycle point: 20180414T18 32 | final cycle point: 20180415T06 33 | -------------------------------------------------------------------------------- /test/testinput/ForecastFromGFSAnalysesMPT.yaml: -------------------------------------------------------------------------------- 1 | suite: ForecastFromExternalAnalyses 2 | 3 | externalanalyses: 4 | resource: "GFS.RDA" 5 | 6 | #build: 7 | # forecast directory: path-for-mpas-model-build 8 | 9 | experiment: 10 | name: 'ForecastFromGFSAnalysesMPT_TEST' 11 | 12 | extendedforecast: 13 | meanTimes: T00 14 | lengthHR: 12 15 | outIntervalHR: 6 16 | #execute: False # uncomment if forecasts are already completed 17 | 18 | # optionally turn on extended forecast post 19 | post: [] 20 | 21 | hpc: 22 | CriticalQueue: economy 23 | NonCriticalQueue: economy 24 | 25 | members: 26 | n: 1 27 | 28 | model: 29 | outerMesh: 30km 30 | GraphInfoDir: /glade/campaign/mmm/parc/liuz/pandac_common/mpas_meshes/30km_mesh 31 | 32 | observations: # for optional verification 33 | resource: PANDACArchive 34 | 35 | workflow: 36 | first cycle point: 20220606T00 37 | final cycle point: 20220607T00 38 | max active cycle points: 4 39 | -------------------------------------------------------------------------------- /test/testinput/eda_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: 'eda_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | firstbackground: 6 | resource: "PANDAC.EnsPertB" 7 | forecast: 8 | post: [verifyobs, verifymodel] 9 | hofx: 10 | retainObsFeedback: False 11 | hpc: 12 | CriticalQueue: economy 13 | NonCriticalQueue: economy 14 | members: 15 | n: 5 16 | model: 17 | outerMesh: 120km 18 | innerMesh: 120km 19 | ensembleMesh: 120km 20 | observations: 21 | resource: PANDACArchive 22 | rtpp: 23 | relaxationFactor: 0.8 24 | variational: 25 | DAType: 3denvar 26 | nInnerIterations: [15,] 27 | SelfExclusion: True 28 | retainObsFeedback: False 29 | post: [] 30 | workflow: 31 | first cycle point: 20180414T18 32 | final cycle point: 20180415T06 33 | -------------------------------------------------------------------------------- /test/testinput/getkf_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: 'getkf_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | enkf: 6 | solver: GETKF 7 | horizontal localization lengthscale: 1.2e6 8 | vertical localization lengthscale: 10.0 # modellevel 9 | retainObsFeedback: False 10 | post: [] 11 | firstbackground: 12 | resource: "PANDAC.EnsPertB" 13 | forecast: 14 | post: [verifyobs, verifymodel] 15 | hofx: 16 | retainObsFeedback: False 17 | hpc: 18 | CriticalQueue: economy 19 | NonCriticalQueue: economy 20 | members: 21 | n: 5 22 | model: 23 | outerMesh: 120km 24 | # TODO: make inner and ensemble meshes unnecessary 25 | # related to {{PrepareExternalAnalysisInner}} and {{PrepareExternalAnalysisEnsemble}} 26 | innerMesh: 120km 27 | ensembleMesh: 120km 28 | observations: 29 | resource: PANDACArchive 30 | rtpp: 31 | relaxationFactor: 0.8 32 | workflow: 33 | first cycle point: 20180414T18 34 | final cycle point: 20180415T00 35 | -------------------------------------------------------------------------------- /test/testinput/letkf_OIE120km_WarmStart.yaml: -------------------------------------------------------------------------------- 1 | experiment: 2 | name: 'letkf_OIE120km_WarmStart_TEST' 3 | externalanalyses: 4 | resource: "GFS.PANDAC" 5 | enkf: 6 | solver: LETKF 7 | horizontal localization lengthscale: 1.2e6 8 | vertical localization lengthscale: 6.e3 9 | retainObsFeedback: False 10 | post: [] 11 | firstbackground: 12 | resource: "PANDAC.EnsPertB" 13 | forecast: 14 | post: [verifyobs, verifymodel] 15 | hofx: 16 | retainObsFeedback: False 17 | hpc: 18 | CriticalQueue: economy 19 | NonCriticalQueue: economy 20 | members: 21 | n: 5 22 | model: 23 | outerMesh: 120km 24 | # TODO: make inner and ensemble meshes unnecessary 25 | # related to {{PrepareExternalAnalysisInner}} and {{PrepareExternalAnalysisEnsemble}} 26 | innerMesh: 120km 27 | ensembleMesh: 120km 28 | observations: 29 | resource: PANDACArchive 30 | rtpp: 31 | relaxationFactor: 0.8 32 | workflow: 33 | first cycle point: 20180414T18 34 | final cycle point: 20180415T00 35 | -------------------------------------------------------------------------------- /test/testinput/test1.yaml: -------------------------------------------------------------------------------- 1 | # test scenarios, ordered from most simple to most complex 2 | # If multiple test scenarios fail, it is advisable to progress by debugging and re-testing with only 3 | # the most simple of the failing scenarios until it passes in order to reduce computational overhead. 4 | # Then proceed with the remaining failing scenarios until all complete. 5 | scenarios: [ 6 | test/testinput/3dvar_OIE120km_WarmStart.yaml, 7 | # the IAU test is failing with MPAS-Model using the SMIOL I/O layer 8 | #test/testinput/3denvar_OIE120km_IAU_WarmStart.yaml, 9 | test/testinput/3dvar_OIE120km_ColdStart.yaml, 10 | test/testinput/3dvar_O30kmIE60km_ColdStart.yaml, 11 | test/testinput/3denvar_O30kmIE60km_WarmStart.yaml, 12 | test/testinput/4denvar_OIE120km_WarmStart.yaml, 13 | test/testinput/4dhybrid_OIE120km_WarmStart.yaml, 14 | test/testinput/eda_OIE120km_WarmStart.yaml, 15 | test/testinput/getkf_OIE120km_WarmStart.yaml, 16 | test/testinput/ForecastFromGFSAnalysesMPT.yaml, 17 | ] 18 | -------------------------------------------------------------------------------- /test/testinput/test2.yaml: -------------------------------------------------------------------------------- 1 | # designed to run after test1.yaml scenarios complete 2 | scenarios: [ 3 | test/testinput/3dvar_OIE120km_WarmStart_PostProcess.yaml, 4 | ] 5 | -------------------------------------------------------------------------------- /tools/TimeFmtChange.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Change time format from YYYYMMDDHH to YYYY-mm-dd_HH (by default) 3 | # or from YYYY-MM-DD_HH:00:00 to YYYYMMDD (with 1 as the second argument) 4 | 5 | import datetime as dt 6 | import argparse 7 | 8 | def TimeFmtChange(): 9 | 10 | # Parse command line 11 | ap = argparse.ArgumentParser() 12 | ap.add_argument('date', type=str, 13 | help='Date in YYYYMMDDHH format') 14 | ap.add_argument('fmt', default=0, type=int, nargs = '?') 15 | # 0:YYYYMMDDHH => YYYY-mm-dd_HH, 1:YYYY-MM-DD_HH:00:00 => YYYYMMDD 16 | 17 | args = ap.parse_args() 18 | if args.fmt == 0: 19 | fmt_in = "%Y%m%d%H" 20 | fmt_out = "%Y-%m-%d_%H" #:00:00" 21 | if args.fmt == 1: 22 | fmt_in = "%Y-%m-%d_%H:00:00" 23 | fmt_out = "%Y%m%d%H" 24 | date = dt.datetime.strptime(args.date,fmt_in) 25 | print(date.strftime(fmt_out)) 26 | 27 | if __name__ == '__main__': TimeFmtChange() 28 | -------------------------------------------------------------------------------- /tools/advanceCYMDH.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import datetime as dt 4 | import argparse 5 | 6 | def advanceCYMDH(): 7 | # Parse command line 8 | ap = argparse.ArgumentParser() 9 | ap.add_argument('date', type=str, 10 | help='Date in YYYYMMDDHH format') 11 | ap.add_argument('step', default=0, type=int, nargs = '?', 12 | help='time step in hours') 13 | 14 | fmt = "%Y%m%d%H" 15 | args = ap.parse_args() 16 | date = dt.datetime.strptime(args.date,fmt) 17 | step = dt.timedelta(hours=args.step) 18 | print((date+step).strftime(fmt)) 19 | 20 | if __name__ == '__main__': advanceCYMDH() 21 | -------------------------------------------------------------------------------- /tools/checkMissingChannels.py: -------------------------------------------------------------------------------- 1 | import os, sys 2 | import h5py as h5 3 | 4 | def main(obsFile): 5 | nc = h5.File(obsFile, 'r') 6 | nchans = nc['nchans'][:].tolist() 7 | if -999 in nchans: 8 | print('True') 9 | 10 | if __name__ == '__main__': 11 | obsFile = str(sys.argv[1]) 12 | main(obsFile) 13 | -------------------------------------------------------------------------------- /tools/dateFormats.py: -------------------------------------------------------------------------------- 1 | abbrevISO8601Fmt = "%Y%m%dT%H" 2 | cycleFmt = "%Y%m%d%H" 3 | MPASFileFmt = "%Y-%m-%d_%H.00.00" 4 | -------------------------------------------------------------------------------- /tools/dateList.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from datetime import datetime, timedelta 4 | import sys 5 | 6 | def main(dateIni, dateEnd, delta): 7 | datei = datetime.strptime(str(dateIni), "%Y%m%d%H") 8 | datef = datetime.strptime(str(dateEnd), "%Y%m%d%H") 9 | date = datef 10 | 11 | while (date != datei): 12 | datestr = date.strftime("%Y%m%d%H") 13 | print(datestr) 14 | date = date - timedelta(hours=int(delta)) 15 | 16 | if __name__ == '__main__': 17 | dateIni = str(sys.argv[1]) 18 | dateEnd = str(sys.argv[2]) 19 | delta = str(sys.argv[3]) 20 | main(dateIni, dateEnd, delta) 21 | -------------------------------------------------------------------------------- /tools/getYAMLNode.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | from copy import deepcopy 5 | import yaml 6 | 7 | def getYAMLNode(): 8 | # Parse command line 9 | ap = argparse.ArgumentParser() 10 | ap.add_argument('default', type=str, 11 | help='yaml file that holds default value') 12 | ap.add_argument('file', type=str, 13 | help='yaml file to parse') 14 | ap.add_argument('key', type=str, 15 | help='configuration address') 16 | 17 | ap.add_argument('-o','--outputType', type=str, default='v', 18 | choices=['k', 'v', 'key', 'value'], 19 | help='type of output, key or value') 20 | 21 | args = ap.parse_args() 22 | 23 | key = args.key.split('.') 24 | 25 | try: 26 | with open(args.file) as file: 27 | config = yaml.load(file, Loader=yaml.FullLoader) 28 | a = deepcopy(config) 29 | for level in key: 30 | a = deepcopy(a[level]) 31 | k = level 32 | except: 33 | try: 34 | with open(args.default) as file: 35 | config = yaml.load(file, Loader=yaml.FullLoader) 36 | a = deepcopy(config) 37 | for level in key: 38 | a = deepcopy(a[level]) 39 | k = level 40 | except: 41 | a = None 42 | k = None 43 | 44 | if args.outputType in ['v', 'value']: 45 | v = str(a) 46 | if isinstance(a, list): 47 | v = v.replace('\'','') 48 | v = v.replace('[','') 49 | v = v.replace(']','') 50 | v = v.replace(',',' ') 51 | v = ' '+v+' ' 52 | print(v) 53 | elif args.outputType in ['k', 'key']: 54 | print(str(k)) 55 | 56 | if __name__ == '__main__': getYAMLNode() 57 | -------------------------------------------------------------------------------- /tools/memberDir.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | 5 | def memberStr(): 6 | # Parse command line 7 | ap = argparse.ArgumentParser() 8 | ap.add_argument('nMembers', type=int, 9 | help='Total number of members; the member format is used when nMembers>1; otherwise an empty string is returned') 10 | ap.add_argument('member', type=int, 11 | help='Member count') 12 | 13 | ## directory string formatter for ensemble members 14 | ap.add_argument('fmt', default='/mem{:03d}', type=str, nargs = '?', 15 | help='Member string format') 16 | 17 | ap.add_argument('-m', '--maxMembers', default=-1, type=int, 18 | help='Maximum number of members') 19 | 20 | args = ap.parse_args() 21 | out = '' 22 | if args.nMembers > 1: 23 | member = args.member 24 | if args.maxMembers > 0: 25 | member = (member-1)%(args.maxMembers)+1 26 | out += str(args.fmt).format(member) 27 | 28 | print(out) 29 | 30 | if __name__ == '__main__': memberStr() 31 | -------------------------------------------------------------------------------- /tools/nSpaces.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | 5 | def memberStr(): 6 | # Parse command line 7 | ap = argparse.ArgumentParser() 8 | ap.add_argument('n', type=int, 9 | help='Number of spaces') 10 | 11 | args = ap.parse_args() 12 | print(''.join([' ']*args.n)) 13 | 14 | if __name__ == '__main__': memberStr() 15 | -------------------------------------------------------------------------------- /tools/prevMeanTimes.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime, timedelta 2 | import sys 3 | 4 | def getFCMeanTimes(meantimes,delta): 5 | if meantimes == None: 6 | datestr = None 7 | else: 8 | times = meantimes.split('T')[1] 9 | dtimes = datetime.strptime(str(times), "%H") 10 | datep = dtimes - timedelta(hours=int(delta)) 11 | datestr = 'T'+datep.strftime("%H") 12 | return datestr 13 | -------------------------------------------------------------------------------- /tools/updateXTIME.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | from copy import deepcopy 3 | import datetime as dt 4 | import netCDF4 as nc 5 | import os 6 | 7 | def updateXTIME(): 8 | 9 | # Parse command line 10 | ap = argparse.ArgumentParser() 11 | ap.add_argument('filename', type=str, 12 | help='netcdf file to modify') 13 | ap.add_argument('date', type=str, 14 | help='Date in YYYYMMDDHH format') 15 | args = ap.parse_args() 16 | 17 | assert os.path.exists(args.filename), 'filename must exist!' 18 | ncfile = nc.Dataset(args.filename, 'a') 19 | 20 | # copy global attributes all at once via dictionary 21 | atts = deepcopy(ncfile.__dict__) 22 | 23 | d = dt.datetime.strptime(args.date, '%Y%m%d%H') 24 | confdate = d.strftime('%Y-%m-%d_%H:%M:%S') 25 | atts['config_start_time'] = confdate 26 | atts['config_stop_time'] = confdate 27 | ncfile.setncatts(atts) 28 | 29 | varname = 'xtime' 30 | xtime_ = ncfile[varname][0][:] 31 | xtime = nc.stringtoarr(confdate, len(ncfile[varname][0][:])) 32 | ncfile[varname][0] = xtime 33 | 34 | ncfile.close() 35 | 36 | if __name__ == '__main__': updateXTIME() 37 | -------------------------------------------------------------------------------- /tools/update_sensorScanPosition.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import netCDF4 3 | import os 4 | import shutil 5 | from fix_float2int import main as float2int 6 | 7 | #This script is contributed by Fabio Diniz at JCSDA. 8 | fname = os.getenv('fname', 'please set obsName') 9 | 10 | with netCDF4.Dataset(fname) as ds: 11 | if ds['/MetaData/sensorScanPosition'].dtype != 'int32': 12 | print('found file ..dtype not int32', fname ) 13 | found = True 14 | else: 15 | print('already updated',fname) 16 | found = False 17 | if found: 18 | fname_modified = f'{fname}.modified' 19 | if os.path.exists(fname_modified): 20 | print('fname_modified exist=',fname_modified) 21 | os.remove(fname_modified) 22 | shutil.copyfile(fname, fname_modified) 23 | 24 | float2int(fname_modified, '/MetaData/sensorScanPosition') 25 | os.remove(fname) #remove the file with float sensorScanPosition 26 | --------------------------------------------------------------------------------