From 234857a72e4d2f5ae860858e9f85e8bfdf3fb73f Mon Sep 17 00:00:00 2001 From: Kate Friedman Date: Wed, 28 Aug 2024 10:26:22 -0400 Subject: [PATCH] Update GFSv17 branch to v1.1.0 (#34) Merge in v1.1.0 updates, as well as spack-stack updates for R&Ds Refs #33 --- .gitignore | 1 + CMakeLists.txt | 2 +- VERSION | 1 - README.md => docs/README.md | 6 +- docs/Release_Notes.txt | 392 ++++++++++++++ fix/prepobs_landc | Bin 0 -> 285020 bytes fix/prepobs_prep.bufrtable | 4 + fix/syndat_syndata.slmask.t126.gaussian | Bin 0 -> 291848 bytes modulefiles/prepobs_common.lua | 18 +- modulefiles/prepobs_hera.lua | 2 +- modulefiles/prepobs_hercules.lua | 2 +- modulefiles/prepobs_jet.lua | 2 +- modulefiles/prepobs_orion.lua | 2 +- modulefiles/prepobs_wcoss2.lua | 26 +- scripts/exprep_post.sh | 369 +++++++++++-- sorc/prepobs_cqcbufr.fd/cqcbufr.f | 128 +++-- sorc/prepobs_cqcbufr.fd/radcor.f | 2 +- sorc/prepobs_glerladj.fd/glerlmain.f90 | 3 +- sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 | 30 +- sorc/prepobs_oiqcbufr.fd/oiqcbufr.f | 1 + sorc/prepobs_prepdata.fd/iw3unpbf.f | 501 ++++++++++++++--- sorc/prepobs_prepdata.fd/prepdata.f | 627 ++++++++++++++++------ sorc/syndat_syndata.fd/syndata.f | 7 + sorc/timetwin.fd/timetwin.f | 59 +- build.sh => ush/build.sh | 2 +- ush/prepobs_makeprepbufr.sh | 101 ++-- versions/README | 2 - versions/VERSION | 1 + versions/build.hera.ver | 3 +- versions/build.hercules.ver | 3 +- versions/build.jet.ver | 3 +- versions/build.orion.ver | 3 +- versions/build.wcoss2.ver | 2 +- versions/run.hera.ver | 4 +- versions/run.hercules.ver | 4 +- versions/run.jet.ver | 4 +- versions/run.orion.ver | 4 +- versions/run.spack.ver | 20 - versions/run.wcoss2.ver | 2 +- versions/{build.spack.ver => spack.ver} | 2 + 40 files changed, 1901 insertions(+), 444 deletions(-) delete mode 100644 VERSION rename README.md => docs/README.md (86%) create mode 100644 docs/Release_Notes.txt create mode 100644 fix/prepobs_landc create mode 100644 fix/syndat_syndata.slmask.t126.gaussian rename build.sh => ush/build.sh (93%) delete mode 100644 versions/README create mode 100644 versions/VERSION delete mode 100644 versions/run.spack.ver rename versions/{build.spack.ver => spack.ver} (87%) diff --git a/.gitignore b/.gitignore index c998720..f2b197d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ build*/ exec*/ install*/ +modulefiles/prepobs *log* versions/build.ver versions/run.ver diff --git a/CMakeLists.txt b/CMakeLists.txt index 5dac465..990a4f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.18) # Get the version from the VERSION file. -file(STRINGS "VERSION" pVersion) +file(STRINGS "versions/VERSION" pVersion) project( obsproc diff --git a/VERSION b/VERSION deleted file mode 100644 index 6d7de6e..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.0.2 diff --git a/README.md b/docs/README.md similarity index 86% rename from README.md rename to docs/README.md index de132a4..cfee4d8 100644 --- a/README.md +++ b/docs/README.md @@ -11,7 +11,7 @@ git clone https://github.com/noaa-emc/prepobs Move into desired branch and then run: ```bash -INSTALL_PREFIX=/path/you/wish/to/install/prepobs ./build.sh +INSTALL_PREFIX=/path/you/wish/to/install/prepobs ./ush/build.sh ``` build.sh default to building for WCOSS2, but it also supports Hera, Jet, and Orion by setting `INSTALL_TARGET=hera/jet/orion/wcoss2` @@ -19,11 +19,11 @@ build.sh default to building for WCOSS2, but it also supports Hera, Jet, and Ori or install in local clone space: ```bash -./build.sh +./ush/build.sh ``` There is also the option to build and install in your local clone space but install the modulefile elsewhere: ```bash -MODULEFILE_INSTALL_PREFIX=/path/you/wish/to/install/prepobs/module ./build.sh +MODULEFILE_INSTALL_PREFIX=/path/you/wish/to/install/prepobs/module ./ush/build.sh ``` Installation is complete. diff --git a/docs/Release_Notes.txt b/docs/Release_Notes.txt new file mode 100644 index 0000000..efb5131 --- /dev/null +++ b/docs/Release_Notes.txt @@ -0,0 +1,392 @@ +prepobs v1.1.0 RELEASED AUG ??, 2023 + v1.1.? IMPLEMENTED ??? ??, 2023 + +PRELUDE + + This update supports obsproc.v1.2.0 and bufr-dump.v1.2.0 releases. + obsproc.v1.2.0 and bufr-dump.v1.2.0 introduce two new dump files: + *satwhr* - satellite AMVs tailored for hurricates, developed at UW/CIMSS, use tank b005/xx099 + - CONUS domain AMVs at time resolution of 15-20 minutes, NESDIS prouct, use tanks b005/xx052..xx056 + *uprair* - BUFR formated high-res rawinsondes(radiosondes),part of worldwide TAC2BUFR migration, use tanks b002/xx101..xx105 + - *uprair* data is added to prepbufr files,to the prepbufr's ADPUPA component + prepobs.v1.1.0 adds *uprair* to prepbufr's ADPUPA component + + The prepobs post step adds the capability to unrestrict aircraft data (on demand, by default PROCESS_REMOREST_dm2=NO) + +FILE CHANGES + + M CMakeLists.txt + D README.md + D VERSION + D build.sh + A docs + A docs/README.md + A docs/Release_Notes.txt + A fix/prepobs_landc + M fix/prepobs_prep.bufrtable + A fix/syndat_syndata.slmask.t126.gaussian + A modulefiles/prepobs_jet.lua + M scripts/exprep_post.sh + M sorc/prepobs_cqcbufr.fd/CMakeLists.txt + M sorc/prepobs_mpcopybufr.fd/CMakeLists.txt + M sorc/prepobs_prepdata.fd/CMakeLists.txt + M sorc/syndat_syndata.fd/CMakeLists.txt + M sorc/prepobs_cqcbufr.fd/cqcbufr.f + M sorc/prepobs_cqcbufr.fd/radcor.f + M sorc/prepobs_mpcopybufr.fd/CMakeLists.txt + M sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 + M sorc/prepobs_oiqcbufr.fd/oiqcbufr.f + M sorc/prepobs_prepdata.fd/CMakeLists.txt + M sorc/prepobs_prepdata.fd/iw3unpbf.f + M sorc/prepobs_prepdata.fd/prepdata.f + M sorc/syndat_syndata.fd/CMakeLists.txt + M sorc/syndat_syndata.fd/syndata.f + A ush/build.sh + M ush/gdas_counts.sh + M ush/gdas_summary.sh + M ush/prepobs_makeprepbufr.sh + D versions/README + A versions/VERSION + (M-modified; A-added; D-deleted) + + NOTE: + fix/prepobs_landc and + fix/syndat_syndata.slmask.t126.gaussian + were not released from EMC to NCO during the transition to WCOSS2. However they appear in $PACKAGEROOT + Thus, for consistency, they were added to this release + +ROOT LEVEL CHANGES + + CMakeLists.txt + Reflect moving file VERSION from root level to directory /versions + + README.md + Moved to directory /docs + +VERSION + Moved to to directory /versions + + build.sh + Reflect changes to support functionality on Jet + +DOCS CHANGES + + docs + Introduce directory for all documents + + docs/README.md + Move REDME.md from root level to /docs + + docs/Release_Notes.txt + Updated for this release. + +FIX CHANGES + + fix/prepobs_landc + fix/syndat_syndata.slmask.t126.gaussian + These files were not released from EMC to NCO during the transition to WCOSS2. However they appear in $PACKAGEROOT + Thus, for consistency, they were added to this release + + fix/prepobs_prep.bufrtable + Introduce UPRAIR (from *uprair* dumps) to prepbufr's bufrtable + +MODULEFILES + + modulefiles/bufrdump_jet.lua + Support obsproc functionality to jet + +SCRIPTS CHANGES + + scripts/exprep_post.sh + Add functionality to unrestrict aircraft data, this feature is meant to be used in development environments + +SOURCE CHANGES + + sorc/prepobs_cqcbufr.fd/CMakeLists.txt + Replace obsolete bufr_4_DA library with bufr_4 which uses Dynamic Allocation by default (in bufr/v11.6 and later) + + sorc/prepobs_cqcbufr.fd/cqcbufr.f + Increase array sizes to accomodate upper air data (MXMSGL,MAXSS,MAXOUT,NST,MAXOBS) + + sorc/prepobs_cqcbufr.fd/radcor.f + Increase NST to match sorc/prepobs_cqcbufr.fd/cqcbufr.f + + sorc/prepobs_mpcopybufr.fd/CMakeLists.txt + Replace obsolete bufr_4_DA library with bufr_4 which uses Dynamic Allocation by default (in bufr/v11.6 and later) + + sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 + Increase array sizes to accomodate upper air data (MXMSGL,MAXSS) + Introduce functionality for adding upper air data (*uprair*) to prepbufr's ADPUPA + + sorc/prepobs_oiqcbufr.fd/oiqcbufr.f + Increase MAXOUT + + sorc/prepobs_prepdata.fd/CMakeLists.txt + Replace obsolete bufr_4_DA library with bufr_4 which uses Dynamic Allocation by default (in bufr/v11.6 and later) + + sorc/prepobs_prepdata.fd/iw3unpbf.f + Introduce functionality for adding upper air data (*uprair*) to prepbufr's ADPUPA + Introduce functionality to use GNSS-measured drift info from *uprair* dumps and add to prepbufr file + + sorc/prepobs_prepdata.fd/prepdata.f + Introduce functionality for adding upper air data (*uprair*) to prepbufr's ADPUPA + Introduce functionality to use GNSS-measured drift info from *uprair* dumps and add to prepbufr file + + sorc/syndat_syndata.fd/CMakeLists.txt + Replace obsolete bufr_4_DA library with bufr_4 which uses Dynamic Allocation by default (in bufr/v11.6 and later) + + sorc/syndat_syndata.fd/syndata.f + Increase MXMSGL, MAXSS, MAXOUT to accomodate the additional BUFR formated upper air data + +USH CHANGES + + ush/build.sh + Move from root level to ush, to accomodate coding standards + + ush/gdas_counts.sh + Minor INFILE path correction for consistent path structue + + ush/gdas_summary.sh + Minor correction for consistency with NCO + + ush/prepobs_makeprepbufr.sh + Introduce functionality to add upper air dump data (*uprair*) to prepbufr's ADPUPA + +VERSIONS CHANGES + + versions/README + Delete/clean up old notes + + versions/VERSION + Update to this release's versione + + versions/build.ver + Start using bufr v11.7 to match the calls to bufr_4 libraries (instead of bufr_4_DA which required v11.5) + +CHANGES TO OUTPUT AND FILE SIZES + + obsproc.v1.2.0 generates new dumps: *satwhr*, *uprair* + prepobs.v1.1.0 incorporates *uprair* into prepbufr's ADPUPA + (this release must be synced with obsproc.v1.2.0 and bufr-dump.v1.2.0) + + The updated *prepbur* files are up to ~20% larger in size + For examples, see: /lfs/h2/emc/stmp/iliana.genkova/CRON/R12/com + +PRE-IMPLEMENTATION TESTING REQUIREMENTS + + obsproc needs modules bufr-dump and prepobs in order to run + See docs/README.md for build instructions + See versions/build.ver and versions/run.ver for libaries + + Run jobs/JOBSPROC_networkname_DUMP, jobs/JOBSPROC_networkname_DUMP_POST + jobs/JOBSPROC_networkname_PREP1, jobs/JOBSPROC_networkname_PREP1_POST + jobs/JOBSPROC_networkname_PREP2, jobs/JOBSPROC_networkname_PREP2_POST + for the following networkname values: GLOBAL, RAP + *uprair* is only added to GLOBAL and RAP's prepbufr files + +DISSEMINATION INFORMATION + + No changes to dissemination on WCOSS2 + For NOMAD proposed changes, a SCN will be issued/submitted to Data Flow + +SPECIAL INSTRUCTIONS + + 1.Implement release/obsproc.v1.2.0, release/bufr-dump.v1.2.0, and release/prepobs.v1.1.0 at the same time + + 2.Implement release/obsproc.v1.2.0, release/bufr-dump.v1.2.0, and release/prepobs.v1.1.0 after confirming GFS global-workflow is ready for the new versions (first 2 digits) + + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +prepobs v1.0.0 RELEASED MAR 01, 2022 + v1.0.1 IMPLEMENTED JUN 28, 2022 + +Transition from WCOSS Cray and Phase3 to WCOSS2 +=============================================== +Usage + module use /apps/ops/test/nco/modulefiles/compiler/intel/19.1.3.304 + module load prepobs/1.0.1 + +Where is the release tag on subversion/git/vlab? + git clone https://github.com/NOAA-EMC/prepobs + git checkout release/prepobs.v1.0.0 + +List of external software used (anything outside of your vertical structure), including compilers and version numbers for everything + Software used must be a minimal list of modules/versions specified per job + bacio_ver=2.4.1 + w3emc_ver=2.9.1 + bufr_ver=11.5.0 + +List of all code/scripts modified with this release +--------------------------------------------------- +A CMakeLists.txt +A README.md +A VERSION +A build.sh +A cmake/FindMKL.cmake +A cmake/FindNetCDF.cmake +A fix/CMakeLists.txt + fix/gdascounts_avg.awk + fix/gdascounts_base.shtml + fix/gdascounts_html + fix/gdascounts_types + fix/glerldict.lmd + fix/prepobs_cqc_statbge + fix/prepobs_errtable.cdas + fix/prepobs_errtable.nam + fix/prepobs_oiqc.oberrs + fix/prepobs_oiqc.oberrs.cdas + fix/prepobs_prep.bufrtable + fix/satellite_counts.tbl + fix/syndat_weight +A modulefiles/CMakeLists.txt +A modulefiles/prepobs.lua.tmpl +A modulefiles/prepobs_common.lua +A modulefiles/prepobs_hera.lua +A modulefiles/prepobs_orion.lua +A modulefiles/prepobs_wcoss2.lua +A scripts/CMakeLists.txt +M scripts/exprep_post.sh +A sorc/CMakeLists.txt +A sorc/gblevents.fd/CMakeLists.txt + sorc/gblevents.fd/gblevents.f +A sorc/gdascounts_ave.fd/CMakeLists.txt + sorc/gdascounts_ave.fd/build_new.f +A sorc/global_postevents.fd/CMakeLists.txt + sorc/global_postevents.fd/postevents.f +A sorc/prepobs_cqcbufr.fd/CMakeLists.txt + sorc/prepobs_cqcbufr.fd/cqcbufr.f + sorc/prepobs_cqcbufr.fd/radcor.f +A sorc/prepobs_cqcvad.fd/CMakeLists.txt + sorc/prepobs_cqcvad.fd/cqcvad.f +A sorc/prepobs_glerladj.fd/CMakeLists.txt + sorc/prepobs_glerladj.fd/glerldictmod.f90 + sorc/prepobs_glerladj.fd/glerlmain.f90 + sorc/prepobs_glerladj.fd/indict.f90 + sorc/prepobs_glerladj.fd/landtowater.f90 + sorc/prepobs_glerladj.fd/spd_to_dir.f90 + sorc/prepobs_glerladj.fd/td_to_q.f90 + sorc/prepobs_glerladj.fd/uv_to_sd.f90 + sorc/prepobs_glerladj.fd/uz.f + sorc/prepobs_glerladj.fd/uzl.f + sorc/prepobs_glerladj.fd/watertoland.f90 +A sorc/prepobs_listheaders.fd/CMakeLists.txt + sorc/prepobs_listheaders.fd/listheaders.f90 +A sorc/prepobs_monoprepbufr.fd/CMakeLists.txt + sorc/prepobs_monoprepbufr.fd/monoprepbufr.f90 +A sorc/prepobs_mpcopybufr.fd/CMakeLists.txt + sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 +A sorc/prepobs_oiqcbufr.fd/CMakeLists.txt + sorc/prepobs_oiqcbufr.fd/oiqcbufr.f +A sorc/prepobs_prepacpf.fd/CMakeLists.txt + sorc/prepobs_prepacpf.fd/prepacpf.f +A sorc/prepobs_prepacqc.fd/CMakeLists.txt + sorc/prepobs_prepacqc.fd/acftobs_qc.f + sorc/prepobs_prepacqc.fd/indexc40.f + sorc/prepobs_prepacqc.fd/input_acqc.f + sorc/prepobs_prepacqc.fd/output_acqc_noprof.f + sorc/prepobs_prepacqc.fd/output_acqc_prof.f + sorc/prepobs_prepacqc.fd/pietc.f90 + sorc/prepobs_prepacqc.fd/pkind.f90 + sorc/prepobs_prepacqc.fd/pmat.f90 + sorc/prepobs_prepacqc.fd/pmat2.f90 + sorc/prepobs_prepacqc.fd/pmat3.f90 + sorc/prepobs_prepacqc.fd/prepacqc.f + sorc/prepobs_prepacqc.fd/pspl.f90 + sorc/prepobs_prepacqc.fd/sub2mem_mer.f + sorc/prepobs_prepacqc.fd/sub2mem_um.f + sorc/prepobs_prepacqc.fd/tranQCflags.f +A sorc/prepobs_prepdata.fd/CMakeLists.txt + sorc/prepobs_prepdata.fd/inc_w3unpkb7.inc + sorc/prepobs_prepdata.fd/iw3unpbf.f + sorc/prepobs_prepdata.fd/prepdata.f + sorc/prepobs_prepdata.fd/w3atovsunp.f + sorc/prepobs_prepdata.fd/w3cnvxtovs.f + sorc/prepobs_prepdata.fd/w3rtovsunp.f + sorc/prepobs_prepdata.fd/w3unpkb7.f + sorc/prepobs_prepdata.fd/w3xtovseds.f + sorc/prepobs_prepdata.fd/w3xtovsmnd.f + sorc/prepobs_prepdata.fd/wordlength.f +A sorc/prepobs_prevents.fd/CMakeLists.txt + sorc/prepobs_prevents.fd/gblevents_cdas.f + sorc/prepobs_prevents.fd/prevents.f +A sorc/prepobs_profcqc.fd/CMakeLists.txt + sorc/prepobs_profcqc.fd/profcqc.f +A sorc/syndat_syndata.fd/CMakeLists.txt + sorc/syndat_syndata.fd/syndata.f +A sorc/timetwin.fd/CMakeLists.txt + sorc/timetwin.fd/timetwin.f +A ush/CMakeLists.txt + ush/build_mainpage.sh + ush/download_fix.sh +M ush/gdas_counts.sh + ush/gdas_countstat.sh + ush/gdas_summary.sh + ush/gdascounts_combine.sh + ush/getges.sh + ush/getges_driver.sh + ush/getges_nc.sh + ush/getges_sig.sh + ush/global_postevents.sh + ush/mstr_shp_stn_lst_update.sh + ush/mstr_shp_stn_lst_update2.sh + ush/prepobs_cqcbufr.sh + ush/prepobs_cqcvad.sh + ush/prepobs_glerladj.sh +M ush/prepobs_makeprepbufr.sh + ush/prepobs_oiqcbufr.sh + ush/prepobs_prepacqc.sh + ush/prepobs_prevents.sh + ush/prepobs_profcqc.sh + ush/prepobs_syndata.sh + ush/satellite_daily.pl + ush/satellite_html.pl + ush/satellite_summary.sh +A versions/README +A versions/build.ver +------------------------------ +M-modified; A-added; D-deleted + +What changes were made to the above code/scripts to support the new architecture? + prep and prep_post have been removed from the obsproc software package to be a standalone application, installed on WCOSS2 as a module. + prepobs has been moved to github as its own repository. https://github.com/NOAA-EMC/prepobs + prepobs utilizes cmake to build and install the code. build prepobs repo with cmake + +Were any other changes made that aren’t directly related to the transition? + No + +Are there any changes to incoming data needs or outgoing products? + No + +If output filenames are changing, list the current and new filename + N/A + +Compute resource information, for every job: + Please see https://github.com/NOAA-EMC/obsproc release branch release/obsproc.v1.0.0/triggers for various network j*dump.wc2.pbs trigger settings + Total tasks + Tasks per node + Serial or parallel or mpmd + Memory requirements (exclusive or shared) + +List any other PBS resource information requirements or MPI tunables + *** Providing PBS and/or ecFlow submission scripts as part of release tag is preferred; if they are provided then resource information is not needed in the release notes. + +Runtime changes compared to current production (/gpfs/dell1/nco/ops/com/logs/runtime/daily/* for current stats) + Optimization for network dump jobs was not performed prior to release because of the team reshuffling and resultant tight deadline. + Obsproc developers will work with assigned SPA to meet optimization goals for network dump jobs. + +Disk space required per day or per cycle; data retention on disk will remain the same unless otherwise requested. + Same as WCOSS1 + +Dissemination will remain the same unless otherwise communicated to NCO and a PNS/SCN issued + HPSS archive retention will remain the same unless approval granted by HPCRAC + +What are your up and downstream dependencies? + Upstream: decoders, satingest ($DCOMROOT) + +Provide a pointer to your COMOUT, temp directory and pbspro output file that was used during testing: + see obsproc.v1.0.0 Release Notes +=========================================================================== +WCOSS1 RN:https://github.com/ShelleyMelchior-NOAA/smelchior/tree/main/RNs + +END + diff --git a/fix/prepobs_landc b/fix/prepobs_landc new file mode 100644 index 0000000000000000000000000000000000000000..4b847c55d75e67413fc009ef6a32a0dc8d7bb8f7 GIT binary patch literal 285020 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 | | | | +| UPRAIR | HEADR SIRC {PRSLEVEL} {CLOUDSEQ} | +| UPRAIR | | +| | | | HEADR | SID 207003 XOB YOB 207000 DHR ELV TYP T29 | | HEADR | TSB ITP SQN PROCN RPT TCOR | | | | diff --git a/fix/syndat_syndata.slmask.t126.gaussian b/fix/syndat_syndata.slmask.t126.gaussian new file mode 100644 index 0000000000000000000000000000000000000000..c15df144c04cc7973a305b3b75a691c95251f3ff GIT binary patch literal 291848 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 J=Rg1b^MBVt<`Vz_ literal 0 HcmV?d00001 diff --git a/modulefiles/prepobs_common.lua b/modulefiles/prepobs_common.lua index 0719988..3a6e7cd 100644 --- a/modulefiles/prepobs_common.lua +++ b/modulefiles/prepobs_common.lua @@ -2,15 +2,15 @@ help([[ Load common modules to build prepobs on all machines ]]) -hdf5_ver=os.getenv("hdf5_ver") or "default" -netcdf_c_ver=os.getenv("netcdf_c_ver") or "default" -netcdf_fortran_ver=os.getenv("netcdf_fortran_ver") or "default" -bacio_ver=os.getenv("bacio_ver") or "default" -w3emc_ver=os.getenv("w3emc_ver") or "default" -sp_ver=os.getenv("sp_ver") or "default" -sigio_ver=os.getenv("sigio_ver") or "default" -nemsio_ver=os.getenv("nemsio_ver") or "default" -bufr_ver=os.getenv("bufr_ver") or "default" +hdf5_ver=os.getenv("hdf5_ver") or "None" +netcdf_c_ver=os.getenv("netcdf_c_ver") or "None" +netcdf_fortran_ver=os.getenv("netcdf_fortran_ver") or "None" +bacio_ver=os.getenv("bacio_ver") or "None" +w3emc_ver=os.getenv("w3emc_ver") or "None" +sp_ver=os.getenv("sp_ver") or "None" +sigio_ver=os.getenv("sigio_ver") or "None" +nemsio_ver=os.getenv("nemsio_ver") or "None" +bufr_ver=os.getenv("bufr_ver") or "None" load(pathJoin("hdf5", hdf5_ver)) load(pathJoin("netcdf-c", netcdf_c_ver)) diff --git a/modulefiles/prepobs_hera.lua b/modulefiles/prepobs_hera.lua index cb8046e..521ab5d 100644 --- a/modulefiles/prepobs_hera.lua +++ b/modulefiles/prepobs_hera.lua @@ -2,7 +2,7 @@ help([[ Load environment to build prepobs on Hera ]]) -prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-1.6.0/envs/gsi-addon-dev-rocky8/install/modulefiles/Core") +prepend_path("MODULEPATH", os.getenv("spack_stack_mod_path")) stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" stack_impi_ver=os.getenv("stack_impi_ver") or "2021.5.1" diff --git a/modulefiles/prepobs_hercules.lua b/modulefiles/prepobs_hercules.lua index c72b5af..bd9282a 100644 --- a/modulefiles/prepobs_hercules.lua +++ b/modulefiles/prepobs_hercules.lua @@ -2,7 +2,7 @@ help([[ Load environment to build prepobs on Hercules ]]) -prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-1.6.0/envs/gsi-addon-env/install/modulefiles/Core") +prepend_path("MODULEPATH", os.getenv("spack_stack_mod_path")) stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" stack_impi_ver=os.getenv("stack_impi_ver") or "2021.9.0" diff --git a/modulefiles/prepobs_jet.lua b/modulefiles/prepobs_jet.lua index be13b33..2a30143 100644 --- a/modulefiles/prepobs_jet.lua +++ b/modulefiles/prepobs_jet.lua @@ -2,7 +2,7 @@ help([[ Load environment to build prepobs on Jet ]]) -prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hfv3gfs/role.epic/spack-stack/spack-stack-1.6.0/envs/gsi-addon-dev-rocky8/install/modulefiles/Core") +prepend_path("MODULEPATH", os.getenv("spack_stack_mod_path")) stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" stack_impi_ver=os.getenv("stack_impi_ver") or "2021.5.1" diff --git a/modulefiles/prepobs_orion.lua b/modulefiles/prepobs_orion.lua index b169960..c2ff3e8 100644 --- a/modulefiles/prepobs_orion.lua +++ b/modulefiles/prepobs_orion.lua @@ -2,7 +2,7 @@ help([[ Load environment to build prepobs on Orion ]]) -prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-1.6.0/envs/gsi-addon-env-rocky9/install/modulefiles/Core") +prepend_path("MODULEPATH", os.getenv("spack_stack_mod_path")) stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" stack_impi_ver=os.getenv("stack_impi_ver") or "2021.9.0" diff --git a/modulefiles/prepobs_wcoss2.lua b/modulefiles/prepobs_wcoss2.lua index f8877f8..aa8564b 100644 --- a/modulefiles/prepobs_wcoss2.lua +++ b/modulefiles/prepobs_wcoss2.lua @@ -2,20 +2,20 @@ help([[ Load environment to build prepobs on WCOSS2 ]]) -PrgEnv_intel_ver=os.getenv("PrgEnv_intel_ver") -intel_ver=os.getenv("intel_ver") -cmake_ver=os.getenv("cmake_ver") -craype_ver=os.getenv("craype_ver") -cray_mpich_ver=os.getenv("cray_mpich_ver") +PrgEnv_intel_ver=os.getenv("PrgEnv_intel_ver") or "None" +intel_ver=os.getenv("intel_ver") or "None" +cmake_ver=os.getenv("cmake_ver") or "None" +craype_ver=os.getenv("craype_ver") or "None" +cray_mpich_ver=os.getenv("cray_mpich_ver") or "None" -hdf5_ver=os.getenv("hdf5_ver") or "default" -netcdf_ver=os.getenv("netcdf_ver") or "default" -bacio_ver=os.getenv("bacio_ver") or "default" -w3emc_ver=os.getenv("w3emc_ver") or "default" -sp_ver=os.getenv("sp_ver") or "default" -sigio_ver=os.getenv("sigio_ver") or "default" -nemsio_ver=os.getenv("nemsio_ver") or "default" -bufr_ver=os.getenv("bufr_ver") or "default" +hdf5_ver=os.getenv("hdf5_ver") or "None" +netcdf_ver=os.getenv("netcdf_ver") or "None" +bacio_ver=os.getenv("bacio_ver") or "None" +w3emc_ver=os.getenv("w3emc_ver") or "None" +sp_ver=os.getenv("sp_ver") or "None" +sigio_ver=os.getenv("sigio_ver") or "None" +nemsio_ver=os.getenv("nemsio_ver") or "None" +bufr_ver=os.getenv("bufr_ver") or "None" load("envvar") load(pathJoin("PrgEnv-intel", PrgEnv_intel_ver)) diff --git a/scripts/exprep_post.sh b/scripts/exprep_post.sh index 29d17ab..e299d14 100755 --- a/scripts/exprep_post.sh +++ b/scripts/exprep_post.sh @@ -3,17 +3,20 @@ echo "-------------------------------------------------------------" echo "exprep_post.sh - Runs various post-analysis processing " echo " steps on the PREPBUFR files (removes or " -echo " masks restricted data) " +echo " masks restricted data from both today's " +echo " PREPBUFR files and from AIRCAR and " +echo " AIRCFT Table A entries in 2-day old " +echo " PREPBUFR files). " echo " - GDAS only: Identify TimeTwin duplicate " echo " upper-air (RAOB, PIBAL, DROP) wind " -echo " report parts " +echo " report parts. " echo " - 18Z GDAS only: Reformat GDAS received, " echo " selected, and assimilated data counts " echo " (both satellite and non-satellite) for " echo " all four cycles for today and save the " echo " result in the monthly archive directory " echo " (run monthly summary on the second day " -echo " of the next month and post to web) " +echo " of the next month and post to web). " echo " - 18Z GDAS only: Update the Master Ship " echo " Station List based on any new " echo " info read from the updated VOS ship " @@ -49,6 +52,11 @@ echo " processing (Melchior) " echo " Jul 15 2020 - Modified $path variable to include (or exclude) " echo " $COMPONENT subdir based on GFS version. " echo " Dec 09 2021 - Updated for use on WCOSS2 (Esposito) " +echo " ??? ?? ???? - Added new "remorest" processing to remove restricted " +echo " data from 2-day old PREPBUFR files (Keyser). " +echo " ??? ?? ???? - Added logic to handle PREPBUFR center times that are " +echo " not on the whole hour (needed for new RTMA_RU runs) " +echo " (Keyser). " ############################################################################### # NOTE: NET is gfs for the gdas RUN (as for the gfs RUN) @@ -67,6 +75,8 @@ if [ ! -s break ]; then fi cat break > $pgmout +PROCESS_REMOREST_dm2=${PROCESS_REMOREST_dm2:-NO} + hr_fraction="" set +u if [ -n "$cycM" ]; then @@ -128,53 +138,122 @@ CENTERED ON $cdate10" dot_tmmark=".$tmmark" [ $net = gdas -o $net = gfs -o $net = cdas ] && dot_tmmark="" -######################################################## -# Remove or mask restricted data from PREPUFR files -######################################################## +############################################################## +# Remove or mask restricted data from today's PREPBUFR files +############################################################## + +# If either the restriction indicator (mnemonic RSRD) is set for a report, or +# the report is in a Table A entry pre-determined to contain only restricted +# reports, then the report is always restricted {regardless of the time in +# hours for the expiration on restriction (mnemonic EXPRSRD)}. +# ---> Since we are running in near-realtime, there is no need to test on +# the value of EXPRSRD. This will always be > current time difference. +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_RESTR" (see below): +# All reports are considered to be restricted by definition of this +# switch. They will be skipped by program BUFR_REMOREST. +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_MIXED" (see below): +# RSRD may not be set for all reports. Those with RSRD set are +# considered to be restricted regardless of EXPRSRD because +# "DIFF_HR" (the difference in hours between the current UTC wall- +# clock date and the PREPBUFR file center date),is exported as 0 +# into program BUFR_REMOREST (EXPRSRD will always be > actual +# DIFF_HR since we are running in near-realtime). They will be +# skipped by program BUFR_REMOREST. Those reports that do not have +# RSRD set are considered to be non-restricted and will be retained +# by program BUFR_REMOREST. +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_MASKA" (see below): +# All reports with a dump report type listed in namelist switch +# IMASK_T29 (see below) may have RSRD set for some reports. Those +# with RSRD set are considered to be restricted regardless of +# EXPRSRD because "DIFF_HR" (the difference in hours between the +# current UTC wall-clock date and the PREPBUFR file center date), +# is exported as 0 into program BUFR_REMOREST (EXPRSRD will always +# be > actual DIFF_HR since we are running in near-realtime). They +# are not removed, but all occurrences of their ids will be masked +# out by program BUFR_REMOREST. In addition, program BUFR_REMOREST +# re-sets their values for RSRD and EXPRSRD to missing so that the +# reports are no longer considered to be restricted. Reports with a +# dump report type not listed in namelist switch IMASK_T29 are +# considered to be non-restricted and their ids are not masked out +# by program BUFR_REMOREST. +# ----------------------------------------------------------------------------- + + export DIFF_HR=0 -cat <<\EOFparm > bufr_remorest.prepbufr.parm + cat <<\EOFparm > bufr_remorest.prepbufr.parm ========================================================================= - Cards for PREPBUFR Version of BUFR_REMOREST -- Version 15 March 2013 + Cards for PREPBUFR Version of BUFR_REMOREST -- Version ?? ??? 20?? --> GPSIPW can be moved from MSG_RESTR to MSG_MIXED oncw dump interface to PREPDATA can recognize U.S.-provider (ENI) reports which are now restricted &SWITCHES - MSG_RESTR = 'AIRCAR ', ! These are the Table A Entries for - 'MSONET ', ! BUFR messages for which ALL reports - 'GPSIPW ', ! are RESTRICTED and will be REMOVED. - ' ', ! (up to 20) - MSG_MIXED = 'ADPSFC ', ! These are the Table A Entries for - 'AIRCFT ', ! BUFR messages which contain a MIXTURE - ' ', ! of restricted and unrestricted - ' ', ! reports (based on mnemonic "RSRD"). All - ' ', ! restricted reports will be REMOVED. - ' ', ! (up to 20) - MSG_MASKA = 'SFCSHP ', ! These are the Table A Entries for - ' ', ! BUFR messages for which ALL reports - ' ', ! are RESTRICTED if their dump report type is - ' ', ! one of up to 10 possible listed in switch - ' ', ! IMASK_T29 below (each line in IMASK_T29 applies - ' ', ! to the Table A entry in the same line number - ' ', ! here). Restricted reports will not be removed, - ' ', ! but their report ids will be unilaterally - ' ', ! changed to "MASKSTID" - ' ', ! (up to 20) - ' ' - IMASK_T29 = 522,523,8*99999, ! Dump report types restricted in MSG_MASKA(1) - 10*99999, ! Dump report types restricted in MSG_MASKA(2) + MSG_RESTR = 'AIRCAR ', ! These are the Table A Entries for BUFR messages + 'MSONET ', ! for which ALL reports are considered to be + 'GPSIPW ', ! restricted. All reports will be REMOVED by + ' ', ! program BUFR_REMOREST. + ' ', ! (up to 20 Table A entries) + ' ', ! + ' ', ! Note: move MSONET to MSG_MIXED when we know for sure that RSRD values are correct for each provider/sub-provider + ' ', ! + MSG_MIXED = 'AIRCFT ', ! These are the Table A Entries for BUFR messages + 'ADPSFC ', ! which may contain a MIXTURE of reports with and + ' ', ! withough mnemonic "RSRD" being set. If "RSRD" is + ' ', ! not set -or- it is set and mnemonic "EXPRSRD" + ' ', ! is also set and has a value luess than "DIFF_HR" + ' ', ! (the difference in hrs between the current UTC + ' ', ! wall-clock date and the PREPBUFR file center + ' ', ! date) minus 4, the report will be RETAINED by + ' ', ! program BUFR_REMOREST. Otherwise, it will be + ' ', ! REMOVED by program BUFR_REMOREST. + ' ', ! (up to 20 Table A entries) + ' ', + MSG_MASKA = 'SFCSHP ', ! These are the Table A Entries for BUFR messages + ' ', ! which, if their dump report type is one of up + ' ', ! to 10 possible listed in switch IMASK_T29 + ' ', ! (where each line in IMASK_T29 applies to the + ' ', ! Table A entry in the same line number here), + ' ', ! may contain a mixture or reports with and + ' ', ! without their value for mnemonic "RSRD") being + ' ', ! set. If "RSRD" is not set for a report -or- it + ' ', ! is set and the time in mnemonic "EXPRSRD" is + ' ', ! also set and has a value less than "DIFF_HR" + ' ', ! (the difference in hours between the current + ' ', ! UTC wall-clock date and the PREPBUFR file + ' ', ! center date) minus 4, the report will be + ' ', ! copied without any changes by program + ' ', ! BUFR_REMOREST. Otherwise, the report will not + ' ', ! be removed, but all occurrances of its id will + ' ', ! be changed to "MASKSTID" by program + ' ', ! BUFR_REMOREST. In addition, program + ' ', ! BUFR_REMOREST re-sets its values for "RSRD" and + ' ', ! "EXPRSRD to missing so that the report is no + ! longer considered to be restricted. Reports + ! with a dump report type not listed in switch + ! IMASK_T29 are considered to be non-restricted + ! and their report ids are not changed (masked + ! out) when copied by program BUFR_REMOREST. + ! (up to 20 Table A entries) + ! + IMASK_T29 = 522,523,8*99999, ! MSG_MASKA(1) dump report types that may + ! contain restricted reports + 10*99999, ! MSG_MASKA(2) dump report types that may + ! contain restructed reports 10*99999 ! etc., {up to 20 for MSG_MASKA(20)} / - Note 1: A particular Table A entry should NEVER appear in more than one - of MSG_RESTR, MSG_MIXED or MSG_MASKA. + Note 1: A particular Table A entry should NEVER appear in more than one of + MSG_RESTR, MSG_MIXED or MSG_MASKA. Note 2: Any Table A entry not in either MSG_RESTR, MSG_MIXED or MSG_MASKA - is assumed to be a Table A entry for BUFR messages for which - ALL reports are UNRESTRICTED (these messages are copied - intact, no reports are unpacked). + is assumed to be a Table A entry for BUFR messages for which ALL + reports are UNRESTRICTED (these messages are copied intact, no + reports are unpacked). Note 3: Always fill in the arrays MSG_RESTR, MSG_MIXED and MSG_MASKA beginning with word 1. If there are less than 20 words filled in an array, either set the extra words to " " (8 blank @@ -182,12 +261,12 @@ cat <<\EOFparm > bufr_remorest.prepbufr.parm " "). Note 4: In array IMASK_T29, a value of "99999" means not applicable whereas a value of "000" means reports in all dump report types in the - corresponding Table A entry in MSG_MASKA should be restricted - (masked) {in this case IMASK_T29(1,x) would be set to 000 and - IMASK_T29(2:10,x) would be set to 99999 for all reports in Table A - entry MSG_MASKA(x) since they would all be ignored - this is the - default for all Table A entries MSG_MASKA(1:20) if this is not set - (i.e., for data dump files)} + corresponding Table A entry in MSG_MASKA should be considered {in + this case IMASK_T29(1,x) would be set to 000 and IMASK_T29(2:10,x) + should be set to 99999 for all reports in Table A entry + MSG_MASKA(x) since they would all be ignored - this is the default + for all Table A entries MSG_MASKA(1:20) if this switch is not set + (i.e., for data dump files)}. ========================================================================= EOFparm @@ -310,6 +389,212 @@ fi fi # test for PROCESS_REMOREST=YES +# PROCESS_REMOREST_dm2 = YES runs only on demand, on dev machines +# Unrestrict 48h old aircraft obs(exc. TAMDAR), add *.ur file to $COMOUTm2 +dev_m=$(grep backup /lfs/h1/ops/prod/config/prodmachinefile | cut -d: -f2) +this_m=$(cat /etc/cluster_name) + +if [ "$PROCESS_REMOREST_dm2" = 'YES' -a $this_m = $dev_m ]; then + cdate10M2=`$NDATE -$tmhr $PDYm2$cyc` + + msg="REMOVE OR MASK RESTRICTED DATA FROM $tmmark_uc $net_uc PREPBUFR files \ +CENTERED ON $cdate10M2 (2-days ago)" + $DATA/postmsg "$jlogfile" "$msg" + set +x + echo + echo "$msg" + echo + set -x + + dot_tmmark=".$tmmark" + [ $net = gdas -o $net = gfs -o $net = cdas ] && dot_tmmark="" + +########################################################################## +# Remove restriction on data in "AIRCAR" and "AIRCFT" Table A entries in +# 2-day old PREPBUFR files (all other data previously restricted in +# real-time PREPBUFR files continue to be restricted here) +########################################################################## + +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_RESTR" (see below): +# All reports are considered to be restricted by definition of this +# switch. They will be skipped by program BUFR_REMOREST. +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_MIXED" (see below): +# The restriction indicator (mnemonic RSRD) may not be set for all +# reports. If RSRD is set for a report, then its value for time in +# hours for the expiration on restriction (mnemonic EXPRSRD) is +# examined. If "DIFF_HR" (the difference in hours between the +# current UTC wall-clock date and the PREPBUFR file center date, +# exported into program BUFR_REMOREST) minus 4 is less than or equal +# to EXPRSRD, then the report is considered to be restricted and +# will be skipped by program BUFR_REMOREST. Otherwise, the report is +# considered to be non-restricted and will be retained by program +# BUFR_REMOREST. +# ---> For all Table A entries listed in parm card namelist switch +# "MSG_MASKA" (see below): +# All reports with a dump report type listed in namelist switch +# IMASK_T29 (see below) may have RSRD set for some reports. If RSRD +# is set for a report, then its value for EXPRSRD is examined. If +# "DIFF_HR" minus 4 is less than or equal to EXPRSRD, then the +# report is considered to be restricted. It will not be removed, +# but all occurrences of its id will be masked out by program +# BUFR_REMOREST. In addition, program BUFR_REMOREST re-sets its +# values for RSRD and EXPRSRD to missing so that the report is no +# longer considered to be restricted. Reports with a dump report +# type not listed in namelist switch IMASK_T29 are considered to be +# non-restricted and their ids are not masked out by program +# BUFR_REMOREST. +# (Note: All reports in Table A entry "SFCSHP" that have RSRD set +# also have EXPRSRD set to missing. Thus all such reports +# are considered as restricted for all time.) +# ---> Since we are running 2-days late, we want to test on the value of +# EXPRSRD (which currently should be set to 48 hours for any reports in +# the "AIRCAR" and "AIRCFT" Table A entries which have RSRD set). This +# will allow non-rstprod users to have access to all original "AIRCAR" +# and "AIRCFT" reports in non-restricted PREPBUFR files after EXPRSRD + +# 4 (52) hours. +# ----------------------------------------------------------------------------- + + ymdh=$(date -u +'%Y%m%d%H') + export DIFF_HR=`$NHOUR $ymdh $cdate10M2` +# current_date prepbufr_date + + msg="Any reports with EXPRSRD less than `expr $DIFF_HR - 4 ` hrs will now \ +be retained" + $DATA/postmsg "$jlogfile" "$msg" + + $DATA/postmsg "$jlogfile" "$msg" + + cat <<\EOF_EXPRSRDparm > bufr_remorest.prepbufr_EXPRSRD.parm +========================================================================= + + Cards for PREPBUFR Version of BUFR_REMOREST -- Version 1.1.0 (09 Sep 2015) + (documentation in bufr_remorest.prepbufr.parm above for $PROCESS_REMOREST + also applies here) + + --> GPSIPW can be moved from MSG_RESTR to MSG_MIXED oncw dump interface to + PREPDATA can recognize U.S.-provider (ENI) reports which are now + restricted + +&SWITCHES + MSG_RESTR = 'MSONET ', ! Note: move MSONET to MSG_MIXED when we know for sure that RSRD values are correct for each provider/sub-provider + 'GPSIPW ', + MSG_MIXED = 'AIRCAR ', + 'AIRCFT ', + 'ADPSFC ', + ' ', + MSG_MASKA = 'SFCSHP ', + ' ', + IMASK_T29 = 522,523,8*99999, + 10*99999, + 10*99999 + +/ + +========================================================================= +EOF_EXPRSRDparm + + REMX=${REMX:-$EXECobsproc/bufr_remorest} + REMC=${REMC_EXPRSRD:-bufr_remorest.prepbufr_EXPRSRD.parm} + + if [ -f $COMINm2/$RUN.$cycle.prepbufr${dot_tmmark} ]; then + cp $COMINm2/$RUN.$cycle.prepbufr${dot_tmmark} \ + $RUN.$cycle.prepbufr${dot_tmmark} + $USHobsproc/bufr_remorest.sh \ + $RUN.$cycle.prepbufr${dot_tmmark} + errsc=$? + [ "$errsc" -ne '0' ] && exit $errsc + cp $RUN.$cycle.prepbufr${dot_tmmark} \ + $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.ur + chmod 664 $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.ur + msg="$RUN.$cycle.prepbufr${dot_tmmark}.nr from 2-days ago successfully \ + created -- overwrite existing file made 2-days ago" + $DATA/postmsg "$jlogfile" "$msg" + if test "$SENDDBN" = "YES"; then + if test "$net" = "gdas"; then + $DBNROOT/bin/dbn_alert MODEL GDAS1_BUFR_PREPda_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr.nr + elif test "$net" = "nam"; then + $DBNROOT/bin/dbn_alert MODEL NAM_BUFR_PREPda_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.nr + elif test "$net" = "gfs"; then + $DBNROOT/bin/dbn_alert MODEL GFS_BUFR_PREPda_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr.nr + elif test "$net" = "rap" -o "$net" = "rap_e" -o "$net" = "rap_p"; then + $DBNROOT/bin/dbn_alert MODEL ${net_uc}_BUFR_PREPda_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.nr + fi + fi + if [ -f $COMINm2/$RUN.$cycle.prepbufr${dot_tmmark}.unblok ]; then + # make unblocked unrestricted prebufr file + # ---> ON WCOSS prepbufr is already unblocked, so for now just copy it to the + # unblok file location used before on CCS - hopefully this can be removed + # someday! + cp -p $RUN.$cycle.prepbufr${dot_tmmark} \ + $RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr + err_cp=$? + if [ $err_cp -eq 0 ]; then + cp $RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr \ + $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr + chmod 664 $COMOUTm2/$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr + msg="$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr from 2-days ago \ + successfully created - overwrite existing file made 2-days ago" + $DATA/postmsg "$jlogfile" "$msg" + if test "$SENDDBN" = "YES"; then + if test "$net" = "gdas"; then + $DBNROOT/bin/dbn_alert MODEL GDAS1_BUFR_PREPda_unblok_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr.unblok.nr + elif test "$net" = "gfs"; then + $DBNROOT/bin/dbn_alert MODEL GFS_BUFR_PREPda_unblok_nr $job \ + $COMOUTm2/$RUN.$cycle.prepbufr.unblok.nr + fi + fi + else + msg="$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr from 2-days ago NOT \ + created because cp command had return code $err_cp -- existing \ + file made 2-days ago is not overwritten" + $DATA/postmsg "$jlogfile" "$msg" + fi + else + msg="$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr from 2-days ago NOT \ + created because unblocked prepbufr file from 2-days ago does not exist" + $DATA/postmsg "$jlogfile" "$msg" + fi + else + msg="$RUN.$cycle.prepbufr${dot_tmmark}.nr from 2-days ago NOT created \ + because prepbufr file from 2-days ago does not exist" + $DATA/postmsg "$jlogfile" "$msg" + if [ -f $COMINm2/$RUN.$cycle.prepbufr${dot_tmmark}.unblok ]; then + msg="$RUN.$cycle.prepbufr${dot_tmmark}.unblok.nr from 2-days ago NOT \ + created because prepbufr file from 2-days ago does not exist" + fi + fi + + if [ -f $COMINm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark} ]; then + cp $COMINm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark} \ + $RUN.$cycle.prepbufr_pre-qc${dot_tmmark} + $USHobsproc/bufr_remorest.sh \ + $RUN.$cycle.prepbufr_pre-qc${dot_tmmark} + errsc=$? + [ "$errsc" -ne '0' ] && exit $errsc + # cp $RUN.$cycle.prepbufr_pre-qc${dot_tmmark} \ + # $COMOUTm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.nr + # chmod 664 $COMOUTm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.nr + cp $RUN.$cycle.prepbufr_pre-qc${dot_tmmark} \ + $COMOUTm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.ur + chmod 664 $COMOUTm2/$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.ur + msg="$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.nr from 2-days ago \ + successfully created -- overwrite existing file made 2-days ago" + $DATA/postmsg "$jlogfile" "$msg" + else + msg="$RUN.$cycle.prepbufr_pre-qc${dot_tmmark}.nr from 2-days ago NOT \ + created because prepbufr_pre-qc file from 2-days ago does not exist" + $DATA/postmsg "$jlogfile" "$msg" + fi + +fi # endif loop $PROCESS_REMOREST_dm2 + # PROCESS_TIMETWINS can only be YES in all GDAS cycles (where default is YES) diff --git a/sorc/prepobs_cqcbufr.fd/cqcbufr.f b/sorc/prepobs_cqcbufr.fd/cqcbufr.f index 09b9ebd..14ca024 100644 --- a/sorc/prepobs_cqcbufr.fd/cqcbufr.f +++ b/sorc/prepobs_cqcbufr.fd/cqcbufr.f @@ -231,6 +231,9 @@ C as an integer. Moved ICK.NE.0 logic inside ITI.NE.0 logic. C BENEFIT: corrects problems when compiled and run with full DEBUG C options enabled. +C 2022-??-?? C. Hill +C Dynamic memory allocation introduced (2021-08-31) to permit BUFR +C sonde processing. C C USAGE: C INPUT FILES: @@ -354,9 +357,12 @@ PROGRAM PREPOBS_CQCBUFR C overflow when either an INTEGER*4 variable is set to BMISS or a C REAL*8 (or REAL*4) variable that is missing is NINT'd C ------------------------------------------------------------------- + CALL ISETPRM ( 'MXMSGL', 600000 ) ! CH 08/31/21 + CALL ISETPRM ( 'MAXSS', 600000 ) ! CH 08/31/21 ccccc CALL SETBMISS(10E10_8) CALL SETBMISS(10E8_8) BMISS=GETBMISS() + CALL MAXOUT(50000) ! CH 08/31/21 XMISS=BMISS IMISS=10E8 print * @@ -921,7 +927,7 @@ SUBROUTINE AREA(IA,X,Y) C$$$ SUBROUTINE AUXLEVS(SKIP,SAME,WIND,SINGLE,ANYS) - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, @@ -1121,7 +1127,7 @@ SUBROUTINE CHANGE(ANY,SINGLE,SEQLP) REAL(8) BMISS SAVE IEVOLD - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, & NEV, ISF(NST), NLVM, NLVW @@ -1685,7 +1691,7 @@ SUBROUTINE CHKTMP(A,C,R,ICK) C$$$ SUBROUTINE CKPS - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, @@ -1784,7 +1790,7 @@ SUBROUTINE CKPS C$$$ SUBROUTINE COMPER(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -2274,7 +2280,7 @@ SUBROUTINE DHOR REAL(8) BMISS SAVE IEVOLD - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /MANRES/ ZIM(21,NST),TIM(21,NST),TDIM(21,NST),QIM(21,NST), & ZHM(21,NST),THM(21,NST),TDHM(21,NST),QHM(21,NST), & ZVM(21,NST),TVM(21,NST),TDVM(21,NST),QVM(21,NST), @@ -2402,7 +2408,7 @@ SUBROUTINE DHOR SUBROUTINE DISTR(X,MSK,XLIM,XMSG,NX,N,NDIV,DDIV, & NZERO,DZERO,NS,X1,SD,SK,XK) - PARAMETER (NST=999) + PARAMETER (NST=2499) INTEGER N(23), MSK(NST) REAL X(NST),XLIM(2) @@ -2511,7 +2517,7 @@ SUBROUTINE DISTR(X,MSK,XLIM,XMSG,NX,N,NDIV,DDIV, C$$$ SUBROUTINE DMA(ANY,OBS) - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, & NEV, ISF(NST), NLVM, NLVW @@ -2746,7 +2752,7 @@ SUBROUTINE DRCTSL(FAALL,RAALL,DOTPRD,NDIM,MAXDIM,NXXYY,NFT,LEV,IV) C$$$ SUBROUTINE ERR123(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -3283,7 +3289,7 @@ SUBROUTINE ERR123(L,LM) C$$$ SUBROUTINE ERR5(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -3577,7 +3583,7 @@ SUBROUTINE ERR5(L,LM) C$$$ SUBROUTINE ERR710(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -4205,7 +4211,7 @@ SUBROUTINE ERR710(L,LM) C$$$ SUBROUTINE ERRTYP - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, @@ -4563,7 +4569,7 @@ SUBROUTINE EVENTW(LUNIT,EVNSTR,NLV,OBS,QMS,RCS,IND,NEVN,QCPC) C$$$ SUBROUTINE EVPROC(I1,I2,ICALL) - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /EVENTS/ STN(2000), SEQN(2000), ISCAN(2000), & LEVL(2000), PRES(2000), LTYP(2000), @@ -4825,7 +4831,7 @@ SUBROUTINE EVPROC(I1,I2,ICALL) C$$$ SUBROUTINE FILALL(SAME,WIND) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -5254,7 +5260,7 @@ SUBROUTINE FILL(OBS,NLEV) C C$$$ SUBROUTINE FULVAL(WIND) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -5607,7 +5613,7 @@ SUBROUTINE FUZZY(P,XI,XV,XH,B,PER) C$$$ SUBROUTINE GETINC(WIND) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -5793,7 +5799,7 @@ SUBROUTINE GETINC(WIND) C SUBROUTINE GETLEV(WIND) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -6188,7 +6194,7 @@ SUBROUTINE GETPS(PS,ZS,Z1,T1,P1) C$$$ SUBROUTINE HOLES - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -6281,7 +6287,7 @@ SUBROUTINE HOLES C$$$ SUBROUTINE HORRES - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -6534,7 +6540,7 @@ SUBROUTINE HORRES C$$$ SUBROUTINE HSC - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -6803,7 +6809,7 @@ SUBROUTINE HSC C$$$ SUBROUTINE INCR(ITIME) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -7031,7 +7037,7 @@ SUBROUTINE INCR(ITIME) C$$$ SUBROUTINE INCRW - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -7122,7 +7128,7 @@ SUBROUTINE INCRW C C$$$ SUBROUTINE INIT - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -7205,7 +7211,7 @@ SUBROUTINE INIT SUBROUTINE INPUT(START,ENDIN,SKIP,SAME,WIND,ITIME,USESQN) SAVE - PARAMETER (NST=999) ! maximum number of stations + PARAMETER (NST=2499) ! maximum number of stations PARAMETER (MVO=5) ! p,T,z,q,Td PARAMETER (MLV=255) ! number of possible levels PARAMETER (MEV=13) ! number of possible programs/events @@ -7318,7 +7324,10 @@ SUBROUTINE INPUT(START,ENDIN,SKIP,SAME,WIND,ITIME,USESQN) CALL CLOSBF(NFIN) REWIND NFIN CALL OPENBF(NFIN,'IN',NFIN) - IF(ITIME.EQ.2) CALL OPENBF(NFOUT,'OUT',NFIN) + IF(ITIME.EQ.2) THEN + CALL OPENBF(NFOUT,'OUT',NFIN) + CALL MAXOUT(50000) ! CH 08/31/21 + ENDIF IS = 0 DO I=1,NST SQN(I) = 0. @@ -7777,7 +7786,7 @@ SUBROUTINE INPUT(START,ENDIN,SKIP,SAME,WIND,ITIME,USESQN) C$$$ SUBROUTINE INPUT2 - PARAMETER(NST=999) + PARAMETER(NST=2499) REAL(8) BMISS,RIT_8,HDR_8(10),UPA_8(10,255) @@ -7981,7 +7990,7 @@ SUBROUTINE INPUT2 C$$$ SUBROUTINE ISGOOD - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -8227,7 +8236,7 @@ SUBROUTINE ISGOOD C C$$$ SUBROUTINE ISOLAT(ID) - PARAMETER (NST=999) + PARAMETER (NST=2499) C C COLLECT LIST OF ISOLATED STATIONS. @@ -8288,7 +8297,7 @@ SUBROUTINE ISORT(IA,INDX,N) C SORT IA ACCORDING TO THE ORDER SPECIFIED BY THE C INDICES IN INDX. - PARAMETER (NST=999) + PARAMETER (NST=2499) DIMENSION IA(*), IKSP(NST) INTEGER INDX(*) DO J=1,N @@ -8327,7 +8336,7 @@ SUBROUTINE ISORT(IA,INDX,N) C$$$ SUBROUTINE LAPSE - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -8449,7 +8458,7 @@ SUBROUTINE LAPSE C$$$ SUBROUTINE LEVTYPS - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -8752,7 +8761,7 @@ FUNCTION MANLEV(P) C C$$$ SUBROUTINE MASEVN - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -9163,7 +9172,7 @@ FUNCTION NMANLV(P) C$$$ SUBROUTINE NOBERR - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -9388,7 +9397,7 @@ SUBROUTINE NOBERR C$$$ SUBROUTINE OBERR - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -9980,7 +9989,7 @@ SUBROUTINE PEVENTS C$$$ SUBROUTINE POBERR - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -10248,7 +10257,7 @@ SUBROUTINE POBERR C$$$ SUBROUTINE PRNTOUT(SEQLP,ICALL) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -10550,7 +10559,7 @@ SUBROUTINE PRNTOUT(SEQLP,ICALL) C$$$ SUBROUTINE PRSTNS(WIND) - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, & NEV, ISF(NST), NLVM, NLVW @@ -10718,7 +10727,7 @@ SUBROUTINE PRSTNS(WIND) C$$$ C----------------------------------------------------------------------- SUBROUTINE QCOI(LDIM,IDIM,L0,IV0,NOB1,NOB2,IDH,OINC,HRES,HSTD,WTS) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -10748,7 +10757,8 @@ SUBROUTINE QCOI(LDIM,IDIM,L0,IV0,NOB1,NOB2,IDH,OINC,HRES,HSTD,WTS) DATA MAXDIM /4/ DATA MINDIM /2/ - DATA MAXOBS /1000/ +C-----make MAXOBS consistent with other MAXOBS across prepobs--------- + DATA MAXOBS /4500/ DATA NFT /1/ C----------------------------------------------------------------------- @@ -10973,7 +10983,7 @@ SUBROUTINE QCOI(LDIM,IDIM,L0,IV0,NOB1,NOB2,IDH,OINC,HRES,HSTD,WTS) C$$$ SUBROUTINE RBLOCKS(SKIP,WIND,ENDIN) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -11283,7 +11293,7 @@ SUBROUTINE ROUND(VAL,P,IV) C C$$$ SUBROUTINE SEARCH(LDIM,IDIM,L0,IV0,NOB1,NOB2,IDH,OINC,OG) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -11483,7 +11493,7 @@ SUBROUTINE SEARCH(LDIM,IDIM,L0,IV0,NOB1,NOB2,IDH,OINC,OG) C C$$$ SUBROUTINE SETTMP - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -11743,7 +11753,7 @@ SUBROUTINE SHELL(V,IV,MAX,IREV) C$$$ SUBROUTINE SIGERR(LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -12081,7 +12091,7 @@ SUBROUTINE SORT(RA,INDX,N) C SORT RA ACCORDING TO THE ORDER SPECIFIED BY THE C INDICES IN INDX. C - PARAMETER (NST=999) + PARAMETER (NST=2499) DIMENSION RA(*), WKSP(NST) INTEGER INDX(*) @@ -12130,7 +12140,7 @@ SUBROUTINE SORT(RA,INDX,N) C$$$ SUBROUTINE STAT(ITIME) - PARAMETER (NST=999) + PARAMETER (NST=2499) C C CALCULATE STATISTICS: @@ -13060,7 +13070,7 @@ SUBROUTINE STNCNT C$$$ SUBROUTINE STYPE - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13203,7 +13213,7 @@ SUBROUTINE STYPE C$$$ SUBROUTINE T120(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13310,7 +13320,7 @@ SUBROUTINE T120(L,LM) C$$$ SUBROUTINE T121(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13385,7 +13395,7 @@ SUBROUTINE T121(L,LM) C$$$ SUBROUTINE T130(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13519,7 +13529,7 @@ SUBROUTINE T130(L,LM) C$$$ SUBROUTINE T140(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13603,7 +13613,7 @@ SUBROUTINE T140(L,LM) C$$$ SUBROUTINE T220(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -13761,7 +13771,7 @@ SUBROUTINE T220(L,LM) C$$$ SUBROUTINE T240(L,LM) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -14185,7 +14195,7 @@ SUBROUTINE T240(L,LM) C C$$$ SUBROUTINE TMPCHK - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -14317,7 +14327,7 @@ SUBROUTINE TMPCHK C$$$ SUBROUTINE VOI(ITIME) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -14787,7 +14797,7 @@ SUBROUTINE VSOLVE (A,B,NDIM,BAD,NFT,NS,MAXDIM) C C$$$ SUBROUTINE VTPEVN(DOVTMP) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -14927,7 +14937,7 @@ SUBROUTINE VTPEVN(DOVTMP) C$$$ SUBROUTINE WBLOCKS - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /HEADER/ SID(NST), DHR(NST), XOB(NST), YOB(NST), & ELV(NST), SQN(NST), ITP(NST), NLV, @@ -15030,7 +15040,7 @@ SUBROUTINE WBLOCKS C$$$ SUBROUTINE WINDATZ(SAME) - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -15270,7 +15280,7 @@ SUBROUTINE WINDATZ(SAME) C C$$$ SUBROUTINE WTISO - PARAMETER (NST=999) + PARAMETER (NST=2499) COMMON /ISO/ IDISO(NST),NUM,ISISO LOGICAL ISISO WRITE(6,600) @@ -15404,7 +15414,7 @@ SUBROUTINE WTSTATS C$$$ SUBROUTINE XHORRES - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS @@ -15496,7 +15506,7 @@ SUBROUTINE XHORRES C$$$ SUBROUTINE ZDIF - PARAMETER (NST=999) + PARAMETER (NST=2499) REAL(8) BMISS diff --git a/sorc/prepobs_cqcbufr.fd/radcor.f b/sorc/prepobs_cqcbufr.fd/radcor.f index 2c88733..b5d7f04 100644 --- a/sorc/prepobs_cqcbufr.fd/radcor.f +++ b/sorc/prepobs_cqcbufr.fd/radcor.f @@ -82,7 +82,7 @@ C C$$$ SUBROUTINE RADEVN - PARAMETER (NST=999) + PARAMETER (NST=2499) PARAMETER (NRID=800) ! max # of raob ids listed per inst. type REAL(8) BMISS diff --git a/sorc/prepobs_glerladj.fd/glerlmain.f90 b/sorc/prepobs_glerladj.fd/glerlmain.f90 index aaec394..ea0b149 100644 --- a/sorc/prepobs_glerladj.fd/glerlmain.f90 +++ b/sorc/prepobs_glerladj.fd/glerlmain.f90 @@ -79,7 +79,7 @@ program prepobs_glerladj ! DAK: Need dynamic allocation on dimension of imatch - integer(4),dimension(8000,600)::imatch + integer(4),dimension(8000,900)::imatch integer(4)::isub,nmsub real(8)::sqn_8,sqn_8_last integer(4),dimension(dictmax)::types,lake,date,mask,act,anht @@ -225,6 +225,7 @@ program prepobs_glerladj if (ctyp.ne."ADPSFC ".and.ctyp.ne."MSONET ".and.ctyp.ne."SFCSHP ") cycle do while (ireadsb(13).eq.0) call ufbcnt(13,amsg,asub) + !print*, "GLERL amsg= asub= ..." , amsg, asub isub = isub+1 sqn_8 = bmiss call ufbint(13,sqn_8,1,1,iret,'SQN') diff --git a/sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 b/sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 index fc58e2c..af61823 100644 --- a/sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 +++ b/sorc/prepobs_mpcopybufr.fd/mpcopybufr.f90 @@ -21,6 +21,12 @@ PROGRAM PREPOBS_MPCOPYBUFR ! PROGRAM HISTORY LOG: ! 1999-06-29 KISTLER -- ORIGINAL AUTHOR ! 2013-03-06 KEYSER -- CHANGES TO RUN ON WCOSS +! 2022-??-?? C. Hill -- +! Dynamic memory allocation introduced (2022-05-19) to permit BUFR +! sonde processing. Code block introduced (2022-05-06) to read opened +! file containing BUFR sonde data and write an external station list +! for later reference in PREPOBS_PREPDATA. +! ! ! USAGE: ! INPUT FILES: @@ -66,7 +72,8 @@ PROGRAM PREPOBS_MPCOPYBUFR ! PROGRAM PREPOBS_MPCOPYBUFR -CHARACTER*8 SUBSET +CHARACTER*8 SUBSET,CRPID,CBUHD +REAL*8 RPID8,BUHD8 namelist /namin/nfiles @@ -81,6 +88,9 @@ PROGRAM PREPOBS_MPCOPYBUFR CALL DATELEN(10) +CALL ISETPRM ( 'MXMSGL', 600000 ) ! CH 05/19/2022 +CALL ISETPRM ( 'MAXSS', 600000 ) ! CH 05/19/2022 + do i=1,nfiles CALL OPENBF(LUNIN,'IN ',LUNIN) @@ -98,6 +108,24 @@ PROGRAM PREPOBS_MPCOPYBUFR DO WHILE(MP_IREADMG(LUNIN,SUBSET,IDATE).EQ.0) CALL COPYMG(LUNIN,LUNOT) +! Find UPRAIR data, read the RPID and BUHD, and write to common external file + IF(SUBSET(1:6).EQ.'NC0021') THEN + IRT=0 + DO WHILE(IRT.EQ.0) + CALL READSB(LUNIN,IRT) + IF(IRT.EQ.0) THEN + CALL UFBINT(LUNIN,RPID8,1,1,NLEV,'RPID') + WRITE(CRPID,'(A8)') RPID8 + IF(IBFMS(RPID8).EQ.0) THEN + CALL UFBINT(LUNIN,BUHD8,1,1,NLEV,'BUHD') + WRITE(CBUHD,'(A8)') BUHD8 +! IF(CBUHD(1:2).EQ.'IU') WRITE(91,'(A8,1X,A8)') CRPID, CBUHD + WRITE(91,'(A8,1X,A8)') CRPID, CBUHD + ENDIF + ENDIF + ENDDO + ENDIF +! End UPRAIR station content search CH 05/06/2022 ENDDO CALL CLOSBF(LUNIN) diff --git a/sorc/prepobs_oiqcbufr.fd/oiqcbufr.f b/sorc/prepobs_oiqcbufr.fd/oiqcbufr.f index 367b98d..23ade7c 100644 --- a/sorc/prepobs_oiqcbufr.fd/oiqcbufr.f +++ b/sorc/prepobs_oiqcbufr.fd/oiqcbufr.f @@ -1811,6 +1811,7 @@ SUBROUTINE PREPQM(LUBIN,LUBOT) C CALL OPENBF(LUBIN,'IN',LUBIN) CALL UFBQCD(LUBIN,'OIQC',QCD) CALL OPENBF(LUBOT,'OUT',LUBIN) + CALL MAXOUT(50000) !IG imsg = 1 irec = 1 ifld = 1 diff --git a/sorc/prepobs_prepdata.fd/iw3unpbf.f b/sorc/prepobs_prepdata.fd/iw3unpbf.f index ca116c6..c0bd0aa 100644 --- a/sorc/prepobs_prepdata.fd/iw3unpbf.f +++ b/sorc/prepobs_prepdata.fd/iw3unpbf.f @@ -520,16 +520,55 @@ C 005068, 005069. c 2020-10-15 JWhiting -- added trap to pull dump mnemonics specific to c BUFR feed buoy data streams so as to properly encode prepbufr -c wave height & frequecy mnemonics (HOWV POWV). -c 2021-03-30 JWhiting - +c wave height & frequency mnemonics (HOWV POWV). +c 2021-03-30 JWhiting - C - Fixed ambiguity in trap for buoy SST values (msg types 102-3) -C - Assigned input report type values of 524-5 to BUFR-feed ships -c data, for named and unnamed obs, respectively (TAC-feeds remain +C - Assigned input report type values of 524-5 to BUFR-feed ships +c data, for named and unnamed obs, respectively (TAC-feeds remain c as 522-3). C - Assigned input report type value of 530 to BUFR-feed C-MAN C reports. +C 2021-04-15 C. Hill -- +C = This routine is updated to allow the reading and unpacking of +C radiosonde and dropsonde profile data from the 'uprair' dump +C files. The profiles originate from BUFR files, and typically +C feature many hundreds of additional vertical levels. +C - Dynamic memory allocation is invoked with the BUFR library +C (within prepdata.f) to accommodate the greater volume of data +C with each profile. +C - A new data category (ICAT=10) is introduced for paired +C observations of temperature, humidity, and wind that are +C not otherwise associated with a mandatory (ICAT=1) vertical +C level. NUMCAT is increased to 9. VSIG=128 is dedicated for +C data with ICAT=10 within this routine. +C - NBFLG is introduced in R03UBF to determine format origin +C of sonde data (0 - TAC | 1/2 - BUFR | 9 - experimental), +C and is used to determine procedure in processing sonde data. +C VLINC is the increment of NLEVX levels to be captured for +C the 255-element output array; the arrays of the VSIGX, LVSTR, +C and QMSTR fields are reduced accordingly. +C - 16-bit values of VSIGX are translated to 8-bit values of VSIG. +C - HBMSL or HEIT is read in place of SELV. HOUR and MINU are read +C in place of UALNHR and UALNMN, respectively. +C = Time and position displacement data, derived from the GNSS +C receiver aboard the sonde, are available for future development +C of BUFR profile processing. C 2021-07-14 J. Dong -- In function R04UBF, added code to encode the C cloud data for the BUFR-feed ships data. +C 2022-11-30 C. Hill -- +C = Mandatory and surface vertical levels (VSIG = 32,64) are retained +C from the profiles of 'uprair' dump files. An increment is +C defined from the number of available vertical levels of each +C 'uprair' profile and used to port additional vertical level +C data to the 255-element arrays of prepbufr. The increment is +C increased according to the number of mandatory levels present, +C intending to capture a sufficient number of other vertical +C levels, throughout the depth of a BUFR profile, to fill the +C prepbufr arrays. +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. DATA CATEGORY LEVELS 1, 2, AND +C 10 NEEDED TO BE INCREASED IN SIZE BY 3 TO SAVE TIME AND LOCATION +C DISPLACEMENT DATA. C C C USAGE: II = IW3UNPBF(NUNIT, OBS, STNID, CRES1, CRES2, CBULL, OBS2, @@ -723,7 +762,9 @@ C 28 CATEGORY 8, DATA INDEX COUNT INTEGER C 29 CATEGORY 51, NO. LEVELS COUNT INTEGER C 30 CATEGORY 51, DATA INDEX COUNT INTEGER -C 31-52 ZEROED OUT - NOT USED INTEGER +C 31 CATEGORY 10, NO. LEVELS COUNT INTEGER +C 32 CATEGORY 10, DATA INDEX COUNT INTEGER +C 33-52 ZEROED OUT - NOT USED INTEGER C C 53-END UNPACKED DATA GROUPS (SEE BELOW) MIXED C @@ -875,6 +916,9 @@ C 9 TEMP. QUALITY MARKER (SEE $) REAL C 10 DDPR. QUALITY MARKER (SEE $) REAL C 11 WIND QUALITY MARKER (SEE $) REAL +C 12 TIME PERIOD DISPLACEMENT SECONDS REAL +C 13 LATITUDE DISPLACEMENT DEGREES REAL +C 14 LONGITUDE DISPLACEMENT DEGREES REAL C C DATA LEVEL CATEGORY 2 - TEMPERATURE AT VARIABLE PRESSURE C WORD PARAMETER UNITS FORMAT @@ -886,6 +930,9 @@ C 5 TEMP. QUALITY MARKER (SEE $) REAL C 6 DDPR. QUALITY MARKER (SEE $) REAL C 7 SPECIAL INDICATOR (SEE $$) REAL +C 8 TIME PERIOD DISPLACEMENT SECONDS REAL +C 9 LATITUDE DISPLACEMENT DEGREES REAL +C 10 LONGITUDE DISPLACEMENT DEGREES REAL C C DATA LEVEL CATEGORY 3 - WINDS AT VARIABLE PRESSURE C WORD PARAMETER UNITS FORMAT @@ -961,6 +1008,24 @@ C 12 ATEMP QUALITY MARKER (SEE $) REAL C 13 DDPR. QUALITY MARKER (SEE $) REAL C +C DATA LEVEL CATEGORY 10 - BUFR VERTICAL LEVEL DATA +C WORD PARAMETER UNITS FORMAT +C ---- --------- ----------------- ------------- +C 1 PRESSURE 0.1 MILLIBARS REAL +C 2 GEOPOTENTIAL METERS REAL +C 3 TEMPERATURE 0.1 DEGREES C REAL +C 4 DEWPOINT DEPRESSION 0.1 DEGREES C REAL +C 5 WIND DIRECTION DEGREES REAL +C 6 WIND SPEED 0.1 METERS/SEC REAL +C 7 PRES. QUALITY MARKER (SEE $) REAL +C 8 GEOP. QUALITY MARKER (SEE $) REAL +C 9 TEMP. QUALITY MARKER (SEE $) REAL +C 10 DDPR. QUALITY MARKER (SEE $) REAL +C 11 WIND QUALITY MARKER (SEE $) REAL +C 12 TIME PERIOD DISPLACEMENT SECONDS REAL +C 13 LATITUDE DISPLACEMENT DEGREES REAL +C 14 LONGITUDE DISPLACEMENT DEGREES REAL +C C $ - QUALITY MARKER CODE TABLE: C 0. - MONITOR KEEP C 1. - GOOD @@ -1296,7 +1361,7 @@ FUNCTION IW3UNPBF(LUNIT,OBS,STNID,CRES1,CRES2,CBULL,OBS2,OBS3, $ NOBS3,obs8_8,DSNAME,IDSDAT,IDSDMP_8,SUBSET_r,SUBSKP,IER) - PARAMETER (NUMCAT=8, LEVLIM=300) + PARAMETER (NUMCAT=9, LEVLIM=300) COMMON/IUBFAA/BMISS COMMON/IUBFBB/KNDX,KSKACF(8),KSKUPA,KSKSFC,KSKSAT,KFLSAT(12), @@ -1377,18 +1442,20 @@ FUNCTION IW3UNPBF(LUNIT,OBS,STNID,CRES1,CRES2,CBULL,OBS2,OBS3, IKAT(6) = 6 IKAT(7) = 51 IKAT(8) = 8 + IKAT(9) = 10 ! incl. CH 01/19/2021 C MCAT defines the number of parameters in a level for each category C --> THIS NEEDS TO BE UPDATED WHEN ADDING MORE WORDS PER CAT LEVEL - MCAT(1) = 11 ! Cat. 1 - MCAT(2) = 7 ! Cat. 2 + MCAT(1) = 14 ! Cat. 1 + MCAT(2) = 10 ! Cat. 2 MCAT(3) = 6 ! Cat. 3 MCAT(4) = 5 ! Cat. 4 MCAT(5) = 9 ! Cat. 5 MCAT(6) = 11 ! Cat. 6 MCAT(7) = 13 ! Cat. 51 MCAT(8) = 4 ! Cat. 8 + MCAT(9) = 14 ! Cat. 10 incl. CH 01/19/2021 C LVDX defines location in UNP holding the no. of levels for each cat. @@ -1400,6 +1467,7 @@ FUNCTION IW3UNPBF(LUNIT,OBS,STNID,CRES1,CRES2,CBULL,OBS2,OBS3, LVDX(6) = 23 ! Cat. 6 LVDX(7) = 29 ! Cat. 51 LVDX(8) = 27 ! Cat. 8 + LVDX(9) = 31 ! Cat. 10 incl. CH 01/19/2021 ISET = 0 END IF @@ -1695,7 +1763,8 @@ FUNCTION IW3UNPBF(LUNIT,OBS,STNID,CRES1,CRES2,CBULL,OBS2,OBS3, C*********************************************************************** FUNCTION I02UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8,SUBSKP,IER) - PARAMETER (MAXOBS=3500) +C PARAMETER (MAXOBS=3500) + PARAMETER (MAXOBS=4500) COMMON/IUBFCC/SUBSET COMMON/IUBFOO/DSNAMX,IDSDAX_8,IDSDMX_8 @@ -1911,7 +1980,11 @@ FUNCTION C01UBF(SUBSET) C01UBF = 'SFCBOG' END IF ELSE IF(SUBSET(1:5).EQ.'NC002') THEN - C01UBF = 'ADPUPA' + IF(SUBSET(6:6).EQ.'1') THEN + C01UBF = 'UPRAIR' + ELSE + C01UBF = 'ADPUPA' + END IF ELSE IF(SUBSET(1:5).EQ.'NC004') THEN IF(SUBSET(6:8).EQ.'004' .OR. SUBSET(6:8).EQ.'007') THEN C01UBF = 'AIRCAR' @@ -1950,7 +2023,7 @@ FUNCTION R01UBF(SUBSET,LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) R01UBF = 4 ADPSUB = C01UBF(SUBSET) - IF(ADPSUB .EQ. 'ADPUPA') THEN + IF(ADPSUB .EQ. 'ADPUPA' .OR. ADPSUB .EQ. 'UPRAIR') THEN R01UBF = R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) ELSE IF(ADPSUB(1:3).EQ.'AIR') THEN R01UBF = R05UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) @@ -1971,7 +2044,7 @@ SUBROUTINE S01UBF(SID,XOB,YOB,RHR,RCTIM,RSV1,RSV2,ELV,QMELV,ITP, $ RTP,RSTP,IDS) C ---> PROCESSES HEADER - PARAMETER (NUMCAT=8, LEVLIM=300) + PARAMETER (NUMCAT=9, LEVLIM=300) COMMON/IUBFAA/BMISS COMMON/IUBFDD/HDR(12),RCATS(50,LEVLIM,NUMCAT),IKAT(NUMCAT), @@ -2046,16 +2119,17 @@ SUBROUTINE S01UBF(SID,XOB,YOB,RHR,RCTIM,RSV1,RSV2,ELV,QMELV,ITP, SUBROUTINE S02UBF(ICAT,N,*) C ---> PROCESSES DATA LEVEL CATEGORIES - PARAMETER (NUMCAT=8, LEVLIM=300) + PARAMETER (NUMCAT=9, LEVLIM=300) -C Input argument ICAT - the category number (1,2,3,4,5,6,8,51) +C Input argument ICAT - the category number (1,2,3,4,5,6,8,10,51) C Input argument N - level indicator (unless = 0, then signals C subr. to write an empty cat. 2,3, or 4 level COMMON/IUBFDD/HDR(12),RCATS(50,LEVLIM,NUMCAT),IKAT(NUMCAT), $ MCAT(NUMCAT),NCAT(NUMCAT),LVDX(NUMCAT) COMMON/IUBFEE/POB(255),QOB(255),TOB(255),ZOB(255),DOB(255), - $ SOB(255),VSG(255),OB8(255),CF8(255) + $ SOB(255),VSG(255),OB8(255),CF8(255), + $ XDR(255),YDR(255),HRDR(255) COMMON/IUBFFF/PQM(255),QQM(255),TQM(255),ZQM(255),WQM(255) COMMON/IUBFGG/PSL,STP,SDR,SSP,STM,DPD COMMON/IUBFHH/PSQ,SPQ,SWQ,STQ,DDQ @@ -2068,6 +2142,7 @@ SUBROUTINE S02UBF(ICAT,N,*) DIMENSION RCAT(50),JCAT(50) EQUIVALENCE (RCAT(1),JCAT(1)) LOGICAL SURF + REAL(8) BMISS,GETBMISS SAVE @@ -2077,13 +2152,20 @@ SUBROUTINE S02UBF(ICAT,N,*) iprint = 0 cc iprint = 1 -c if(stnidx.eq.'89571 ') iprint = 1 -c if(stnidx.eq.'68906 ') iprint = 1 -c if(stnidx.eq.'68842 ') iprint = 1 -c if(stnidx.eq.'74794 ') iprint = 1 -c if(stnidx.eq.'74389 ') iprint = 1 -c if(stnidx.eq.'96801A ') iprint = 1 +c if(stnidx.eq.'89571 ') iprint = 1 +c if(stnidx.eq.'68906 ') iprint = 1 +c if(stnidx.eq.'68842 ') iprint = 1 +c if(stnidx.eq.'74794 ') iprint = 1 +c if(stnidx.eq.'74389 ') iprint = 1 +c if(stnidx.eq.'96801A ') iprint = 1 +c if(stnidx.eq.'10304 ') iprint = 1 +c if(stnidx.eq.'59316 ') iprint = 1 +c if(stnidx.eq.'70200 ') iprint = 1 +c if(stnidx.eq.'72214 ') iprint = 1 +c if(stnidx.eq.'72215 ') iprint = 1 +c if(stnidx.eq.'72797 ') iprint = 1 cppppp-ID + BMISS = GETBMISS() SURF = .FALSE. GOTO 1 @@ -2126,13 +2208,16 @@ SUBROUTINE S02UBF(ICAT,N,*) RETURN 1 END IF -C MAKE A MISSING LEVEL AND RETURN WHEN N=0 (NOT ALLOWED FOR CAT 01) +C MAKE A MISSING LEVEL AND RETURN WHEN N=0 +C (NOT ALLOWED FOR CAT 01 OR 10) C (NOTE: QUALITY MARKERS ARE SET TO 2 AND SPECIAL LEVEL INDICATORS C ARE SET TO 0) C ----------------------------------------------------------------- IF(N.EQ.0) THEN - IF(ICAT.EQ.1) RETURN + IF((ICAT.EQ.1).OR.(ICAT.EQ.10)) THEN + RETURN + END IF NCAT(KCAT) = MIN(LEVLIM-1,NCAT(KCAT)+1) if(iprint.eq.1) then print'(" To prepare for sfc. data, write all missings on ", @@ -2230,6 +2315,44 @@ SUBROUTINE S02UBF(ICAT,N,*) ELSE RCAT(11) = NINT(WQM(N)) END IF + RCAT(12) = MIN(NINT(HRDR(N)),NINT(BMISS)) + RCAT(13) = MIN(NINT(YDR(N)),NINT(BMISS)) + RCAT(14) = MIN(NINT(XDR(N)),NINT(BMISS)) + ELSEIF(ICAT.EQ.10) THEN + RCAT(1)= MIN(NINT(POB(N)),NINT(RCATS( 1,L,KCAT))) + RCAT(2)= MIN(NINT(ZOB(N)),NINT(RCATS( 2,L,KCAT))) + RCAT(3)= MIN(NINT(TOB(N)),NINT(RCATS( 3,L,KCAT))) + RCAT(4)= MIN(NINT(QOB(N)),NINT(RCATS( 4,L,KCAT))) + RCAT(5)= MIN(NINT(DOB(N)),NINT(RCATS( 5,L,KCAT))) + RCAT(6)= MIN(NINT(SOB(N)),NINT(RCATS( 6,L,KCAT))) + IF(RCATS(7,L,KCAT).LT.IMISS) THEN + RCAT(7)= MAX(NINT(PQM(N)),NINT(RCATS( 7,L,KCAT))) + ELSE + RCAT(7)= NINT(PQM(N)) + END IF + IF(RCATS(8,L,KCAT).LT.IMISS) THEN + RCAT(8)= MAX(NINT(ZQM(N)),NINT(RCATS( 8,L,KCAT))) + ELSE + RCAT(8)= NINT(ZQM(N)) + END IF + IF(RCATS(9,L,KCAT).LT.IMISS) THEN + RCAT(9)= MAX(NINT(TQM(N)),NINT(RCATS( 9,L,KCAT))) + ELSE + RCAT(9)= NINT(TQM(N)) + END IF + IF(RCATS(10,L,KCAT).LT.IMISS) THEN + RCAT(10) = MAX(NINT(QQM(N)),NINT(RCATS(10,L,KCAT))) + ELSE + RCAT(10) = NINT(QQM(N)) + END IF + IF(RCATS(11,L,KCAT).LT.IMISS) THEN + RCAT(11) = MAX(NINT(WQM(N)),NINT(RCATS(11,L,KCAT))) + ELSE + RCAT(11) = NINT(WQM(N)) + END IF + RCAT(12) = MIN(NINT(HRDR(N)),NINT(BMISS)) + RCAT(13) = MIN(NINT(YDR(N)),NINT(BMISS)) + RCAT(14) = MIN(NINT(XDR(N)),NINT(BMISS)) ELSEIF(ICAT.EQ.2) THEN RCAT(1) = MIN(NINT(POB(N)),IMISS) RCAT(2) = MIN(NINT(TOB(N)),IMISS) @@ -2238,6 +2361,9 @@ SUBROUTINE S02UBF(ICAT,N,*) RCAT(5) = NINT(TQM(N)) RCAT(6) = NINT(QQM(N)) RCAT(7) = NINT(XIND(N)) + RCAT(8) = MIN(NINT(HRDR(N)),NINT(BMISS)) + RCAT(9) = MIN(NINT(YDR(N)),NINT(BMISS)) + RCAT(10)= MIN(NINT(XDR(N)),NINT(BMISS)) ELSEIF(ICAT.EQ.3) THEN RCAT(1) = MIN(NINT(POB(N)),IMISS) RCAT(2) = MIN(NINT(DOB(N)),IMISS) @@ -2315,7 +2441,7 @@ SUBROUTINE S02UBF(ICAT,N,*) C ------------------------------------------------------- RCATS(1:MCAT(KCAT),L,KCAT) = RCAT(1:MCAT(KCAT)) - + RETURN END C*********************************************************************** @@ -2324,7 +2450,8 @@ SUBROUTINE S02UBF(ICAT,N,*) SUBROUTINE S03UBF(UNP,SUBSET,*,*,*) C ---> PACKS DATA INTO UNP ARRAY - PARAMETER (NUMCAT=8, LEVLIM=300, MAXOBS=3500) +C PARAMETER (NUMCAT=9, LEVLIM=300, MAXOBS=3500) + PARAMETER (NUMCAT=9, LEVLIM=300, MAXOBS=4500) COMMON/IUBFDD/HDR(12),RCATS(50,LEVLIM,NUMCAT),IKAT(NUMCAT), $ MCAT(NUMCAT),NCAT(NUMCAT),LVDX(NUMCAT) @@ -2397,7 +2524,7 @@ SUBROUTINE S03UBF(UNP,SUBSET,*,*,*) UNP(1:12) = HDR UNP(13:52) = RCAT(13:52) - + RETURN END C*********************************************************************** @@ -2406,7 +2533,7 @@ SUBROUTINE S03UBF(UNP,SUBSET,*,*,*) SUBROUTINE S04UBF C ---> SORTS DATA LEVEL CATEGORIES - PARAMETER (NUMCAT=8, LEVLIM=300) + PARAMETER (NUMCAT=9, LEVLIM=300) COMMON/IUBFAA/BMISS COMMON/IUBFDD/HDR(12),RCATS(50,LEVLIM,NUMCAT),IKAT(NUMCAT), @@ -2429,7 +2556,7 @@ SUBROUTINE S04UBF $ 30.,20.,10./ C INSERT DATA LEVEL CATEGORY 1 PRESSURE & DEF. Q.M.'S INTO THOSE LEVELS -C WHERE MSSING +C WHERE MISSING C --------------------------------------------------------------------- DO I=1,NCAT(1) @@ -2765,7 +2892,7 @@ FUNCTION R02UBF() ERTUBF = 534 END IF ELSE IF(SUBSET(1:5).EQ.'NC002') THEN - IF(SUBSET(6:8).EQ.'001') THEN + IF(SUBSET(7:8).EQ.'01') THEN C LAND RADIOSONDE - FIXED C ----------------------- @@ -2773,26 +2900,26 @@ FUNCTION R02UBF() ERTUBF = 011 IF(L03UBF(RPID)) ERTUBF = 012 IF(RPID(1:4).EQ.'CLAS') ERTUBF = 013 - ELSE IF(SUBSET(6:8).EQ.'002') THEN + ELSE IF(SUBSET(7:8).EQ.'02') THEN C LAND RADIOSONDE - MOBILE C ------------------------ ERTUBF = 013 - ELSE IF(SUBSET(6:8).EQ.'003') THEN + ELSE IF(SUBSET(7:8).EQ.'03') THEN C SHIP RADIOSONDE C --------------- ERTUBF = 022 IF(RPID(1:4).EQ.'SHIP') ERTUBF = 023 - ELSE IF(SUBSET(6:8).EQ.'004') THEN + ELSE IF(SUBSET(7:8).EQ.'04') THEN C DROPWINSONDE C ------------- ERTUBF = 031 - ELSE IF(SUBSET(6:8).EQ.'005') THEN + ELSE IF(SUBSET(7:8).EQ.'05') THEN C PIBAL C ----- @@ -2910,7 +3037,7 @@ FUNCTION L01UBF() FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) C ---> PROCESSES ADPUPA DATA (002/*, 004/005) - PARAMETER (NUMCAT=8, LEVLIM=300) + PARAMETER (NUMCAT=9, LEVLIM=300, MXLV=19999) COMMON/IUBFAA/BMISS COMMON/IUBFBB/KNDX,KSKACF(8),KSKUPA,KSKSFC,KSKSAT,KFLSAT(12), @@ -2919,28 +3046,32 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) COMMON/IUBFDD/HDR(12),RCATS(50,LEVLIM,NUMCAT),IKAT(NUMCAT), $ MCAT(NUMCAT),NCAT(NUMCAT),LVDX(NUMCAT) COMMON/IUBFEE/POB(255),QOB(255),TOB(255),ZOB(255),DOB(255), - $ SOB(255),VSG(255),OB8(255),CF8(255) + $ SOB(255),VSG(255),OB8(255),CF8(255), + $ XDR(255),YDR(255),HRDR(255) COMMON/IUBFFF/PQM(255),QQM(255),TQM(255),ZQM(255),WQM(255) COMMON/IUBFII/PWMIN COMMON/IUBFLL/Q81(255),Q82(255) COMMON/IUBFMM/XIND(255) - CHARACTER*80 HDSTR,LVSTR,QMSTR,RCSTR - CHARACTER*8 SUBSET,SID,RSV1,RSV2 + CHARACTER*80 HDSTR,LVSTR,QMSTR,RCSTR,HDSTB + CHARACTER*8 SUBSET,SID,RSV1,RSV2,BHD,BQ,RID2(750) REAL(8) RID_8,HDR_8(12),VSG_8(255),OBS2_8(43),OBS3_8(5,255,7), $ RCT_8(5,255),ARR_8(10,255),RAT_8(255),RMORE_8(4),RGP10_8(255), - $ PRGP10_8(255),RPMSL_8,RPSAL_8,BMISS,AMINIMUM_8,obs8_8(2) + $ PRGP10_8(255),RPMSL_8,RPSAL_8,BMISS,AMINIMUM_8,obs8_8(2), + $ VSGX8(MXLV),ARRX(10,MXLV),BHD8 DIMENSION OBS(*),OBS2(43),OBS3(5,255,7),NOBS3(7),RCT(5,255), $ ARR(10,255), RAT(255),RMORE(4),RGP10(255),PRGP10(255),P2(255), - $ P8(255),P16(255) + $ P8(255),P16(255),NUSL(MXLV) - EQUIVALENCE (RID_8,SID) + EQUIVALENCE (RID_8,SID),(BHD8,BHD) LOGICAL L02UBF SAVE DATA HDSTR/'NUL CLON CLAT HOUR MINU SELV '/ - DATA LVSTR/'PRLC TMDP TMDB GP07 GP10 WDIR WSPD '/ + DATA HDSTB/'NUL CLONH CLATH HOUR MINU HBMSL HEIT '/ ! BUFR + DATA LVSTR/'PRLC TMDP TMDB GP07 GP10 WDIR WSPD + $ LTDS LATDH LONDH '/ DATA QMSTR/'QMPR QMAT QMDD QMGP QMWN '/ DATA RCSTR/'RCHR RCMI RCTS '/ @@ -2966,6 +3097,57 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) OBS3_8 = BMISS NOBS3 = 0 obs8_8 = bmiss + NBFLG = 0 + NBMX = 4 + NSKP = 0 + + CALL UFBINT(LUNIT,RID_8,1,1,IRET,'RPID') + IF(IRET.EQ.0.OR.IBFMS(RPID_8).NE.0) THEN + CALL UFBINT(LUNIT,RID_8,1,1,IRET,'WGOSLID') + CALL READLC(LUNIT,SID,'WIGOSLID') + IF(ICBFMS(SID,8).NE.0) SID = 'MISSING ' + ELSE + CALL READLC(LUNIT,SID,'RPID') + ENDIF + +CC ANALYZE BUHD CONTENT PRIOR TO VSIG/VSIGX READ CH 12/18/2020 +CC AND TO ADPUPA/UPRAIR CONTENT READ rev 03/23/2022 + CALL UFBINT(LUNIT,BHD8,1,1,IRET,'BUHD') + CALL READLC(LUNIT,BHD,'BUHD') + + IF (BHD(1:2).EQ.'IU') THEN + READ(BHD(5:5),'(I1)') IFTH + NBFLG = 9 + IF (BHD(3:3).EQ.'W') NBFLG = 1 + IF (BHD(3:3).EQ.'J') NBFLG = 2 + IF((BHD(3:3).EQ.'D').AND.(SID(6:6).EQ.'A')) NBFLG = 2 +CCdesc revisit for descending radiosonde profiles + IF (BHD(3:3).EQ.'K') NBFLG = 2 + IF((BHD(3:3).EQ.'K').AND.(IFTH.LE.5)) NBFLG = 3 + IF (BHD(3:3).EQ.'S') NBFLG = 3 + IF((BHD(3:3).EQ.'S').AND.(IFTH.LE.5)) NBFLG = 4 +CCdesc IF (BHD(3:3).EQ.'X')) NBFLG = 5 + IF (SUBSET(1:6).EQ.'NC0021') WRITE(95,'(A8,1X,A8)') SID, BHD + END IF + + IF (SUBSET(1:6).EQ.'NC0020') THEN + NX=1 + IRT=0 + RID2='' + OPEN(92,IOSTAT=INP) + IF(INP.EQ.0) THEN + REWIND 92 + DO WHILE (NX.LT.700.AND.NSKP.EQ.0.AND.IRT.EQ.0) + READ(92,'(A8,1X,A8)',IOSTAT=IRT) RID2(NX), BQ + IF(SID.EQ.RID2(NX)) NSKP=1 + NX=NX+1 + ENDDO + CLOSE(92) + ENDIF + ENDIF + + IF(NSKP.GT.0) GOTO 9997 ! Skip ADPUPA when duplicating UPRAIR + CALL UFBINT(LUNIT,OBS2_8( 1),2,1,IRET,'RSRD EXPRSRD') CALL UFBINT(LUNIT,OBS2_8( 4),1,1,IRET,'SST1') IF(IBFMS(OBS2_8(4)).EQ.0) OBS2_8(41) = 2.0 @@ -3029,20 +3211,89 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) C 2 Significant level, wind C processed as unpacked category 3 or 4 C +C 128 BUFR Vertical level +C processed as unpacked category 10 +C C NOTE: THIS SUBR. ASSIGNS VSIG=1 TO LEVELS THAT SHOULD BE C PROCESSED AS UNPACKED CATEGORY 6 (ONLY APPLIES TO C RECCOS) C C anything else - the level is not processed - - CALL UFBINT(LUNIT,VSG_8,1,255,NLEV,'VSIG');VSG=VSG_8 + + VSG_8 = BMISS + VSGX8 = BMISS + VLINC = BMISS + NUSL = 0 + +CC USE NBFLG TO CHOOSE VSIG OR VSIGX CH 12/18/2020 +CC rev 03/23/2022 + IF(NBFLG.EQ.0) + +CALL UFBINT(LUNIT,VSG_8,1,255,NLEV,'VSIG') + + IF ((NBFLG.GE.1).AND.(NBFLG.LE.NBMX)) THEN +CC VSIGXs ARE READ INTO A LARGER ARRAY CH 11/12/2020 + CALL UFBINT(LUNIT,VSGX8,1,MXLV,NLEVX,'VSIGX') +CC +CC COMPUTE AN INTEGER SAMPLE INCREMENT ACCORDING TO NLEVX + IF ((NLEVX.GT.0).AND.(NLEVX.LE.MXLV)) THEN +corig VLINC = MAX(1.0,(REAL(NLEVX)/255.)) + LS = 1 + LX = 1 + SN = 0. + NC = 0 + NC0 =0 + DO L2 = 1,NLEVX + VLINC = MAX(1.0,(REAL(NLEVX)/(255.-SN))) + NC=INT(REAL(L2)/VLINC) + IF (LS.LE.255) THEN +CC VSIG = VSIGX / 2048, INITIALLY + VSG_8(LS) = VSGX8(L2)/2048. + IF (VSGX8(L2).EQ.0.) VSG_8(LS) = 128. + IF ((VSG_8(LS).GE.1.).AND.(VSG_8(LS).LT.128.)) THEN + DO LE = 0,6 + LF = 2.**LE + LF1 = 2.**(LE+1) + IF ((VSG_8(LS).GE.LF).AND.(VSG_8(LS).LT.LF1)) THEN + IF(LE.LE.1) VSG_8(LS) = LF1 + IF(LE.GE.2) VSG_8(LS) = LF + ENDIF + ENDDO + ENDIF +CC SAVE MANDATORY LEVELS + IF (VSG_8(LS).EQ.64.) NUSL(L2) = 1 + IF (VSG_8(LS).EQ.32.) THEN + NUSL(L2) = 1 + SN = SN + 1. + ENDIF +CC SAVE INCREMENTAL LEVELS + IF ((NC.EQ.LX).AND.(NC.GT.NC0)) THEN + NUSL(L2) = 1 + LX = LX + 1 + NC0=NC + ENDIF + IF (NUSL(L2).EQ.1) LS = LS + 1 + ENDIF +CC STEP TO THE NEXT LEVEL + ENDDO + NLEV=MIN(LS,255) + ENDIF + ENDIF +CC END VSIGX ANALYSIS CH 11/12/2020 (rev 11/30/2022) + VSG=VSG_8 C PUT THE HEADER INFORMATION INTO UNPACKED FORMAT C ----------------------------------------------- - - CALL UFBINT(LUNIT,HDR_8,12, 1,IRET,HDSTR);HDR=HDR_8 + + HDR_8=BMISS + CALL UFBINT(LUNIT,HDR_8,12, 1,IRET,HDSTR) + IF((HDR_8(2).GE.BMISS).AND.(HDR_8(3).GE.BMISS)) THEN + CALL UFBINT(LUNIT,HDR_8,12, 1,IRET,HDSTB) + ENDIF + HDR=HDR_8 IF(HDR(5).GE.BMISS) HDR(5) = 0 - CALL UFBINT(LUNIT,RID_8,1,1,IRET,'RPID') + +cCC CALL UFBINT(LUNIT,RID_8,1,1,IRET,'RPID') + cccc IF(IRET.NE.1.OR.(RID_8.GT.BMISS-5000..AND.RID_8.LT.BMISS+5000.)) cccc $ SID = 'MISSING ' cxxxx @@ -3054,7 +3305,9 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) C above line not working right - may return 0 when missing, so use next C two lines below temporarily until this is fixed (readlc will return C all blanks for sid when mnemonic "RPID" not found) - dak 2/19/13 - call readlc(lunit,sid,'RPID') + +cCC call readlc(lunit,sid,'RPID') + cpppppppppp cc print'(" sid = """,A,"""")', sid cpppppppppp @@ -3063,14 +3316,20 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) cppppp-ID iprint = 0 cc iprint = 1 -c if(sid.eq.'89571 ') iprint = 1 -c if(sid.eq.'68906 ') iprint = 1 -c if(sid.eq.'68842 ') iprint = 1 -c if(sid.eq.'59362 ') iprint = 1 -c if(sid.eq.'57957 ') iprint = 1 -c if(sid.eq.'74794 ') iprint = 1 -c if(sid.eq.'74389 ') iprint = 1 -c if(sid.eq.'96801A ') iprint = 1 +c if(sid.eq.'89571 ') iprint = 1 +c if(sid.eq.'68906 ') iprint = 1 +c if(sid.eq.'68842 ') iprint = 1 +c if(sid.eq.'59362 ') iprint = 1 +c if(sid.eq.'57957 ') iprint = 1 +c if(sid.eq.'74794 ') iprint = 1 +c if(sid.eq.'74389 ') iprint = 1 +c if(sid.eq.'96801A ') iprint = 1 +c if(sid.eq.'10304 ') iprint = 1 +c if(sid.eq.'57461 ') iprint = 1 +c if(sid.eq.'71811 ') iprint = 1 +c if(sid.eq.'70200 ') iprint = 1 +c if(sid.eq.'72215 ') iprint = 1 +c if(sid.eq.'72786 ') iprint = 1 if(iprint.eq.1) $ print'(" @@@ START DIAGNOSTIC PRINTOUT FOR ID ",A)', sid cppppp-ID @@ -3129,7 +3388,9 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) RCTIM = BMISS RSV1 = ' ' RSV2 = ' ' + ELV = BMISS ELV = HDR(6) + IF (ELV.GE.BMISS) ELV = HDR(7) QMELV = XMISS CALL UFBINT(LUNIT,RAT_8, 1,255,NLEV,'RATP');RAT=RAT_8 @@ -3137,7 +3398,8 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) RTP = ERTUBF(SUBSET,SID) IDS = IMISS IF(ELV.GE.BMISS) THEN - IF((RTP.GT.20.AND.RTP.LT.24).OR.SUBSET.EQ.'NC002004') THEN + IF((RTP.GT.20.AND.RTP.LT.24) + $ .OR.(RPT.EQ.31.AND.SUBSET.NE.'NC004005')) THEN print'(" IW3UNPBF/R03UBF: ID ",A," has a missing elev, so ", $ "elevation set to ZERO")', sid ELV = 0 @@ -3161,8 +3423,35 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) C PUT THE LEVEL DATA INTO SPECIFIED UNPACKED FORMAT C ------------------------------------------------- - - CALL UFBINT(LUNIT,ARR_8,10,255,NLEV,LVSTR);ARR=ARR_8 + + IF(NBFLG.EQ.0) + +CALL UFBINT(LUNIT,ARR_8,10,255,NLEV,LVSTR) + +CCCCCCCCCCCCCCCCCCCv CH 11/12/2020 + + IF((NBFLG.GE.1).AND.(NBFLG.LE.NBMX)) THEN +CC WITH VSIGX, VARIABLES ARE READ INTO LARGER ARRAY + CALL UFBINT(LUNIT,ARRX,10,MXLV,NLEVX,LVSTR) +C +C + IF ((NLEVX.GT.0).AND.(NLEVX.LE.MXLV)) THEN + LS = 1 + DO L2 = 1,NLEVX + IF (NUSL(L2).EQ.1) THEN +CC ARRX -> ARR_8 + DO MS = 1,10 + ARR_8(MS,LS) = ARRX(MS,L2) + ENDDO + LS = LS + 1 + ENDIF +CC STEP TO THE NEXT LEVEL + ENDDO + NLEV=MIN(LS,255) + ENDIF + ENDIF + + ARR=ARR_8 +CCCCCCCCCCCCCCCCCCC^ CH 11/12/2020 PWMIN = 999999. @@ -3201,15 +3490,58 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) ELSE IF(NINT(DOB(L)).EQ.360.AND.NINT(SOB(L)).EQ.0) THEN DOB(L) = 0 END IF - if(iprint.eq.1) then + IF(ARR(8,L).LT.BMISS) THEN + HRDR(L) = NINT(ARR(8,L)) + ELSE + HRDR(L) = BMISS + END IF + IF(ARR(9,L).LT.BMISS) THEN + YDR(L) = NINT((ARR(9,L)*100000)) + ELSE + YDR(L) = BMISS + END IF + IF(ARR(10,L).LT.BMISS) THEN + XDR(L) = NINT((ARR(10,L)*100000)) + ELSE + XDR(L) = BMISS + END IF +C if(iprint.eq.1) then print'(" At lvl=",I0,"; VSG=",G0,"; POB = ",G0,"; QOB = ", $ G0,"; TOB = ",G0,"; ZOB = ",G0,"; DOB = ",G0,"; SOB = ", - $ G0)', L,vsg(L),pob(L),qob(L),tob(L),zob(L),dob(L),sob(L) - end if + $ G0,"; HRDR = ",G0,"; XDR = ",G0,"; YDR = ",G0,"; fin")', L, + $ vsg(L),pob(L),qob(L),tob(L),zob(L),dob(L),sob(L),hrdr(L), + $ ydr(L),xdr(L) +C end if IF(MAX(POB(L),DOB(L),SOB(L)).LT.BMISS) PWMIN =MIN(PWMIN,POB(L)) ENDDO - CALL UFBINT(LUNIT,ARR_8,10,255,NLEV,QMSTR);ARR=ARR_8 + IF(NBFLG.EQ.0) + +CALL UFBINT(LUNIT,ARR_8,10,255,NLEV,QMSTR) + +CCCCCCCCCCCCCCCCCCCv CH 11/12/2020 + + IF((NBFLG.GE.1).AND.(NBFLG.LE.NBMX)) THEN +CC WITH VSIGX, VARIABLES ARE READ INTO LARGER ARRAY + CALL UFBINT(LUNIT,ARRX,10,MXLV,NLEVX,QMSTR) +CC + IF ((NLEVX.GT.0).AND.(NLEVX.LE.MXLV)) THEN + LS = 1 + DO L2 = 1,NLEVX + IF (NUSL(L2).EQ.1) THEN +CC ARRX -> ARR_8 + DO MS = 1,10 + ARR_8(MS,LS) = ARRX(MS,L2) + ENDDO + LS = LS + 1 + ENDIF +CC STEP TO THE NEXT LEVEL + ENDDO + NLEV=MIN(LS,255) + ENDIF + ENDIF + + ARR=ARR_8 +CCCCCCCCCCCCCCCCCCC^ CH 11/12/2020 DO L=1,NLEV PQM(L) = EQMUBF(ARR(1,L)) @@ -3256,7 +3588,8 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) CALL SE01UBF(4,L) END IF VSG(L) = 0 - ELSE IF(NINT(VSG(L)).EQ.2) THEN + ELSE IF (NBFLG.EQ.0) THEN + IF(NINT(VSG(L)).EQ.2) THEN P2(L) = POB(L) INDX2 = L IF(INDX8.GT.0) THEN @@ -3341,6 +3674,7 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) INDX16 = INDX16 + 1 P16(INDX16) = POB(L) END IF + ENDIF ! end check NBFLG ENDDO LOOP1 @@ -3371,7 +3705,29 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) VSG(L) = 0 END IF END IF - ELSE IF(NINT(VSG(L)).EQ. 4) THEN +Ccccccc v CH 01/19/2021 + ELSE IF ((NINT(VSG(L)).EQ.128).OR. + + ((NBFLG.GE.1).AND.(NBFLG.LE.NBMX))) THEN +C PROCESS ALL VALID LEVELS FROM BUFR PROFILE CH 11/30/2022 + IF(MIN(DOB(L),ZOB(L),TOB(L)).GE.BMISS) THEN + if(iprint.eq.1) then + print'(" ==> For lvl ",I0,"; VSG=",F4.0" & DOB,ZOB," + $ " TOB are all missing --> this level is not ", + + " processed")', L, VSG(L) + end if + VSG(L) = 0 + ELSE + if(iprint.eq.1) then + print'("==> For lvl ",I0,"; VSG=",F4.0," & one or", + $ "more of ZOB,TOB,DOB non-missing --> valid cat.10 ", + $ "lvl")', L, VSG(L) + end if + CALL S02UBF(10,L,*9999) !! BUFR levels + VSG(L) = 0 + END IF +Ccccccccc ^ + + ELSE IF((NINT(VSG(L)).EQ. 4).AND.(NBFLG.EQ.0)) THEN if(iprint.eq.1) then print'(" ==> For lvl ",I0,"; VSG= 4 --> valid cat. 2 ", $ "lvl")', L @@ -3394,7 +3750,7 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) END IF CALL S02UBF(2,L,*9999) VSG(L) = 0 - ELSEIF(NINT(VSG(L)).EQ.16) THEN + ELSEIF((NINT(VSG(L)).EQ.16).AND.(NBFLG.EQ.0)) THEN if(iprint.eq.1) then print'(" ==> For lvl ",I0,"; VSG=16 --> valid cat. 5 ", $ "lvl")', L @@ -3440,7 +3796,7 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) cpppppppppp CALL S02UBF(6,L,*9999) VSG(L) = 0 - ELSEIF(NINT(VSG(L)).EQ. 2) THEN + ELSEIF((NINT(VSG(L)).EQ. 2).AND.(NBFLG.EQ.0)) THEN IF(POB(L).LT.BMISS) THEN IF(MAX(SOB(L),DOB(L)).LT.BMISS) THEN if(iprint.eq.1) then @@ -3496,7 +3852,7 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) END IF VSG(L) = 0 END IF - ELSEIF(NINT(VSG(L)).EQ. 8) THEN + ELSEIF((NINT(VSG(L)).EQ. 8).AND.(NBFLG.EQ.0)) THEN IF(POB(L).LT.BMISS) THEN if(iprint.eq.1) then print'(" ==> For lvl ",I0,"; VSG= 8 & POB .ne. ", @@ -3605,7 +3961,14 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) CALL S02UBF(8,L,*9999) ENDDO - CALL UFBINT(LUNIT,RMORE_8,4,1,NRMORE,'SIRC TTSS UALNHR UALNMN') + IF(NBFLG.EQ.0) + +CALL UFBINT(LUNIT,RMORE_8,4,1,NRMORE,'SIRC TTSS UALNHR UALNMN') +CCCCCCCCCCCCCCCCCCCv CH 11/13/2020 + IF((NBFLG.GT.0).AND.(NBFLG.LE.NBMX)) THEN + CALL UFBINT(LUNIT,RMORE_8,2,1,NRMORE,'SIRC TTSS') + CALL UFBINT(LUNIT,RMORE_8(3),2,1,NRMORE,'HOUR MINU') + END IF +CCCCCCCCCCCCCCCCCCC^ CH 11/13/2020 RMORE=RMORE_8 IF(MAX(RMORE(3),RMORE(4)).LT.BMISS) THEN CF8(1) = 104 @@ -3660,7 +4023,7 @@ FUNCTION R03UBF(LUNIT,OBS,OBS2,OBS3,NOBS3,obs8_8) RETURN 9998 CONTINUE print'("IW3UNPBF/R03UBF: RPT with ID= ",A," TOSSED - ZERO ", - $ "CAT.1-6,51 LVLS")', SID + $ "CAT.1-6,10,51 LVLS")', SID 9997 CONTINUE R03UBF = -9999 KSKUPA =KSKUPA + 1 diff --git a/sorc/prepobs_prepdata.fd/prepdata.f b/sorc/prepobs_prepdata.fd/prepdata.f index 885f323..cd2d5a5 100644 --- a/sorc/prepobs_prepdata.fd/prepdata.f +++ b/sorc/prepobs_prepdata.fd/prepdata.f @@ -1334,9 +1334,20 @@ C feature. C 2020-09-14 S. Melchior -- In subroutine PREP, added ability to C process new WMO BUFR sequence Meteosat AMV data from subsets: -C 005067, 005068, 005069. +C 005067, 005068, 005069. +C 2021-04-22 C. Hill / J. Woollen / J. Ator -- +C The BUFR library with dynamic memory allocation is invoked, +C and the BUFR parameters MAXSS and MXMSGL are each increased to +C 600000 to accommodate the initial read of high-resolution +C radiosonde/dropsonde data from the 'uprair' dump files. +C ISETPRM calls are placed before the first BUFR library call, +C to SETBMISS. C 2022-05-15 I. Genkova -- In subroutine SATEDS, updated IDSAT(4) to C IDSAT(8) to accomodate WCOSS2 compiler +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. C C C USAGE: @@ -1393,7 +1404,7 @@ C UNIT EE+4 - 'PROFLR' BUFR DATA DUMP FILE (WIND PROFILER) C UNIT EE+5 - 'VADWND' BUFR DATA DUMP FILE (NEXRAD VAD WINDS) C UNIT EE+6 - 'RASSDA' BUFR DATA DUMP FILE (RASS TEMPERATURES) -C UNIT EE+7 - ** RESERVED FOR FUTURE USE ** +C UNIT EE+7 - 'UPRAIR' BUFR DATA DUMP FILE (BUFR RAOB/PIBAL/DROPS) C UNIT EE+8 - ** RESERVED FOR FUTURE USE ** C UNIT EE+9 - ** RESERVED FOR FUTURE USE ** C @@ -2872,9 +2883,11 @@ PROGRAM PREPOBS_PREPDATA C IN THE DAT AND TMP ARRAYS (UPPER-AIR DATA) C PARAMETER NAME "NUMQMS" THROUGHOUT PGM SETS NO. OF OBS. PREPBUFR TBL C VALUES IN THE IQ (EQUIV. TO DAT) & JQ (EQUIV. TO TMP) ARRAYS (U-AIR) - PARAMETER (NUMVAR = 6, NUMQMS = 5) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) +C PARAMETER (NUMVAR = 9, NUMQMS = 5) C PARAMETER NAME "NUMDAT" THROUGHOUT PGM SETS SIZE OF DAT AND TMP ARRAYS - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) +C PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) C PARAMETER NAME "NUMTYP" THROUGHOUT PGM SETS NO. OF POSSIBLE MASS C REPORT TYPES (NUMBER OF POSSIBLE WIND REPORT TYPES IS SAME AS THIS) @@ -2882,7 +2895,7 @@ PROGRAM PREPOBS_PREPDATA C PARAMETER NAME "MAXOBS" THROUGHOUT PGM SETS MAX SIZE OF OBS ARRAY C IN INTERFACE WITH SUBROUTINE IW3UNPBF - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) CHARACTER*4 c2many_lvls CHARACTER*5 CTYPE(2) @@ -2895,7 +2908,7 @@ PROGRAM PREPOBS_PREPDATA $ SWNLND,MARLND,PG4243,SPCIAL,FILLZ,FILLT,FILLW,FILLM,KTEMP,TR80KM, $ PRFLER,TOVBFR,RECSLM,GOESPW,GOESCT,VADWIN,TOVRAD,TOVRTV, $ PFRALT,AIFNOW,FLDMGS,FLDMAF,FLDMFR,FLACMS,GOESRD,PREVEN,APPEND, - $ SUBSKP,RASS,WRMISS,SKGP45,npkrpt,SKGNSS + $ SUBSKP,RASS,WRMISS,SKGP45,npkrpt,SKGNSS,UPRAIR REAL(8) BMISS,GETBMISS,alon_8,alat_8 INTEGER KTYPE(NUMTYP-1),NTYPE(NUMTYP-1),JITSM(NUMTYP), $ JITSW(NUMTYP),IDATA(MAXOBS),IDAT(8) @@ -2930,7 +2943,7 @@ PROGRAM PREPOBS_PREPDATA COMMON/COUNT/KKTYPE(100:299) COMMON/PARM2/PG4243,KTEMP,i2many_lvls COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/PARM4/ICODE COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ COMMON/PARM6/MODPRT,IFLUA,STNPRT(3) @@ -3106,7 +3119,7 @@ PROGRAM PREPOBS_PREPDATA $ VWINDO,TOVRAD,TOVRTV,PFRALT,IEWNDO,JPERSD,AIFNOW,FLDMGS,FLDMAF, $ GOESRD,IVADFL,IVADSP,ISATLS,DWINDO,JPQKSD,IQWNDO,GOESCT,APPEND, $ FLACMS,IACFTH,SUBSKP,JPGPSD,GWINDO,RASS,TWINDO,JPWDSD,IWWNDO, - $ FLDMFR,WRMISS,SKGP45,JPASCD,IAWNDO,npkrpt,SKGNSS + $ FLDMFR,WRMISS,SKGP45,JPASCD,IAWNDO,npkrpt,SKGNSS,UPRAIR NAMELIST/PARM/IUNIT CALL W3TAGB('PREPOBS_PREPDATA',2022,0105,0050,'EMC') C DETERMINE MACHINE WORD LENGTH (BYTES) FOR BOTH INTEGERS AND REALS @@ -3214,9 +3227,16 @@ PROGRAM PREPOBS_PREPDATA C overflow when either an INTEGER*4 variable is set to BMISS or a C REAL*8 (or REAL*4) variable that is missing is NINT'd C ------------------------------------------------------------------- + + CALL ISETPRM ( 'MXMSGL', 600000 ) ! CH 04/15/21, moved 04/22/21 + CALL ISETPRM ( 'MAXSS', 600000 ) ! CH 04/15/21, moved 04/22/21 +CCC above lines moved to here from +CCC 8 places below at suggestion +CCC of J. Wollen ccccc CALL SETBMISS(10E10_8) CALL SETBMISS(10E8_8) BMISS=GETBMISS() + CALL MAXOUT(50000) ! CH 08/09/21 print'(1X)' print'(" BUFRLIB value for missing is: ",G0)', bmiss print'(1X)' @@ -3844,6 +3864,7 @@ PROGRAM PREPOBS_PREPDATA C UNIT EE+4 - 'PROFLR' BUFR DATA DUMP FILE (WIND PROFILER) C UNIT EE+5 - 'VADWND' BUFR DATA DUMP FILE (NEXRAD VAD WINDS) C UNIT EE+6 - 'RASSDA' BUFR DATA DUMP FILE (RASS TEMPERATURES) +C UNIT EE+7 - 'UPRAIR' BUFR DATA DUMP FILE (BUFR RAOB/PIBAL/DROPS) C (WHERE EE IS UNIT NUMBER DEFINED AS IUNIT(5) IN NAMELIST "&PARM") C C OUTPUT FILES: @@ -3861,20 +3882,20 @@ SUBROUTINE PREP PARAMETER (MXTYPV = 3) PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) C PARAMETER NAME "NUMOBS2" THROUGHOUT PGM SETS NO. OF ELEMENTS IN OBS2 C ARRAY PARAMETER (NUMOBS2 = 43) C PARAMETER NAME "MXBLVL" THROUGHOUT PGM SETS MAXIMUM NO. OF REPORT C LEVELS THAT CAN BE PROCESSED AND ENCODED INTO BUFR MESSAGES PARAMETER (MXBLVL = 255) - CHARACTER*8 STNPRT,STNID,FILNAM(7),DSNAME,SUBSET_d,subset_t + CHARACTER*8 STNPRT,STNID,FILNAM(8),DSNAME,SUBSET_d,subset_t CHARACTER*25 DNAME(3) CHARACTER*47 NAME1 CHARACTER*56 NAME2 LOGICAL RECCON,TOVEDS,GOESND,FILLZ,SWNLND,AIRLND,PRFLER, $ SPCIAL,FILLW,FILLT,FILLM,TOVBFR,MARLND,GOESPW,GOESCT,VADWIN, - $ GOESRD,FLRECO,DROPSN,SUBSKP,PROFILERinADPUPA,RASS + $ GOESRD,FLRECO,DROPSN,SUBSKP,PROFILERinADPUPA,RASS,UPRAIR INTEGER IDATA(MAXOBS),MDATE(4) INTEGER(8) IDSDAT,IDSDMP_8 REAL(8) BMISS,obs8_8,alon_8,alat_8 @@ -3903,7 +3924,7 @@ SUBROUTINE PREP COMMON/RADANC/RTRAD(35),GRAD(18),IGCHN(18),SOZANG,SAZANG,OZONE, $ SKINT,CLDAMT,TOVRAD,TOVRTV,GOESRD(2) COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/PARM4/ICODE COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ COMMON/PARM6/MODPRT,IFLUA,STNPRT(3) @@ -3928,8 +3949,8 @@ SUBROUTINE PREP COMMON /BUFRLIB_MISSING/BMISS EQUIVALENCE (IDATA,RDATA) DATA XMISS/99999./,IMISS/99999/ - DATA FILNAM/'ADPUPA ','AIRCAR ','AIRCFT ','SATWND ', - $ 'PROFLR ','VADWND ','RASSDA '/ + DATA FILNAM/'UPRAIR ','AIRCAR ','AIRCFT ','SATWND ', + $ 'PROFLR ','VADWND ','RASSDA ','ADPUPA '/ DATA DNAME/'WIND PROFILER DATA - ', $ 'VAD WIND DATA - .........', $ 'RASS TEMPERATURE DATA - .'/ @@ -4195,6 +4216,8 @@ SUBROUTINE PREP ELSE IF(NN.EQ.7) THEN C CHECK TO SEE IF RASS TMPERATURE DATA SHOULD BE PROCESSED IF(.NOT.RASS) GO TO 7001 + ELSE IF(NN.EQ.8) THEN + IF(.NOT.UPRAIR) GO TO 7001 END IF IFLAG = 0 JFLAG = 0 @@ -4209,7 +4232,7 @@ SUBROUTINE PREP C*********************************************************************** C*********************************************************************** 2100 CONTINUE - IF(NN.LT.5.OR.(NN.EQ.5.AND.IPRFPIB.GT.0)) THEN + IF(NN.LT.5.OR.(NN.EQ.5.AND.IPRFPIB.GT.0).OR.NN.EQ.8) THEN C*********************************************************************** C CALL UNPREPBF TO UNPACK THE NEXT REPORT {NOT USED FOR WIND PROFILER C (EXCEPT FOR THOSE ORIGINATING FROM PILOT FORMAT BULLETINS), VAD WIND @@ -4364,7 +4387,7 @@ SUBROUTINE PREP END IF 8872 FORMAT(5X,A47,6F6.0,' TO ',6F6.0) PRINT'(1X)' - ELSE IF(NN.EQ.1) THEN + ELSE IF(NN.EQ.1.OR.NN.EQ.8) THEN NAME2 = ' RAOB/PIBAL - ............ MINUS AND PLUS ' PRINT 876, NAME2,UWINDO NAME2 = ' RECONNAISSANCE - ........ MINUS AND PLUS ' @@ -4773,7 +4796,7 @@ SUBROUTINE PREP HDR(6) = ((ISEL(IDATA(9)) + 10) * 10) + INSTR C CHECK FOR VALID DATA, IF NONE UNPACK NEXT REPORT IF(MAX(IDATA(13),IDATA(15),IDATA(17),IDATA(19),IDATA(21), - $ IDATA(35),IDATA(37),IDATA(45)).EQ.0) GO TO 2100 + $ IDATA(31),IDATA(35),IDATA(37),IDATA(45)).EQ.0) GO TO 2100 C....................................................................... C PROCESS RAOB, PIBAL, DROPWINSONE, WIND PROFILER, VAD WIND, RASS AND C CLASS DATA ON MANDATORY AND SIGNIFICANT LEVELS (DATA LEVEL @@ -4803,7 +4826,7 @@ SUBROUTINE PREP PRINT 950, KNTALL 950 FORMAT(19X,'===> A TOTAL OF ',I6,' REPORTS WERE UNPACKED ', $ 'FROM THIS FILE, WHETHER KEPT OR SKIPPED <===',/) - IF(NN.EQ.1.AND.KOUNT.EQ.0) ICODE = 4 + IF((NN.EQ.1.OR.NN.EQ.8).AND.KOUNT.EQ.0) ICODE = 4 KNTUUU(NN) = KOUNT IF(NN.EQ.4.AND.KNTUUU(4).GT.0) THEN C FOR SATWND FILE, CALL SUBROUTINE SWNTBL TO SUMMARIZE RESULTS IN TABLE @@ -4839,7 +4862,7 @@ SUBROUTINE PREP END IF 7001 CONTINUE NN = NN + 1 - IF(NN.LT.8) GO TO 700 + IF(NN.LT.9) GO TO 700 PRINT 5679 5679 FORMAT(/130('.')/130('.')/) FLRECO = .FALSE. @@ -5085,7 +5108,7 @@ SUBROUTINE PREP SUBROUTINE UNPREPBF(IFLAG,CYCLET,IOPENED,DSNAME,IDSDAT,IDSDMP_8,*) PARAMETER (MXWRDH = 15) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*8 STNID,CRES1,CRES2,DSNAME,SUBSET_d CHARACTER*11 CBULL @@ -5403,7 +5426,7 @@ SUBROUTINE LL2IJ(YLAT,WLON,XI,YJ) C$$$ SUBROUTINE RPTLBL(CYCLET) PARAMETER (MXWRDH = 15) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) parameter (MXBLVL = 255) parameter (numobs2 = 43) CHARACTER*8 STNID,SUBSET_d,CRES1,CRES2 @@ -5465,7 +5488,7 @@ SUBROUTINE RPTLBL(CYCLET) C INDICATOR GOES IN HDR(12) (ONLY FOR ADPUPA REPORTS HERE) C LAUNCH TIME IS READ FOR LATER USE IN THIS SUBR. (ONLY FOR ADPUPA C REPORTS HERE) - IF(NFILE.EQ.IUNIT(5)) THEN + IF(NFILE.EQ.IUNIT(5).OR.NFILE.EQ.IUNIT(5)+7) THEN IF(HDR(9).LT.IMISS) THEN IF(HDR(9).EQ.0.OR.(HDR(9).GE.2.AND.HDR(9).LE.6).OR. $ HDR(9).EQ.8.OR.(HDR(9).GE.100.AND.HDR(9).LE.109).OR. @@ -5513,9 +5536,17 @@ SUBROUTINE RPTLBL(CYCLET) IF(CBULL.EQ.'IUAX02 KARP') THEN HDR(8) = 1. ! U.S. MDCRS ELSE IF(CBULL.EQ.'IUAX01 MMMX') THEN - HDR(8) = 2. ! Mexican MDCRS + HDR(8) = 2. ! Mexico AMDAR ELSE IF(CBULL.EQ.'IUAX06 KARP') THEN - HDR(8) = 3. ! ADS-C MDCRS + HDR(8) = 3. ! ADS-C (U.S.) + ELSE IF(CBULL.EQ.'IUAX07 KARP') THEN + HDR(8) = 4. ! ADS-C (Int'l) + ELSE IF(CBULL(1:3).EQ.'IUA'.AND.CBULL(7:11).EQ.' BABJ') THEN + HDR(8) = 5. ! China AMDAR + ELSE IF(CBULL.EQ.'IUAI01 SCSC') THEN + HDR(8) = 6. ! S. America AMDAR + ELSE IF(CBULL.EQ.'IUAX92 KARP') THEN + HDR(8) = 9. ! ADS-C (Experminental) END IF END IF C RECEIPT TIME GOES IN HDR(5) @@ -5527,7 +5558,7 @@ SUBROUTINE RPTLBL(CYCLET) C CORRECTION INDICATOR FOR OBS. TIME USED IN REPORT D-TIME CALCULATION C GOES IN HDR(14) (INITIALIZED AS 0 - NOT CORRECTED) HDR(14) = 0 - IF(NFILE.EQ.IUNIT(5)) THEN + IF(NFILE.EQ.IUNIT(5).OR.NFILE.EQ.IUNIT(5)+7) THEN C WIND PROFILERS ORIG. IN PILOT (PIBAL) FORMAT BULLETINS WERE DECODED C AS PIBALS INTO THE "ADPUPA" DUMP FILE PRIOR TO 05/14/2001. IF THIS C IS A HISTORICAL RERUN, THESE NEED TO BE IDENTIFIED SO THAT THEY ARE @@ -5674,7 +5705,7 @@ SUBROUTINE RPTLBL(CYCLET) C$$$ SUBROUTINE TIMCHK(DT,TIMWIN_e,TIMWIN_l,IER) PARAMETER (MXWRDH = 15) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) CHARACTER*8 STNID,SUBSET_d INTEGER IDATA(MAXOBS) real(8) alon_8,alat_8 @@ -6051,6 +6082,14 @@ FUNCTION ISEL(ID) C 2014-04-25 Y. Ling -- No conversion of winds from dir/speed to C u/v for VAD wind reports from Level 2 decoder since these are C already u/v and are stored in m/sec +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. HP, XP, AND YP WERE +C ADDED TO KEEP LOCATION AND TIME INFORMATION. IS WAS ADDED AS AN +C ARRAY TO KEEP THE DATA. UPRAIR DATA USES DATA LEVEL CATEGORIES 1, +C 2, AND 10, SO GPS DATA WAS ADDED TO ALL 3. THE SIZE OF EACH DATA +C ARRAY NEEDED TO BE INCREASED BY 3. C C USAGE: CALL GETUPA(*,*) C OUTPUT FILES: @@ -6066,16 +6105,16 @@ FUNCTION ISEL(ID) SUBROUTINE GETUPA(*,*) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) - PARAMETER (MAXOBS = 3500) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) + PARAMETER (MAXOBS = 4500) CHARACTER*5 CTYPE CHARACTER*8 STNPRT,STNID,SUBSET_d LOGICAL KTEMP,PG4243,SPCIAL INTEGER IDATA(MAXOBS),IQ(MXLVL,NUMQMS),IPRT(2),IR(MXLVL,NUMQMS), $ MARKP(0:14) - REAL PS(47) - real(8) alon_8,alat_8 + REAL PS(47),IS(MXLVL,NUMGPS) + real(8) BMISS,GETBMISS,alon_8,alat_8 COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT COMMON/SNDATA/DAT(MXLVL,NUMDAT) COMMON/DATA/KOUNT,IDATE(4),IDAT10,MP_PROCESS,WRMISS,IDATMM @@ -6083,13 +6122,15 @@ SUBROUTINE GETUPA(*,*) COMMON/UPALIM/LEVPM,LEVST,LEVQQ,TDLIM,TDMAX,SPCIAL,ISQNUM_UPA COMMON/PARM2/PG4243,KTEMP,i2many_lvls COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ COMMON/PARM6/MODPRT,IFLUA,STNPRT(3) COMMON/RUNSW/IRNMRK + COMMON /BUFRLIB_MISSING/BMISS C DATA AT PRESSURE LEVELS (MESHED SOUNDING) EQUIVALENCE (RDATA,IDATA),(DAT(1,NUMVAR+1),IQ) EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+1),IR) + EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+NUMQMS+1),IS) DATA XMISS/99999./,YMISS/99998.8/,IMISS/99999/ DATA PS/1000.,975.,950.,925.,900.,875.,850.,825.,800.,775., $ 750.,725.,700.,675.,650.,625.,600.,575.,550.,525., @@ -6123,7 +6164,7 @@ SUBROUTINE GETUPA(*,*) IF(PG4243.AND.HDR(6).EQ.120.AND.(STNID(1:2).EQ.'42'.OR. $ STNID(1:2).EQ.'43')) INDIAN = 1 C*********************************************************************** -C COLLECT UPPER-AIR DATA IN DATA LEVEL CATEGORIES 1 - 5, 11, 15 +C COLLECT UPPER-AIR DATA IN DATA LEVEL CATEGORIES 1 - 5, 10, 15 C IQ(N,3) IS NOW USED TO RECORD CATEGORY OF INPUT DATA C*********************************************************************** DAT = XMISS @@ -6131,6 +6172,7 @@ SUBROUTINE GETUPA(*,*) C INITIALIZE ALL REASON CODES AS 100 (ORIGINAL DATA) IR = 100 STAP = XMISS + BMISS=GETBMISS() C C FOR EACH REPORT, DAT IS FILLED WITH UNPACKED DATA AS FOLLOWS: C OBSERVATIONS FOR: @@ -6141,13 +6183,16 @@ SUBROUTINE GETUPA(*,*) C DAT(NL,7) - HEIGHT DAT(NL,8) - TEMPERATURE C DAT(NL,9) - DATA LEVEL CATEGORY DAT(NL,10) - WIND C DAT(NL,11)- VERTICAL COORDINATE +C GPS VALUES: +C DAT(NL,17) - HRDR DAT(NL,18) - YDR DAT(NL,19) - XDR C C # - SENSIBLE TEMPERATURE FOR ALL NON-SATELLITE DATA TYPES C VIRTUAL TEMPERATURE FOR RTOVS OR ATOVS (UNPACKED NMCEDS) C -C NL IS COUNT OF TOTAL LVLS FROM ALL CATEGORIES (1-5, 11, 15 + SPECIAL) -C NP3 IS COUNT OF ALL LEVELS CONTAINING VALID WIND DATA IN CAT. 1,3,5 -C NPZ IS COUNT OF ALL LVLS CONTAINING NON-MISSING HGHT DATA IN CAT. 1,2 +C NL IS COUNT OF TOTAL LVLS FROM ALL CATEGORIES (1-5, 10, 11, 15 + SPECIAL) +C NP3 IS COUNT OF ALL LEVELS CONTAINING VALID WIND DATA IN CAT. 1,3,5,10 +C NPZ IS COUNT OF ALL LVLS CONTAINING NON-MISSING HGHT DATA IN +C CATEGORIES 1,2,10 C (ONLY SIGNIFICANT WHEN SPCIAL = FALSE) NL = 0 NP3 = 0 @@ -6160,18 +6205,39 @@ SUBROUTINE GETUPA(*,*) C NM IS NO. OF MANDATORY DATA LEVELS (CAT. 1) ACTUALLY COLLECTED NM = 0 NN = IDATA(13) - II = IDATA(14) - 11 +C THE 14 BELOW IS EQUIVALENT TO MCAT(1) FROM IW3UNPBF. CHANGE 14 IF +C THAT VALUE CHANGES DUE TO INCREASE OR DECREASE IN VARS SAVED. + II = IDATA(14) - 14 NN = MIN(NN,LEVPM) IZBEST = 99 IF(NN.LE.0) GO TO 11 DO N = 1,NN - II = II + 11 +C THE 14 BELOW IS EQUIVALENT TO MCAT(1) FROM IW3UNPBF. CHANGE 14 +C IF THAT VALUE CHANGES DUE TO INCREASE OR DECREASE IN VARS +C SAVED. + II = II + 14 C GET PREPBUFR TABLE VALUES FOR PRESSURE, HGHT, TEMP., MOISTURE, & WIND IPM = NINT(RDATA(II+ 6)) IZM = NINT(RDATA(II+ 7)) ITM = NINT(RDATA(II+ 8)) IQM = NINT(RDATA(II+ 9)) IVM = NINT(RDATA(II+10)) +C GET GPS DATA IF AVAILABLE + IF(RDATA(II+11).LT.BMISS) THEN + GPST=NINT(RDATA(II+11)) + ELSE + GPST=BMISS + END IF + IF(RDATA(II+12).LT.BMISS) THEN + GPSY=(NINT(RDATA(II+12))/100000.) + ELSE + GPSY=BMISS + END IF + IF(RDATA(II+13).LT.BMISS) THEN + GPSX=(NINT(RDATA(II+13))/100000.) + ELSE + GPSX=BMISS + END IF IBTEST = 0 IF(IZM.GT.3) IBTEST = 1 IBLIZ1 = MIN(IBLIZ1,IBTEST) @@ -6210,6 +6276,9 @@ SUBROUTINE GETUPA(*,*) DAT(NL,6) = NINT(RDATA(II+5)) * 0.1 IQ(NL,4) = IVM END IF + IS(NL,1) = GPST + IS(NL,2) = GPSY + IS(NL,3) = GPSX ENDDO 11 CONTINUE NM = NL @@ -6221,15 +6290,34 @@ SUBROUTINE GETUPA(*,*) C NSIG IS NO. OF SIGNIFICANT DATA (CAT. 2) LEVELS ACTUALLY COLLECTED NSIG = 0 NN = IDATA(15) - II = IDATA(16) - 7 +C THE 10 BELOW IS EQUIVALENT TO MCAT(2) FROM IW3UNPBF. CHANGE WHEN +C THERE IS A CHANGE IN NUMBER OF VARIABLES SAVED. SAME WITH THE 10 +C FIVE LINES BELOW. + II = IDATA(16) - 10 NP1VLD = 0 IF(NN.EQ.0) GO TO 5694 DO N = 1,NN - II = II + 7 + II = II + 10 C GET PREPBUFR TBL VALUES FOR PRESS., TEMP., AND MOISTURE AT THIS LEVEL IPM = NINT(RDATA(II+3)) ITM = NINT(RDATA(II+4)) IQM = NINT(RDATA(II+5)) +C SAVE GPS DATA + IF(RDATA(II+7).LT.BMISS) THEN + GPST = NINT(RDATA(II+7)) + ELSE + GPST=BMISS + ENDIF + IF(RDATA(II+8).LT.BMISS) THEN + GPSY = NINT(RDATA(II+8)) + ELSE + GPSY=BMISS + ENDIF + IF(RDATA(II+9).LT.BMISS) THEN + GPSX = NINT(RDATA(II+9)) + ELSE + GPSX=BMISS + ENDIF C IF PRESSURE IS MISSING, SKIP PROCESSING OF THIS LEVEL IF(NINT(RDATA(II)).GE.32750.OR.(NINT(RDATA(II))*0.1).LT.STOP.OR. $ IPM.GE.IQMLIM) CYCLE @@ -6313,6 +6401,9 @@ SUBROUTINE GETUPA(*,*) IF(MAX(IQM,ITM).LT.IQMLIM) DAT(NL,4) = DEWPT END IF END IF + IS(NL,1) = GPST + IS(NL,2) = GPSY + IS(NL,3) = GPSX ENDDO C RESET IDATA(15) TO NUMBER OF 'GOOD' CAT. 2 LEVELS ACTUALLY PROCESSED IDATA(15) = NSIG @@ -6379,6 +6470,101 @@ SUBROUTINE GETUPA(*,*) 21 CONTINUE C N125 IS THE NUMBER OF CAT. 1, 2, AND 5 LEVELS COLLECTED N125 = NL +C---------------------------------------------------vv--CH 07/23/2021-vv +C----------------------------------------------------------------------- +C BUFR SPECIFIC LEVEL MASS AND WIND DATA (DATA LEVEL CATEGORY 10) +C----------------------------------------------------------------------- +C +C NN IS NO. OF LEVELS THAT WILL BE CONSIDERED +C NB IS NO. OF BUFR DATA LEVELS (CAT. 10) ACTUALLY COLLECTED + NB = 0 + NN = IDATA(31) +C II = IDATA(32) - 11 + II = IDATA(32) - 14 +C x NN = MIN(NN,LEVPM) + IZBEST = 99 + IF(NN.LE.0) GO TO 5695 + DO N = 1,NN +C II = II + 11 + II = II + 14 +C GET PREPBUFR TABLE VALUES FOR PRESSURE, HGHT, TEMP., MOISTURE, & WIND + IPM = NINT(RDATA(II+ 6)) + IZM = NINT(RDATA(II+ 7)) + ITM = NINT(RDATA(II+ 8)) + IQM = NINT(RDATA(II+ 9)) + IVM = NINT(RDATA(II+10)) + IF(RDATA(II+11).LT.BMISS) THEN + GPST=RDATA(II+11) + ELSE + GPST=BMISS + END IF + IF(RDATA(II+12).LT.BMISS) THEN + GPSY=(NINT(RDATA(II+12))*0.00001) + ELSE + GPSY=BMISS + ENDIF + IF(RDATA(II+13).LT.BMISS) THEN + GPSX=(NINT(RDATA(II+13))*0.00001) + ELSE + GPSX=BMISS + ENDIF + IBTEST = 0 + IF(IZM.GT.3) IBTEST = 1 + IBLIZ1 = MIN(IBLIZ1,IBTEST) +C SKIP IF DATA ARE MISSING + IF(MIN(RDATA(II+1),RDATA(II+2)).GE.YMISS.AND. + $ (MAX(RDATA(II+4),RDATA(II+5)).GE.YMISS)) CYCLE + NL = NL + 1 + IF(NL.GT.MXLVL) THEN +C---------------------------------------------------------------------- +C IF NO. OF LEVELS IN A REPORT EXCEEDS THE LIMIT OF "MXLVL", SKIP +C REPORT AND PRINT DIAGNOSTIC + PRINT 9953, STNID,RDATA(1),RDATA(2),IDATA(9),MXLVL + i2many_lvls = i2many_lvls + 1 + RETURN 2 +C---------------------------------------------------------------------- + END IF + NB = NB + 1 + IQ(NL,3) = 10 + DAT(NL,1) = NINT(RDATA(II)) * 0.1 + IQ(NL,5) = IPM + CALL W3FA03(DAT(NL,1),DAT(NL,2),DAT(NL,3),THETA) + IF(RDATA(II+1).LT.YMISS) THEN + DAT(NL,2) = NINT(RDATA(II+1)) + IQ(NL,1) = IZM + NPZ = NPZ + 1 + END IF + IF(RDATA(II+2).LT.YMISS) THEN + DAT(NL,3) = (NINT(RDATA(II+2)) * 0.1) + 273.16 + IQ(NL,2) = ITM + IF(DAT(NL,1).GE.QTOP.AND.RDATA(II+3).LT.YMISS + $ .AND.NINT(RDATA(II+3)).GE.0) THEN + DEWPT = DAT(NL,3) - (NINT(RDATA(II+3)) * 0.1) +C PROCESS NON-MSG MOISTURE REGARDLESS OF PREPBUFR TBL VAL + IF(MAX(IQM,ITM).LT.IQMLIM) DAT(NL,4) = DEWPT + END IF + END IF +C IZBEST IS BEST (LOWEST) HEIGHT PREPBUFR TBL VALUE AMONGST ALL LEVELS + IZBEST = MIN(IQ(NL,1),IZBEST) +C IF KTEMP = T, THEN ALSO EXAMINE TEMP PREPBUFR TABLE VALUE FOR IZBEST + IF(KTEMP) IZBEST = MIN(IQ(NL,2),IZBEST) + IF(MAX(RDATA(II+4),RDATA(II+5)).LT.YMISS.AND.IVM.LT.IQMLIM)THEN +C PROCESS NON-MSG WIND REGARDLESS OF PREPBUFR TABLE VALUE + IF(IQ(NL,1).LT.3) NP3 = NP3 + 1 + DAT(NL,5) = NINT(RDATA(II+4)) + DAT(NL,6) = NINT(RDATA(II+5)) * 0.1 + IQ(NL,4) = IVM + END IF + IS(NL,1) = GPST + IS(NL,2) = GPSY + IS(NL,3) = GPSX + ENDDO +C RESET IDATA(31) TO NUMBER OF 'GOOD' CAT. 10 LEVELS ACTUALLY PROCESSED + IDATA(31) = NB + 5695 CONTINUE +C N125_10 IS THE NUMBER OF CAT. 1, 2, 5, AND 10 LEVELS COLLECTED + N125_10 = NL +C---------------------------------------------------^^--CH 07/23/2021-^^ C----------------------------------------------------------------------- C WINDS AT VARIABLE PRESSURE (DATA LEVEL CATEGORY 3) C----------------------------------------------------------------------- @@ -6398,7 +6584,8 @@ SUBROUTINE GETUPA(*,*) IF(NINT(RDATA(II)).GE.32750.OR.(NINT(RDATA(II))*0.1).LT.PTOP.OR. $ IPM.GE.IQMLIM) CYCLE C IF PRESSURE > STN (SFC) PRESSURE (GOOD ONLY) FLAG ALL DATA ON THIS LVL - IF(NP1VLD.GE.1.AND.(NINT(RDATA(II))*0.1).GT.DAT(N125+1,1)) THEN + IF(NP1VLD.GE.1.AND. + + (NINT(RDATA(II))*0.1).GT.DAT(N125_10+1,1)) THEN ! this should not be monitored by GSI!! (but is since qm=15) IPM = 15 IVM = 15 @@ -6407,7 +6594,7 @@ SUBROUTINE GETUPA(*,*) cdak IPRTF = 1 CAAAAA%%%%% PRINT 1515, STNID,RDATA(1),RDATA(2),IDATA(9),RDATA(II)*.1, - $ DAT(N125+1,1) + $ DAT(N125_10+1,1) 1515 FORMAT(' * * CAT3,LVL DATA FLAGGED-ID=',A8,', LAT=',F7.2,'N, ', $ 'LON=',F8.2,'E, RTYP',I4,' - PRESS =',F7.2,' > SFC PRESS(',F7.2, $ ')') @@ -6490,7 +6677,7 @@ SUBROUTINE GETUPA(*,*) C AS SUCH IF(NP1VLD.NE.0) THEN NCN = NM + 1 - IF(IABS(NP1VLD).EQ.2) NCN = N125 + 1 + IF(IABS(NP1VLD).EQ.2) NCN = N125_10 + 1 STAP = DAT(NCN,1) DAT(NCN,2) = ELEV NPZ = NPZ + 1 @@ -6741,6 +6928,9 @@ SUBROUTINE GETUPA(*,*) cdak STNPRT(3) = STNID cdak END IF cdak IPRTF = 0 + STNPRT(1) = '01028 ' + STNPRT(2) = '72251 ' + STNPRT(3) = '72364 ' CAAAAA%%%%% C IN MERGING, PRINT OUT COMPLETE LISTING OF RPT FOR EACH CAT. (MODPRT) IF(MOD((KOUNT-1),MODPRT).EQ.0) IPRT(1) = 1 @@ -6750,22 +6940,24 @@ SUBROUTINE GETUPA(*,*) $ IPRT(2) = 1 C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C DETAILED PRINT FOR SPECIFIED REPORT(S) -- IF ENTERED IN DATA CARDS - IF(IPRT(2).EQ.1.AND.NUMVAR.LT.11.AND.NUMQMS.LT.9) THEN +C IF(IPRT(2).EQ.1.AND.NUMVAR.LT.11.AND.NUMQMS.LT.9) THEN PRINT 902, STNID 902 FORMAT(/' GETUPA: ',A8,', ALL CAT. GATHERED, PRIOR TO "SMERGE"') DO N = 1,NL PRINT 900, (DAT(N,K),K=1,NUMVAR) PRINT 905, (IQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,QQ),QQ=1,NUMGPS) ENDDO PRINT 901 - END IF +C END IF 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',F13.5,F13.5,F13.5) 901 FORMAT('0',//) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C MERGE DATA LEVEL CATEGORIES INTO SINGLE PROFILE, ACCORDING TO DECR. C PRESSURE - CALL SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) + CALL SMERGE(NM,NSIG,N5,NB,NP,NH,N15,NLEV,IPRT,STOP) IF(NLEV.LE.0) THEN C IF NLEV IS ZERO, SKIP REPORT AND PRINT DIAGNOSTIC KOUNT = KOUNT - 1 @@ -6787,9 +6979,10 @@ SUBROUTINE GETUPA(*,*) $ 'AIR CATEGORY',5X,'(MB)',9X,'(GPM)',8X,'(K)',10X,'(K)',8X,'(M/S)' $ ,8X,'(M/S)',4X,'TV/RC',4X,'TV/RC',4X,'TV/RC',4X,' TV/RC'/) PRINT 7901, (IQ(N,3),(DAT(N,K),K=1,6),IQ(N,1),IR(N,1),IQ(N,2), - $ IR(N,2),IQ(N,4),IR(N,4),IQ(N,5),IR(N,5),N=1,NLEV) + $ IR(N,2),IQ(N,4),IR(N,4),IQ(N,5),IR(N,5),IS(N,1), + $ IS(N,2),IS(N,3),N=1,NLEV) 7901 FORMAT(6X,I2,F16.2,F14.2,F12.2,F13.2,F11.2,F13.2,I6,'/',I3, - $ I5,'/',I3,I5,'/',I3,I7,'/',I3) + $ I5,'/',I3,I5,'/',I3,I7,'/',I3,F13.5,F13.5,F13.5) PRINT 7902 7902 FORMAT(//) END IF @@ -6955,12 +7148,20 @@ SUBROUTINE UV(DD,FF,U,V) C TYPE 77, GET PREPBUFR R. TYPE 126, PROCESSED INTO PREPBUFR FILE C UNDER NEW TBL A ENTRY "RASSDA"; ADDED NEW INPUT ARGUMENT N15 FOR C NUMBER OF DATA LEVEL CATEGORY 15 LEVELS -C -C USAGE: CALL SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) +C 2021-07-23 C. Hill -- NB added to represent new data level category 10 +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. HP, XP, AND YP WERE +C ADDED TO KEEP LOCATION AND TIME INFORMATION. IS WAS ADDED AS AN +C ARRAY TO KEEP THE DATA. +C +C USAGE: CALL SMERGE(NM,NSIG,N5,NB,NP,NH,N15,NLEV,IPRT,STOP) C INPUT ARGUMENT LIST: C NM - NO. OF LEVELS IN CAT. 1 (MANDATORY MASS/WIND) C NSIG - NO. OF LEVELS IN CAT. 2 (SIG. MASS) C N5 - NO. OF LEVELS IN CAT. 5 (TROPOPAUSE) +C NB - NO. OF LEVELS IN CAT. 10 (BUFR MASS/WIND) C NP - NO. OF CAT. 3 & ADD'L 25 OR 50 MB PRES. LVLS C NH - NO. OF LEVELS IN CAT. 4 (WINDS BY HEIGHT) C N15 - NO. OF LEVELS IN CAT. 15 (TEMPERATURES BY HEIGHT) @@ -6980,12 +7181,14 @@ SUBROUTINE UV(DD,FF,U,V) C MACHINE: NCEP WCOSS C C$$$ - SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) + SUBROUTINE SMERGE(NM,NSIG,N5,NB,NP,NH,N15,NLEV,IPRT,STOP) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) - PARAMETER (MAXOBS = 3500) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) +C PARAMETER (NUMVAR = 9, NUMQMS = 5) +C PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) + PARAMETER (MAXOBS = 4500) DIMENSION TMP(MXLVL,NUMDAT),VTMP(MXLVL),IWORK(MXLVL), $ DATINV(NUMDAT,MXLVL) LOGICAL FILLZ,FILLW,FILLM @@ -6994,8 +7197,8 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) INTEGER IDATA(MAXOBS),KS(MXLVL),IQ(MXLVL,NUMQMS), $ JQ(MXLVL,NUMQMS),IPRT(2),IC(0:16),IR(MXLVL,NUMQMS), $ JR(MXLVL,NUMQMS) - REAL PLIMIT(4),PRS(3) - real(8) alon_8,alat_8 + REAL PLIMIT(4),PRS(3),IS(MXLVL,NUMGPS),JS(MXLVL,NUMGPS) + real(8) BMISS,alon_8,alat_8 COMMON/WORD/LWI,LWR COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT @@ -7004,7 +7207,11 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ COMMON/PARM6/MODPRT,IFLUA,STNPRT(3) EQUIVALENCE(DAT(1,NUMVAR+1),IQ),(TMP(1,NUMVAR+1),JQ),(RDATA,IDATA) - EQUIVALENCE(DAT(1,NUMVAR+NUMQMS+1),IR),(TMP(1,NUMVAR+NUMQMS+1),JR) + EQUIVALENCE(DAT(1,NUMVAR+NUMQMS+1+NUMGPS),TEST) + EQUIVALENCE(DAT(1,NUMVAR+NUMQMS+1),IR) + EQUIVALENCE(TMP(1,NUMVAR+NUMQMS+1),JR) + EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+NUMQMS+1),IS) + EQUIVALENCE (TMP(1,NUMVAR+NUMQMS+NUMQMS+1),JS) DATA XMISS/99999./,YMISS/99998.8/,PLIMIT/200.,100.,50.,150./, $ PRS/700.,600.,250./, C PREPBUFR TABLE VALUE INTERPRETED AS: 0 - KEEP, 1 - GOOD, 2- DEFAULT, @@ -7025,17 +7232,19 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) C NS IS NUMBER OF CAT. 2 AND CAT. 5 LEVELS COMBINED NS = NSIG + N5 NSN = NS -C KLVL IS NUMBER OF CAT. 1, 2, & CAT. 5 LEVELS COMBINED - KLVL = NM + NS +C KLVL IS NUMBER OF CAT. 1, 2, 5, AND 10 LEVELS COMBINED + KLVL = NM + NS + NB + NSTZ = NM + NS C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C DETAILED PRINT FOR SPECIFIED REPORT(S) -- IF ENTERED IN DATA CARDS IF(IPRT(2).EQ.1.AND.NUMVAR.LT.11.AND.NUMQMS.LT.9) THEN PRINT 902, STNID - 902 FORMAT(/' SMERGE: ',A8,', CAT. 1,2,5 LVLS PRIOR TO DUPL. CHK') + 902 FORMAT(/' SMERGE: ',A8,', CAT. 1,2,5,10 LVLS PRIOR TO DUPL. CHK') IF(KLVL.GT.0) THEN DO N = 1,KLVL PRINT 900, (DAT(N,K),K=1,NUMVAR) PRINT 905, (IQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,QQ),QQ=1,NUMGPS) ENDDO END IF PRINT 901 @@ -7043,6 +7252,7 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',F13.5,F13.5,F13.5) 901 FORMAT('0',//) C LASTP IS HIGHEST CAT. 2 OR CAT. 5 LVL WITH MASS INFO. (DEF = 1050 MB) LASTP = 1050 * NINT(SCALE) @@ -7103,9 +7313,10 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) C----------------------------------------------------------------------- C COMPARE CAT. 2 PRESS. W/ THEMSELVES & W/ CAT. 5 PRESS.; LOOK FOR DUPL. NST = NM + 1 - LOOP2: DO N = NST,KLVL +C KLVL REPLACED BELOW WITH NSTZ, DEFINED ABOVE CH 07/23/2021 + LOOP2: DO N = NST,NSTZ IP = NINT(DAT(N,1)*SCALE) - LOOP2n1: DO M = NST,KLVL + LOOP2n1: DO M = NST,NSTZ IF(M.EQ.N) CYCLE LOOP2n1 JP = NINT(DAT(M,1)*SCALE) IF(IP.NE.JP) CYCLE LOOP2n1 @@ -7141,11 +7352,12 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) C DETAILED PRINT FOR SPECIFIED REPORT(S) -- IF ENTERED IN DATA CARDS IF(IPRT(2).EQ.1.AND.NUMVAR.LT.11.AND.NUMQMS.LT.9) THEN PRINT 903, STNID - 903 FORMAT(/' SMERGE: ',A8,', CAT. 1,2,5 LVLS W/ DUPL. ZEROED OUT') + 903 FORMAT(/' SMERGE: ',A8,', CAT. 1,2,5,10 LVLS W/ DUPL. ZEROED OUT') IF(KLVL.GT.0) THEN DO N = 1,KLVL PRINT 900, (DAT(N,K),K=1,NUMVAR) PRINT 905, (IQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,QQ),QQ=1,NUMGPS) ENDDO END IF PRINT 901 @@ -7154,15 +7366,16 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) IF(LASTP.LT.LSTOP) LASTP = LSTOP C NSTA IS TOTAL NO. OF LVLS IN ALL DATA LEVEL CATEGORIES PLUS SPEC. 25 C OR 50MB LVLS - NSTA = NM + NS + NP + NH + N15 + NSTA = NM + NS + NB + NP + NH + N15 C IF MODPRT SMALL, STD. O-PUT PRINT NO. OF LVL IN EACH DATA LEVEL C CATEGORY. FOR ALL RPTS IF(MODPRT.LE.300.AND.MODPRT.GE.0) - $ PRINT 9090,STNID,IDATA(9),NSTA,NM,NSIG,N5,NP,NH,N15, + $ PRINT 9090,STNID,IDATA(9),NSTA,NM,NSIG,N5,NB,NP,NH,N15, $ REAL(LASTP)/SCALE 9090 FORMAT(1X,'ID ',A8,' DUMP RT.=',I3,', NLVLS: TOT=',I2,', CAT 1=' - $,I2,', CAT 2=',I2,', CAT 5=',I2,', CAT 3+SPEC LVLS=',I2,', CAT 4=' - $,I2,', CAT 15=',I2,' - TOP SIG P(W/MASS)=',F6.1,'MB') + $,I2,', CAT 2=',I2,', CAT 5=',I2,', CAT 10=',I3, + $', CAT 3+SPEC LVLS=',I2,', CAT 4=',I2,', CAT 15=',I2, + $' - TOP SIG P(W/MASS)=',F6.1,'MB') IF(IPRT(1).EQ.1.OR.IPRT(2).EQ.1) THEN PRINT 1902, STNID 1902 FORMAT(//,15X,'>>> COMPLETE LISTING OF DATA FOR STATION ID ',A8, @@ -7176,9 +7389,10 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) $ 'AIR CATEGORY',5X,'(MB)',9X,'(GPM)',8X,'(K)',10X,'(K)',8X,'(M/S)' $ ,8X,'(M/S)',4X,'TV/RC',4X,'TV/RC',4X,'TV/RC',4X,' TV/RC'/) PRINT 7901, (IQ(N,3),(DAT(N,K),K=1,6),IQ(N,1),IR(N,1),IQ(N,2), - $ IR(N,2),IQ(N,4),IR(N,4),IQ(N,5),IR(N,5),N=1,NSTA) + $ IR(N,2),IQ(N,4),IR(N,4),IQ(N,5),IR(N,5),IS(N,1), + $ IS(N,2),IS(N,3),N=1,NSTA) 7901 FORMAT(6X,I2,F16.2,F14.2,F12.2,F13.2,F11.2,F13.2,I6,'/',I3, - $ I5,'/',I3,I5,'/',I3,I7,'/',I3) + $ I5,'/',I3,I5,'/',I3,I7,'/',I3,F13.5,F13.5,F13.5) PRINT 7902 END IF 7902 FORMAT(//) @@ -7187,7 +7401,8 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) IF(KLVL.EQ.1) KS(1) = 1 C*********************************************************************** C MERGE MANDATORY (DATA LEVEL CAT. 1) AND -C SIGNIFICANT (DATA LEVEL CAT. 2,5) LEVEL DATA +C SIGNIFICANT (DATA LEVEL CAT. 2,5) AND +C BUFR (DATA LEVEL CAT. 10) LEVEL DATA C*********************************************************************** C C FIRST, ARRANGE LEVELS IN ORDER OF DECREASING PRESSURE (FIRST ORDER @@ -7257,6 +7472,7 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) DO N = 1,KLVL PRINT 900, (TMP(N,K),K=1,NUMVAR),VTMP(N) PRINT 905, (JQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO PRINT 901 END IF @@ -7412,6 +7628,7 @@ SUBROUTINE SMERGE(NM,NSIG,N5,NP,NH,N15,NLEV,IPRT,STOP) DO N = 1,KLVL PRINT 900, (TMP(N,K),K=1,NUMVAR),VTMP(N) PRINT 905, (JQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO END IF PRINT 901 @@ -7755,7 +7972,7 @@ SUBROUTINE SWNTBL C C$$$ SUBROUTINE HSTATS(ZIN,ZOUT,XI,YJ,KP) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) DIMENSION STATS(8,22),XMAX(22),YMAX(22) COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT DATA STATS/176*0.0/,XMAX/22*0.0/,YMAX/22*0.0/ @@ -7859,6 +8076,12 @@ SUBROUTINE HSTATS(ZIN,ZOUT,XI,YJ,KP) C 1999-08-04 D. A. KEYSER -- REPLACED SORT ROUTINE "SHELL" (IN-LINE C SUBROUTINE) WITH W3LIB ROUTINE "ORDERS", MORE EFFICIENT AND C ALLOWS MULTIPLE ORDER SORT KEYS +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. HP, XP, AND YP WERE +C ADDED TO KEEP LOCATION AND TIME INFORMATION. IS WAS ADDED AS AN +C ARRAY TO KEEP THE DATA. C C USAGE: CALL WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) C INPUT ARGUMENT LIST: @@ -7906,14 +8129,15 @@ SUBROUTINE HSTATS(ZIN,ZOUT,XI,YJ,KP) SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) DIMENSION TMP(MXLVL,NUMDAT),KS(MXLVL),IQ(MXLVL,NUMQMS), $ JQ(MXLVL,NUMQMS),VTMP(MXLVL),VDAT(MXLVL),IR(MXLVL,NUMQMS), $ JR(MXLVL,NUMQMS),IWORK(MXLVL),TMPINV(NUMDAT,MXLVL) CHARACTER*8 STNID,SUBSET_d INTEGER IPRT(2),IC(0:16) real(8) alon_8,alat_8 + REAL IS(MXLVL,NUMGPS) LOGICAL FILLM,FILLZ,FILLT COMMON/WORD/LWI,LWR COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 @@ -7921,6 +8145,7 @@ SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ EQUIVALENCE (DAT(1,NUMVAR+1),IQ) EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+1),IR) + EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+NUMQMS+1),IS) C PREPBUFR TABLE VALUE INTERPRETED AS: 0 - KEEP, 1 - GOOD, C 2- DEFAULT, 3 - SUSPECT, 9 - BAD IN DUPL. LEVEL TBL VALUE COMPARISON C T.V.-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @@ -7964,6 +8189,7 @@ SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) DO N = 1,KLVL PRINT 900, (DAT(N,K),K=1,NUMVAR),VDAT(N) PRINT 905, (IQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO PRINT 901 END IF @@ -8296,6 +8522,7 @@ SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) 31 CONTINUE 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',3F10.5) 901 FORMAT ('0',//) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C DETAILED PRINT FOR SPECIFIED REPORT(S) -- IF ENTERED IN DATA CARDS @@ -8380,6 +8607,12 @@ SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) C 2000-02-17 D. A. KEYSER -- CAT. 4 UPPER-AIR LEVELS NOW SET WIND Q.M. C TO AT LEAST 2 ONLY IF WIND DOES NOT HAVE AN SDM KEEP FLAG (I.E., C THE KEEP FLAG ON CAT. 4 WINDS IS HONORED) +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. HP, XP, AND YP WERE +C ADDED TO KEEP LOCATION AND TIME INFORMATION. IS WAS ADDED AS AN +C ARRAY TO KEEP THE DATA. C C USAGE: CALL WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) C INPUT ARGUMENT LIST: @@ -8423,16 +8656,18 @@ SUBROUTINE WNDBYP(NM,NS,NP,KLVL,TMP,JQ,JR,IPRT,VTMP) SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) - PARAMETER (MAXOBS = 3500) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS=3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) + PARAMETER (MAXOBS = 4500) DIMENSION TMP(MXLVL,NUMDAT),KS(MXLVL),IQ(MXLVL,NUMQMS), $ JQ(MXLVL,NUMQMS),IDATA(MAXOBS),VTMP(MXLVL),VDAT(MXLVL), $ IR(MXLVL,NUMQMS),IWORK(MXLVL),TMPINV(NUMDAT,MXLVL) +C $ ,IS(NXLVL,NUMGPS) LOGICAL SPCIAL,FILLT,FILLM CHARACTER*8 STNID,SUBSET_d INTEGER IPRT(2),IC(0:16) real(8) alon_8,alat_8 + REAL IS(MXLVL,NUMGPS) COMMON/WORD/LWI,LWR COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 @@ -8441,6 +8676,7 @@ SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ EQUIVALENCE (DAT(1,NUMVAR+1),IQ),(RDATA,IDATA) EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+1),IR) + EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+NUMQMS+1),IS) C PREPBUFR TABLE VALUE INTERPRETED AS: 0 - KEEP, 1 - GOOD, C 2- DEFAULT, 3 - SUSPECT, 9 - BAD IN DUPL. LEVEL TBL VALUE COMPARISON C T.V.-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @@ -9132,6 +9368,7 @@ SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) TMP = DAT 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',3F10.5) 901 FORMAT('0',//) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C DETAILED PRINT FOR SPECIFIED REPORT(S) -- IF ENTERED IN DATA CARDS @@ -9142,6 +9379,7 @@ SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) DO N = 1,KLVL PRINT 900, (TMP(N,K),K=1,NUMVAR) PRINT 905, (JQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO PRINT 901 END IF @@ -9185,6 +9423,10 @@ SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) C F), USES DEL-PRESSURE LIMIT OF 150 MB WHEN FILLW=F (VS. 100 MB C LIMIT WHEN FILLW=T) AND ALLOWS SPANNING WINDS TO BE BAD WHEN C FILLW=F (VS. RESTR. OF NON-BAD SPANNING WINDS WHEN FILLW=T) +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. C C USAGE: CALL FILWND(KLVL,TMP,JQ,JR,IPRT) C INPUT ARGUMENT LIST: @@ -9225,12 +9467,14 @@ SUBROUTINE WNDBYZ(NM,NS,NP,NH,KLVL,TMP,JQ,IPRT,VTMP) SUBROUTINE FILWND(KLVL,TMP,JQ,JR,IPRT) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMVAR = 6, NUMQMS = 5,NUMGPS=3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) DIMENSION TMP(MXLVL,NUMDAT),JQ(MXLVL,NUMQMS),IPRT(2), $ JR(MXLVL,NUMQMS) +C $ ,IS(MXLVL,NUMGPS) real(8) alon_8,alat_8 logical fillw + REAL IS(MXLVL,NUMGPS) CHARACTER*8 STNID,SUBSET_d COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ @@ -9337,11 +9581,13 @@ SUBROUTINE FILWND(KLVL,TMP,JQ,JR,IPRT) DO N = 1,KLVL PRINT 900, (TMP(N,K),K=1,NUMVAR) PRINT 905, (JQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO PRINT 901 END IF 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',3F10.5) 901 FORMAT('0',//) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ RETURN @@ -9417,11 +9663,12 @@ SUBROUTINE FILWND(KLVL,TMP,JQ,JR,IPRT) SUBROUTINE FILDPT(KLVL,TMP,JQ,JR,IPRT) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) DIMENSION TMP(MXLVL,NUMDAT),JQ(MXLVL,NUMQMS),IPRT(2), $ JR(MXLVL,NUMQMS) real(8) alon_8,alat_8 + REAL IS(MXLVL,NUMGPS) CHARACTER*8 STNID,SUBSET_d COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 C----------------------------------------------------------------------- @@ -9485,11 +9732,13 @@ SUBROUTINE FILDPT(KLVL,TMP,JQ,JR,IPRT) DO N = 1,KLVL PRINT 900, (TMP(N,K),K=1,NUMVAR) PRINT 905, (JQ(N,L),L=1,NUMQMS) + PRINT 910, (IS(N,M),M=1,NUMGPS) ENDDO PRINT 901 END IF 900 FORMAT(1X,10F10.2) 905 FORMAT('+',102X,8I3) + 910 FORMAT('+',3F10.5) 901 FORMAT('0',//) C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ RETURN @@ -9618,6 +9867,12 @@ SUBROUTINE FILDPT(KLVL,TMP,JQ,JR,IPRT) C IS 0 MG/KG, IT IS RESET TO 1 MG/KG (.001 G/KG) TO ENSURE THAT C LEVELS WITH VERY LOW SPECIFIC HUMIDITY ARE PROCESSED (Q MUST BE > C 0 TO BE PROCESSED) +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITION OF GPS DATA TO UPRAIR +C DUMP FILES, CHANGES WERE NEEDED. NUMGPS WAS ADDED AS A WAY TO SAVE +C TIME AND LOCATION DISPLACEMENT DATA. MAXOBS WAS INCREASED TO 4500 +C DUE TO SEGFAULTS WHEN MAXOBS WAS SET TO 3500. HP, XP, AND YP WERE +C ADDED TO KEEP LOCATION AND TIME INFORMATION. IS WAS ADDED AS AN +C ARRAY TO KEEP THE DATA. C C USAGE: CALL STOROB(NLEV,PSTA,INDIAN,IPRT,*) C INPUT ARGUMENT LIST: @@ -9642,16 +9897,17 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) PARAMETER (MXTYPV = 3) PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*8 ADPTYP,STNID,STNPRT,SUBSET_d LOGICAL KTEMP,PROFILERinADPUPA INTEGER IQ(MXLVL,NUMQMS),IDATA(MAXOBS),IR(MXLVL,NUMQMS),IPRT(2) - REAL PP(MXLVL),ZP(MXLVL),TP(MXLVL),DP(MXLVL),UP(MXLVL),VP(MXLVL) - REAL(8) BMISS,obs8_8,alon_8,alat_8 + REAL PP(MXLVL),ZP(MXLVL),TP(MXLVL),DP(MXLVL),UP(MXLVL),VP(MXLVL), + $ HP(MXLVL),XP(MXLVL),YP(MXLVL) + REAL(8) BMISS,obs8_8,alon_8,alat_8,IS(MXLVL,NUMGPS) COMMON/STRCTY/ICAT(MXLVL) COMMON/STRMOB/MOBS(MXTYPV,MXWRDL,MXLVL) COMMON/UNITNO/NFILE,IUNIT(28) @@ -9670,9 +9926,12 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) $ obs8_8(2) COMMON /BUFRLIB_MISSING/BMISS EQUIVALENCE (DAT,PP),(DAT(1,2),ZP),(DAT(1,3),TP),(DAT(1,4),DP), - $ (DAT(1,5),UP),(DAT(1,6),VP),(DAT(1,NUMVAR+1),IQ),(IDATA,RDATA) + $ (DAT(1,5),UP),(DAT(1,6),VP),(DAT(1,NUMVAR+1),IQ), + $ (DAT(1,17),HP),(DAT(1,18),YP),(DAT(1,19),XP), + $ (IDATA,RDATA) DATA XMISS/99999./,YMISS/99998.8/,IMISS/99999/ EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+1),IR) + EQUIVALENCE (DAT(1,NUMVAR+NUMQMS+NUMQMS+1),IS) C FCNS BELOW CONVERT TEMP/TD (K) & PRESS (MB) INTO SAT./ SPEC. HUM.(G/G) ES(T) = 6.1078 * EXP((17.269 * (T - 273.16))/((T - 273.16)+237.3)) QFRMTP(T,P) = (0.622 * ES(T))/(P - (0.378 * ES(T))) @@ -9685,7 +9944,8 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) END IF LL_MASS=0 LL_WIND=0 - IF(NFILE.EQ.IUNIT(5)) ISQNUM_UPA = ISQNUM_UPA + 1 + IF(NFILE.EQ.IUNIT(5).OR.NFILE.EQ.IUNIT(5)+7) + + ISQNUM_UPA = ISQNUM_UPA + 1 ADPTYP = ' RAOB ' C 'ICALLM' INDICATES WHETHER MASS PIECE STORED IN OUTPUT FILE (IF SO =1) ICALLM = 0 @@ -9905,7 +10165,8 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) IF(LL.GT.0) THEN C SET REPORT SEQ. NUMBER TO "ISQNUM_UPA" AND STORE IN HDR(11) IF A C RADIOSONDE, PIBAL, DROPWINSONDE OR CLASS REPORT IN ADPUPA FILE - IF(NFILE.EQ.IUNIT(5)) HDR(11) = ISQNUM_UPA + IF(NFILE.EQ.IUNIT(5).OR.NFILE.EQ.IUNIT(5)+7) + + HDR(11) = ISQNUM_UPA CALL FILLX(LL,IERF) IF(IERF.EQ.0) THEN ICALLM = 1 @@ -10109,7 +10370,7 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) END IF C SET REPORT SEQ. NUMBER TO "ISQNUM_UPA" AND STORE IN HDR(11) IF A C RADIOSONDE, PIBAL, DROPWINSONDE OR CLASS REPORT IN ADPUPA FILE - IF(NFILE.EQ.IUNIT(5)) HDR(11) = ISQNUM_UPA + IF(NFILE.EQ.IUNIT(5).OR.NFILE.EQ.IUNIT(5)+7) HDR(11) = ISQNUM_UPA CALL FILLX(LL,IERF) LL_WIND = LL IF(LL_WIND.NE.LL_MASS.AND.LL_MASS.GT.0) THEN @@ -10139,6 +10400,16 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) C PROGRAM HISTORY LOG: C UNKNOWN C 2006-08-17 D. A. KEYSER -- ORIGINAL AUTHOR +C 2023-01-31 N. ESPOSITO -- WITH THE ADDITON OF GPS DATA, WE NEEDED TO +C NEW UPRAIR BUFR DUMPS HAVE GPS DATA IN THEM, ALLOWING US +C TO USE THAT DATA INSTEAD OF CALCULATING DRIFT USING WIND +C SPEEDS. GPSFLAG WAS ADDED TO DICTATE WHEN WE HAVE THE +C DATA. GPSFLAG(1) IS SET TO 1 WHEN WE USE TIME DISPLACEMENT +C DATA FROM THE GPS INSTEAD OF CALCULATING IT. GPSFLAG(2) IS +C SET TO 1 WHEN WE USE LOCATION DISPLACEMENT DATA INSTEAD OF +C CALCULATING IT USING THE WIND DIRECTION DATA. IF THE FLAGS +C ARE KEPT AT 0, THEN WE CONTINUE CALCULATING THE WAY WE +C USED TO. C C USAGE: CALL BALLOON_DRIFT(IPRT,I,PSTA,LL) C INPUT ARGUMENT LIST: @@ -10162,28 +10433,34 @@ SUBROUTINE STOROB(NLEV,PSTA,INDIAN,IPRT,*) SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) PARAMETER (MXWRDH = 15) PARAMETER (MXLVL = 600) - PARAMETER (NUMVAR = 6, NUMQMS = 5) - PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) - PARAMETER (MAXOBS = 3500) + PARAMETER (NUMVAR = 6, NUMQMS = 5, NUMGPS = 3) + PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS) + NUMGPS) + PARAMETER (MAXOBS = 4500) CHARACTER*8 STNID,SUBSET_d INTEGER IQ(MXLVL,NUMQMS),IDATA(MAXOBS),IPRT(2) - REAL PP(MXLVL),ZP(MXLVL),TP(MXLVL),DP(MXLVL),UP(MXLVL),VP(MXLVL) - real(8) alon_8,alat_8 + REAL PP(MXLVL),ZP(MXLVL),TP(MXLVL),DP(MXLVL),UP(MXLVL),VP(MXLVL), + $ XP(MXLVL),YP(MXLVL),HP(MXLVL) + real(8) BMISS,GETBMISS,alon_8,alat_8 COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT COMMON/SNDATA/DAT(MXLVL,NUMDAT) COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 COMMON/DRIFT/DFTLON(MXLVL),DFTLAT(MXLVL),DFTTIM(MXLVL) COMMON/LAUNCH/ALNCH + COMMON /BUFRLIB_MISSING/BMISS COMMON/SBDRIFT/ZDRIFT(MXLVL),TDRIFT(MXLVL),TDRIFTLL(MXLVL), $ UDRIFT(MXLVL),VDRIFT(MXLVL),XDRIFT(MXLVL),YDRIFT(MXLVL), - $ TDRIFT_LL(MXLVL),KFLAG(5),LFLAG(3),PLO,IFLTIM,JJ,II + $ TDRIFT_LL(MXLVL),KFLAG(5),LFLAG(3),GPSFLAG(2),PLO,IFLTIM,JJ,II EQUIVALENCE (DAT,PP),(DAT(1,2),ZP),(DAT(1,3),TP),(DAT(1,4),DP), - $ (DAT(1,5),UP),(DAT(1,6),VP),(DAT(1,NUMVAR+1),IQ),(IDATA,RDATA) + $ (DAT(1,5),UP),(DAT(1,6),VP),(DAT(1,NUMVAR+1),IQ),(DAT(1,17),HP), + $ (DAT(1,18),YP),(DAT(1,19),XP), + $ (IDATA,RDATA) DATA XMISS/99999./,YMISS/99998.8/ DATA PI/3.141592654/ DATA ASCRT/5.0/ ! ASCENT RATE (IN M/SEC) DATA CON/8.9929E-06/ ! 180.0/(PI*RADIUS OF EARTH) (RADIUS IN M + BMISS=GETBMISS() + IF(LL.EQ.2) THEN C COME HERE FOR FIRST LEVEL OF A NEW REPORT "PIECE" {LL = 1 IS A META- C DATA LEVEL IDENTIFYING SURFACE PRESSURE (HOLDS ONLY PSFC*10)} @@ -10212,6 +10489,7 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) PLO = PSTA KFLAG = 0 LFLAG = 0 + GPSFLAG = 0 IFLTIM = 0 JJ = 0 II = 0 @@ -10224,6 +10502,7 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) IQ4 = IQ(I,4) IF(IQ(I,4).EQ.16) IQ4 = 3 + C----------------------------------------------------------------------- C BALLOON DRIFT TIME CALCULATION C----------------------------------------------------------------------- @@ -10250,16 +10529,29 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) JJ = JJ + 1 ZDRIFT(JJ) = ZP(I) IF(JJ.GT.1) THEN - TDRIFT(JJ) = TDRIFT(JJ-1) + - $ (ZDRIFT(JJ) - ZDRIFT(JJ-1))/ASCRT - IF(IFLTIM.EQ.1) THEN + IF((HP(I).LT.BMISS).AND.(HP(I).NE.XMISS)) THEN +C. IF TIME DISPLACEMENT DATA WAS RETRIEVED, USE IT AND SET GPSFLAG(1) +C TO 1 SO THAT COMPUTATION CHECKS AFTERWARD WILL BE IGNORED. IF TIME +C DISPLACEMENT DATA WAS NOT RETRIEVED, KEEP GPSFLAG(1) AT 0, AND DO +C ALL OF THE ORIGINAL, NORMAL CHECKS. + TDRIFT(JJ)=HP(I) + PRINT *, "TDRIFT FROM GPS: ", STNID, TDRIFT(JJ) + GPSFLAG(1) = 1 + ELSE + TDRIFT(JJ) = TDRIFT(JJ-1) + + $ (ZDRIFT(JJ) - ZDRIFT(JJ-1))/ASCRT + PRINT *, "TDRIFT FROM WIND: ", STNID,TDRIFT(JJ) + GPSFLAG(1) = 0 + ENDIF + IF((IFLTIM.EQ.1).AND.(GPSFLAG(1).EQ.0)) THEN C .. ONE OR MORE BALLOON TIME CALCULATION TESTS HAVE FAILED ON SOME C PREVIOUS LEVEL - REVERT THIS LEVEL (AND LATER ALL ABOVE) TO C PREVIOUS LEVEL TIME VALUE IF(IPRT(2).EQ.1) PRINT'(" IFLTIM = 1 - revert back to ", $ "previous level drift time value")' JJ = JJ - 1 - ELSE IF(TDRIFT(JJ)-TDRIFT(JJ-1).LT.0.0) THEN + ELSE IF((TDRIFT(JJ)-TDRIFT(JJ-1).LT.0.0).AND. + $ (GPSFLAG(1).EQ.0)) THEN C .. NEGATIVE TIME DIFFERENCE BETWEEN LEVELS - C .. IF MAGNITUDE IS LESS THAN 5 SECONDS, ADD DIFFERENCE ON TO THIS C LEVEL AND CONTINUE DRFIT TIME CALCULATION @@ -10276,7 +10568,7 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) $ '(=',F8.2,'SEC)'/6X,'< DRFT TIME ON LVL BELOW (=',F8.2,'SEC) -', $ ' TRANSFER DRFT TIME FROM LVL BELOW TO THIS LVL & CONTINUE ', $ 'PROC. DRFT LAT/LON/TIME') - TDRIFT(JJ) = TDRIFT(JJ-1) + TDRIFT(JJ) = TDRIFT(JJ-1) ELSE PRINT 8475, STNID,RDATA(1),RDATA(2),IDATA(9),PP(I), $ TDRIFT(JJ),TDRIFT(JJ-1) @@ -10288,7 +10580,8 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) JJ = JJ - 1 IFLTIM = 1 END IF - ELSE IF(ABS(TDRIFT(JJ)-TDRIFT(JJ-1)).GT.3600.) THEN + ELSE IF((ABS(TDRIFT(JJ)-TDRIFT(JJ-1)).GT.3600.).AND. + $ (GPSFLAG(1).EQ.0)) THEN C .. > 1-HOUR TIME DIFFERENCE BETWEEN LEVELS - REVERT THIS LEVEL (AND C LATER ALL ABOVE) TO PREVIOUS LEVEL TIME VALUE C (NOTE: BALLOON DRIFT LAT/LON REVERTS THIS AND ALL LEVELS ABOVE TO @@ -10320,15 +10613,16 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) IF(IPRT(2).EQ.1) PRINT'(" I,JJ,LL,PP(I),ZDRIFT(JJ),", $ "TDRIFT(JJ),TDRIFTLL(LL),DFTTIM(LL): ",3(I0,1X),5(G0,1X))', $ I,JJ,LL,PP(I),ZDRIFT(JJ),TDRIFT(JJ),TDRIFTLL(LL),DFTTIM(LL) - ELSE - IF(IPRT(2).EQ.1) THEN - IF(MAX(LFLAG(1),LFLAG(2),LFLAG(3)).EQ.1) THEN - PRINT'(" one of the LFLAGs = 1 - revert back to ", - $ "previous level drift time value")' - ELSE - PRINT'(" Lvl ",I0," at ",G0,"mb either has missing or ", - $ "bad hght or is < elev, set drft time to launch time ", - $ "(1st lvl) or to drft time from prev lvl")', I,PP(I) + ELSE + IF(IPRT(2).EQ.1) THEN + IF(MAX(LFLAG(1),LFLAG(2),LFLAG(3)).EQ.1) THEN + PRINT'(" one of the LFLAGs = 1 - revert back to ", + $ "previous level drift time value")' + ELSE + PRINT'(" Lvl ",I0," at ",G0,"mb either has missing ", + $ "or bad hght or is < elev, set drft time to launch ", + $ "time(1st lvl) or to drft time from prev lvl")', + $ I,PP(I) END IF END IF IF(LL.GT.2) THEN @@ -10383,22 +10677,37 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) VDRIFT(II) = VP(I) TDRIFT_LL(II) = TDRIFTLL(LL) IF(II.GT.1) THEN - XDRIFT(II) = XDRIFT(II-1) + +C. IF LOCATION DISPLACEMENT DATA WAS RETRIEVED, USE IT AND SET +C GPSFLAG(2) TO 1 SO THAT COMPUTATION CHECKS AFTERWARD WILL BE +C IGNORED. IF LOCATION DISPLACEMENT DATA WAS NOT RETRIEVED, KEEP +C GPSFLAG(2) AT 0 AND DO ALL OF THE ORIGINAL CHECKS. + IF ((XP(I).LT.BMISS).AND.(XP(I).NE.XMISS).AND. + $ (YP(I).LT.BMISS).AND.(YP(I).NE.XMISS)) THEN + XDRIFT(II) = RDATA(2)+XP(I) + YDRIFT(II) = RDATA(1)+YP(I) + GPSFLAG(2) = 1 + PRINT *,"X/Y DRIFT FROM GPS: ",STNID,XDRIFT(II),YDRIFT(II) + ELSE + XDRIFT(II) = XDRIFT(II-1) + $ (0.5 * (UDRIFT(II-1) + UDRIFT(II)) * $ (TDRIFT_LL(II) - TDRIFT_LL(II-1)) $ * CON/(COS(PI*YDRIFT(II-1)/180.))) - YDRIFT(II) = YDRIFT(II-1) + + YDRIFT(II) = YDRIFT(II-1) + $ (0.5 * (VDRIFT(II-1) + VDRIFT(II)) * $ (TDRIFT_LL(II) - TDRIFT_LL(II-1)) * CON) - IF(IFLTIM.EQ.1) THEN + GPSFLAG(2) = 0 + PRINT *,"X/Y DRIFT FROM WIND: ",STNID,XDRIFT(II), + $ YDRIFT(II) + END IF + IF((IFLTIM.EQ.1).AND.(GPSFLAG(2).EQ.0)) THEN C .. A PROBLEM IN THE BALLOON DRIFT TIME CALCULATION (ABOVE) MEANS THE C BALLOON DRIFT LAT/LON IS ALSO SUSPECT - REVERT THIS LEVEL (AND C LATER ALL ABOVE) TO PREVIOUS LEVEL LAT/LON VALUES IF(IPRT(2).EQ.1) PRINT'(" IFLTIM = 1 - revert back to ", $ "previous level drift lat/lon value")' II = II - 1 - ELSE IF(MAX(KFLAG(1),KFLAG(2),KFLAG(3),KFLAG(4), KFLAG(5)) - $ .EQ.1) THEN + ELSE IF((MAX(KFLAG(1),KFLAG(2),KFLAG(3),KFLAG(4), KFLAG(5)) + $ .EQ.1).AND.(GPSFLAG(2).EQ.0)) THEN C .. ONE OR MORE BALLOON LAT/LON CALCULATION TESTS HAVE FAILED ON THIS C OR SOME PREVIOUS LEVEL - REVERT THIS LEVEL (AND LATER ALL ABOVE) C TO PREVIOUS LEVEL LAT/LON VALUES @@ -10406,7 +10715,7 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) IF(IPRT(2).EQ.1) PRINT'(" one of the KFLAGs = 1 - ", $ "revert back to previous level drift lat/lon value")' II = II - 1 - ELSE IF(STNID.EQ.'89009 ') THEN + ELSE IF((STNID.EQ.'89009 ').AND.(GPSFLAG(2).EQ.0)) THEN C .. SOUTH POLE STATION, CAN'T CALC. BALLOON DRIFT LAT/LON - REVERT THIS C LEVEL (AND LATER ALL ABOVE) TO PREVIOUS LEVEL LAT/LON VALUES C (NOTE: DRIFT TIME IS STILL CALCULATED) @@ -10417,7 +10726,8 @@ SUBROUTINE BALLOON_DRIFT(IPRT,I,PSTA,LL) $ 'CALCULATED)') II = II - 1 KFLAG(2) = 1 - ELSE IF(ABS(XDRIFT(II)-XDRIFT(II-1)).GT.1.0) THEN + ELSE IF((ABS(XDRIFT(II)-XDRIFT(II-1)).GT.1.0).AND.( + $ GPSFLAG(2).EQ.0)) THEN C .. "UNREASONABLE" CALCULATED BALLOON DRIFT LON - REVERT THIS LEVEL C (AND LATER ALL ABOVE) TO PREVIOUS LEVEL LAT/LON VALUES C (NOTE: BALLOON DRIFT TIME REVERTS THIS AND ALL LEVELS ABOVE TO @@ -10683,7 +10993,7 @@ SUBROUTINE FILLX(LL,IERF) PARAMETER (MXLVL = 600) PARAMETER (MXPWT = 5) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) LOGICAL TOVRAD,GOESRD,TOVEDS real(8) obs8_8,alon_8,alat_8 @@ -11381,7 +11691,7 @@ SUBROUTINE GETC06(NN,CYCLET,*,*) PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*8 STNID,CRES1,CRES2,SUBSET_d CHARACTER*11 CBULL @@ -11404,7 +11714,7 @@ SUBROUTINE GETC06(NN,CYCLET,*,*) $ KSKSWD(10),RFFL,QIFY,QIFN,EEQF COMMON/UPALIM/LEVPM,LEVST,LEVQQ,TDLIM,TDMAX,SPCIAL,ISQNUM_UPA COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/SKPCNT/KSKPUA,KSKPSF,KMSGUA,KMSGSF,KBDYUA,KBDYSF,KTIMUA, $ KTIMSF,KSKNSW,KSKREC,KNOATS,KNTUPA,KNTCAR,KNTAIR,KNTSWN,KNTPRO, $ KNTVAD,KNTRAS,KNTDUM(3),KNTSFC,KNTSHP,KNTSLP,KNTMSO,KNTSPL, @@ -11469,7 +11779,7 @@ SUBROUTINE GETC06(NN,CYCLET,*,*) C (NOTE: FOR RECCOS IN NN=1, INITIALIZE WITH SEQ. NUMBER FROM LAST C REPORT PROCESSED FROM ADPUPA FILE IN SUBR. STOROB) ISQNUM(NN) = 0 - IF(NN.EQ.1) ISQNUM(NN) = ISQNUM_UPA + IF(NN.EQ.1.OR.NN.EQ.8) ISQNUM(NN) = ISQNUM_UPA ITIMES(NN) = 1 END IF IFLC6 = 0 @@ -11962,7 +12272,7 @@ SUBROUTINE GETC06(NN,CYCLET,*,*) ELSE IF(NAC.EQ.9) THEN HDR(8) = 1. END IF - ELSE IF(NN.EQ.1) THEN + ELSE IF(NN.EQ.1.OR.NN.EQ.8) THEN C STORE WORD 8 OF REPORT HEADER (REPORT "SUBTYPE") AS 1 FOR RECCOS C (STORED AS 2 FOR DROPS IN SUBR. PREP) IF(IDATA(9).EQ.31) HDR(8) = 1. @@ -12669,7 +12979,7 @@ SUBROUTINE SATEDS CCC PARAMETER (MXWRDH = 15) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*4 SAMPLE(2) CHARACTER*5 CTYPE(2) @@ -13043,7 +13353,7 @@ SUBROUTINE SATEDS C C$$$ SUBROUTINE SNDTBL(IDSAT,NUMOB,KEPOB,MSTOB,NN) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) LOGICAL SATMST CHARACTER*3 CCAP_1(3),CCAP_3(3),CCAP_4(3) CHARACTER*5 CSATEL(4) @@ -13348,7 +13658,7 @@ SUBROUTINE SNDTBL(IDSAT,NUMOB,KEPOB,MSTOB,NN) C$$$ SUBROUTINE SNDPRP(MS,INSTR,MSTSAT,MST,KEP) PARAMETER (MXWRDH = 15) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) LOGICAL MSTSAT CHARACTER*8 STNID,SUBSET_d INTEGER IDATA(MAXOBS) @@ -13368,6 +13678,7 @@ SUBROUTINE SNDPRP(MS,INSTR,MSTSAT,MST,KEP) IDATA(17) = 0 IDATA(19) = 0 IDATA(21) = 0 + IDATA(31) = 0 HDR(6) = 160 + (10 * (MS - 1)) + INSTR C LEVPM NO LARGER THAN NUMBER OF MAND. LVLS; RESET LEVST & LEVQQ = LEVPM LEVPM = MIN(LEVPM,IDATA(13)) @@ -13504,7 +13815,7 @@ SUBROUTINE SATBFR PARAMETER (NUMVAR = 6, NUMQMS = 5) PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*4 SAMPLE(2) CHARACTER*5 CTYPE(2) @@ -14107,7 +14418,7 @@ SUBROUTINE GOESDG PARAMETER (NUMVAR = 6, NUMQMS = 5) PARAMETER (NUMDAT = NUMVAR + (2 * NUMQMS)) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*1 CIDGST(4,4) CHARACTER*8 STNID,STNPRT,DSNAME,SUBSET_d,subset_t @@ -14980,7 +15291,7 @@ SUBROUTINE GETPWATER(ITYP,IFLUA,IERF) PARAMETER (MXWRDH = 15) PARAMETER (MXTYPV = 3) PARAMETER (MXPWT = 5) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) CHARACTER*8 STNID,SUBSET_d INTEGER IDATA(MAXOBS) real(8) alon_8,alat_8 @@ -15299,7 +15610,7 @@ SUBROUTINE SFCDTA PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*8 STNID,FILNAM(5),DSNAME,SUBSET_d CHARACTER*41 NAME1 @@ -16549,7 +16860,7 @@ SUBROUTINE SFCDTA C$$$ FUNCTION ISSEL(ITYPDMP) PARAMETER (MXWRDH = 15) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) INTEGER JTYPE(31:564),IDATA(MAXOBS) real(8) alon_8,alat_8 CHARACTER*8 STNID,SUBSET_d @@ -16691,7 +17002,7 @@ SUBROUTINE GETSMI PARAMETER (MXTYPV = 3) PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) CHARACTER*8 STNID,DSNAME,SUBSET_d CHARACTER*46 CTEXT(4) INTEGER KOUNT_MI(6,4),IDATA(MAXOBS),ITYP(189:198) @@ -17058,7 +17369,7 @@ SUBROUTINE GETSCATT(ISCTP) PARAMETER (MXWRDL = 6) PARAMETER (MXLVL = 600) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*6 NAME(4) CHARACTER*8 STNID,STNPRT,DSNAME,DNAME(4),SUBSET_d,subset_t @@ -17429,7 +17740,7 @@ SUBROUTINE GETSCATT(ISCTP) SUBROUTINE GETGPSIPW PARAMETER (MXWRDH = 15) PARAMETER (MXBLVL = 255) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (NUMOBS2 = 43) CHARACTER*8 STNID,DSNAME,SUBSET_d,subset_t LOGICAL SKGP45 @@ -17957,7 +18268,7 @@ SUBROUTINE GETGPSIPW SUBROUTINE W3FIZZ(IER) PARAMETER (MXWRDH = 15) PARAMETER (NUMOBS2 = 43) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) C PARAMETER NAME "MHDRWD" THROUGHOUT PGM SETS MAXIMUM NO. OF REPORT C HEADER MNEMONICS THAT CAN BE PROCESSED @@ -17972,7 +18283,7 @@ SUBROUTINE W3FIZZ(IER) PARAMETER (MPGMWD = 9) C PARAMETER NAME "IBTBLA" THROUGHOUT PGM SETS NUMBER OF PREPBUFR C TABLE-A MESSAGE TYPES - PARAMETER (IBTBLA = 19) + PARAMETER (IBTBLA = 20) COMMON/ADP/ISATOB,PMAND(23),RDATA(MAXOBS),IPRINT COMMON/FIZZAA/PCODE,IUNITP,NLV,NBT,HDR_8(MHDRWD), @@ -18070,7 +18381,9 @@ SUBROUTINE W3FIZZ(IER) ! WDSATR vvvvv $ 'POB UOB VOB NUL NUL NUL CAT NUL NUL DDO FFO NUL ', ! ASCATW vvvvv - $ 'POB UOB VOB NUL NUL NUL CAT NUL NUL DDO FFO NUL '/ + $ 'POB UOB VOB NUL NUL NUL CAT NUL NUL DDO FFO NUL ', + ! UPRAIR vvvvv + $ 'POB UOB VOB TOB QOB ZOB CAT TVO TDO DDO FFO XDR '/ DATA OBSSTR2/ ! PROFLR vvvvv @@ -18110,7 +18423,9 @@ SUBROUTINE W3FIZZ(IER) ! WDSATR vvvvv $ ' REQV NUL NUL NUL NUL NUL ', ! ASCATW vvvvv - $ ' NUL NUL NUL NUL NUL NUL '/ + $ ' NUL NUL NUL NUL NUL NUL ', + ! UPRAIR vvvvv + $ ' YDR HRDR NUL NUL NUL NUL '/ DATA QMSSTR/ ! PROFLR vvvvv @@ -18150,7 +18465,9 @@ SUBROUTINE W3FIZZ(IER) ! WDSATR vvvvv $ 'PQM WQM NUL NUL NUL NUL NUL DFQ NUL ', ! ASCATW vvvvv - $ 'PQM WQM NUL NUL NUL NUL NUL DFQ NUL '/ + $ 'PQM WQM NUL NUL NUL NUL NUL DFQ NUL ', + ! UPRAIR vvvvv + $ 'PQM WQM TQM QQM ZQM NUL NUL DFQ NUL '/ DATA PGMSTR/ ! PROFLR vvvvv @@ -18190,7 +18507,9 @@ SUBROUTINE W3FIZZ(IER) ! WDSATR vvvvv $ 'PPC NUL WPC DFP NUL NUL NUL NUL NUL ', ! ASCATW vvvvv - $ 'PPC NUL WPC DFP NUL NUL NUL NUL NUL '/ + $ 'PPC NUL WPC DFP NUL NUL NUL NUL NUL ', + ! UPRAIR vvvvv + $ 'PPC ZPC WPC DFP TPC QPC NUL NUL NUL '/ DATA RSNSTR/ ! PROFLR vvvvv @@ -18230,17 +18549,19 @@ SUBROUTINE W3FIZZ(IER) ! WDSATR vvvvv $ 'PRC NUL WRC DFR NUL NUL NUL NUL NUL ', ! ASCATW vvvvv - $ 'PRC NUL WRC DFR NUL NUL NUL NUL NUL '/ + $ 'PRC NUL WRC DFR NUL NUL NUL NUL NUL ', + ! UPRAIR vvvvv + $ 'PRC ZRC WRC DFR TRC QRC NUL NUL NUL '/ DATA SUBSET/'PROFLR ','VADWND ','ADPUPA ','AIRCAR ', $ 'AIRCFT ','SATWND ','SATEMP ','SPSSMI ', $ 'ADPSFC ','SFCSHP ','SFCBOG ','ERS1DA ', $ 'GOESND ','QKSWND ','MSONET ','GPSIPW ', - $ 'RASSDA ','WDSATR ','ASCATW '/ + $ 'RASSDA ','WDSATR ','ASCATW ','UPRAIR '/ DATA ICALL/0/,SINGLE/3*.FALSE.,3*.TRUE.,.FALSE.,5*.TRUE., - $ .FALSE.,3*.TRUE.,.FALSE.,2*.TRUE./,ITYPL/0/,ISUB/0/,ISUBT/0/, - $ IRECL/0/,AERS/12*0.0/ + $ .FALSE.,3*.TRUE.,.FALSE.,2*.TRUE.,.FALSE./,ITYPL/0/,ISUB/0/, + $ ISUBT/0/,IRECL/0/,AERS/12*0.0/ DATA YMISS/99998.8/,IMISS/99999/ DATA KTYP/ @@ -18307,6 +18628,7 @@ SUBROUTINE W3FIZZ(IER) C (TABLE A, B, D ENTRIES) FROM INPUT FILE CONTAINING BUFR MNEMONIC C TABLES A/B/D CALL OPENBF(IUNITP,'OUT',IUNIT(2)) + CALL MAXOUT(50000) ! CH 08/12/21 PRINT 100, IUNITP,IUNIT(2) 100 FORMAT(/8X,'===> NEW PREPBUFR DATA SET IN UNIT',I3, $ ' SUCCESSFULLY OPENED FOR OUTPUT; BUFR MNEMONIC TABLES A,B,D IN', @@ -19109,7 +19431,7 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) PARAMETER (MXBLVL = 255, MHDRWD = 29, MOBSWD = 12, MOB2WD = 6) PARAMETER (MQMSWD = 9) PARAMETER (MPGMWD = 9) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) DIMENSION IPWOBT(2:5),IPWQMT(2:5),IPWPCT(2:5) @@ -19137,7 +19459,7 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) COMMON/RPTHDR/SUBSET_d,STNID,HDR(2:MXWRDH),alon_8,alat_8 COMMON/LEVELS/MLEV COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/RADANC/RTRAD(35),GRAD(18),IGCHN(18),SOZANG,SAZANG,OZONE, $ SKINT,CLDAMT,TOVRAD,TOVRTV,GOESRD(2) COMMON/CLDTOP/CLTOP(2,3) @@ -19832,7 +20154,7 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) C$$$ BLOCK DATA PARAMETER (MXLVL = 600) - PARAMETER (MAXOBS = 3500) + PARAMETER (MAXOBS = 4500) PARAMETER (XMISS = 99999.) PARAMETER (IMISS = 99999) COMMON/DATA/DMY3,IDATE(4),IDAT10,MP_PROCESS,WRMISS,IDATMM @@ -19861,7 +20183,7 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) COMMON/COUNT/KKTYPE(100:299) COMMON/PARM2/PG4243,KTEMP,i2many_lvls COMMON/PARM3/RECCON,RWINDO,UWINDO,RECSLM,FLRECO,VWINDO,VADWIN, - $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO + $ IVADFL,IVADSP,FLDMGS,FLDMAF,FLDMFR,DROPSN,DWINDO,UPRAIR COMMON/PARM4/ICODE COMMON/PARM5/FILLZ,FILLT,FILLW,FILLM,LSWIND,LSMASS,CWINDO,NPZ COMMON/PARM6/MODPRT,IFLUA,STNPRT(3) @@ -19890,13 +20212,13 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) COMMON/DRIFT/DFTLON(MXLVL),DFTLAT(MXLVL),DFTTIM(MXLVL) COMMON/SBDRIFT/ZDRIFT(MXLVL),TDRIFT(MXLVL),TDRIFTLL(MXLVL), $ UDRIFT(MXLVL),VDRIFT(MXLVL),XDRIFT(MXLVL),YDRIFT(MXLVL), - $ TDRIFT_LL(MXLVL),KFLAG(5),LFLAG(3),PLO,IFLTIM,JJ,II + $ TDRIFT_LL(MXLVL),KFLAG(5),LFLAG(3),GPSFLAG(2),PLO,IFLTIM,JJ,II common/pstnflg/ipstnflg LOGICAL TOVEDS,GOESND,SATMST,MARLND,RECCON,SWNLND,AIRLND,DROPSN, $ PG4243,SPCIAL,KTEMP,TR80KM,FILLZ,FILLT,FILLW,FILLM,PRFLER, $ TOVBFR,RECSLM,GOESPW,VADWIN,TOVRAD,TOVRTV,PFRALT,AIFNOW,FLDMGS, $ FLDMAF,FLDMFR,FLACMS,GOESRD,PREVEN,SUBSKP,APPEND, - $ PROFILERinADPUPA,GOESCT,RASS,WRMISS,SKGP45,npkrpt,SKGNSS + $ PROFILERinADPUPA,GOESCT,RASS,WRMISS,SKGP45,npkrpt,SKGNSS,UPRAIR CHARACTER*8 STNPRT DATA TOVEDS/2*.TRUE./,GOESND/2*.FALSE./,TOVBFR/2*.FALSE./, $ SATMST/80*.FALSE./,MARLND/.FALSE./,RECCON/.TRUE./, @@ -19911,6 +20233,7 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) $ SUBSKP/51456*.FALSE./,APPEND/.FALSE./,PROFILERinADPUPA/.FALSE./, $ RASS/.FALSE./,WRMISS/.TRUE./,SKGP45/.TRUE./,npkrpt/12*.false./ DATA SKGNSS/.TRUE./ + DATA UPRAIR/.TRUE./ DATA MODPRT/500/,IGRD/73/,JGRD/37/ DATA PMAND/1000.,925.,850.,700.,500.,400.,300.,250.,200.,150., $ 100.,70., 50., 30., 20., 10., 7., 5., 3., 2., 1., .4, .1/ @@ -19977,6 +20300,6 @@ SUBROUTINE FIZZ01(KI,NI,JI,SUBSET,SINGLE) $ ZDRIFT/MXLVL*XMISS/,TDRIFT/MXLVL*XMISS/, $ TDRIFTLL/MXLVL*XMISS/,UDRIFT/MXLVL*XMISS/, $ VDRIFT/MXLVL*XMISS/,XDRIFT/MXLVL*XMISS/,YDRIFT/MXLVL*XMISS/, - $ TDRIFT_LL/MXLVL*XMISS/,KFLAG/5*0/,LFLAG/3*0/,PLO/XMISS/, - $ IFLTIM/0/,JJ/0/,II/0/,ipstnflg/0/,i2many_lvls/0/ + $ TDRIFT_LL/MXLVL*XMISS/,KFLAG/5*0/,LFLAG/3*0/,GPSFLAG/2*0/, + $ PLO/XMISS/,IFLTIM/0/,JJ/0/,II/0/,ipstnflg/0/,i2many_lvls/0/ END diff --git a/sorc/syndat_syndata.fd/syndata.f b/sorc/syndat_syndata.fd/syndata.f index 83ed73e..9d236e3 100644 --- a/sorc/syndat_syndata.fd/syndata.f +++ b/sorc/syndat_syndata.fd/syndata.f @@ -206,6 +206,9 @@ C inner core dropsonde data reduced to 55km. A 32 m/s wind C threshold was added. This allows for more inner core data to C be assimilated in GFSv16. +C 2022-??-?? C. Hill +C Dynamic memory allocation introduced (2021-08-31) to permit BUFR +C sonde processing. C C C USAGE: @@ -592,9 +595,12 @@ PROGRAM SYNDAT_SYNDATA C overflow when either an INTEGER*4 variable is set to BMISS or a C REAL*8 (or REAL*4) variable that is missing is NINT'd C ------------------------------------------------------------------- + CALL ISETPRM ( 'MXMSGL', 600000 ) ! CH 08/31/21 + CALL ISETPRM ( 'MAXSS', 600000 ) ! CH 08/31/21 ccccc CALL SETBMISS(10E10_8) CALL SETBMISS(10E8_8) BMISS=GETBMISS() + CALL MAXOUT(50000) ! CH 08/31/21 print'(1X)' print'(" BUFRLIB value for missing is: ",G0)', bmiss print'(1X)' @@ -28934,6 +28940,7 @@ SUBROUTINE EDTPRP(BLATMN,BLATMX,BLONMN,BLONMX,RMW,STMLAT,STMLON, CALL OPENBF(IUNTPN,'IN',IUNTPN) CALL OPENBF(IUNTPO,'OUT',IUNTPN) + CALL MAXOUT(50000) ! CH 08/31/21 CALL UFBQCD(IUNTPO,'SYNDATA',SYNPC) C VARIOUS COPYING OPTIONS diff --git a/sorc/timetwin.fd/timetwin.f b/sorc/timetwin.fd/timetwin.f index 8d81e76..b37f9cd 100644 --- a/sorc/timetwin.fd/timetwin.f +++ b/sorc/timetwin.fd/timetwin.f @@ -114,7 +114,7 @@ PROGRAM TIMETWIN CALL TWINWIND_HIS_CHECK C IF FILE IS MISSING OR CORRUPT IT DOES ERREXIT 33 - + C OPEN THE BUFR FILE ... CALL OPENBF(INFILE,'IN',INFILE) @@ -127,13 +127,12 @@ PROGRAM TIMETWIN IF(IRET.NE.0) GO TO 999 GO TO 1 ENDIF - -C SPLIT DATE UP INTO COMPONENTS - + +C SPLIT DATE UP INTO COMPONENTS WRITE (CDATE, '(I10)') IDATE CDAT8(1:8)=CDATE(3:10) READ (CDATE, '(5I2)') IIDATE - + C NOW READ THE SUBSET (ADPUPA) 10 CONTINUE @@ -147,7 +146,7 @@ PROGRAM TIMETWIN ENDIF GO TO 10 ENDIF - + C NOW GET THE DATA ... CALL UFBINT(INFILE,HDR,7,1,IRET,HSTR) @@ -238,9 +237,9 @@ PROGRAM TIMETWIN GO TO 10 C COME HERE WHEN ALL REPORTS HAVE BEEN READ IN -- CLOSE FILE -C AND QUIT. - - 999 CONTINUE +C AND QUIT. + + 999 CONTINUE CALL CLOSBF(INFILE) PRINT 102, IIDATE 101 FORMAT(I5) @@ -249,10 +248,17 @@ PROGRAM TIMETWIN DO 68 KZ=1,6 MOUT=KZ+60 + DO 67 KJ=1,IM(KZ) CARDT(KJ)=CARD(KZ,KJ) 67 CONTINUE + IF (IM(KZ) .GT. 690000 ) THEN + print *, 'Warning:Index IM(KZ) exceeds CARDS array size' + print *, 'KZ=',KZ,' IM(KZ)=',IM(KZ) + IM(KZ)=0 + ENDIF + C Do heap sort on array CARDT, store sorted locations in INDR CALL INDEX41(IM(KZ),CARDT,INDR) @@ -287,10 +293,10 @@ PROGRAM TIMETWIN C TWO DIFFERENT MODEL RUNS HAVE ENOUGH WIND MATCHES TO C QUALIFY AS A TWINWIND CALL TWINWIND - C CALL W3TAGE('TIMETWIN') STOP END + SUBROUTINE PARTID(UID,CSID,PRS,RTIM,ICAT,IW,ISTA) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . . @@ -394,7 +400,7 @@ SUBROUTINE INDEX41 (N,ARRIN,INDX) C INTEGER INDX(*) CHARACTER*41 ARRIN(*),Q - + DO 10 J = 1,N INDX(J) = J 10 CONTINUE @@ -405,17 +411,25 @@ SUBROUTINE INDEX41 (N,ARRIN,INDX) 33 CONTINUE IF (L.GT.1) THEN L = L - 1 - INDXT=INDX(L) - Q = ARRIN(INDXT) + INDXT=INDX(L) +c print *,'timetwin.f/INDEX41 (if) L=',L,' INDXT=', INDXT + Q = ARRIN(INDXT) ELSE - INDXT = INDX(IR) - Q = ARRIN(INDXT) - INDX(IR) = INDX(1) - IR = IR - 1 - IF ( IR.EQ. 1) THEN + INDXT = INDX(IR) +c print *,'timetwin.f/INDEX41 (else) L=',L,' INDXT=', INDXT +c Should wind be missing in a report, exit gracefully + IF (INDXT.GT.0) THEN + Q = ARRIN(INDXT) + INDX(IR) = INDX(1) + IR = IR - 1 + IF ( IR.EQ. 1) THEN INDX(1) = INDXT RETURN - ENDIF + ENDIF + ELSE ! IF (INDXT.GT.0) +c print *,'Proceed to next iteration gracefully' + RETURN + ENDIF! IF (INDXT.GT.0) ENDIF I = L @@ -438,7 +452,8 @@ SUBROUTINE INDEX41 (N,ARRIN,INDX) INDX(I) = INDXT GOTO 33 RETURN - END + END + SUBROUTINE TWINWIND_HIS_CHECK C$$$ SUBPROGRAM DOCUMENTATION BLOCK C @@ -512,6 +527,7 @@ SUBROUTINE TWINWIND_HIS_CHECK 999 CONTINUE RETURN END + SUBROUTINE TWINWIND C$$$ SUBPROGRAM DOCUMENTATION BLOCK C @@ -911,7 +927,8 @@ SUBROUTINE INDEX26 (N,ARRIN,INDX) IF ( J.LE.IR) GOTO 30 INDX(I) = INDXT GOTO 33 - END + END + SUBROUTINE INCSORT(CARDO,CARDN,CARDS,CARDD,INN,NDUPS,NSORT,DAYL) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . . diff --git a/build.sh b/ush/build.sh similarity index 93% rename from build.sh rename to ush/build.sh index 1fc0fa3..5201c25 100755 --- a/build.sh +++ b/ush/build.sh @@ -3,7 +3,7 @@ set -eux # Location of PWD and package source directory. -pkg_root=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) +readonly pkg_root=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )/.." && pwd -P) INSTALL_TARGET=${INSTALL_TARGET:-"wcoss2"} INSTALL_PREFIX=${INSTALL_PREFIX:-"${pkg_root}/install"} diff --git a/ush/prepobs_makeprepbufr.sh b/ush/prepobs_makeprepbufr.sh index 4204227..9443252 100755 --- a/ush/prepobs_makeprepbufr.sh +++ b/ush/prepobs_makeprepbufr.sh @@ -421,9 +421,9 @@ # Default is "tm00" # BUFRLIST String indicating list of BUFR data dump file names to # process -# Default is "adpupa proflr aircar aircft satwnd adpsfc \ -# sfcshp sfcbog vadwnd goesnd spssmi erscat qkswnd msonet \ -# gpsipw rassda wdsatr ascatw" +# Default is "uprair proflr aircar aircft satwnd adpupa \ +# adpsfc sfcshp sfcbog vadwnd goesnd spssmi erscat qkswnd \ +# msonet gpsipw rassda wdsatr ascatw" # POE String indicating whether or not to use a poe-like launcher # to spread instances of the PREPBUFR processing herefile # MP_PREPDATA over multiple pes in parallel. (= "NO" - @@ -1013,9 +1013,9 @@ pgmout=${pgmout:-/dev/null} tstsp=${tstsp:-/tmp/null/} tmmark=${tmmark:-tm00} -BUFRLIST=${BUFRLIST:-"adpupa proflr aircar aircft satwnd adpsfc sfcshp \ - sfcbog vadwnd goesnd spssmi erscat qkswnd msonet gpsipw rassda wdsatr \ - ascatw"} +BUFRLIST=${BUFRLIST:-"uprair proflr aircar aircft satwnd adpupa adpsfc \ + sfcshp sfcbog vadwnd goesnd spssmi erscat qkswnd msonet gpsipw rassda \ + wdsatr ascatw"} PREPDATA=${PREPDATA:-YES} @@ -1634,20 +1634,24 @@ echo grp_adpsfc=$? echo $BUFRLIST | grep adpupa grp_adpupa=$? + echo $BUFRLIST | grep uprair + grp_uprair=$? if [ \( ! -f ${COMSP}adpsfc.${tmmark}.bufr_d -a \ ! -f ${tstsp}adpsfc.${tmmark}.bufr_d -a $grp_adpsfc -eq 0 \) -o \ \( ! -f ${COMSP}adpupa.${tmmark}.bufr_d -a \ - ! -f ${tstsp}adpupa.${tmmark}.bufr_d -a $grp_adpupa -eq 0 \) ] + ! -f ${tstsp}adpupa.${tmmark}.bufr_d -a $grp_adpupa -eq 0 -a \ + ! -f ${COMSP}uprair.${tmmark}.bufr_d -a \ + ! -f ${tstsp}uprair.${tmmark}.bufr_d -a $grp_uprair -eq 0 \) ] then -# problem: either adpsfc (surface land) or adpupa (raob/pibal/recco) file, or -# both, not found for requested time - this is unacceptable; EXIT +# problem: adpsfc (surface land), adpupa (raob/pibal/recco), or uprair +# (alt raob/pibal) file, OR ALL, not found for requested time ==> EXIT # (unless the culprit file was not included in the $BUFRLIST) # --------------------------------------------------------------------------- set +x echo -echo "ADPSFC and/or ADPUPA BUFR data dump was not produced for requested" +echo "ADPSFC and/or ADPUPA or UPRAIR BUFR data dump was not produced for requested" echo " time (but is in BUFRLIST); ABNORMAL EXIT!!!!!!!!!!!" echo set -x @@ -1910,8 +1914,9 @@ set -u echo " &task mp_process=$multi /" >>prepdata.stdin cat $DATA/prepdata.stdin >> prepdata.stdin -BUFRLIST_all="adpupa aircar aircft satwnd proflr vadwnd rassda adpsfc sfcshp \ - sfcbog msonet spssmi erscat qkswnd wdsatr ascatw rtovs atovs goesnd gpsipw" +BUFRLIST_all="uprair aircar aircft satwnd proflr vadwnd rassda adpupa adpsfc \ + sfcshp sfcbog msonet spssmi erscat qkswnd wdsatr ascatw rtovs atovs goesnd \ + gpsipw" ###BUFRLIST_all_array=($BUFRLIST_all) # this does not work on all platforms set -A BUFRLIST_all_array `echo $BUFRLIST_all` # this works on all platforms @@ -1946,19 +1951,20 @@ export FORT24=$dump_dir/${BUFRLIST_all_array[3]} export FORT25=$dump_dir/${BUFRLIST_all_array[4]} export FORT26=$dump_dir/${BUFRLIST_all_array[5]} export FORT27=$dump_dir/${BUFRLIST_all_array[6]} -export FORT31=$dump_dir/${BUFRLIST_all_array[7]} -export FORT32=$dump_dir/${BUFRLIST_all_array[8]} -export FORT33=$dump_dir/${BUFRLIST_all_array[9]} -export FORT34=$dump_dir/${BUFRLIST_all_array[10]} -export FORT35=$dump_dir/${BUFRLIST_all_array[11]} -export FORT36=$dump_dir/${BUFRLIST_all_array[12]} -export FORT37=$dump_dir/${BUFRLIST_all_array[13]} -export FORT38=$dump_dir/${BUFRLIST_all_array[14]} -export FORT39=$dump_dir/${BUFRLIST_all_array[15]} -export FORT41=$dump_dir/${BUFRLIST_all_array[16]} -export FORT42=$dump_dir/${BUFRLIST_all_array[17]} -export FORT46=$dump_dir/${BUFRLIST_all_array[18]} -export FORT48=$dump_dir/${BUFRLIST_all_array[19]} +export FORT28=$dump_dir/${BUFRLIST_all_array[7]} +export FORT31=$dump_dir/${BUFRLIST_all_array[8]} +export FORT32=$dump_dir/${BUFRLIST_all_array[9]} +export FORT33=$dump_dir/${BUFRLIST_all_array[10]} +export FORT34=$dump_dir/${BUFRLIST_all_array[11]} +export FORT35=$dump_dir/${BUFRLIST_all_array[12]} +export FORT36=$dump_dir/${BUFRLIST_all_array[13]} +export FORT37=$dump_dir/${BUFRLIST_all_array[14]} +export FORT38=$dump_dir/${BUFRLIST_all_array[15]} +export FORT39=$dump_dir/${BUFRLIST_all_array[16]} +export FORT41=$dump_dir/${BUFRLIST_all_array[17]} +export FORT42=$dump_dir/${BUFRLIST_all_array[18]} +export FORT46=$dump_dir/${BUFRLIST_all_array[19]} +export FORT48=$dump_dir/${BUFRLIST_all_array[20]} export FORT51=prepda export FORT52=prevents.filtering.prepdata @@ -1972,6 +1978,38 @@ export FORT52=prevents.filtering.prepdata # linked to the IOBUF i/o buffering library export IOBUF_PARAMS='*prevents.filtering.prepdata:verbose' +### Concatenate UPRAIR ID file among nodes before prepdata is executed +if [ "$PARALLEL" = 'YES' ] +then + sleep 2 + mq=0 + nq=0 + while [ $mq -lt $NSPLIT ] + do + if [ -s $DATA/multi$mq/fort.91 ] + then + nq=`expr $nq + 1` + fi + mq=`expr $mq + 1` + done + if [ $nq -eq $NSPLIT ] + then + cat $DATA/multi*/fort.91 | sort -k 1,1n -k 2,2n | uniq > $data/uprairids + ln -sf $data/uprairids $data/fort.92 + else + echo "" > $data/fort.92 + fi +else + if [ -s $DATA/fort.91 ] + then + cat $DATA/fort.91 > $DATA/uprairids + ln -sf $DATA/uprairids $DATA/fort.92 + else + echo "" > $DATA/fort.92 + fi +fi +### + #$TIMEIT $PRPX >$mp_pgmout 2>&1 $TIMEIT $PRPX >>$mp_pgmout 2>&1 errPREPDATA=$? @@ -2123,8 +2161,8 @@ set -x elif [ "$launcher_PREP" = mpiexec ]; then chmod 755 $DATA/prep_exec.cmd #mpiexec -n 6 -ppn 32 $DATA/prep_exec.cmd #IG - # mpiexec -n 6 $DATA/prep_exec.cmd - mpiexec -n $NSPLIT cfp $DATA/prep_exec.cmd + #mpiexec -n 6 $DATA/prep_exec.cmd + $launcher_PREP -n $NSPLIT cfp $DATA/prep_exec.cmd export err=$?; $DATA/err_chk [ $err != 0 ] && exit 55 # for extra measure elif [ "$launcher_PREP" = mpirun.lsf ]; then @@ -2179,9 +2217,11 @@ set -x [ $err != 0 ] && exit 55 # for extra measure fi elif [ $BACK = 'YES' ] ; then - echo 'BACK=YES' + echo 'BACK=YES' # IG Feb2024: doesn't come here + launcher_PREP=${launcher_PREP:-mpiexec} + NPROCS=${NPROCS:-6} if [ "$launcher_PREP" = mpiexec ]; then - mpiexec -np 6 --cpu-bind verbose,core $DATA/prepthrds.sh # Keep '-np 6' > NSPLIT=4 + $launcher_PREP -np $NPROCS --cpu-bind verbose,core $DATA/prepthrds.sh # Keep '-np 6' > NSPLIT=4 else $DATA/prepthrds.sh fi @@ -2293,7 +2333,8 @@ echo if [ "$errPREPDATA" -eq '4' ]; then set +x echo - echo "WARNING: PREPOBS_PREPDATA FOUND EITHER NO ADPUPA OR NO ADPSFC DATA" + echo "WARNING: PREPOBS_PREPDATA FOUND EITHER NO ADPUPA, NO UPRAIR, \ +OR NO ADPSFC DATA" echo "-------- THESE DATA WILL NOT BE AVAILABLE TO ANALYSES" echo set -x diff --git a/versions/README b/versions/README deleted file mode 100644 index f863bd6..0000000 --- a/versions/README +++ /dev/null @@ -1,2 +0,0 @@ -Original (/develop) run.ver was overwritten with Nick's expanded version of it. - diff --git a/versions/VERSION b/versions/VERSION new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/versions/VERSION @@ -0,0 +1 @@ +1.1.0 diff --git a/versions/build.hera.ver b/versions/build.hera.ver index 77d307e..a62aa9d 100644 --- a/versions/build.hera.ver +++ b/versions/build.hera.ver @@ -1,3 +1,4 @@ export stack_intel_ver=2021.5.0 export stack_impi_ver=2021.5.1 -source "${HOMEprepobs:-}/versions/build.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-${spack_stack_ver}/envs/${spack_env}-dev-rocky8/install/modulefiles/Core" diff --git a/versions/build.hercules.ver b/versions/build.hercules.ver index 3bfc838..df1a56c 100644 --- a/versions/build.hercules.ver +++ b/versions/build.hercules.ver @@ -1,3 +1,4 @@ export stack_intel_ver=2021.9.0 export stack_impi_ver=2021.9.0 -source "${HOMEprepobs:-}/versions/build.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-${spack_stack_ver}/envs/${spack_env}-env/install/modulefiles/Core" diff --git a/versions/build.jet.ver b/versions/build.jet.ver index 77d307e..a0bd2f5 100644 --- a/versions/build.jet.ver +++ b/versions/build.jet.ver @@ -1,3 +1,4 @@ export stack_intel_ver=2021.5.0 export stack_impi_ver=2021.5.1 -source "${HOMEprepobs:-}/versions/build.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/contrib/spack-stack/spack-stack-${spack_stack_ver}/envs/${spack_env}-intel/install/modulefiles/Core" diff --git a/versions/build.orion.ver b/versions/build.orion.ver index 3bfc838..1644623 100644 --- a/versions/build.orion.ver +++ b/versions/build.orion.ver @@ -1,3 +1,4 @@ export stack_intel_ver=2021.9.0 export stack_impi_ver=2021.9.0 -source "${HOMEprepobs:-}/versions/build.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-${spack_stack_ver}/envs/${spack_env}-env-rocky9/install/modulefiles/Core" diff --git a/versions/build.wcoss2.ver b/versions/build.wcoss2.ver index 4da5c99..453e7ee 100644 --- a/versions/build.wcoss2.ver +++ b/versions/build.wcoss2.ver @@ -5,7 +5,7 @@ export w3emc_ver=2.9.1 export sp_ver=2.3.3 export sigio_ver=2.3.2 export nemsio_ver=2.5.2 -export bufr_ver=11.5.0 +export bufr_ver=11.7.0 export PrgEnv_intel_ver=8.1.0 export intel_ver=19.1.3.304 diff --git a/versions/run.hera.ver b/versions/run.hera.ver index 8cea5aa..a62aa9d 100644 --- a/versions/run.hera.ver +++ b/versions/run.hera.ver @@ -1,4 +1,4 @@ export stack_intel_ver=2021.5.0 export stack_impi_ver=2021.5.1 - -source "${HOMEprepobs:-}/versions/run.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-${spack_stack_ver}/envs/${spack_env}-dev-rocky8/install/modulefiles/Core" diff --git a/versions/run.hercules.ver b/versions/run.hercules.ver index 0131f75..57edbf8 100644 --- a/versions/run.hercules.ver +++ b/versions/run.hercules.ver @@ -1,5 +1,5 @@ export stack_intel_ver=2021.9.0 export stack_impi_ver=2021.9.0 export intel_mkl_ver=2023.1.0 - -source "${HOMEprepobs:-}/versions/run.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-${spack_stack_ver}/envs/${spack_env}-env/install/modulefiles/Core" diff --git a/versions/run.jet.ver b/versions/run.jet.ver index 8cea5aa..a0bd2f5 100644 --- a/versions/run.jet.ver +++ b/versions/run.jet.ver @@ -1,4 +1,4 @@ export stack_intel_ver=2021.5.0 export stack_impi_ver=2021.5.1 - -source "${HOMEprepobs:-}/versions/run.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/contrib/spack-stack/spack-stack-${spack_stack_ver}/envs/${spack_env}-intel/install/modulefiles/Core" diff --git a/versions/run.orion.ver b/versions/run.orion.ver index 8a3160c..1644623 100644 --- a/versions/run.orion.ver +++ b/versions/run.orion.ver @@ -1,4 +1,4 @@ export stack_intel_ver=2021.9.0 export stack_impi_ver=2021.9.0 - -source "${HOMEprepobs:-}/versions/run.spack.ver" +source "${HOMEprepobs:-}/versions/spack.ver" +export spack_stack_mod_path="/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-${spack_stack_ver}/envs/${spack_env}-env-rocky9/install/modulefiles/Core" diff --git a/versions/run.spack.ver b/versions/run.spack.ver deleted file mode 100644 index 14bff19..0000000 --- a/versions/run.spack.ver +++ /dev/null @@ -1,20 +0,0 @@ -export spack_stack_ver=1.5.1 -export spack_env=gsi-addon - -export jasper_ver=2.0.32 -export libpng_ver=1.6.37 -export zlib_ver=1.2.13 - -export hdf5_ver=1.14.0 -export netcdf_c_ver=4.9.2 -export netcdf_fortran_ver=4.6.1 - -export bacio_ver=2.4.1 -export nemsio_ver=2.5.4 -export sp_ver=2.5.0 -export sigio_ver=2.3.2 -export w3emc_ver=2.10.0 -export bufr_ver=11.7.0 - -export grib_util_ver=1.3.0 -export prod_util_ver=1.2.2 diff --git a/versions/run.wcoss2.ver b/versions/run.wcoss2.ver index d969929..0fad743 100644 --- a/versions/run.wcoss2.ver +++ b/versions/run.wcoss2.ver @@ -10,4 +10,4 @@ export w3emc_ver=2.9.1 export sp_ver=2.3.3 export sigio_ver=2.3.2 export nemsio_ver=2.5.2 -export bufr_ver=11.5.0 +export bufr_ver=11.7.0 diff --git a/versions/build.spack.ver b/versions/spack.ver similarity index 87% rename from versions/build.spack.ver rename to versions/spack.ver index 5203a28..624aa69 100644 --- a/versions/build.spack.ver +++ b/versions/spack.ver @@ -18,3 +18,5 @@ export sigio_ver=2.3.2 export w3emc_ver=2.10.0 export bufr_ver=11.7.0 +export grib_util_ver=1.3.0 +export prod_util_ver=1.2.2